Двумерный массив в Паскале

обучение PascalABC

Двумерные массивы

Двумерный массив является разновидностью многомерных. Визуально двумерный массив можно представить в виде таблицы. Положение элемента задается двумя индексами:

  • i — порядковый номер строки
  • — порядковый номер столбца

В качестве примера на рисунке ниже приведен двумерный массив из целых чисел размером 5 на 5 элементов. Его называют квадратным или матрицей. В прямоугольном — количество строк и столбцов отличаются.

двумерный массив паскаль

Описание двумерного массива на Паскале отличается от одномерного только добавлением второй размерности в квадратных скобках.

Главная и побочная диагонали матрицы

Большое количество задач на обработку связано с элементами главной и побочной диагонали. Они обладают особыми свойствами.

Посмотрите на рисунок ниже. Элементы главной диагонали располагаются в ячейках оранжевого цвета. Главный признак, по которому можно их идентифицировать — значения индексов одинаковы.

главная и побочная диагональ - двумерный массив

В побочной диагонали (ячейки зеленого цвета) расположены элементы, у которых сумма индексов равна количеству строк (столбцов) плюс один.

Пример двумерного массива

Заполнение и вывод на экран

Рассмотрим  пример программы на паскале. Заполнение будем проводить случайными числами, так как ручной ввод для отладки программы на Паскале не удобен.

План действий:

  • опишем массив, укажем все необходимые переменные;
  • заполним случайными значениями;
  • сделаем вывод на экран в виде таблицы.

Текст программы

var i,j:integer;
a: array [1..5,1..5]of integer;
begin
  {заполнение случайными числами}
for i:=1 to 5 do 
  for j:=1 to 5 do
      a[i,j]:=random(10);
 {вывод на экран} 
for i:=1 to 5 do 
  begin
  for j:=1 to 5 do
      write(a[i,j]:3);
      writeln;
  end;
end.

Второй вариант немного короче. Отличается от первого тем, что заполнение и вывод проходит в одном цикле. Можно использовать в качестве шаблона для решения однотипных задач на Паскаль.

const n=5; m=5;
var 
i,j:integer;
a: array [1..n,1..m] of integer;
begin
  {заполнение случайными числами и вывод на экран}
for i:=1 to n do 
  begin
  for j:=1 to m do 
    begin
      a[i,j]:=random(10);
      write(a[i,j]:3);
    end;
      writeln;
  end;
{здесь будет код обработки по условию задачи}
end.

При составлении программ, этот код будет присутствовать практически в каждой задаче. Здесь происходит подготовка исходного массива, заданного случайными числами.

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

Обработка элементов по условию задачи будет различаться и записываться в продолжении указанного выше текста программы на Паскаль. После обработки следует код вывода результата работы программы.

Сумма элементов двумерного массива

Запишем код обработки элементов, который вычислит их сумму.

Для правильной работы программы на Паскале, необходимо в раздел описания переменных добавить переменную для вычисления суммы S.

var s:integer;

Код обработки и вывода результата. Его нужно добавить в текст программы на Паскаль, указанной выше.

s:=0;
  for i:=1 to 5 do 
  for j:=1 to 5 do 
      s:=s+a[i,j];
  write('Сумма элементов = ',s);

Задачи с решением

Задача 1. Вычислить сумму и количество положительных элементов целочисленного массива A[1..n,1..n], находящихся над главной диагональю.

Посмотреть решение

Решение: В этом примере размер матрицы задается через константу, что удобно использовать при отладке программы. Постоянные величины в Паскаль записывают перед разделом Var.

const n=4;
var i,j,s,k:integer;
a: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран} 
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; 
  {код обработки по условию задачи} 
  s:=0;k:=0;
  for i:=1 to n do 
  begin 
  for j:=i+1 to n do 
    begin 
      s:=s+a[i,j];
      k:=k+1; 
    end;  
  end; 
  writeln('Сумма элементов = ',s);
  write('Количество элементов = ',k);
end.

Задача 2. Задана квадратная матрица. Получить транспонированную матрицу (перевернутую относительно главной диагонали).

Посмотреть решение

Решение:

const n=5;
var i,j:integer;
a,b: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран}
writeln('Исходная матрица'); 
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; 
  {код обработки по условию задачи} 
  for i:=1 to n do 
  for j:=1 to n do   
      b[i,j]:=a[j,i];
  writeln('Транспонированная матрица');
  for i:=1 to n do 
  begin 
  for j:=1 to n do 
    begin  
    write(b[i,j]:3); 
    end; writeln; 
  end;  
end.
 
Рейтинг
( 39 оценок, среднее 4.49 из 5 )
Понравилась статья? Поделиться с друзьями:
Инфоучка
Добавить комментарий

× seven = forty two

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: