Лабораторная работа №7. Тема: Двумерные массивы.

advertisement
Лабораторная работа №7.
Тема: Двумерные массивы.
Цель: освоение двумерных массивов.
Итак, мы рассмотрели одномерные массивы. Элементы массива могут, в свою очередь,
также быть массивами, например:
Const n=4;m=3;
Type mas = array[1..n] of integer;
Mas2 = array[1..m] of mas;
Обычно это записывается так:
Type mas2 = array[1..m,1..n] of integer;
Здесь описан тип массива, состоящего из m массивов, каждый из которых содержит n целых
чисел. Иными словами, это матрица из m строк и n столбцов, или двумерный массив.
Задача 7.1. Минимальный по модулю элемент
……………………………………………………………………………………………………
Написать программу, которая находит минимальный по модулю элемент вещественной матрицы
размером 5  8 и его координаты.
В результате выполнения этой программы должно получиться три числа: значение элемента,
имеющего минимальную абсолютную величину (величина вещественного типа), а также целочисленные
номера строки и столбца, на пересечении которых этот элемент расположен.
Алгоритм
1. Ввести матрицу.
2. Принять элемент, расположенный на пересечении первой строки и первого столбца, за искомый (для
этого запомнить его модуль, номер строки и номер столбца).
3. Поочередно просмотреть все элементы матрицы; если модуль очередного элемента оказывается меньше
сохраненного, принять этот элемент за искомый (то есть запомнить его модуль, номер строки и номер
столбца).
4. Вывести результаты.
Программа:
program min_abs_1;
uses crt;
const m=5;n=8;
var
a:array[1..m,1..n] of real;
i,j:integer;
{текущие значения индексов строки и столбца }
im,jm:integer;
{значения индексов минимального элемента}
minmod:real;
{буфер для хранения минимального модуля}
begin clrscr;
randomize;
for i:=1 to m do
for j:=1 to n do a[i,j]:=random(101);
{ввод элементов массива}
writeln;writeln('Исходный массив');
for i:=1 to m do begin
for j:=1 to n do write (a[i,j]:6:1);writeln end;writeln;
minmod:=abs(a[1,1]);
{начальные установки}
im:=1;jm:=1;
for i:=1 to m do {цикл перебора всех строк}
for j:=1 to n do
{цикл просмотра строки (меняется номер столбца)}
if abs(a[i,j])<minmod then begin
minmod:=abs(a[i,j]);im:=i;jm:=j; {обновление минимума}
end;
writeln ('Минимальный по модулю элемент : ',minmod:6:1,' Его координаты: ',im:3,jm:3);
readln;
end.
Размеры массива заданы именованными константами m и n, что позволяет легко их изменять.
Для ввода матрицы требуется организовать вложенные циклы. Порядок их следования не важен,
главное, чтобы он совпадал с порядком ввода исходных данных. Для приведенной последовательности
циклов элементы должны вводиться по строкам.
Задание: Измените программу так, чтобы она находила указанную величину не для всей
матрицы, а для каждой ее строки.
Алгоритм ее работы будет выглядеть так:
1. Ввести матрицу.
2. Для каждой строки матрицы:
 принять элемент, расположенный на пересечении этой строки и первого столбца, за искомый
(для этого запомнить его номер столбца);
 просмотреть строку матрицы; если модуль очередного элемента оказывается меньше
сохраненного, принять этот элемент за искомый (то есть запомнить его номер столбца);
 вывести результаты.
Как видите, в этом случае для каждой строки матрицы повторяются одни и те же действия присвоение начальных значений, просмотр строки и вывод результатов. Номер строки при обновлении
минимума можно не запоминать, потому что он хранится в переменной цикла. Для разнообразия не
будем сохранять в отдельной переменной и минимальный модуль.
Download