
инфа / Программирование / П_Лаба7
.docФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ФИЛИАЛ ГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ЭНЕГРЕТИЧЕСКИЙ ИНСТИТУТ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)» в г. СМОЛЕНСКЕ
Кафедра информатики
Отчет по лабораторной работе №7
Тема: «Двумерные массивы»
По курсу: «Информатика»
Студент: Юшковский С.Л.
Группа: ПЭ-09
Преподаватель:
Бояринов Ю.Г.
Смоленск 2010
Подготовка к работе.
Цель работы – приобретение навыков разработки алгоритмов и составления программ обработки данных, представленных в виде матриц.
-
Способы описания двумерного массива в программе.
В языке Паскаль в общем виде двумерные массивы описываются следующим образом:
var имя_массива: array[а..Ь,с..d] of тип_элементов;
где а и b — соответственно верхняя и нижняя граница диапазона значений для первого индекса; c и d — верхняя и нижняя граница диапазона значений для второго индекса.
Двумерный массив таким образом можно представить в виде таблицы,
имеющей b-a+i строк и c-d+i столбцов. Пример описания двумерного массива:
var tabl: array [1..9Д..9] of integer;
таким образом описан целочисленный массив, содержащий 9 строк и
9 столбцов.
-
Ввод массива с клавиатуры и случайным образом.
Ввод массива случайными числами, и вывод массива в виде матрицы:
Write(' введите число строк п=');
Readln(n);
Write ( введите число столбцов т= ');
Readln(m);
Randomize;
For i:=l to n do
Begin
For j: =1 to m do
Begin
A[i,j]:=random(50)-25;
Write(A[i,j]:5);
End;
Writeln;
End.
-
Вывод элементов массива в виде таблицы.
for i:=1 to n do
begin
for j:=1 to k do
write(A[i,j],'|');
writeln;
end;
-
Понятие главной и побочной диагоналей в квадратной матрице.
Если число строк равно числу столбцов (n=m), то матрица называется квадратной. Диагонали квадратной матрицы A[4,4]:
Главная диагональ - A[1,1], A[2,2], A[3,3], A[4,4].
Побочная диагональ - A[4,1], A[3,2], A[2,3], A[4,1].
Техническое задание.
Составить алгоритм и программу для решения задачи.
-
В массиве A[n,m] найти среднее арифметическое ненулевых элементов.
-
Дана матрица D[n,m] найти номера строк элементы, в каждой из которых одинаковые.
Анализ технического задания.
Для решения задачи 1 необходимо заполнить двумерный массив случайными числами, выбрать все ненулевые элементы массива, определив их количество и сложить их абсолютные величины. Все эти операции необходимо выполнить во вложенном цикле for. Затем чтобы найти среднее арифметическое необходимо сумму всех ненулевых элементов поделить на их количество.
Для решения задачи два необходимо заполнить двумерный массив случайными числами. Затем сравнить первую строку со второй, третьей и т.д., до m потом вторую строчку c третьей, четвертой и т.д до m. Для этого, если первый элемент массива ns, предварительно заполненного числом большим числа строк на 1 ( например если число строк 100 то все элементы массива ns равны 101 ), больше 1 то, записываем значения строк с которыми сравнивается первая строка во вспомогательный массив vm, затем сравниваем первый элемент первый строки с элементами вспомогательного массива, если они равны то значение соответствующего элемента массива vm приравниваем к нулю и повторяем поиск для следующего элемента первой строки. Затем суммируем все значения массива vm, если их сумма равна нулю (элементы массива vm и первой строки равны), в первый элемент массива ns, записываем 1, в элементы массива чей порядковый номер равен номеру строки, с которой сравнивалась первая записываем 1. Аналогично для всех остальных строк. Таким образом в массив ns будет иметь примерно следующий вид
[1 1 3 101 3 101] т.е. первая строка имеет такие же элементы, как и вторая, третья такие же как и пятая, а четвертая и шестая имеют элементы, отличающиеся от элементов всех других строк. Создадим процедуру поиска «одинаковых строк» и назовем ее poisk.
Задача 1.
Блок схема.
нет
да
нет
да
A[i,j]:=random(10)-5
нет
да
S:=s+abs(a[I,j])
Sr:=s/k
K:=K+1
J:=j+1
I:=i+1
Текст программы.
program nenul;
uses crt;
var a:array [1..100,1..100] of integer;
i,j,n,s,m,k:integer; sr:real;
begin
clrscr;
randomize;
writeln('Введите число строк');
readln(m);
writeln('Введите число столбцов');
readln(n);
writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=random(4)-1;
write(a[i,j]:4);
if a[i,j]<>0 then
begin
s:=s+abs(a[i,j]);
k:=k+1;
end;
end;
writeln;
end;
sr:=s/k;
writeln('среднее арифметическое ненулевых элементов массива равно ',sr:4:3);
readln;
end.
Результаты тестирования.
Данная программа работает без ввода пользователем каких-либо данных. Программа работает корректно относительно данной функции.
Задача 2.
Блок схема.
J:=1
Poisk;
k:=m
A[I,j]:=random(2);
Ns[i]:=101
K:=m
K:=n
I:=i+1
I:=1
J:=j+1
J:=1
I:=i+1
Srel:=ns[i]
J:=j+1
Текст программы.
program ex2;
uses crt;
var a:array[1..100,1..100] of integer; vm:array [1..100] of integer;
ns:array[1..100] of byte;
i,j,k,m,n,s,l,srel:integer;
procedure poisk;
begin
for i:=1 to m-1 do
begin
if ns[i]>i then
begin
for j:=i+1 to m do
begin
for k:=1 to n do
vm[k]:=a[j,k];
for k:=1 to n do
begin
for l:=1 to n do
if a[i,k]=vm[l] then
begin
vm[l]:=0;
break;
end;
end;
for k:=1 to n do
s:=vm[k]+s;
if s=0 then
begin
ns[i]:=i;
ns[j]:=i;
end;
s:=0;
end;
end;
end;
end;
begin
clrscr;
randomize;
writeln(' введите число строк ');
readln(m);
writeln(' введите число столбцов ');
readln(n);
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=random(2)+1;
write(a[i,j]:4);
end;
writeln;
ns[i]:=101;
end;
poisk;
writeln;
k:=m;
if m>n then
k:=m
else
k:=n;
for i:=1 to k do
begin
if (ns[i]>srel) and (ns[i]<>101) then
begin
for j:=i to k do
if ns[i]=ns[j] then
begin
srel:=ns[i];
write(j:3);
end;
writeln(' эти строки имеют одинаковые элементы ' );
end;
end;
writeln;
readln;
end.
Результаты тестирования.
Входные данные |
Выходные данные |
|
M=4 n=2 |
2 2 2 1 1 1 2 1 |
2, 4 строки имеют одинаковые элементы. |
M=10 n=5 |
2 2 2 2 1 2 2 1 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 |
2,4,5,6, 8,9 строки имеют одинаковые элементы. 7,10 строки имеют одинаковые элементы. |
M=2 n=2 |
1 1 1 2 |
|
M=a n= |
|
Ошибка ввода |
M=2 n=10 |
2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 |
|
Вывод: приобрели навыки разработки алгоритмов и написания программ обработки данных, представленных в виде матриц.