Лабораторная работа №5. Массивы (двумерные)

Тема: Массивы Object Pascal.

Цель: Сформировать практические навыки описания и применения двумерных массивов Object Pascal для обработки данных.

Задание

В соответствии с приведенными вариантами заданий и приведённой ниже спецификацией реализуйте консольное приложение под Windows. Разработайте тестовые задания, и протестируйте программу.

Рекомендации к выполнению

Для обработки компонентов двумерного массива используйте вложенные циклы. Вложенные циклы организуйте с помощью цикла с параметром (оператор цикла for). Разработанные приложения сохраняйте в отдельной папке.

Порядок выполнения

Внимательно прочитайте условие задачи. Разработайте блок-схему алгоритма решения задачи. На основе блок-схемы с помощью редактора напишите и отредактируйте программу. С помощью компилятора устраните все синтаксические ошибки. Разработайте тестовый набор данных и протестируйте программу с целью устранения логических ошибок.

Варианты заданий

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

const

  r = 3;// число строк

  c = 3; //число столбцов

type

  rows = 0..r -1;//тип значений для индекса строк

  colomns = 0..c -1; ;//тип значений для индекса столбцов

matrix = array[rows, colomns] of integer;//тип данных - двумерный массив

Разработайте приложение, которое отыскивает произведение положительных значений компонентов двумерного массива A: matrix и отображает на экране полученный результат. Разработайте приложение, которое отыскивает максимальный по значению элемент двумерного массива A: matrix и значения его индексов и отображает на экране полученный результат. Разработайте приложение, которое отыскивает произведение элементов двумерного массива A: matrix, лежащих на главной диагонали и отображает на экране полученный результат. Разработайте приложение, которое отыскивает произведение элементов двумерного массива A: matrix лежащих, на побочной диагонали и отображает на экране полученный результат. Разработайте приложение, которое в массиве A: matrix в столбце с заданным индексом отыскивает произведение элементов и отображает на экране полученный результат. Разработайте приложение, которое в массиве A: matrix в строке с заданным индексом отыскивает сумму элементов и отображает на экране полученный результат. Разработайте приложение, которое в массиве A: matrix обменивает значениями элементы строк с заданными индексами и отображает на экране полученный массив. Разработайте приложение, которое в массиве A: matrix обменивает значениями элементы столбцов с заданными индексами и отображает на экране полученный массив.

Пример 1.

Написать и протестировать программу, которая в двумерном массиве A:matrix находит заданное значение и возвращает индексы, под которыми оно хранится в массиве. Если искомое значение в массиве отсутствует возвращаются значения индексов равные -1.

НЕ нашли? Не то? Что вы ищете?

Для решения задачи необходимо:

Переменным cind, rind – предназначенным для хранения искомых значений индексов следует присвоить начальное значение -1. Вспомогательной переменной f, предназначенной хранить флаг поиска присвоить значение false. Поиск продолжать пока флаг поиска равен false.

Поочерёдно, начиная с первого, копировать значения компонента массива, и сравнивать его с искомым. Если значение очередного компонента равно искомому и f не равно true занести в переменные cind, rind значения его индексов, переменной f присвоить значение true.

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

Блок-схема решения представлена ниже на рисунке.

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

//------------------------------------------------------------------------------------------

program Find;

// Поиск заданного значения в массиве

{$APPTYPE CONSOLE}

uses

  SysUtils;

Const

  r = 3; //строк в массиве

  c = 3; //столбцов в массиве

Type

       rind = 0.. r;// тип индекса строк

       cind = 0.. c;// тип индекса столбцов

       matrix = array [rind, cind] of integer;// тип массива

var

  p: integer;//искомое значение

  ri, ci: integer;//искомые индексы строки и столбца

       A: matrix;// массив

  I, J: integer;//индекс строки и столбца

  f: boolean;//флаг поиска

begin

  for I:= 0 to r - 1 do

  for J:= 0 to c - 1 do

  begin//ввод значений компоннтов массива

  write('A[',I,',',J,'] = ');

  readln(A[I, J]);

  end;

  write('p = ');

  readln(p);//ввод искомого значения

  f:= true;

  for I:= 0 to r - 1 do

  for J:= 0 to c - 1 do//поиск искомого значения

  if (A[I, J]= p) and f then begin

  ri:= I;

  ci:= J;

  f:= false;

  end;

  writeln('row = ',ri,' col = ',ci);

  readln;

end.

//------------------------------------------------------------------------------------------

Содержание отчета

Задание. Текст программы на Object Pascal 2.0. Тестовые наборы данных для тестирования приложения.

Контрольные вопросы

Назовите синтаксические правила описания регулярного типа (массива)? Какого типа может быть тип компонентов массива? Какого типа может быть тип индексов массива? Как подсчитать количество компонентов массива по его описанию? Как сослаться на компонент массива в тексте программы? Какая операция определена на всём массиве? Какие операции определены на компонентах массива? Что такое размер массива и размерность массива? Какими должны быть индексные выражения при ссылке на компонент массива? Каким образом распределяется память под массив? Для чего предназначена стандартная функция High? Для чего предназначена стандартная функция Low?