Program proizvedenie;
Type
Matrix=array [1..10, 1..10] of integer;
Var
A: matrix;
N, m, i, j: byte;
P: integer;
Procedure vvod (var m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do {переменная n для процедуры является глобальной, а
значит «известной»}
For j:=1 to m do {переменная m для процедуры является глобальной, а
значит «известной»}
M[i,j]:= random(10);
End;
Procedure print (m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do
begin
For j:=1 to m do
Write (M[i, j]: 4);
Writeln;
end;
End;
Begin {начало основной программы}
Writeln(‘Введите размерность матрицы:’);
Readln(N, M);
Vvod(a);
Print(a);
P:=1;
For i:=1 to N do
For j:=1 to M do
If a[i, j]<>0 then p:=p*a[i, j];
Writeln(p);
End.
Задача: даны две матрицы. Найти их сумму.
Решение задачи:
1. Для решения данной задачи нам потребуются переменные: a, b, c – матрицы одной размерности; i, j – индексы матриц; n, m – размерность матриц.
2. Входными данными являются переменные n и m, они могут принимать натуральные значения, их введем с клавиатуры; a, b – матрицы, ввод матриц оформим в виде процедуры.
3. Выходными данными в этой задаче является матрица c – сумма двух данных матриц. Вывод матриц на экран оформим в виде процедуры.
|
|
4. Ход решения задачи:
· введем размерность матриц n, m;
· введем матрицу a, для этого обратимся к процедуре vvod(a);
· напечатаем полученную матрицу, для этого обратимся к процедуре print(a);
· введем матрицу b, для этого обратимся к процедуре vvod(b);
· напечатаем полученную матрицу, для этого обратимся к процедуре print(b);
· Будем последовательно перебирать все строки I от 1-й до N-й, в каждой строке будем перебирать все столбцы J от 1-го до
M-го, каждый элемент матрицы cij будет равен сумме соответствующих элементов данных матриц, т.е. cij= aij + bij;
· напечатаем полученную матрицу, для этого обратимся к процедуре print(c);
Текст программы
Program summa;
Type
Matrix=array [1..10, 1..10] of integer;
Var
A, b, c: matrix;
N, m, i, j: byte;
Procedure vvod (var m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do {переменная n для процедуры является глобальной, а
значит «известной»}
For j:=1 to m do {переменная m для процедуры является глобальной, а
значит «известной»}
M[i,j]:= random(10);
End;
Procedure print (m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do
begin
For j:=1 to m do
Write (M[i, j]: 4);
Writeln;
End;
End;
Begin {начало основной программы}
Writeln(‘Введите размерность матрицы:’);
Readln(N, M);
Vvod(a); Print(a);
Writeln; {вставим пустую строку чтобы разделить вывод матриц}
Vvod(b); Print(b);
Writeln; {вставим пустую строку чтобы разделить вывод матриц}
For i:=1 to N do
For j:=1 to M do
C[i, j]:= a[i, j]+b[i, j];
Print(c);
End.
Вопросы для повторения
1. Что представляет собой двумерный массив?
2. Как в Паскале описывается двумерный массив?
3. Как осуществляется доступ к элементам двумерного массива?
4. Как осуществить ввод матрицы?
5. Как осуществить вывод матрицы на экран?
6. Есть следующее описание переменных:
var a,b: array [1..15, 0..8] of real; t: boolean;
Какие из указанных операций допустимы в Паскале?
|
|
· a:= b;
· a:=a+b;
· t:=a<>b;
· read(a);
· a[1]:=a[8];
· a[2,3]:=b[4,8]+b[1,1].
7. Какое из описаний вызовет ошибку "Structure too large" (структура превышает максимально допустимый объём статической памяти):
· Type Vector = Array[Byte] Of Integer; Var C: Array[1..10] Of Vector;
· Var K: Array [Byte, Byte] Of real;
· Var S: Array[–10000..10000] Of integer.
8. Можно ли в Паскале описать трехмерный массив? А n-мерный? Как это сделать? Как осуществляется доступ к элементам n-мерного массива?