Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
Балаковский институт техники, технологии и управления
Обработка двухмерных массивов на языке turbo pascal
Методические указания к выполнению лабораторных работ
по курсу “Программирование и основы алгоритмизации”
для студентов специальности 210100
дневной, вечерней и заочной форм обучения
Одобрено
редакционно-издательским советом
Балаковского института техники,
технологии и управления
Балаково 2007
Цель работы – освоение методов обработки двухмерных массивов на языке программирования TURBO PASCAL.
Основные понятия
Двумерный массив отличается от одномерного массива тем, что для доступа к его элементам используется два индекса. Для того, чтобы задать какую-либо ячейку двумерной таблицы указывают номер строки и номер столбца.
Двухмерный массив описывается в разделе переменных:
а: array [1..5] of array [1..4] of integer;
Этот массив можно представить в качестве двумерной матрицы с 20 элементами (4×5). Возможна сокращенная запись приведенного выше описания массива:
a: array [1..5,1..4] of integer;
Полный вид двухмерного массива (матрицы):
a[1,1] a[1,2] a[1,3] a[1,4]
a[2,1] a[2,2] a[2,3] a[2,4]
a[3,1] a[3,2] a[3,3] a[3,4]
a[4,1] a[4,2] a[4,3] a[4,4]
a[5,1] a[5,2] a[5,3] a[5,4]
Ввод элементов матрицы осуществляют с помощью вложенных циклов for:
for i:=1 to 5 do
for j:=1 to 4 do Read(а[i,j]);
Вывод элементов матрицы осуществляется аналогично:
for i:=1 to 5 do
for j:=1 to 4 do Write(а[i,j]);
Блок схемы операторов ввода и вывода на рис.1 и рис.2.
Рис.1: Блок схема ввода элементов матрицы
Рис.2: Блок-схема вывод элементов матрицы
Данные будут выводиться сплошным неразделимым потоком в одну строчку. Чтобы вывести данные как в таблице нужно после каждого элемента вставить пробел и после каждой выведенной строки сделать переход на новую строку с помощью оператора WriteLn. Тело внешнего цикла заключается в операторные скобки begin и end.
for i:=1 to 5 do begin
for j:=1 to 4 do Write(a[i,j],’ ‘);
WriteLn;
end;
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Номер варианта выбирается по порядковому номеру студента в списке группы. По проведенному заданию требуется:
1. Определить порядок реализации вычислений.
2. Составить графическую схему алгоритма.
3. Записать программу на языке Turbo Pascal.
4. Выполнить расчеты на ЭВМ.
5. Написать отчет по лабораторной работе.
ПРИМЕРЫ ВЫПОЛНЕНИЯ РАБОТ
Пример 1. Найдите максимальные элементы каждой строки матрицы и выведите их на экран.
program max_strok;
var i,j,m,n,imax,jmax: byte;
a: array[1..10,1..10] of integer;
begin
Read(n,m);
for i:=1 to n do
for j:=1 to m do Read(a[i,j]);
for i:=1 to n do
begin
imax:=i; jmax:=1;
for j:=2 to m do
begin
if a[imax,jmax]<a[i,j] then
begin
imax:=i;
jmax:=j;
end;
end;
Writeln (‘ max[’,I,’]=’,a[imax,jmax]);
end;
end.
Минимальные элементы строк массива находятся аналогично, только в условии меняется знак a[imin,jmin]>a[i,j].
Пример 2. Найдите суммы элементов строк матрицы и выведите их на экран в виде одномерного массива.
program sum_strok;
var i,j,m,n: byte;
a: array[1..10,1..10] of integer;
s: array[1..10] of integer;
begin
Read(m,n);
for i:=1 to n do
for j:=1 to m do Read(a[i,j]);
for i:=1 to n do
begin
s[i]:=o;
for j:=1 to m do s[i]:= s[i]+ a[i,j];
end;
for i:=1 to n do Write(‘ ‘,s[i]);
end.
Произведение элементов строк матрицы находится аналогично, только начальным значениям произведений присваивается p[i]:=1.
Пример3. Транспонируйте матрицу (n,m) и выведите ее на экран:
program transport;
var i,j,n,m : byte;
a: array[1..3,1..3] of integer;
begin
for i:=1 to n do
for j:=1 to m do Read(a[i,j]);
for j:=1 to m do
begin
for i:=1 to n do Write(a[i,j],’ ‘);
WriteLn;
end;
end.
Пример 4: Выведите элементы главной диагонали квадратичной матрицы (3х3) на экран.
Квадратная матрица- матрица с равным количеством строк и столбцов. Работая с квадратными матрицами, всегда следует искать какие-либо определенные закономерности в индексах, чтобы облегчить решение поставленной задачи.
На пример:
- у элементов главной диагонали i=j ;
-у элементов выше главной диагонали i<j;
-у элементов ниже главной диагонали i>j;
-у элементов побочной диагонали i+j=n+1
(n - порядок матрицы);
Program diagon;
Var i,j :byte;
a: array[1..3,1..3] of integer;
begin
for i:=1 to 3 do
for j:=1 to 3 do Read(a[i,j]);
for i:=1 to 3 do
for j:=1 to 3 do If i=j then Write(a[i,j],’ ‘);
end.
Пример 5. Написать программу, которая в каждой строке матрицы сортирует элементы по возрастанию.
program sort;
var a:array[1..5,1..5] of real;
c: real;I,j,k:byte;
begin
writeln(‘ Введите матрицу ’);
for i:=1 to 5 do
for j:=1 to 5 do read(a[i,j]);
for i:=1 to 5 do
begin
for j:=5 downto 1 do
begin
for k:=2 to i do
begin
c:=A[i,k-1];
if c>A[i,k] then begin
A[i,k-1]:=A[i,k];
A[i,k]:=c;
end
end;
end;
end;
for i:=1 to 5 do
begin
for j:=1 to 5 do write(A[i,j],’ ‘);
writeln;
end;
end.