Mas : array [ IMin .. IMax , JMin .. JMax ] of T
Это означает, что переменная Mas является массивом, который может иметь индексы строкот IMin до IMax , индексы столбцов от JMin до JMax , а также состоит из элементов типа T .
Пример. Var A:array[1..10,1..15] of real;
Это означает, что A – массив, который может содержать от 1 до 10 строк и от 1 до 15 столбцов из элементов вещественного типа.
Доступ к элементу двумерного массива на языке Pascal имеет вид:
Mas [ Ind1 , Ind2 ]
Это означает доступ к элементу массива Mas с индексом строки Ind1 и индексом столбца Ind2.
Пример. a[1,1]; b[i,j].
Это означает элемент массива A в 1-й строке и 1-м столбце, элемент массива B в i-й строке и j-м столбце.
3.Матрица называется квадратной, если у неё количество строк равно количеству столбцов ( ).
Главная диагональ |
4. Фрагменты вычисления характеристик строк и столбцов двумерного массива
Характеристика | Для каждой строки | Для каждого столбца |
1. Сумма s | for i:=1 to m do begin s[i]:=0; for j:=1 to n do s[i]:=s[i]+A[i,j]; end; | for j:=1 to n do begin s[j]:=0; for i:=1 to m do s[j]:=s[j]+A[i,j]; end; |
2. Произведение p | for i:=1 to m do begin p[i]:=1; for j:=1 to n do p[i]:=p[i]*A[i,j]; end; | for j:=1 to n do begin p[j]:=1; for i:=1 to m do p[j]:=p[j]*A[i,j]; end; |
3. Максимальное значение max | for i:=1 to m do begin max[i]:=A[i,1]; for j:=1 to n do if A[i,j]>max[i] then max[i]:=A[i,j]; end; | for j:=1 to n do begin max[j]:=A[1,j]; for i:=1 to m do if A[i,j]>max[j] then max[j]:=A[i,j]; end; |
4. Минимальное значение min | for i:=1 to m do begin min[i]:=A[i,1]; for j:=1 to n do if A[i,j]<min[i] then min[i]:=A[i,j]; end; | for j:=1 to n do begin min[j]:=A[1,j]; for i:=1 to m do if A[i,j]<min[j] then min[j]:=A[i,j]; end; |
Фрагменты вычисления характеристик одномерного массива
Характеристика | Для всех элементов ai | Для части элементов |
1.Сумма s | s:=0; for i:=1 to n do s:=s+A[i]; | s:=0; for i:=1 to n do if A[i]>z then s:=s+A[i]; |
2.Количество k | k:=n; | k:=0; for i:=1 to n do if A[i]>z then k:=k+1; |
3.Произведение p | p:=1; for i:=1 to n do p:=p*A[i]; | p:=1; for i:=1 to n do if A[i]>z then p:=p*A[i]; |
4.Максимальное значение max | max:=A[1]; for i:=2 to n do if A[i]>max then max:=A[i]; | max:=-1E10; for i:=1 to n do if (A[i]>max) and (A[i]>z) then max:=A[i]; |
5. Минимальное значение min | min:=A[1]; for i:=2 to n do if A[i]<min then min:=A[i]; | min:=1E10; for i:=1 to n do if (A[i]<min) and (A[i]>z) then min:=A[i]; |
6. Среднее значение sr | s:=0; for i:=1 to n do s:=s+A[i]; sr:=s/n; | s:=0; k:=0; for i:=1 to n do if A[i]>z then begin s:=s+A[i]; k:=k+1; end; sr:=s/k; |
5) Фрагменты операций с двумерными массивами
1. Ввод элементов массива | writeln('Введи массив A'); for i:=1 to m do for j:=1 to n do read(A[i,j]); |
2. Вывод элементов массива | writeln('Массив A'); for i:=1 to m do begin for j:=1 to n do write(A[i,j]:10:3); writeln; end; |
3. Замена элементов массива на величину z | for i:=1 to m do for j:=1 to n do A[i,j]:=z; |
4. Увеличение элементов массива на величину z (аналогично уменьшение, умножение, деление) | for i:=1 to m do for j:=1 to n do A[i,j]:=A[i,j]+z; |
5. Вычисление элементов массива B прибавлением к элементам массива A величины z (аналогично отниманием, умножением, делением) | for i:=1 to m do for j:=1 to n do B[i,j]:=A[i,j]+z; |
Фрагменты операций с одномерными массивами
1.Ввод элементов массива | writeln('Введи массив A'); for i:=1 to n do read(A[i]); |
2.Вывод элементов массива | writeln('Массив A'); for i:=1 to n do writeln(A[i]:10:3); |
3.Замена элементов массива на величину z | for i:=1 to n do A[i]:=z; |
4.Увеличение элементов массива на величину z (аналогично уменьшение, умножение, деление) | for i:=1 to n do A[i]:=A[i]+z; |
5.Вычисление нового массива B прибавлением к элементам массива A величины z (аналогично вычитанием, умножением, делением) | for i:=1 to n do B[i]:=A[i]+z; |
6.Вычисление индекса максимального элемента imax (аналогично минимального) | max:=A[1]; imax:=1; for i:=2 to n do if A[i]>max then begin max:=A[i]; imax:=i; end; |
7. Перестановка 1-го и 2-го элементов массива | c:=A[1]; A[1]:=A[2]; A[2]:=c; |
6. К примеру, при вычислении суммы для строки, сначала задается цикл для строк, в котором при переходе на следующую строку значение переменной обнуляется, и далее следует цикл для столбцов, в котором значение каждого столбца складывается с переменной. А при вычислении суммы для столбцов все то же самое,но сначала задается цикл для столбцов, а потом для строк.
8. Что означает каждая строка в приведённой программе
9.
Program lab5; | Программа по имени lab5 |
Var | Раздел описания переменных |
A: array [1..10,1..15] of real; | А-массив,который может содержать от 1 до 10 строк и от 1 до 15 столбцов из элементов вещественного типа |
i, j, m, n: integer; s, p, min, max: real; | Элементы i, j, m, n-целые числа; s, p, min, max-переменные вещественного типа |
Begin | Начало раздела операторов(или начало составного оператора) |
writeln('Введи m,n'); read(m,n); | Ввод пояснительного текста 'Введи m,n'; Ввод переменных m,n |
writeln('Введи массив A'); | Вывод пояснительной надписи |
for i:=1 to m do | Задание цикла с параметром для строк |
for j:=1 to n do | Задание цикла с параметром для стодбцов |
read(A[i,j]); | Чтение данных с клавиатуры(о значениях элементов массива) |
s:=0; p:=1; min:=A[1,1]; max:=A[1,1]; | Присваивание значений переменным |
for i:=1 to m do for j:=1 to n do | Задание цикла с параметром для строк и столбцов |
begin | Начало раздела операторов(или начало составного оператора) |
s:=s+A[i,j]; p:=p*A[i,j]; | Переменной s присваивается значение s+A[i,j]; (вычисление суммы) Переменной р присваивается значение p*A[i,j] (вычисление произведения) |
if A[i,j]<min then min:=A[i,j]; | Оператор условного перехода, в случае выполнения присваивающий переменной значение элемента массива |
if A[i,j]>max then max:=A[i,j]; | Оператор условного перехода, в случае выполнения присваивающий переменной значение элемента массива |
end; | Конец раздела операторов |
writeln('s=',s:10:3,' p=',p:10:3, ' min=',min:10:3,' max=',max:10:3); | Вывод пояснительного текста 's,p,min,max=' и числового значения переменной s, p,min,max, занимающего 10 позиций, в т.ч. 3 цифры после запятой |
End. | Конец программы |
Исправленные задачи
Program lab5a; Var A: array [1..10,1..15] of real; i, j, m, n: integer; s, p: real; Begin writeln('Введи m,n'); read(m,n); writeln('Введи массив A'); for i:=1 to m do for j:=1 to n do read(A[i,j]); s:=0; p:=1; for i:=1 to m do for j:=1 to n do if i<j then begin s:=s+A[i,j]; p:=p*A[i,j]; end; writeln('s=',s:10:3,' p=',p:10:3); End. | |
Program lab5b; Var A: array [1..10,1..15] of real; i, j, m, n: integer; min, max: real; Begin writeln('Введи m,n'); read(m,n); writeln('Введи массив A'); for i:=1 to m do for j:=1 to n do read(A[i,j]); begin min:=1E10; for i:=1 to m do for j:=1 to n do if (a[i,j]<0) and (a[i,j]<min) then min:=A[i,j]; end; begin for i:=1 to m do for j:=1 to n do max:=-1E10; if (A[i,j]>max) and (a[i,j]<0) then max:=A[i,j]; end; writeln('min=',min:10:3,' max=',max:10:3); End. |
Program lab5c; Var A: array [1..10,1..15] of real; i, j, m, n: integer; nul,s,sr,k: real; Begin writeln('Введи m,n'); read(m,n); writeln('Введи массив A'); for i:=1 to m do for j:=1 to n do read(A[i,j]); nul:=0; for i:=1 to m do for j:=1 to n do if a[i,j]=0 then nul:=nul+1; k:=0; s:=0; for i:=1 to m do for j:=1 to n do if a[i,j]>0 then begin s:=s+a[i,j]; k:=k+1; end; sr:=s/k; writeln('Среднее значение положительных=',sr:10:3,' Количество нулевых элементов=',nul:10:3); End. |
Дополнительное задание
Program dz5_1; Var b: array [1..100,1..100] of real; i, j, m, n: integer; s,k: real; Begin writeln('Введите количество строк m'); read(m); writeln('Введите количество столбцов n'); read(n); for i:=1 to m do for j:=1 to n do begin write('Введи b[',i,',',j,']='); readln(b[i,j]); end; begin s:=0; for i:=1 to m do for j:=1 to n do if b[i,j]>0 then begin s:=s+b[i,j]; end; k:=0; for i:=1 to m do for j:=1 to n do if (b[i,j]>=10) and (b[i,j]<=20) then k:=k+1; writeln ('Сумма положительных= ', s:6:3); writeln ('Кол-во эл-ов в диапазоне от 10 до 20= ', k:6:3); end; End. |
Program dz5_2; Var c: array [1..100,1..100] of real; i, j, m, n: integer; s,sr,p: real; Begin writeln('Введите количество строк m'); read(m); writeln('Введите количество столбцов n'); read(n); for i:=1 to m do for j:=1 to n do begin write('Введи C[',i,',',j,']='); readln(c[i,j]); end; begin s:=0; for i:=1 to m do for j:=1 to n do s:=s+c[i,j]; sr:=s/n; end; begin p:=1; for i:=1 to m do for j:=1 to n do if (c[i,j]>sr) then p:=p*c[i,j]; writeln ('Среднее значение=', sr); writeln ('Произведение эл-ов больше среднего значения=', p); end; End. |
Program dz5_3; Var d: array [1..100,1..100] of real; i, j, m, n: integer; s,k,sr,min: real; Begin writeln('Введите количество строк m'); read(m); writeln('Введите количество столбцов n'); read(n); for i:=1 to m do for j:=1 to n do begin write('Введи D[',i,',',j,']='); readln(d[i,j]); end; begin min:=d[1,1]; for i:=2 to n do for j:=2 to n do if d[i,j]<min then min:=d[i,j]; end; s:=0; k:=0; for i:=1 to n do for j:=1 to n do if d[i,j]<>min then begin s:=s+d[i,j]; k:=k+1; end; sr:=s/k; writeln('min=', min:6:3); writeln('Ср.значение эл-ов, не совпадающих с min=', sr:6:3); End. |
Program dz5_4; Var l: array [1..100,1..100] of real; i, j, m, n: integer; s,max: real; Begin writeln('Введите количество строк m'); read(m); writeln('Введите количество столбцов n'); read(n); for i:=1 to m do for j:=1 to n do begin write('Введи L[',i,',',j,']='); readln(l[i,j]); end; begin max:=-1E10; for i:=1 to n do for j:=1 to n do if (l[i,j]>max) and (l[i,j]<0) then max:=l[i,j]; writeln('Максимальный среди отрицательных', max:6:3); end; if m<>n then writeln ('У матрицы нет главной диагонали') else begin s:=0; for i:=1 to n do for j:=1 to n do begin if i=j then s:=s+l[i,j]; end; writeln('s=', s:6:3); end; End. |
Program dz5_5; Var p: array [1..100,1..100] of real; i, j, n: integer; Begin writeln('Введите количество строк и столбцов n'); read(n); for i:=1 to n do for j:=1 to n do begin write('Введи P[',i,',',j,']='); readln(p[i,j]); end; begin for i:=1 to n do for j:=1 to n do begin if i<j then p[i,j]:=0 else p[i,j]:=round(p[i,j]); end; writeln('Массив A'); for i:=1 to n do begin for j:=1 to n do write(P[i,j]:10:3); writeln; end; end; End. |