Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
Балаковский институт техники, технологии и управления
Обработка двухмерных массивов
на языке TURBOPASCAL
Методические указания к выполнению лабораторных работ
по курсу “Программирование и основы алгоритмизации”
для студентов специальности 210100
дневной, вечерней и заочной форм обучения
Одобрено
редакционно-издательским советом
Балаковского института техники,
технологии и управления
Балаково 2007
Цель работы – освоение методов обработки двухмерных массивов на языке программирования TURBO PASCAL.
Основные понятия
Двумерный массив отличается от одномерного массива тем, что для доступа к его элементам используется два индекса. Для того, чтобы задать какую-либо ячейку двумерной таблицы указывают номер строки и номер столбца.
Двухмерный массив описывается в разделе переменных:
а: array [1..5] of array [1..4] of integer;
Этот массив можно представить в качестве двумерной матрицы с 20 элементами (4×5). Возможна сокращенная запись приведенного выше описания массива:
a: array [1..5,1..4] ofinteger;
Полный вид двухмерного массива (матрицы):
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.
Данные будут выводиться сплошным неразделимым потоком в одну строчку. Чтобы вывести данные как в таблице нужно после каждого элемента вставить пробел и после каждой выведенной строки сделать переход на новую строку с помощью оператора 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.
Варианты заданий
1. Найдите минимальные элементы в каждой строке матрицы (n,m) и выведите их в виде одномерного массива.
2. Найдите максимальные элементы в каждом столбце матрицы (n,m) и выведите их в виде одномерного массива.
3. Найдите минимальные элементы в каждом столбце матрицы (n,m) и выведите их в виде одномерного массива.
4. Замените элементы главной диагонали матрицы (n, n) на 0 , а все остальные элементы матрицы на 1.
5. Замените элементы побочной диагонали матрицы (n, n) на 1, а все остальные элементы матрицы на 0.
6. Найдите сумму элементов главной диагонали матрицы (n, n).
7. Найдите произведение элементов побочной диагонали матрицы (n,n).
8. Найдите сумму элементов находящихся выше главной диагонали матрицы (n, n).
9. Найдите сумму элементов находящихся ниже главной диагонали матрицы (n,n).
10. Найдите максимальную сумму элементов строк матрицы (n,m).
11. Найдите минимальную сумму элементов столбцов матрицы (n,m).
12. Найдите минимальное произведение элементов строк матрицы (n,m).
13. Найдите максимальное произведения элементов столбцов матрицы (n,m).
14. Напишите программу, увеличивающую каждый элемент матрицы (n,m) в 3 раза и сохраняющую результат в виде второй матрицы.
15. Сложите соответствующие элементы двух матриц (n,m) и выведите результирующую матрицу.
16. Напишите программу, меняющую знак каждого элемента матрицы (n,m) на противоположный знак.
17. Найдите отрицательные элементы в матрице (n,m) и сохраните их в виде отдельного одномерного массива.
18. Найдите все элементы матрице (n,m) меньше единицы и сохраните их индексы в виде отдельного одномерного массива.
19. Найдите в матрице (n,m) максимальный и минимальный элемент и поменяйте их местами.
20. Определите, каких положительных или отрицательных элементов в матрице (n,m) больше.
21. Найдите сумму элементов четных и сумму нечетных строк матрицы (n,m).
22. Найдите произведения элементов четных и нечетных столбцов матрицы (n,m).
23. Найдите все элементы матрицы (n,m) кратные 5 и сохраните их в одномерном массиве.
24. Найдите все элементы матрицы (n,m), значения которых находятся в интервале (а, в) и сохраните их в одномерном массиве.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.