Задачи повышенной сложности Лабораторная работа 4 Программирование с использованием массивов Цель работы: научиться правильно описывать различные массивы, уметь инициализировать массивы, распечатывать содержимое массива; научится решать задачи на использование массивов. Общие сведения: Массив - это структурированный тип данных, который используется для описания упорядоченной совокупности фиксированного числа элементов одного типа, имеющих общее имя. Для обозначения элементов массива используются имя переменной-массива и индекс. Перед выполнением работы необходимо изучить правила описания и использования переменных типа массив, типизированных констант типа массив. Примеры: Пример1: Дан двумерный массив. В каждой строке все его элементы, не равные нулю, переписать (сохраняя порядок) в начало строки, а нулевые элементы - в конец массива. Новый массив не заводить. Этапы решения задачи: 1. Суть одного из алгоритмов решения данной задачи состоит в том чтобы "просматривать" массив построчно и находить в каждой строке пару (0:число), а затем менять их местами между собой и так до тех пор пока в строке таких пар не окажется. 2. Напишем программу на псевдо паскале: program example1; var V:array[1..100,1..100] of integer; m,n, i,j, c: integer; flag: boolean; begin <ввод размерности массива m*n> <заполнение ячеек массива> for i:=1 to m do repeat flag:= true; for j:=1 to n-1 do if (v[i,j]=0) and (v[i,j+1]<>0) then begin <поменять их местами> flag:= false; end; until flag; <Печать массива> readln; end. 3.Составим блок схему алгоритма  Детализируем блок "Упорядочиваем 1-ю строку"  Блок схема алгоритма целиком:  4.Приведем программу на языке Паскаль: program example1; var V:array[1..100,1..100] of integer; m,n, i,j, c: integer; flag: boolean; begin write('Введите размерность массива m-n> '); readln(m,n); for i:= 1 to m do for j:= 1 to n do begin write('V[',i,',',j,']= '); readln(V[i,j]); end; for i:=1 to m do repeat flag:= true; for j:=1 to n-1 do if (v[i,j]=0) and (v[i,j+1]<>0) then begin c:=v[i,j]; v[i,j]:=v[i,j+1]; v[i,j+1]:=c; flag:= false; end; until flag; for i:= 1 to m do begin for j:= 1 to n do write(V[i,j]:2); writeln end; readln; end. Контрольные вопросы 1. Каким образом определяются переменные типа массив (одномерный и двумерный)? 2. Как осуществляется доступ к отдельному элементу одномерного и двумерного массива? 3. Каким образом выводятся элементы массива на экран? 4. Приведите пример фрагмента программы, который выводит на экран двумерный массив в виде матрицы. 5. Сколько чисел можно записать в шестимерный массив X: Array[0..1, 0..1, 0..1, 0..1, 0..1, 0..1] of Integer? Задания 1. Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj. 2. Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j. 3. Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= 2i+j. 4. Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы. а) б) в) г)  5. Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной диагонали; выше и ниже побочной. 6. Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична. 7. Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как: - произведение элементов соответствующих строк; - среднее арифметическое соответствующих столбцов; - разность наибольших и наименьших элементов соответствующих строк; - значения первых отрицательных элементов в столбце. 8. Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк. 9. Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения). 10. В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах. Задачи повышенной сложности 1. В массиве А[1..N,1..N] определить номера строки и столбца какой-нибудь седловой точки. Некоторый элемент массива называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце. 2. Массив А[1..5,1..7] содержит вещественные числа. Требуется ввести целое число K и вычислить сумму элементов А[I,J], для которых I+J=К. Прежде, однако следует убедиться, что значение К позволяет найти решение, в противном случае нужно напечатать сообщение об ошибке. 3. Дан массив A[1..N,1..N]. Составить программу, которая прибавила бы каждому элементу данной строки элемент, принадлежащий этой строке и главной диагонали. 4. Дана матрица NxM. Переставляя ее строки и столбцы, переместить наибольший элемент в верхний левый угол. Определить можно ли таким же образом поместить минимальный элемент в нижний правый угол. 5. Элемент двухмерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером NxN найти максимум среди всех локальных минимумов. |