Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

Var I, j, nd : integer;

у : real;

X : mass;

begin

read(nd);

for i := 1 to nd do

begin

write('Введите ',i,'-й элемент массива ');

readln(x[i])

end;

for i := 2 to nd do

begin

for j := nd downto i do

if x[j - 1] > x[j] then

begin

у := x[j - 1];

x[j - 1] := x[j];

x[j] := у

end;

end;

for i:= 1 to nd do

write(x[i]:8:2)

end.

При каждом значении i наименьший элемент перемещается к i - 1 позиции в массиве.

5.2.2 Работа с двумерными массивами( матицы)

Пример 5.13 Сформировать единичную матрицу е размером n на n.

Единичной называется квадратная матрица, на главной диагонали которой элементы равны единице, а все остальные элементы равны нулю. еij = 1, если i = j, иначе еij = 0.

Алгоритм решения этой задачи включает в себя: ввод размера матрицы n; формирование матрицы; вывод результата расчета на экран дисплея.

program matr1;

uses crt;

const size =10;

Var I,j,n : integer;

e : array [1..size,1..size] of integer;

begin

write('Введите размер матрицы');

readln(n);

for i := 1 to n do

for j := 1 to n do

if i = j then e[i,j] := 1

else e[i,j] := 0;

clrscr;

gotoxy(3,3);

write(' Единичная матрица размером ', n, ' на ',n);

for i := 1 to n do

for j := 1 to n do

begin

gotoxy(3*i,5 + j);

write(e[i,j])

end

end.

Индексы i и j определяют но­мер строки и столбца, на пересече­нии которых находится каждый эле­мент матрицы, и кроме этого опре­деляют положение курсора на экра­не в процедуре gotoxy(3*i,5+j).

Пример 5.14 Написать програм­му сложения двух матриц. Две матрицы можно сложить, если они имеют одинаковый размер. В результате получается матрица тако­го же размера, каждый элемент которой равен сумме соответствующих элементов исходных матриц: сij = аij + bij. Алго­ритм решения задачи содержит следующие этапы: ввод исходной матрицы а; ввод исходной матрицы b; расчет элементов матрицы с и вывод результата на экран дисплея.

program clgmatr;

uses crt;

const line = 20; column = 30;

type t = array[1..column] of real;

var

I,j,n,m : integer;

a,b,c : array [1..line] of t;

begin

clrscr;

write('Число строк матрицы (менее 21)'); readln(n);

write('Число столбцов матрицы (менее 31)'); readln(m);

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

for i:=1 to n do

for j:=1 to m do

begin

write('a[',i,',',j,']');

readln(a[i,j])

end;

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

for i:=1 to n do

for j:=1 to m do

begin

write('b[',i,',',j,']');

readln(b[i,j])

end;

clrscr; {Расчет и вывод матрицы с}

for i:=1 to n do

begin

for j:=1 to m do

begin

c[i,j] := a[i,j] + b[i,j];

write(c[i,j]:6:2);

end;

writeln

end;

repeat until keypressed

end.

В программе определен новый тип данных - массивовый, состоящий из 30 элементов вещественного типа.

Для того, чтобы каждая строка матрицы с выводилась на экране с новой строки, в цикл по i включен пустой оператор вывода writeln.

Функция keypressed из модуля crt дает значение true, если в буфере input не осталось несчитанных символов, и false в противном случае. Цикл repeat until keypressed включен в программу для задержки изображения на экране вывода. Цикл repeat ... until будет работать до тех пор, пока не будет нажата какая-либо клавиша.

Пример 5.15 Написать программу умножения двух матриц. Перемножить две матрицы можно лишь в том случае, если число столбцов первой матрицы равно числу строк второй матрицы. Если первый сомножитель, матрица а, имеет размер m на p, второй сомножитель, матрица в, имеет размер р на n, то в результате расчета получится матрица с размером m на n, каждый

р

элемент которой сij: =aik*bkj.

k=1

program umnmatr;{Умножение матриц}

сonst

m = 4; р = 3; n = 5;

var

i: 1..m;

j: 1..n;

i: 1..P;

a: array [1..m,1..p] of real;

b: array [1..p,1..n] of real;

c: array [1..m,1..n] of real; .

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

for i := 1 to m do

for k := 1 to p do

begin

write('a[',i,',',k,']');

readln(a[i,k])

end;

for k := 1 to p do { Ввод матрицы b}

for j := 1 to n do

begin

write('b[',k,',',j,']');

readln(b[k,j])

end;

for i:= 1 to m do { Умножение}

begin

for j := 1 to n do

begin

c[i,j] := 0;

for k := 1 to p do

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

end;

end;

writeln('Результат'); {Вывод матрицы}

for i := 1 to m do

begin

for j := 1 to n do write(c[i,j]:8:2);

writeln

end;

end.