Типовые алгоритмы обработки двумерных массивов
Вид материала | Документы |
- Самостоятельная работа Найти произведение всех элементов двумерного массива, которые, 14.88kb.
- Поэтому при написании программы будьте особенно внимательны, не путайте индексы элементов, 363.59kb.
- Етики российской федерации типовые алгоритмы автоматизированной обработки экспериментальных, 384.35kb.
- Учебная программа профилирующей дисциплины теория автоматического управления, 36.13kb.
- Использование программных массивов для обработки большого числа однотипных данных (на, 94.99kb.
- Программа курса Алгоритмы программирования, 47.59kb.
- Алгоритмы сортировки одномерных массивов, 53.15kb.
- Курс, 1-й семестр лекции (51 час), экзамен практикум на ЭВМ (68 часов), зачет (с оценкой), 24.4kb.
- Рабочей программы дисциплины Структуры и алгоритмы обработки данных по направлению, 21.62kb.
- Рабочая программа дисциплины "Алгоритмы и средства цифровой обработки сигналов" для, 61.24kb.
ТИПОВЫЕ АЛГОРИТМЫ ОБРАБОТКИ ДВУМЕРНЫХ МАССИВОВ
• Обработка всего массива.
• Обработка отдельно по строкам и столбцам.
• Обработка относительно диагоналей.
Обработка всего массива
Типовой алгоритм | Программная реализация |
Заполнение | ... for i:=1 to n do for j:=1 to m do readln (x[i,j]); ... |
Вывод | ... for i:=1 to n do begin for j:=1 to m do write (x[i,j], ' '); writeln; end; ... |
Сумма, произведение | ... s:=0; p:=1; for i:=1 to n do for j:=1 to m do begin s:=s+x[i,j]; p:=p*x[i,j]; end; writeln (s, p); ... |
Максимальный (минимальный) элемент | ... max:=x[1,1]; min:=x[1,1]; for i:=1 to n do for j:=1 to m do begin if x[i,j]>max then max:=x[i,j]; if x[i,j] end; writeln (max, min); ... |
Выбор по условию | ... for i:=1 to n do for j:=1 to m do if {условие} then {действие} ... |
Типовые алгоритмы обработки двумерного массива отдельно по строкам
Типовой алгоритм | Программная реализация |
Сумма | ... for i:=1 to n do s[i]:=0; for i:=1 to n do for j:=1 to m do s[i]:=s[i]+x[i,j]; for i:=1 to n do write (s[i]); ... |
Произведение | ... for i:=1 to n do p[i]:=1; for i:=1 to n do for j:=1 to m do p[i]:=p[i]*x[i,j]; for i:=1 to n do write (p[i]); … |
Максимальный (минимальный) элемент | ... for i:=1 to n do begin max[i]:=x[i,1]; min[i]:=x[i,1]; end; for i:=1 to n do for j:=1 to m do begin if x[i,j]>max[i] then max[i]:=x[i,j]; if x[i,j] min[i]:=x[i,j]; end; for i:=1 to n do write (max[i]); writeln; for i:=1 to n do write (min[i]); ... |
Выбор по условию | ... for i:=1 to n do begin rez[i]:=0; end; for i:=1 to n do for j:=1 to m do if {условие} then {rez[i]:=...}; for i:=1 to n do write (rez[i]); ... |
Типовые алгоритмы обработки двумерного массива отдельно по столбцам
Типовой алгоритм | Программная реализация |
Сумма | ... for j:=1 to m do s[j]:=0; for j:=1 to m do for i:=1 to n do s[j]:=s[j]+x[i,j]; for j:=1 to m do write (s[j]); ... |
Произведение | … for j:=1 to m do p[j]:=1; for j:=1 to m do for i:=1 to n do p[j]:=p[j]*x[i,j]; for j:=1 to m do write (p[j]); ... |
Максимальный (минимальный) элемент | ... for j:=1 to m do begin max[j]:=x[i,1]; min[j]:=x[i,1]; end; for j:=1 to m do for i:=1 to n do begin if x[i,j]>max[j] then max[j]:=x[i,j] if x[i,j] end; for j:=1 to m do write (max[j]); writeln; for j:=1 to m do write (min[j]); ... |
Выбор по условию | ... for j:=1 to m do rez[j]:=0; for j:=1 to m do for i:=1 to n do if {усл.} then {rez[i]:=...}; for j:=1 to m do write (rez[j]); … |
Обработка двумерных массивов
| | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Рассмотрим типовые задачи обработки двумерных массивов с использованием вложенных циклов. Задача. Т Составить программу подсчета суммы и произведения элементов двумерного массива вещественных чисел. аблица идентификаторов
program matr; uses crt; var a:array [1...10, 1...10] of real; i, j, n, m: integer; s,p :real; begin clrscr; writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m); writeln(‘ Введите элементы массива по строкам ’); for i:=1 to n do for j:=1 to m do readln(a[i, j]); s:=0; p:=1; { поиск суммы и произведения } for i:=1 to n do for j:=1 to m do begin s:=s + a[i,j]; p:=p * a[i,j]; end; writeln(‘ Сумма элементов s=’,s:8:3); writeln(‘ Произведение элементов p=’,p:8:3); readln; end. Задача. Задана квадратная матрица целых чисел. Составить программу подсчета суммы элементов, расположенных над главной диагональю. Таблица идентификаторов
program matr_1; uses crt; var a:array [1..10, 1..10] of real; i, j, n, m : integer; s,p : real; begin clrscr; writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m); writeln(‘ Введите элементы массива по строкам ’); for i:=1 to n do for j:=1 to m do readln(a[i,j]); for i:=1 to 3 do for j:=i +1 to 3 do s:=s+a[i,j]; writeln('Сумма элементов s=', s); readln; end. Для ввода элементов массива используются вложенные циклы с указанием номера вводимого элемента. Для поиска суммы элементов над главной диагональю во внутреннем цикле задан закон изменения параметра внутреннего цикла: j:=i+1. Задача. Задана целочисленная квадратная матрица. Определить является ли она симметричной относительно главной диагонали. Таблица идентификаторов
program matr_2; uses crt; var a : array [1..10, 1..10] of integer; i, j, n, f : integer; begin clrscr; writeln(‘ Введите n<=10 ’); readln (n,m); writeln(‘ Введите элементы массива по строкам ’); for i:=1 to n do for j:=1 to n do readln(a[i,j]); f:=0 for i:=1 to n do for j:=i to n do if a[i,j]<>a[j,i] then f:=1; if f=0 then writeln(‘ матрица симметрична’) else writeln (‘матрица не симметрична’); readln; end. При решении этой задачи сравниваются элементы расположенные над главной диагональю ( a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) . Задача. Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й элемент равен произведению элементов j-ого столбца двумерного массива. Таблица идентификаторов
program matr_3; uses crt; var a: array [1...10, 1...10] of integer; b: array [ 1..10 ] of integer; i, j, n, f : integer; begin clrscr; writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m); writeln(‘ Введите элементы массива по строкам ’); for i:=1 to n do for j:=1 to m do readln (a[i, j]); writeln(‘ Исходная матрица ’); for i:=1 to n do begin for j:= 1 to n do write( a[I,j] , ‘ ‘); writeln; end; writeln(‘ Образованный одномерный массив ’); for j:=1 to m do begin b[ j ]:=1; { накапливается произведение элементов j столбца } for i:=1 to n do b[ j ]:= b[ j ] * a[ i, j ]; write( b[ j] , ‘ ‘); end; readln; end. Задача. Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по возрастанию. Таблица идентификаторов
program mart_4; uses crt; var a: array[1...10, 1...10] of integer; i,j,n,f : integer; begin clrscr; writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m); writeln(‘ Введите элементы массива по строкам ’); for i:=1 to n do for j:=1 to m do readln(a[i, j]); writeln(‘ Исходная матрица ’); for i:=1 to n do begin for j:=1 to n do write(a[I,j],‘ ‘); writeln; end; { переход от строки к строке } for i:=1 to n do { сортировка i-ой строки } repeat f:=0; for j:=1to m-1 do if a[i,j]>a[i,j+1] then begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end; until f=0; writeln(‘ Преобразованная матрица ’); for i:=1 to n do begin for j:= 1 to n do write( a[I,j] , ‘ ‘); writeln; end; readln; end. f =0 – признак того, что все элементы данной строки упорядочены. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |
Задача.
Составить программу нахождения максимального среди элементов двумерного массива вещественных чисел. Определить номер строки и номер столбца, на пересечении которых был найден максимальный элемент.
Таблица идентификаторов.
№ | Наименование переменной | Обозначения в программе |
1 | Имя двумерного массива | a |
2 | Количество строк | n |
3 | Количество столбцов | m |
4 | Индексы массива | I,j |
5 | Значение максимального элемента | max |
6 | Номер строки, где найден максимальный элемент | kmax |
7 | Номер столбца, где найден максимальный элемент | lmax |
Листинг программы.
program lab6;
uses
crt;
var
a: array [1...10, 1...10] of real;
i, j, n, m , kmax , lmax: integer;
max :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln(n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
{за максимальный принимается элемент a11 }
max:=a[1,1];
kmax:=1;
lmax:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>max then
begin
max:=a[i,j];
kmax:=i;
lmax:=j;
end;
writeln(‘max=’, max:8:3);
writeln(‘строка - ‘, kmax,’ столбец - ’,lmax);
readln; end.