Задача

Задана матрица 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
225282620
311182025

Т.е. запись показаний в двумерном массиве выглядела бы так:

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;

  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 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,11,21,31,4
2,12,22,32,4
3,13,23,33,4
4,14,24,34,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.