Задача
Задана матрица A (n, n) действительных чисел. "Перевернуть" в ней главную и побочную диагонали (переписать цифры в обратном порядке).
Решение
Чтобы у матрицы были диагонали, она должна быть квадратной, т.е. n = m.
Элементы главной диагонали имеют индекс [i,i]. Побочной [i,n-i+1].
Для того, чтобы "перевернуть" диагонали, не надо перебирать всю матрицу. Достаточно перебрать половину
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Двумерный массив в Pascal
Матрица или двумерный массив – это прямоугольная таблица чисел (или других элементов одного типа). Каждый элемент матрицы имеет два индекса (номер строки и номер столбца).
Исходные данные для решения многих задач можно представить в табличной форме:
Таблица результатов производственной деятельности нескольких филиалов фирмы может быть представлена так:
zavod1: array [1..4] of integer; zavod2: array [1..4] of integer; zavod3: array [1..4] of integer;
Или в виде двумерного массива так:
var A: array[1..3,1..4] of integer;
Описание, ввод и вывод элементов двумерного массива
Варианты описания двумерного массива
- Описание массива в разделе переменных:
const N = 3; M = 4; var A: array[1..N,1..M] of integer;
const M=10; N=5; type matrix=array [1..M, 1..N] of integer; var A: matrix;
for i:=1 to N do for j:=1 to M do begin write(‘A[‘,i,’,’,j,’]=’); read ( A[i,j] ); end;
Следующий фрагмент программы выводит на экран значения элементов массива по строкам:
for i:=1 to N do begin for j:=1 to M do write ( A[i,j]:5 ); writeln; end;
Рассмотрим следующую задачу: Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:
Номер станции | 1-й день | 2-й день | 3-й день | 4-й день |
---|---|---|---|---|
1 | -8 | -14 | -19 | -18 |
2 | 25 | 28 | 26 | 20 |
3 | 11 | 18 | 20 | 25 |
Т.е. запись показаний в двумерном массиве выглядела бы так:
t[1,1]:=-8; | t[1,2]:=-14; | t[1,3]:=-19; | t[1,4]:=-18; |
t[2,1]:=25; | t[2,2]:=28; | t[2,3]:=26; | t[2,4]:=20; |
t[3,1]:=11; | t[3,2]:=18; | t[3,3]:=20; | t[3,4]:=25; |
Объявление двумерного массива:
var t: array [1..3, 1..4] of integer;
- Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
- Распечатать показания термометров всех метеостанций за 2-й день.
- Определить среднюю температуру на 3-й метеостанции.
- Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.
Самостоятельно подумайте, как находится сумма элементов массива pascal.
const m = 5; n = 4; var a: array[1..m,1..n] of byte; s: array[1..n] of byte; i,j, sum: byte; begin randomize; for i := 1 to m do begin for j := 1 to n do begin . <инициализация элементов массива случайными числами>. <вывод элементов массива>end; writeln end; writeln (‘————‘); <для оформления>. . <поиск суммы столбцов>. <поиск общей суммы>. . <вывод массива>write (‘ | sum = ‘, sum); readln end.
Главная и побочная диагональ при работе с двумерными матрицами в Pascal
Главная диагональ квадратной матрицы n x n (т.е. той, у которой количество строк равно количеству столбцов) проходит с верхнего левого угла матрицы (элемент 1,1) до правого нижнего угла матрицы (элемент n,n).
Побочная диагональ квадратной матрицы n x n проходит с нижнего левого угла матрицы (элемент n,1) до правого верхнего угла матрицы (элемент 1,n).
Формулу поиска элементов диагоналей проще всего искать, нарисовав элементы матрицы:
1,1 | 1,2 | 1,3 | 1,4 |
2,1 | 2,2 | 2,3 | 2,4 |
3,1 | 3,2 | 3,3 | 3,4 |
4,1 | 4,2 | 4,3 | 4,4 |
Учитывая, что первая цифра в программе будет соответствовать счетчику i, а вторая — счетчику j, то из таблицы можно вывести формулы:
Главная диагональ матрицы в Паскаль имеет формулу:
i=j
Побочная диагональ матрицы в Паскаль имеет формулу:
n=i+j-1 (или j=n-i+1 )
где n — размерность квадратной матрицы
Решение:
var i,j,n:integer; a: array[1..100,1..100]of integer; begin randomize; writeln (‘введите размерность матрицы:’); readln(n); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end; writeln; for i:=1 to n do begin for j:=1 to n do begin if (i=j) or (n=i+j-1) then a[i,j]:=0; write(a[i,j]:3) end; writeln; end; end.
var A:array[1..5,1..5] of integer; i,j:integer; sum,sum1,sum2:integer; begin randomize; for i:=1 to 5 do for j:=1 to 5 do A[i,j]:=random(10); write (‘Исходный массив A: ‘); for i:=1 to 5 do begin writeln; for j:=1 to 5 do write (A[i,j]:2,’ ‘); end; sum1:=0; for i:=1 to 5 do for j:=1 to 5 do if (i-j=1) then sum1:=sum1+A[i,j]; sum2:=0; for i:=1 to 5 do for j:=1 to 5 do if (j-i=1) then sum2:=sum2+A[i,j]; sum:=sum1+sum2; writeln; writeln(‘Сумма = ‘,sum); end.
Рассмотрим еще один пример работы с двумерным массивом.
var index1,index2,i,j,N,M:integer; s,min,f:real; a:array[1..300,1..300] of real; begin N:=10; M:=5; for i:=1 to N do begin for j:=1 to M do begin a[i,j]:=random(20); s:=s+a[i,j]; write(a[i,j]:3); end; writeln; end; f:=s/(N*M); writeln(‘srednee znachenie ‘,f); min:=abs(a[1,1]-f); for i:=1 to N do begin for j:=1 to M do begin if abs(a[i,j]-f) Поделитесь уроком с коллегами и друзьями:
Двумерные массивы (матрицы)
Двумерным массивом называется совокупность данных , каждое значение которых зависит от его местоположения в строке и в столбце.
Каждый элемент матрицы описывается, как
где:
A(i,j) — значение элемента матрицы
А — имя матрицы
i — номер строки
j — номер столбца
Если в матрице количество строк равно количеству столбцов, то такая матрица называется квадратной, в противном случае прямоугольной.
Прямоугольная матрица
A(l,l) | A(l,2) | A(l,3) | A(l,4) |
A(2,l) | A(2,2) | A(2,3) | A(2,4) |
A(3,l) | A(3,2) | A(3,3) | A(3,4) |
Квадратная матрица
A(l,l) | A(l,2) | A(l,3) |
A(2,l) | A(2,2) | A(2,3) |
A(3,l) | A(3,2) | A(3,3) |
Соотношение индексов в квадратной матрице
i=j | элементы матрицы находятся на главной диагонали |
---|---|
i | элементы матрицы находятся над главной диагональю |
i>j | элементы матрицы находятся под главной диагональю |
i+j=n+1 | элементы матрицы находятся на побочной диагонали |
i+j | элементы матрицы находятся над побочной диагональю |
i+j>n+1 | элементы матрицы находятся под побочной диагональю |
Описание элементов двумерного массива (матрицы)
1 способ:
где:
— идентификатор массива
array — массив
— количество строк в матрице — количество столбцов в матрице
of — для
— описание типа переменных в массиве (real, integer и т. д.)
Пример:
Массив А состоит из 4 столбцов и 3 строк, значение каждого элемента матрицы представляет собой вещественное число.
а : array [1..3,1..4] of real;
Массив В и С состоят из 3 строк и 3 столбцов, значение каждого элемента матрицы представляет собой целое число.
b, с : array [1..3,1..3] of integer;
2 способ:
Пример:
Массив А состоит из 4 столбцов и 3 строк, значение каждого элемента матрицы представляет собой вещественное число.
а : array [1..3] of array [1..4] of real;
Массив В и С состоят из 3 строк и 3 столбцов, значение каждого элемента матрицы представляет собой целое число.
b,c : array [1..3] of array [1..3] of integer;
Ввод — вывод значений элементов матрицы
Заполнение элементов матрицы с клавиатуры
program zadacha (input, output); (ввод с клавиатуры, вывод в столбик>
var
a: array[1..10,1..10] of real;
j, i: integer;
begin
for i:=1 to 10 do
for j:=1 to 10 do
begin
readln (a[i, j]);
writeln ( ‘a(‘, i, ‘,’, j, ‘)=’, a[i,j])
end
end.
Заполнение элементов матрицы по формуле
program zadacha (input, output) ; <ввод по формуле, вывод таблицей>
var
a: array[1..10,1..10] of real;
i,j: integer;
begin
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
a[i,j]: = (i + 0.5)/(j + sin(j));
write ( a[i,j], ‘ ‘)
end;
writeln
end
end.
Заполнение элементов матрицы случайными числами
program zadacha (input,output); <ввод случайных чисел, вывод в строчку>
var
a: array[1..10,1..10] of integer;
i,j: integer;
begin
randomize;
for i:=1 to 10 do
for j:=1 to 10 do
begin
a[i,j]:=random(30);
write ( ‘а(‘, i, ‘,’, j, ‘)=’, a[i,j])
end
end.
Типовые задачи на матрицы
Нахождение экстремумов
Дана прямоугольная матрица A(10,15), заполненная случайными числами в диапазоне от 0 до 29 включительно. Выдать на печать максимальное значение элементов данной матрицы.
program zadacha (input, output); <нахождение наибольшего значения>
var
a: array[1..10,1..15] of integer;
i,j,max: integer;
begin
randomize;
for i:=1 to 10 do
for j:=1 to 15 do a[i,j]:=random(30);
max:=a [1,1];
for i:=1 to 10 do
for j:=1 to 15 do
if a[i,j]>max then max:=a[i,j]; writeln ( ‘максимальное значение=’,тах)
end.
Суммирование значений элементов матрицы
Дана матрица A(l,15), заполненная датчиком случайных чисел. Найти сумму значений всех элементов данной матрицы.
program zadacha (input, output) ; <сумма значений элементов матрицы>
var
a: array[1..10,1..l5] of integer;
i,j,s: integer;
begin
s:=0;
randomize;
for i:=1 to 10 do
for j:=1 to 15 do
begin
a [i,j]:=random(30);
s:=s + a[i,j]
end;
writeln ( ‘сумма значений=’,s)
end.
Нахождения количества значений элементов матрицы
Дана матрица A(10,20), заполненная датчиком случайных чисел в диапазоне от -10 до 19 включительно. Подсчитать количество положительных значений элементов каждой строки матрицы.
program zadacha (input, output) ; <кол-во знач. элементов в каждой строке матрицы>
var
a: array[1..10,1..20] of integer;
i,j,k: integer;
begin
for i:=1 to 10 do
begin
k:=0;
for j:=1 to 20 do
begin
a[i,j]:=random (30)-10;
if a[i,j]>0 then k:=k+1
end;
writeln ( ‘кол-во полож. знач. в ‘, i, ‘ строке=’,k)
end;
end.
Формирование нового одномерного массива из значений элементов матрицы
Дана матрица, состоящая из 10 строк и 5 столбцов и заполненная случайными числами в диапазоне от 0 до 29. Сформировать одномерный массив SUM из сумм значений элементов каждого столбца матрицы.
program zadacha (input, output); <формирование одномерного массива из сумм по столбцам>
var
a: array[1..10,1..5] of integer;
sum: array[1..5] of integer;
i,j,s: integer;
begin
for i:=1 to 10 do
for j:=1 to 5 do
begin
a [i,j] :=random (30) ;
writeln (‘эл-нт мас-ва=’,a[i,j])
end;
for j:=1 to 5 do
begin
s:=0;
for i:=1 to 10 do s:=s + a[i,j];
sum[j]:=s
end;
for i:=1 to 5 do writeln ( ‘sum(‘, i,’)=’,sum(i))
end.