Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
· Присвоим начальное значение переменной P=1;
· Будем последовательно перебирать все строки I от 1-й до N-й, в каждой строке будем перебирать все столбцы J от 1-го до
M-го, для каждого элемента матрицы будем проверять условие: если aij¹0, то произведение P будем домножать на элемент aij (P=P*aij);
· Выведем на экран значение произведения ненулевых элементов матрицы – P;
А теперь поговорим о процедурах.
Замечание (это важно!) Параметром процедуры может быть любая переменная предопределенного типа, это означает, что для передачи в процедуру массива в качестве параметра, тип его должен быть описан заранее. Например:
Type
Matrix=array [1..10, 1..10] of integer;
..............................
procedure primer (a: matrix);
..............................
Вернемся теперь к нашим процедурам.
Процедура ввода матрицы называется vvod, параметром процедуры является матрица, причем она должна быть, как результат, передана в основную программу, следовательно, параметр должен передаваться по ссылке. Тогда заголовок нашей процедуры будет выглядеть так:
Procedure vvod(var m: matrix);
Для реализации вложенных циклов в процедуре нам потребуются локальные переменные-счетчики, например, k и h. Алгоритм заполнения матрицы уже обсуждался, поэтому не будем его повторять.
Процедура вывода матрицы на экран называется print, параметром процедуры является матрица, но в этом случае она является входным параметром, следовательно, передается по значению. Заголовок этой процедуры будет выглядеть следующим образом:
Procedure print (m: matrix);
И вновь для реализации вложенных циклов внутри процедуры нам потребуются счетчики, пусть они называются так же – k и h. Алгоритм вывода матрицы на экран был описан выше, воспользуемся этим описанием.
Текст программы
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-мерного массива?
Лабораторная работа №6
Тема: Двумерные массивы
Задание 1
Задание: Сформировать квадратную матрицу порядка n по заданному образцу:
Указания к выполнению: выполнить все этапы решения задачи самостоятельно. Вывод матрицы на экран оформить в виде процедуры.
Вариант 1.
1 | 2 | 3 | ... | n-1 | N |
N | n-1 | n-2 | ... | 2 | 1 |
1 | 2 | 3 | ... | n-1 | N |
N | n-1 | n-2 | ... | 2 | 1 |
... | ... | ... | ... | ... | |
N | n-1 | n-2 | ... | 2 | 1 |
Вариант 2.
0 | 0 | 0 | ... | 0 | 1 |
0 | 0 | 0 | ... | 2 | 0 |
... | ... | ... | ... | ... | ... |
0 | 0 | n-2 | ... | 0 | 0 |
0 | n-1 | 0 | ... | 0 | 0 |
n | 0 | 0 | ... | 0 | 0 |
Вариант 3.
n | 0 | 0 | ... | 0 | 0 |
0 | n-1 | 0 | ... | 0 | 0 |
0 | 0 | n-2 | ... | 0 | 0 |
... | ... | ... | ... | ... | ... |
0 | 0 | 0 | ... | 2 | 0 |
0 | 0 | 0 | ... | 0 | 1 |
Вариант 4.
1 | n | 1 | n | ... | N |
2 | n-1 | 2 | n-1 | ... | n-1 |
3 | n-2 | 3 | n-2 | ... | n-2 |
... | ... | ... | ... | ... | ... |
n-1 | 2 | n-1 | 2 | ... | 2 |
n | 1 | n | 1 | ... | 1 |
Вариант 5.
1 | 1 | 1 | ... | 1 | 1 |
0 | 1 | 1 | ... | 1 | 0 |
0 | 0 | 1 | ... | 0 | 0 |
... | ... | ... | ... | ... | ... |
0 | 1 | 1 | ... | 1 | 0 |
1 | 1 | 1 | ... | 1 | 1 |
Вариант 6.
1 | 1 | 1 | ... | 1 | 1 |
2 | 2 | 2 | ... | 2 | 0 |
3 | 3 | 3 | ... | 0 | 0 |
... | ... | ... | ... | ... | ... |
n-1 | n-1 | 0 | ... | 0 | 0 |
n | 0 | 0 | ... | 0 | 0 |
Вариант 7.
1 | 2 | 3 | ... | n-1 | N |
2 | 3 | 4 | ... | n | 0 |
3 | 4 | 5 | ... | 0 | 0 |
... | ... | ... | ... | ... | ... |
n-1 | N | 0 | ... | 0 | 0 |
n | 0 | 0 | ... | 0 | 0 |
Вариант 8.
1 | 0 | 0 | ... | 0 | N |
0 | 2 | 0 | ... | n-1 | 0 |
0 | 0 | 3 | ... | 0 | 0 |
... | ... | ... | ... | ... | ... |
0 | 2 | 0 | ... | n-1 | 0 |
1 | 0 | 0 | ... | 0 | N |
Задание: вычислить сумму элементов матрицы в заштрихованной области.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


