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

Вопрос№18. Обработка массивов.

Массив – набор однотипных элентов, связанных набором целых чисел, называемых индексами.

Если индексы меняются с постоянным шагом, то массив называется прямоугольным

Пример. процедуры вывода таблицы символов.

При помощи цикла for

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

for i:=1 to n do begin

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

end;

end;

begin

kodtable;

readln

end.

При помощи цикла while

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

i:=0;

while i<=255

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

end;

end;

begin

kodtable;

readln

end.

При помощи цикла until

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

i:=1

repeat

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

until i>255;

end;

begin

kodtable;

readln

end.

Пример: Умножение матриц.

Задача: вычислить произведение двух матриц.

Математическое решение:

Цикл получения матрицы-произведения:

for i:=1 to n1 do begin

for k:=1 to m2 do begin

proizv[i,k]:=0;

for j:=1 to m1 do begin

proizv[i,k]:=proizv[i,k]+matrix1[i,j]*matrix2[j,k];

end;

end;

end;

Сам текст программы (на всякий случай, матрицы заполняются случайным образом)

program matXmat;uses crt;

const n=10;

var matrix,matrix1,matrix2,proizv:array[1..n,1..n] of Integer;

i,j,k,m1,n1,m2,n2:byte;

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

procedure vyvod(n,m:Integer);

begin

write('|':7);

for j:=1 to n do write(j:6);

writeln;

for j:=1 to n*8 do write('-');

writeln;

for i:=1 to n do begin

writeln('|':7);

write(i:6,'|');

for j:=1 to m do

write(round(matrix[i,j]):6);

writeln;

end;

end;

{Заполнение матрицы случайным образом}

procedure rand(n,m:Byte);

var i,j:Integer;

begin

writeln('Генерация матрицы случайных чисел:');

writeln;

Randomize;

for i:=1 to N do

for j:=1 to m do

matrix[i,j]:=random(51);

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

vyvod(n,m);

end;

begin

clrscr;

repeat

writeln('Введите размеры первой матрицы');

readln(n1,m1);

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

readln(n2,m2);

if m1<>n2 then

writeln('Ошибка. Количество столбцов первой матрицы не совпадает с количеством строк первой матрицы');

until m1=n2;

writeln('заполнение матриц случайным образом');

rand(n1,m1);

matrix1:=matrix;

rand(n2,m2);

matrix2:=matrix;

for i:=1 to n1 do begin

for k:=1 to m2 do begin

proizv[i,k]:=0;

for j:=1 to m1 do begin

proizv[i,k]:=proizv[i,k]+matrix1[i,j]*matrix2[j,k];

end;

end;

end;

writeln('Произведение матриц равно матрице:');

matrix:=proizv;

vyvod(n1,m2);

readln

end.

Пример. Процедура ввода-вывода двумерной матрицы

{Заполнение вводом с клавиатуры}

procedure qwer;

var i,j:Integer;

begin

writeln('Заполнение матрицы с клавиатуры');

for i:=1 to N do begin

for j:=1 to N do

read(matrix[i,j]);

readln;

end;

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

procedure vyvod;

begin

write('|':7);

for j:=1 to n do write(j:6);

writeln;

for j:=1 to n*8 do write('-');

writeln;

for i:=1 to N do begin

writeln('|':7);

write(i:6,'|');

for j:=1 to N do

write(round(matrix[i,j]):6);

writeln;

end;

end;

Пример. Поиск координат минимального числа в двумерном массиве с максимальном размером 10х10

program matrixXmatrix;

var a:array[1..10,1..10] of Integer;

i,j,minx,miny,min,n1,n2:Integer;

procedure poisk(n1,n2:Integer);

var i,j:Integer;

begin

min:=a[1,1];

minx:=1;miny:=1;

for i:=1 to n1 do

for j:=1 to n2 do begin

if a[i,j]<min then begin min:=a[i,j];minx:=j;miny:=i;end;

end;

end;

begin

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

readln(n1,n2);

writeln('Заполните матрицу');

for i:=1 to n1 do begin

for j:=1 to n2 do

read(a[i,j]);

readln;

end;

poisk(n1,n2);

writeln(‘координаты минимального элемента:’,minx:3,miny:3);

readln

end.

Обработка треугольной части элементов двухмерного массива:

For r:=a to N do

For c:=1 to (n-a+1) do

{обработка элементов R,C}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]