Задачи для самостоятельного решения
Выберите задачи из предложенного списка в соответствии с Вашим порядковым номером в журнале. При решении задач используйте программу-шаблон. Не забудьте пояснять решение задачи комментариями. Приготовьтесь объяснить решение задач учителю.
1. Найти сумму и количество элементов с заданным условием (хранить эти значения в массивах):
- элементы каждого столбца, кратные k1 или k2;
- элементы каждого столбца, попадающие в промежуток [А..В];
- элементы каждого столбца, которые являются простыми числами;
- элементы каждого столбца положительны и лежат выше главной диагонали;
- отрицательные элементы каждого столбца, меньшие заданного числа а;
- элементы каждого столбца, меньшие среднего арифметического элементов каждого столбца;
- элементы каждой строки, больших среднего арифметического элементов данной строки;
- максимальные элементы каждой строки;
- отрицательные элементы каждой строки;
- элементы каждой строки, равные сумме соседних с ним элементов;
- элементы каждой строки, равные элементу в том же столбце, но в предыдущей строке.
2. Найти и вывести на экран индексы заданных элементов массива (если их нет выдать соответствующее сообщение):
- четных элементов каждой строки и нечетных элементов каждого столбца;
- симметричных чисел;
- первых k отрицательных элементов каждого столбца;
- последних k отрицательных элементов каждой строки;
- последних k отрицательных элементов каждого столбца;
- равных между собой элементов каждого столбца;
- элементов, являющимися действительными числами;
- элементов, являющихся трехзначными числами;
- элементов, не имеющих целой части;
- элементов, являющихся числами, сумма цифр которых равна заданному числу;
- элементов, являющихся числами, первая цифра которых равна заданной.
3. Используя функцию булева типа, определить:
- есть ли в данном массиве отрицательный элемент;
- есть ли два одинаковых элемента;
- есть ли данное число А среди элементов массива;
- есть ли в заштрихованной области массива (рис. а) элемент, равный введенному с клавиатуры числу (массив имеет размерность nxn);
- есть ли в заштрихованной области массива (рис. b) элемент, равный введенному с клавиатуры числу (массив имеет размерность nxn):
- есть ли в заштрихованной области массива (рис. c) элемент, равный введенному с клавиатуры числу (массив имеет размерность nxn):
- является ли массив логическим квадратом, то есть суммы по всем горизонталям, вертикалям и двум диагоналям должны быть равны;
- добавить к предыдущему условию, что сумма должна быть равна данному числу А;
- состоящая только из положительных элементов;
- состоящая только из положительных или нулевых элементов;
- состоящая только из элементов, принадлежащих промежутку от А до В.
4. Измените исходный массив в соответствии с заданием:
- в каждой строке сменить знак максимального по модулю элемента на противоположный;
- отрицательный последний элемент каждого столбца заменить нулем;
- положительные элементы умножить на первый элемент соответствующей строки, а отрицательные - на последний;
- заменить все элементы строки с номером k и столбца с номером р на противоположные по знаку (элемент, стоящий на пересечении, не изменять);
- к элементам столбца k1 прибавить элементы столбца k2;
- переверните в массиве каждую третью строку;
- поменяйте местами заданные элементы каждого столбца;
- добавьте к массиву столбец, содержащий максимальный элемент соответствующей строки, и строку содержащую минимальный элемент соответствующего столбца;
- найти максимальный элемент каждой строки и заменить им все минимальные элементы строки;
- найти минимальный и максимальный элементы столбца и заменить их суммой последний элемент;
- переверните в массиве каждую половину каждого столбца.
5. Решите задачу на заполнение массива по определенному правилу.
- Составить программу вывода на экран арифметического квадрата, в нем первый столбец и первая строка заполнены единицами, а каждый из остальных элементов равен сумме своих соседей сверху и слева. Квадрат должен быть занесен в массив.
- Заполнить массив А размером NxM следующим образом:
21 20 19 18 17 16 15
8 9 10 11 12 13 14
7 6 5 4 3 2 1
- Заполнить массив А размером NxM следующим образом:
1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
- Заполнить квадратный массив В размером NxN следующим образом:
1 4 7 10 13 17 20
2 5 8 11 14 18 21
3 6 9 12 15 19 22
- Заполнить квадратный массив В размером NxN следующим образом:
1 3 4 10 11 21
2 5 9 12 20 22
6 8 13 19 23 30
7 14 18 24 29 31
15 17 25 28 32 35
16 26 27 33 34 36
- Заполнить квадратный массив В размером NxN (N<10)следующим образом:
1 2 3 4 5 6 7
11 12 13 14 15 16 17
21 22 23 24 25 26 27
- Заполнить квадратный массив В размером NxN следующим образом:
0 1 1 1 1 0
2 0 1 1 0 4
2 2 0 0 4 4
2 2 0 0 4 4
2 0 3 3 0 4
0 3 3 3 3 0
- Заполнить квадратный массив В размером NxN следующим образом:
6 1 1 1 1 5
2 6 1 1 5 4
2 2 6 5 4 4
2 2 5 6 4 4
2 5 3 3 6 4
5 3 3 3 3 6
- Заполнить квадратный массив В следующим образом: первая строка - числа Фибоначчи, а каждый столбец продолжает ряд Фибоначчи от элемента, находящегося в первой строке.
- Заполнить массив рядом натуральных чисел, расположив их закручивающейся спиралью по часовой стрелке.
- Заполнить массив рядом натуральных чисел, расположив их раскручивающейся спиралью против часовой стрелки.
Вставка и удаление строк и столбцов.
Мы уже рассматривали такие действия для одномерных массивов. Обобщим для двумерных.
Вставка строк и столбцов
Для решения задачи вставки строки необходимо:
- Первые k строк оставить без изменения.
- Все строки после k-ой сдвинуть на одну назад, это лучше сделать, начиная с последней строки и идти до (k+1)-ой.
- Элементам строки k+1 присвоить заданное значение.
- Увеличить количество строк.
Кроме того, необходимо изменить размерность массива. Так как мы вставляем строку, то число строк будет на одну больше.
Задача. Вставить строку из нулей после строки с номером k.
Procedure Insert1(Var X: MyArray2; n, m: integer; k1: integer); Var i, j: integer; Begin for i:= n downto k1 +1 do for j:= 1 to m do X[i+1, j]:= X[i, j];{элементу столбца j присваиваем элемент этого же столбца, но из предыдущей строки} for j:= 1 to m do X[k1+1, j]:= 0; Inc(n); End;
|
Для вставки столбца пользуйтесь практически тем же правилом, только размерность увеличивается для столбцов и сдвигаем назад столбцы.
Задание. Напишите программу, содержащую процедуры вставки строки и столбца из заданного одномерного массива.
И еще несколько советов.
- Если необходимо вставить после строки, удовлетворяющей какому-либо условию, то надо найти лишь ее номер и задача сводится к рассмотренной выше.
- Если надо вставлять после всех строк с заданным условием, то надо увеличить размерность по строкам, и если строка удовлетворяет условию, то к ней применять вставку. При этом надо заметить, что лучше просматривать строки с последней и ввести счетчик вставленных строк.
- Вставка перед строкой с данным номером отличается лишь тем, что сдвигать назад надо не с (k+1)-ой строки, а с k-ой.
Удаление строк и столбцов
Для решения задачи удаления строки необходимо:
- Сдвинуть все строки, начиная с данной на одну вверх.
- Последнюю строку обнулить.
- Уменьшить количество строк.
Процедура удаления строки приведена ниже.
Procedure Delete1(Var X: MyArray2; Var n, m: integer; k1: integer); Var i, j: integer; Begin for i:= k1 to n-1 do for j:= 1 to m do X[i, j]:= X[i+1, j]; for j:= 1 to m do X[n, j]:= 0; Dec(n); End;
|
Удаление столбца аналогично удалению строки.
И еще несколько советов.
- При выводе на экран полученного массива не выводите нулевые строки и столбцы.
- Задачу об удалении строки с заданным условием можно решить тем же способом, достаточно только найти ее номер, а в случае отсутствия такой строки можно просто сообщить об этом и закончить программу.
Задание. Выберите с учителем задачи из предложенного списка. Решите их, применяя подпрограммы, приготовьте для проверки 3-4 теста.
Воспользуйтесь поиском по сайту: