Практикум ргппу 2017 3 Аннотация
Скачать 3.14 Mb.
|
Результат: Задание 1. Написать и отладить программы для примера 6. Контрольные вопросы 1. Какой тип данных не допускается для индекса. 2. Могут ли в описании массива в индексах содержаться переменные. 3. Что надо делать, если заранее количество элементов неизвестно. 122 4. Почему в Примере 6 сравнивать элементы лучше в void-функции. 5. Почему в Примере 10 цикл выполняется от n-1 до 0. 6. Может ли массив являться параметром цикла и что для этого надо сделать. 7. В каких ситуациях при передаче массива в функцию перед ним нужно писать const. Индивидуальные задания 1. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Вычисление среднего арифметического значения элементов массива и замена положительных элементов массива целой частью от среднего арифметического значения. 4. Конец работы. 2. Создать меню и выполнение всех его пунктов. 5. Ввод массива целых чисел. 6. Вывод массива в строку. 7. Вычисление минимального элемента. Вычисление максимального элемента. Замена всех элементов равных максимальному элементу значением минимального элемента. 8. Конец работы. 3. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент. Найти максимальный элемент. Заменить все элементы, стоящие между минимальным и максимальным элементом - нулями. 4. Конец работы. 4. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти количество положительных элементов в массиве. Заменить все четные элементы массива на их индексы. 4. Конец работы. 5. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент. Найти количество элементов имеющих минимальное значение. Удалить все минимальные элементы из массива 4. Конец работы. 6. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 123 3. Найти первый отрицательный элемент в массиве. Найти сумму отрицательных элементов. Заменить все элементы, стоящие перед первым отрицательным элементом на сумму отрицательных элементов. 4. Конец работы. 7. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент среди элементов, имеющих четный индекс. Найти минимальный элемент среди элементов, имеющих нечетный индекс. Заменить все элементы, стоящие между этими минимальными элементами на их индексы. 4. Конец работы. 8. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент среди положительных элементов массива. Заменить все отрицательные элементы массива на этот минимальный элемент. 4. Конец работы. 9. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти второй по порядку минимальный элемент. Заменить все элементы, кратные трем, на этот элемент. 4. Конец работы. 10. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент. Вставить после минимального элемента его индекс. 4. Конец работы. 11. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти максимальный элемент. Найти количество элементов имеющих максимальное. Удалить все максимальные элементы из массива 4. Конец работы. 12. Создать меню и выполнение всех его пунктов. 1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти количество элементов, стоящих после последнего отрицательного элемента в массиве. Вставить после этого элемента найденное количество. 4. Конец работы. 124 Формирование массива Теория Существует целый ряд задач, в которых требуется на основе исходного, или исходных массивов получить новый массив. В общем случае при формировании нового массива следует использовать новый индекс для этого массива. В новом массиве следует зарезервировать количество элементов с учетом количества элементов в исходном массиве. Примеры Пример 12. Сформировать новый массив из индексов элементов массива x, равных элементу с номером p. Исходные данные: Целочисленный массив x из n элементов, p – номер элемента. Результат: Целочисленный массив y из j элементов. При описании массива y следует зарезервировать столько же элементов, сколько в массиве x, т.к. все элементы массива x могут удовлетворять данному условию. Тестовый пример: при n=10, p=1 массив x: 4, 6, 8, 4, 6, 2, 8, 4, 7, 4. массив y: 1, 4, 8, 10 Пример 13. Получить новый массив из элементов данного массива, расположенных между экстремальными элементами включительно. Дано: Целочисленный массив t из n элементов, Результат: Целочисленный массив v из h элементов Промежуточные значения: a – номер минимального элемента b – номер максимального элемента p – номер левого экстремального элемента, r – номер правого экстремального элемента h – текущий индекс элементов массива v, Тестовый пример: при n=10, массив t: 3, 6, 9, 3, 7, 4, 2, 8, 5, 6 массив v: 9, 3, 7, 4, 2. Ввод n,p vvod(n,x) j=-1 i=0,n-1,1 x[i]=x[p] j=j+1 y[j]=i vivod(j,y) да нет 125 Ввод n a=0; b=0 i=0,n-1,1 t[i] a=i b=i ai=p, r, 1 h=h+1 v[h]=v[i] vivod(h,v) vvod(n,t) да нет да нет да нет A A Задание 2. Написать и отладить программы для примера 12. Контрольные вопросы 1. Если новый массив получен из элементов исходного, сколько элементов надо зарезервировать для нового массива. 2. В каких ситуациях при получении нового массива не надо использовать новый индекс. 3. Для чего в Примере 13 используются переменные p и r. 4. Если новый массив получен из двух исходных массивов, сколько элементов надо зарезервировать для нового массива. Индивидуальные задания 1. Дан массив целых чисел. Получить новый массив из данного без нулевых элементов. 2. Дан массив целых чисел, каждое из которых отлично от нуля. Если в массиве отрицательные и положительные члены чередуются (+, -, +, -, … или -, +, -, +, …), то получить новый массив совпадающий с данным. Иначе получить новый массив из отрицательных элементов данного массива, сохранив порядок их следования. 126 3. Дан массив действительных чисел. Получить новый массив, выбросив из исходного все члены равные максимальному и минимальному элементам данного массива. 4. Дан массив целых чисел. Если в данном массиве ни одно четное число не расположено после нечетного, то получить новый массив содержащий все отрицательные члены данного массива, иначе все положительные. Порядок следования чисел в обоих случаях заменяется на обратный. 5. Дан массив целых чисел, в котором могут встречаться повторяющиеся элементы. Получить новый массив, содержащий повторяющиеся элементы данного массива по одному разу. 6. Дан массив действительных чисел. Получить новый массив из элементов данного массива, значение которых больше среднего значения. Элементы в новом массиве должны располагаться в обратном порядке. 7. Дан массив действительных чисел. Получить новый массив из данного без элементов, расположенных между максимальным и минимальным элементом этого массива. 8. Дан массив целых чисел получить новый массив из положительных четных элементов первоначального массива. 9. Дан массив действительных чисел получить новый массив из элементов данного массива не меньших первого элемента данного массива. Элементы второго массива расположить в обратном порядке. 10. Дан массив действительных чисел. Получить новый массив их элементов данного массива, расположенных между максимальным и минимальным элементами. 11. Дан массив целых чисел. Получить новый массив из первоначального, отбросив все нулевые элементы в этом массиве. 12. Дан массив целых чисел. Получить новый массив их элементов данного последующему правилу: если в первоначальном массиве встречается элемент равный нулю, переписать в новый массив элемент, предшествующий нулю и следующий за нулем. Двумерный массив Теория Данные из прямоугольных таблиц хранятся в двумерных массивах или матрицах. Каждый элемент двумерного массива характеризуется двумя индексами: первый индекс это номер строки, в которой находится данный элемент, второй индекс – номер столбца. Массивы языка С могут иметь только один индекс, но при этом элементами массивов могут быть другие массивы, что позволяет создавать многомерные массивы. Пример двумерного массива в C: char page[30] [100]; 127 Приведенный массив, по существу, является одномерным 30-элементным массивом, базовый тип которого представлен одномерным 100-символьным массивом. Объявление многомерного массива Синтаксис: Тип Имя_массива[Разм_Измер_1] [Разм_Измер_2]...[Разм Измер_N]; Например: int matrix[2][3]; double three_d_picture[10][20][30]; Для работы с элементами двумерного массива требуется два вложенных цикла: внешний цикл перебирает строки, а внутренний цикл – столбцы в этих строках. Пример ввода двумерного массива A: i=0,n-1,1 j=0,m-1,1 Ввод n,m a[i][j] using namespace std; void main() { setlocale(0, "" ); int a[20][20]; int n,m; cout<< "введите количество строк в массиве" ; cin>>n; cout<< "введите количество столбцов в массиве" ; cin>>m; cout<< "Введите элементы массива" < ( int i=0;i ( int j=0;j Так же как и в одномерном массиве, блок-схема вывода и ввода массива совпадают. Пример вывода двумерного массива как таблицы: cout<< "Двумерный массив" < int i=0;i int j=0;j ; _getch(); Многомерные массивы как параметры функций Существует по крайней мере одна ситуация, когда двухмерный массив проявляет себя именно как массив массивов. Это бывает в функциях, параметры которых являются двухмерными массивами. Когда в заголовке или прототипе функции фигурирует параметр, являющийся многомерным массивом, то размер первого его измерения не 128 указывается; размеры остальных измерений должны быть обязательно указаны. Поскольку размер первого измерения не приводится, обычно возникает необходимость в дополнительном параметре типа int, который передает информацию об этом размере. Ниже приведен пример прототипа функции с двухмерным массивом р в качестве параметра. void display_page(const char p[][100], int size_dimension_l) Это правило обретает четкий смысл, если вспомнить, что параметр представляет собой массив массивов. Поскольку параметр const char p[] [100] — это двухмерный массив, который представляет собой массив массивов, то лишь первое его измерение является индексом массива и трактуется так же, как и индекс одномерного массива. Вторая же размерность является частью описания базового типа, который представляет собой массив из 100 символов. Пример void-функции ввода двумерного массива А, количество строк n, количество столбцов m. void vvod2( int n, int m, int a[][10]) { for ( int i=0;i int j=0;j } Двумерный массив можно вводить данные как таблицу. Пример процедуры вывода двумерного массива А по строкам: void vivod2( int n, int m, int a[][10]) { for ( int i=0;i int j=0;j ; } Обратите внимание на оператор for ( int i=0;i Программа ввода и вывода двумерного массива: # include # include #include using namespace std; void vvod2( int n, int m, int a[][10]); void vivod2( int n, int m, int a[][10]); void main() { setlocale(0, "" ); int x[20][10]; 129 int n,m; cout<< "введите количество строк в массиве" ; cin>>n; cout<< "введите количество столбцов в массиве" ; cin>>m; cout<< "Введите элементы массива" < < } Обратите внимание, что у формального параметра, массив a, - второе измерение имеет значение 10 и у фактического параметра, массив x – второе измерение имеет значение 10. Если, например, фактический параметр x будет описан как int x[20][20], возникнет синтаксическая ошибка, связанная с несовпадением типа фактического и формального параметров. Результат работы этой программы: В двумерном массиве, который является и матрицей существуют элементы главной и побочной диагонали. Элементы главной диагонали удовлетворяют условию i=j. Элементы побочной диагонали удовлетворяют условию: i+j=m. Примеры Пример 14. Дан целочисленный двумерный массив. Определить сколько в этом массиве элементов больше среднего арифметического. Исходные данные: Целочисленный массив x, количество строк n, количество столбцов m. Результат: k- количество элементов больших среднего значения. Среднее значение и количество элементов больших среднего вычисляется в функциях. 130 Пример 15. Дан двумерный массив 3 на 4 вещественных чисел. Переставить столбец, содержащий максимальный элемент с первым столбцом. Исходные данные: Двумерный массив d из 3 строк и 4 столбцов. Результат: Преобразованный двумерный массив d. sr(n,m,a[][10]) s=0 i=1,n-1,1 j=1,m-1,1 s=s+a[i][j] s/(n*m) kol(n,m,a[][10],b) k=0 i=1,n-1,1 j=1,m-1,1 a[i][j]>b k=k+1 k vvod(n,m,x) k=kol(n,m,x,sr(n,m,x)) Вывод k Ввод n,m да нет maxij(a[][4],n,m,mi,mj) mi=0 mj=0 i=0,n-1,1 j=0,m-1,1 a[i][j]>a[mi][mj] mi=i mj=j obmen(a[][4],n,x,y) b=a[i][x] i=0,n-1,1 a[i][x]=a[i][y] a[i][y]=b vvod(3,4,d) maxij(d,3.4,mi,mj) obmen(d,3,1,mj) vivod(3,4,d) да нет 131 # include # include #include using namespace std; void vvod( int n, int m, int a[][4]); void vivod( int n, int m, int a[][4]); void maxij( int a[][4], int n, int m, int & mi, int & mj); void obmen( int a[][4], int n, int x, int y); void main() { setlocale(0, "" ); int d[3][4]; int mi,mj; cout<< "Введите элементы массива" < < } void vvod( int n, int m, int a[][4]) { for ( int i=0;i int j=0;j } void vivod( int n, int m, int a[][4]) { for ( int i=0;i int j=0;j ; } void maxij( int a[][4], int n, int m, int & mi, int & mj) {mi=0; mj=0; for ( int i=0;i int j=0;j } } void obmen( int a[][4], int n, int x, int y) { int b; for ( int i=0;i } } Пример 16. Дан двумерный массив целых чисел. Просуммировать элементы стоящие до первого нуля. Просмотр выполнять по строкам. Исходные данные: Двумерный массив a размером 4 на 4. 132 Результат: s – сумма элементов предшествующих первому нулевому элементу. vvod(4,4,a[][4]) s=0 k=0 i=0,3,1 j=0,3,1 a[i][j]=0 s=s+a[i][j] k=1 k=1 Вывод s да нет да нет Если найден первый нулевой элемент Признак первого нулевого элемента Изменение признака нулевого элемента Выход из цикла по J Если нулевой элемент найден, выход из цикла по I Задание 3. Написать и отладить программы для примера 16. Контрольные вопросы 1. Сколько элементов в массиве размером 4 на 5 2. Какое условие выполняется для элементов ниже главной диагонали. 3. Можно ли в Примере 15 вместо void-функции Max использовать функцию. 4. Укажите параметры по ссылке и параметры по значению в void-функции obmen из Примера 15. 5. Можно ли в Примере 16 обойтись без признака нулевого элемента k. Индивидуальные задания 1. Дан двумерный массив целых чисел из 4 столбцов и 3 строк. Переставить местами строку, содержащую минимальный элемент и последнюю строку.. 2. Дан двумерный массив вещественных чисел из 3 столбцов и 4 строк. Найти, сколько в каждом столбце отрицательных элементов. 3. Дан двумерный массив вещественных чисел из 4 столбцов и 3 строк. Найти сумму максимальных элементов каждой строки. 4. Дан двумерный массив целых чисел из 4 столбцов и 4 строк. Найти сколько нулей находится выше главной диагонали. 133 5. Дан двумерный массив целых чисел из 4 столбцов и 3 строк. Найти максимальный элемент в массиве и заменить его нулем. 6. Дан двумерный массив вещественных чисел из 3 столбцов и 4 строк. Все элементы в массиве стоящие после минимального элемента заменить первым элементом. Замену выполнять по строкам. 7. Дан двумерный массив вещественных чисел из 4 столбцов и 3 строк. Первый элемент в каждом столбце заменить на среднее арифметическое от всех элементов массива. |