66554

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

Лабораторная работа

Информатика, кибернетика и программирование

Цели работы: Освоение методики нисходящей разработки (проектирования) программы методом пошаговой детализации с помощью псевдокода при решении задач с помощью ПК. Освоение методов структурного программирования при разработке и создании программы на языке Турбо Паскаль для обработки двумерных массивов.

Русский

2014-08-22

130.5 KB

1 чел.

ЛАБОРАТОРНАЯ РАБОТА № 6

Освоение технологии структурного программирования

и применения стандартных методов работы с двумерными массивами

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

Цели работы:

1. Освоение методики нисходящей разработки (проектирования) программы методом пошаговой детализации с помощью псевдокода при решении задач с помощью ПК.

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

3. Овладение выразительными средствами графики языка ТП для повышения читаемости программы.

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

5. Приобретение навыков алгоритмизации и программирования на алгоритмическом языке Паскаль

6. Освоение средств исследования программы.

7. Освоение методики тестирования программы.

1. Теоретические сведения

Двумерный массив – это регулярная структура (последовательность) однотипных данных, объявляемых специальной конструкцией языка ТП:

Array [<Диапазон1, Диапазон2>] of <ТипКомпонентов>;

Например, массив:

Matrix : Array [1..4, 1..3] of Real;

описывает структуру из 12 элементов:

Matrix[1,1]

Matrix[1,2]

Matrix[1,3]

Matrix[2,1]

Matrix[2,2]

Matrix[2,3]

Matrix[3,1]

Matrix[3,2]

Matrix[3,3]

Matrix[4,1]

Matrix[4,2]

Matrix[4,3]

Под однотипностью данных, содержащихся в массиве, понимается принадлежность каждому конкретному массиву только однотипных элементов (Real, Integer и др.). То есть, в массиве не могут, к примеру, одновременно находиться числа вещественного и целого типов и т.д.

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

Этот факт позволяет использовать массивы для проведения вычислений связанных с обработкой матриц. Для этой цели используются циклы с параметром for.

2. Стандартные приемы работы с двумерными массивами

2.1. Вввод-вывод двумерных массивов

Запомните, что ввод-вывод двумерных массивов является стандартной приемом и его просто необходимо запомнить и научиться применять (рис. 6.1).

2.2. Суммирование элементов матриц

При работе с матрицами, как правило, приходится иметь дело с набором стандартных приёмов либо их композицией. Поэтому Вам необходимо знать этот набор, чтобы в будущем конструировать из него фрагменты алгоритмов программ, которые могут возникнуть из постановки конкретных задач.

Самым простым является суммирование элементов матриц: в программе – двумерных массивов. Для этого необходимо описать переменную Sum такого же типа, что и элементы массива, и в двойном цикле for, по очереди, добавлять к ней:

... {Суммирование элементов двумерного массива (матрицы)}

      

Type

 MatrixType = Array[1..m,1..n] of Real;

Var

 A: MatrixType; {Массив для хранения матрицы }

 i, {Параметр цикла для прохода по строкам}

  m, {Количество строк}

  j, {Параметр цикла для прохода по столбцам}

  n : Integer; {Количество столбцов}

 Sum  : Real;  {Переменная Sum для суммы элементов}

      

 Sum := 0; {Подготовка переменной Sum для суммирования!!!}

 for i: =1 to m do {Поочередно фиксируем номер строки матрицы}

   for j: =1 to n do {Проходим по столбцам матрицы}

     Sum := Sum+ A[i,j]; {Суммируем элементы в Sum}

{После выполнения циклов в Sum находится сумма элементов массива A}

      

2.3. Использование счетчика

Ещё одной распространённой задачей является использование счетчика для подсчёта количества элементов матрицы с определёнными характеристиками, к примеру – положительных или отрицательных. Это требует введения условного оператора:

  

{Определим количество положительных элементов Count (типа Integer)}

 Count := 0; {Подготовка переменной Count для суммирования!!!}

 for i: =1 to m do {Поочередно фиксируем номер строки матрицы}

   for j: =1 to n do {Проходим по столбцам матрицы}

     if A[i,j] > 0 then {Определение положительного элемента}

       Count:=Count+1; {Увеличение счетчика положительных эл-тов}

{После выполнения циклов в Count находится кол-во положит. эл-тов массива A}

  

Кроме этого, теперь Вы можете использовать этот алгоритм для определения:

  1.  числа отрицательных или нулевых элементов;
  2.  числа элементов, равных заданному числу;
  3.  числа элементов массива, содержащих числа превышающие или не превышающие заранее заданное число;
  4.  числа элементов, содержащих значения, находящиеся в заданном интервале и т.д.

2.4. Определения максимального или минимального элемента

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

{Определим максимальный элемент массива А}

      

 Max := A[1,1]; {Считаем, что первый элемент массива – максимальный }

 for i: =1 to m do {Поочередно фиксируем номер строки матрицы}

   for j: =1 to n do {Проходим по столбцам матрицы}

      if A[i,j] > Max then {Сравниваем каждый последующий элемент}

                        {массива с текущим максимальным значением }

       Max:= A[i,j];{Заменяем старое значение Max новым}

{После выполнения циклов в Max находится максимальное значение из массива A}

      

2.5. Работа с чётными/нечётными элементами

Ещё одним достаточно полезным алгоритмом, который может Вам понадобиться при работе с массивами, является поиск чётных/нечётных элементов целых массивов и их суммирование. Для этого в Турбо Паскале существует специальная встроенная логическая функция Odd(x), которая при целом аргументе x возвращает значение True при x нечётном и False в случае чётного числа:

... {Нахождение суммы нечетных элементов двумерного массива (матрицы)}

      

Type

 MatrixType = Array[1..m,1..n] of Integer;

Var

 B: MatrixType; {Целый массив для хранения матрицы}

 Sum : Integer; {Целая переменная для хранения суммы}

  

{Находим сумму нечётных элементов с использованием функции Odd(i)}

 Sum := 0; {Подготовка переменной Sum для суммирования!!!}

 for i: =1 to m do {Поочередно фиксируем номер строки матрицы}

   for j: =1 to n do {Проходим по столбцам матрицы}

     if Odd(B[i,j]) then {для чётных – условиеnot Odd(i)}

       Sum := Sum + B[i,j]; {Суммируем нечетные эл-ты}

{После выполнения циклов в Sum находится сумма нечётных элементов массива B}

  

3. Этапы создания программы

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

3.1. Условие задачи:

Дан массив размера 3 x 4 с элементами целого типа. Написать программу для вычисления количества элементов в массиве, которые являются натуральными трехзначными числами.

3.2. Решение задачи в ее предметной области.

В данном случае предметной областью является алгебра. По определению [1], числа 1, 2, 3, 4, 5, … , использующиеся для счета предметов или для указания порядкового номера того или иного предмета среди однородных пердметов, называются натуральными. Любое натуральное число в десятичной системе счисления записывается с помощью цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Например, запись 2457 означает, что 2 – цифра тысяч, 4 – цифра сотен, 5 – цифра десятков и 7 – цифра единиц, т.е. 2457 = 21000 + 4100 + 510 + 7.

Исходя из этого, можем записать натуральные трехзначные числа: 100, 101, … , 999. Стало быть, в программе мы должны перебрать все элементы массива и проверить их на принадлежность этому диапазону.

3.3. Проектируем структуры данных (их имена и типы).

Понятно, что нам понадобится двумерный целый массив размером 3 х 4, назовем его В. Кроме того, нам понадобятся: константы m = 3 – число строк и n = 4 – число столбцов, для описания типа массива, переменные цикла i и j, а также количество элементов в массиве, которые являются натуральными трехзначными числамиKolNat3 все типа Integer.

Значит в разделе описаний программы, назовем ее Natural3, с учетом требований о необходимости обеспечения легкочитаемости программы и размещения необходимых комментариев, поместим следующие описания:

Const

 m = 4; {Количество строк m массива}

 n = 3; {Количество столбцов n массива }

Type

 MatrixType = Array[1..m,1..n] of Integer; {Тип массива m х n}

Var

 B : MatrixType;    {Массив B целого типа размера m х n}

 i,                 {Параметр цикла для прохода по строкам}

 j,                 { Параметр цикла для прохода по столбцам}

 KolNat3 : Integer; { Количество трехзначных натуральных чисел в массиве}

3.4. Проводим нисходящую разработку (проектирование) программы методом пошаговой детализации с помощью псевдокода.

Воспользуемся результатами (Лаб. 1. рис. 1.1) для получения первой версии алгоритма:

Ввести данные Natural3

Выполнить вычисления Natural3

Вывести результаты Natural3

С учетом требований к «дружественности» интерфейса, детализация псевдокода Ввести данные Natural3 дает следующее:

Вывести на экран приглашение для ввода массива B

Ввести массив B

Дальнейшей детализации не требуется – сюда подставляем фрагмент кода стандартного приема 2.1.

Детализация псевдокода Выполнить вычисления Natural3 дает следующее:

Определить количество элементов в массиве B, которые являются натуральными трехзначными числами

Это стандартный прием 2.3. – использование счетчика. В этом месте программы Вы должны подставить известный Вам фрагмент кода с некоторой модификацией.

Детализация псевдокода Вывести результаты Natural3 с учетом требований к «дружественности» интерфейса дает:

Вывести название «KolNat3» и его содержимое

3.5. Выполняем структурное программирование

Используя стандартные приемы 2.1 и 2.3. получаем:

BEGIN

 ClrScr; { Очищаем экран }

 WriteLn(Введите 12 элементов матрицы В:’);

 for i:=1 to m do {Поочередно фиксируем номер строки матрицы}

   for j:=1 to n do {Проходим по столбцам матрицы}

     begin

       Write (‘B[‘,i,’,’j,’] = ‘);{Выводим приглашение}

       Read (B[i,j]); {Читаем элемент матрицы }

   end;

 WriteLn; {Устанавливаем курсор на новую строку}

{Определяем кол-во эл-тов в массиве B, кот. являются нат. трехзначными числами}

 KolNat3 := 0; {Подготовка переменной KolNat3 для суммирования!!!}

 for i:=1 to m do {Поочередно фиксируем номер строки матрицы}

   for j:=1 to n do {Проходим по столбцам матрицы}

   if (100<=B[i,j]) AND (B[i,j]<=999) then {Попадание в диапазон}

      KolNat3 := KolNat3+1; {Увеличение счетчика}

 WriteLn(‘KolNat3 = , KolNat3); { Выводим результат }

 ReadLn   {Останавливаем экран результатов}

End.

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

3.6. Отладка программы. Отладка программы – это процесс поиска и устранения синтаксических ошибок в готовой программе. Обычно отладка предшествует стадии тестирования. В этом пункте необходимо привести скриншот результата работы готовой программы (см. п. 5 Лаб. раб № 1).

3.7. Тестирование программы. Цель тестирования всякой программы состоит в том, чтобы убедиться, что она решает действительно ту задачу, для которой предназначена, и выдаёт правильный ответ при любых значениях из области решений. Тестовые данные должны обеспечивать проверку всех возможных условий возникновения ошибок. Подготовьте тестовый набор данных для вектора Х.

Исследуйте Вашу программу при необходимых тестовых значениях Одновременно с этим исследуйте изменение значений индексов массива при вводе и обработке (рис. 6.2).

3.8. Перед защитой лабораторной работы Вам необходимо подготовить отчет (Приложение 2). Перед распечаткой обязательно продемонстрируйте его преподавателю в электронном виде, чтобы избежать ошибок в оформлении!

3.9. Для защиты лабораторной работы:

3.9.1. Представить отчет по лабораторной работе в печатном виде.

3.9.2. Продемонстрировать умение исследовать свою программу.

3.9.3. Решить любую другую задачу из списка заданий.

3.9.4. Ответить на вопросы:

3.9.4.1. Что такое двумерный массив?

3.9.4.2. Как обеспечивается доступ к элементам двумерного массива?

3.9.4.3. Какие основные стандартные методы работы с двумерными массивами Вы знаете?


ЗАДАНИЯ К

ЛАБОРАТОРНОЙ РАБОТЕ № 6

  1.  Дана матрица A(7,3). Определить количество строк, которые содержат нулевые елементы, их номера.
  2.  Дана матрица X(3,7). Определить для каждого четного столбца: количество ненулевых элементов и их произведение.
  3.  Дана матрица Y(5,4). Определить для каждой нечетной строки количество нулевых элементов.
  4.  Дан массив размера 3 x 3 с элементами символьного типа. Написать программу для вычисления количества элементов массива отличных от ‘0’, а все ‘0’ заменить на ‘Z’.
  5.  Дана матрица Z(7,6). Определить вектор P(7), состоящий из минимальных элементов строк матрицы.
  6.  Дан массив размера 4 x 5 с элементами символьного типа. Написать программу для перевода символов нижнего регистра в верхний.
  7.  Дана матрица C(6,5). Определить суммы каждого из столбцов S(5) и количество отрицательных элементов матрицы.
  8.  Дан массив размера 3 x 2 с элементами целого типа. Написать программу для вычисления количества элементов в массиве, являющихся натуральными двузначными числами и на их место поместить нули..
  9.  Дан массив размера 3 x 5 с элементами целого типа. Написать программу для вычисления количества элементов массива, которые при делении на 5 дают в остатке 1, а также их местоположение в массиве.
  10.  Дана матрица C(5,6). Определить суммы каждой из строк S(5) и количество нулевых элементов матрицы.
  11.  Дана матрица Y(6,6). Определить значения минимального элемента каждого столбца и номер строки, в которой он расположен.
  12.  Дана матрица Z(5,6). Определить значения максимального елемента каждой строки и номер столбца, в котором он расположен.
  13.  Дана матрица A(6,5). Определить сумму элементов каждой строки и сумму элементов каждого столбца.
  14.  Дана матрица B(6,8). Определить сумму отрицательных элементов матрицы, расположенных на пересечении нечетных строк и четных столбцов.
  15.  Дана матрица C(7,7). Определить произведение положительных элементов матрицы, расположенных на пересечении четных строк и нечетных столбцов.
  16.  Дан массив размера 6 x 2 с элементами вещественного типа. Написать программу для вычисления max2-min2 , где max-максимальный по модулю элемент массива, а min -минимальный по модулю элемент массива.
  17.  Дана матрица размера 4 x 4. Написать программу для вычисления I-й нормы матрицы: .
  18.  Дана матрица размера 5 x 5. Написать программу для вычисления II нормы матрицы: .
  19.  Дана матрица размера 4 x 4. Написать программу для вычисления III нормы матрицы: .
  20.  Дан массив размера 7 x 2 с элементами символьного типа. Написать программу для вычисления i j, где i -номер строки, в которой находится максимальный элемент массива, j - номер столбца, в котором находится минимальный элемент массива.
  21.  Дан массив размера 7 x 2 с элементами вещественного типа. Написать программу для вычисления суммы всех отрицательных элементов массива, кратным 2.
  22.  Дан массив размера 3 x 3 с элементами символьного типа. Написать программу для вычисления количества элементов массива, которые не являются цифрами.
  23.  Дан массив размера 3 x 5 с элементами целого типа. Написать программу для вычисления количества элементов массива, которые при делении на 6 дают в остатке 1 и являются двузначными числами.
  24.  Найти наибольший элемент матрицы Х(4х4) и записать 1 в ту строку и столбец, в которых он находится.
  25.  Из матрицы Х(5х5) построить матрицу Y,  поменяв местами строки и столбцы.
  26.  Найти наибольший элемент матрицы А(2х3) и номер строки и столбца, в котором он находится.
  27.  Найти наименьший элемент матрицы Y(15x5) и записать в строку, где находится этот элемент 10.
  28.  Вычислить сумму элементов каждой строки матрицы Х(4х3), определить наименьшее значение этих сумм и номер соответствующей строки.
  29.  Определить количество положительных и отрицательных элементов матрицы А(6х5).
  30.  Найти наибольшие элементы каждой строки матрицы Х(10х20) и записать их в массив Y.
  31.  Вычислить сумму элементов матрицы А(4х4), расположенных над главной диагональю.
  32.  Перемножить матрицы А(NxM) и B(MxN).
  33.  Найти наибольший элемент главной диагонали матрицы А(4х4) и вывести на экран все строки, в которой он находится.
  34.  Задан числовой массив А[1..m, 1..n]. Некоторый элемент этого массива назовем седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце. Напечатать номера строки и столбца какой - нибудь седловой точки, или напечатать 0, если таковой нет.
  35.  В массиве M[1..m, 1..n] все числа различны. В каждой строке находится минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатать номер строки массива М, в которой расположено выбранное число.
  36.  Найти сумму элементов A[i, j] массива A[1..m, 1..n], имеющих заданную разность индексов i-j=k. Число k может быть и отрицательным.

Литература

1. Гусев В.А., Мордкович А.Г. Математика: Справ. материалы: Кн. для учащихся. – 2-е изд. – М,: Просвещение, 1990. – 416 с.


a11   a
12   a13

a21   a22   a23

a31   a32   a33

a41   a42   a43

Program ArrayInputOutput;

Uses Crt;

Const

 m = 4; {Количество строк m матрицы}

 n = 3; {Количество столбцов n матрицы}

Type

 MatrixType = Array[1..m,1..n] of Real; {Тип матрицы m х n}

Var

 Matrix : MatrixType; {Массив Matrix вещественного типа размера m х n}

 i, j : Integer; {Параметры циклов для обработки двумерного массива}

Begin

 ClrScr;

{== Ввод матрицы Matrix ==}

 WriteLn(‘Введите  3 элемента матрицы Matrix:’);

 for i:= 1 to m do {Поочередно фиксируем номер строки матрицы Matrix}

   for j:= 1 to n do {Проходим по столбцам матрицы Matrix}

     begin

       Write (‘Matrix[‘,i,’,’j,’] = ‘);{Выводим приглашение}

       Read (Matrix[i,j]); {Читаем элемент матрицы }

     end;

 WriteLn; {Установка курсора после чтения последнего элемента массива}

Рис. 6.1. Ввод и вывод двумерных массивов на языке ТП

 WriteLn(‘Матрица Matrix размера 4 х 3:’);

 for i := 1 to n do {Поочередно фиксируем номер строки матрицы Matrix}

   for j:= 1 to m do { Проходим по столбцам матрицы Matrix}

            { Выводим матрицу Matrix, заполняя последовательно строки монитора}

     Write(‘  Matrix [‘,i,’,’,j,’] = ‘,Matrix [i,j]:9);

 WriteLn; {Устанавливаем курсор на новую строку}

 ReadLn   {Останавливаем экран результатов}

End.

ис. 6.1. Ввод и вывод двумерных массивов на языке ТП (продолжение)

Рис. 6.2. Процесс исследования изменения индексов


 

А также другие работы, которые могут Вас заинтересовать

26649. Геосистема 23.5 KB
  Геосистема безразмерная единица географической структуры геосистема наивысшего ранга географическая оболочка и в этом смысле близка к термину экосистемы но последняя обязательно с акцентом на биоту. Термин геосистема очень близок понятию природного территориального комплекса. Экосистема широкое понятие и в этом смысле близко к понятиям комплекс природный1 геосистема но более биологично по существу поскольку центральной концепцией экосистемы является представление о цепях питания и трофических уровнях.
26650. Функциональное зонирование территории 52 KB
  На решение планов городов оказывают влияние следующие факторы: место города в системе расселения; природноклиматическая характеристика выбранной территории; профиль и величина градообразующей группы предприятий; условия функционального зонирования городской территории; организация транспортных связей между жилыми районами и местами приложения труда; учёт перспективного развития города; требования охраны окружающей среды; условия инженерного оборудования территории; требования экономики строительства; архитектурнохудожественные требования....
26651. Фи́зико-географи́ческое райони́рование 44 KB
  Районирование бывает зональным пояса зоны и подзоны и азональным физикогеографические страны области провинции районы урочища фации отраслевым по рельефу климату почвам и др. Физикогеографическое районирование система территориальных подразделений земной поверхности регионов обладающих внутренним единством и своеобразными чертами природы; процесс их выявления одна из форм синтеза в физической географии. включает изучение соподчинённых природных территориальных комплексов физикогеографических стран зон районов и др....
26652. Целостность географической оболочки 22 KB
  В результате происходят сложные и непрерывные процессы обмена веществ и энергии приводящие к изменению и развитию составных частей и в целом всей географической оболочки. Эта закономерность прослеживается в пределах как всей географической оболочки так и в небольших комплексах и в отдельных компонентах природы. Целостность системы носит настолько всеобщий характер что если в географической оболочке изменится какойлибо один компонент природы то начнут меняться все остальные.
26653. Экологические проблемы современности 321.5 KB
  С момента изготовленияпервого примитивного орудия человек уже не довольствует предметамисозданными природой а начинает изготовлять вводить в свой обиходпредметы вещества и т. В результате потоки вещества и энергии вызываемые деятельностью человека стали составлять заметную долю от общей величины биогенного круговорота.Отходы побочные продукты производства и быта загрязняют биосферу вызывают деформации экологических систем нарушают глобальный круговорот веществ и создают угрозу для здоровья человека.тонн: 1200 взвешенных веществ 190...
26654. ЭКОЛОГИЧЕСКИЙ ПОТЕНЦИAЛ И ЕГО РAЗРУШЕНИЕ 121.5 KB
  Эксплуaтaция экологического потенциaлa природных систем трaдиционно не входит в кaтегорию природопользовaния, однaко чистый воздух, водa, продукты питaния - это тот же сaмый природный ресурс, столь же дефицитный нa одних территориях, богaтый нa других и точно в той же степени, кaк и прочие ресурсы, исчерпaемый
26655. Природа и общество: этапы взаимодействия 65.5 KB
  многие принципиально новые явления начала и продолжает формироваться наука все более получающая права гражданства под именем экологии человека происходит экологизация человеческого знания экологизируется человеческое мышление и создаются предпосылки для формирования глобального экологического мировоззрения. Каков был переход от общеэкологических исследований к разработке проблематики экологии человека и как эта последняя формировалась постепенно в недрах общей экологии Наверное не столько разрушения нанесенные человечеством природе...
26656. ЭКОЛОГИЧЕСКИЙ ПОТЕНЦИAЛ И ЕГО РAЗРУШЕНИЕ 113.5 KB
  Чем большим потенциaлом устойчивости облaдaют экосистемы и тем больше чистого водухa воды пищи достaнется в конечном счете человеку. ПАДЕНИЯ УРОВНЯ АРАЛА Непосредственная физическая причина снижения уровня Аральского моря это нарушение водного баланса водоема: превышение расхода воды над приходом. Важную роль сыграли дополнительные потери воды на испарение с поверхности многочисленных водохранилищ построенных в бассейнах Амударьи и Сырдарьи. На сокращении стока Амударьи и Сырдарьи сказались также нерациональное и неэкономное использование...
26657. Актуальные экологические проблемы современности 84 KB
  Тщательное изучение последствий изменения климата приводит к выводу что развивающиеся страны окажутся наиболее уязвимы. Исследование опубликованное Кембриджским Университетом под названием Изменения климата: воздействие на разные страны и их сопричастность представлено учеными из 30 стран в т. Хотя влияние изменения климата не везде одинаково приведенные в исследовании примеры демонстрируют насколько драматичным оно может оказаться для ряда стран.