Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
31.03.2015
Размер:
87.55 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ФИЛИАЛ ГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ЭНЕГРЕТИЧЕСКИЙ ИНСТИТУТ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)» в г. СМОЛЕНСКЕ

Кафедра информатики

Отчет по лабораторной работе №7

Тема: «Двумерные массивы»

По курсу: «Информатика»

Студент: Юшковский С.Л.

Группа: ПЭ-09

Преподаватель:

Бояринов Ю.Г.

Смоленск 2010

Подготовка к работе.

Цель работы – приобретение навыков разработки алгоритмов и составления программ обработки данных, представленных в виде матриц.

  1. Способы описания двумерного массива в программе.

В языке Паскаль в общем виде двумерные массивы описываются следующим образом:

var имя_массива: array[а..Ь,с..d] of тип_элементов;

где а и b — соответственно верхняя и нижняя граница диапазона значений для первого индекса; c и d — верхняя и нижняя граница диапазона значений для второго индекса.

Двумерный массив таким образом можно представить в виде таблицы,

имеющей b-a+i строк и c-d+i столбцов. Пример описания двумерного массива:

var tabl: array [1..9Д..9] of integer;

таким образом описан целочисленный массив, содержащий 9 строк и

9 столбцов.

  1. Ввод массива с клавиатуры и случайным образом.

Ввод массива случайными числами, и вывод массива в виде матрицы:

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.

  1. Вывод элементов массива в виде таблицы.

for i:=1 to n do

begin

for j:=1 to k do

write(A[i,j],'|');

writeln;

end;

  1. Понятие главной и побочной диагоналей в квадратной матрице.

Если число строк равно числу столбцов (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].

Техническое задание.

Составить алгоритм и программу для решения задачи.

  1. В массиве A[n,m] найти среднее арифметическое ненулевых элементов.

  2. Дана матрица 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

Вывод: приобрели навыки разработки алгоритмов и написания программ обработки данных, представленных в виде матриц.

Соседние файлы в папке Программирование