Скачиваний:
57
Добавлен:
02.05.2014
Размер:
112.64 Кб
Скачать

Лабораторная работа 7

Сложные циклы. Обработка массивов

Цель работы: Формирование умений и навыков в разработке сложных циклических алгоритмов обработки массивов с использованием процедур и функций пользователя.

Использование текстовых файлов для ввода-вывода.

Что нужно знать для выполнения работы

1. Структуру вложенного цикла.

2. Метод пошаговой детализации (последовательного уточнения) разработки алгоритмов.

3. Особенности использования массивов в качестве параметров в процедурах и функциях.

4. Объявление и использование текстовых файлов.

Примеры выполнения задания лабораторной работы

Пример 1

Составьте программу, перемножения матриц Am x n и Bn x l. В результате должна получиться матрица Cm x l.

Для разработки алгоритма воспользуемся методом пошаговой детализации (рис. 7.1-7.5).

Рис. 7.1 Схема алгоритма головной программы (первый шаг детализации)

Открытие файла с исходными данными

Закрытие файла с исходными данными

Рис. 7.1 Схема алгоритма процедуры ввода исходных данных (второй шаг детализации)

Выполним детализацию блока «Ввод матрицы А»

Рис. 7.3 Схема алгоритма процедуры ввода исходных данных (третий шаг детализации)

Осталось выполнить детализацию блока «Ввод i-й строки матрицы А»

Рис. 7.4 Схема алгоритма процедуры ввода исходных данных (четвертый шаг детализации)

Теперь нетрудно собрать детальную схему ввода матрицы (рис. 7.5)

Открытие файла с исходными данными

Закрытие файла с исходными данными

Рис. 7.5 Схема алгоритма процедуры ввода исходных данных (результат детализации)

Алгоритм процедуры вывода матрицы аналогичен алгоритму ввода, с той лишь разницей, что перед выводом матрицы выводится заголовок и после вывода очередной строки происходит переход на следующую.

Разработаем алгоритм процедуры перемножения матриц (первый шаг детализации мы уже выполнили рис. 7.1).

Умножить I-ю строку а на в, получая I-ю строку с

Рис. 7.6 Схема алгоритма процедуры перемножения матриц (второй шаг детализации)

Выполним детализацию блока «Умножить i-ю строку А на В, получая i-ю строку С» (рис. 7.7).

Умножить i-ю строку А на j-й столбец В, получая Сij

Рис. 7.7 Схема алгоритма процедуры перемножения матриц (третий шаг детализации)

Выполним детализацию блока «Умножить i-ю строку А на j-й столбец В, получая Сij» (рис. 7.8).

S:=0

S:=S+Aik*Bkj

Cij:=S

Рис. 7.8 Схема алгоритма процедуры перемножения матриц (четвертый шаг детализации)

Собрав результаты детализации, получим детальную схему процедуры перемножения матриц (рис.7.9).

S:=0

S:=S+Aik*Bkj

Cij:=S

Рис. 7.9 Схема алгоритма процедуры перемножения матриц (результат детализации)

Текст программы

program lr7_1_1;

{Нахождение произведения матрицы Amxn на матрицу Bnxl,

получая матрицу Cmxl

Назаров Л.В.}

uses

crt;

type

matr =array[1..10,1..10] of real;

stroka =string[30];

var

a,b,c :matr; {исходные матрицы и матрица результата}

i,j,k,l,m,n :integer;

flag:boolean;

procedure vvodmatr(var a:matr;namefile:stroka;var m,n:integer);

{Ввод матрицы}

var

i,j :integer;

fin:text;

begin

Clrscr;

assign(fin,namefile);

reset(fin);

readln(fin,m,n);

for i:=1 to m do

begin

for j:=1 to n do

read(fin,a[i,j]);

readln(fin);

end;

close(fin);

end;

procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag:stroka;

var flag:boolean);

{Вывод матрицы}

var

i,j :integer;

fout :text;

begin

assign(fout,namefile);

if flag then

rewrite(fout)

else

append(fout);

writeln(fout,zag);

for i:=1 to m do

begin

for j:=1 to n do

write(fout,a[i,j]:8:2);

writeln(fout);

end;

if namefile='con' then {если вывод на экран}

readkey

else

close(fout);

end;

procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);

{нахождение произведения матрицы}

var

i,j,k:integer;

s:real;

begin

for i:=1 to m do

for j:=1 to l do

begin

s:=0;

for k:=1 to n do

s:=s+a[i,k]*b[k,j];

c[i,j]:=s;

end;

end;

begin

clrscr;

vvodmatr(a,'matra.txt',m,n);

vvodmatr(b,'matrb.txt',n,l);

flag:=true;

vivodmatr('matrc.txt',a,m,n,'Матрица A',flag);

flag:=false;

vivodmatr('matrc.txt',b,n,l,'Матрица B',flag);

multmatr(a,b,c,m,n,l);

flag:=false;

vivodmatr('matrc.txt',c,m,l,'Матрица C=A*B',flag);

end.

Соседние файлы в папке Лабораторный практикум по программированию на Паскале