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. Процесс исследования изменения индексов


 

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

67160. Идеологическая полемика в культуре 19 века 43 KB
  Результатом просвещения также исторических событий начала 19 века стала обострение национального самосознания в России. Вторым аргументом он называет не рациональность России умом Россию не понять. За подобные идеи в России Чаадаев был назван сумасшедшим.
67161. Психоаналитическая теория культурогенеза 41 KB
  Была разработана в начале 20-го века австрийским психиатром и философом Зигмундом Фрейдом. Наиболее подробно он пишет о причинах генезиса культуры в работе «Тотем и табу», опираясь на идею о тождестве онто и филогенеза, Фрейд стремится увидеть истоки культуры и некоторые особенности ее современного развития во взаимоотношениях первобытного человека с природой и обществом.
67162. Николай Васильевич Гоголь (1809 – 1852) 37.5 KB
  Отец Гоголя был образованным человеком но рано умирает Гоголь к тому времени учился в 6 классе Нежинской гимназии. Гоголь погружается в изучении Украинского фольклора. В 1831 году Гоголь публикует 2 тома рассказов под общим названием Вечера на хуторе близ Диканьки.
67164. Методологическая ситуация антропологии на рубеже 20 и 21 веков 30 KB
  Сегодня в современной антропологии познавательная ситуация характеризуется проблемной ориентированностью она проявляется в том что в научных исследованиях не ставятся задача создания целостной теории общества и его культуры. Данное понятие включает в себя процесс адаптации и взаимоотношения культуры...
67165. МАТЕМАТИЧНІ МОДЕЛІ СИМЕТРИЧНИХ КРИПТОПЕРЕТВОРЕНЬ 249.4 KB
  Найбільш загальною історично наукою про таємницю є криптологія. Криптологія як наука вивчає закономірності забезпечення конфіденційності, доступності, цілісності і т.д. критичної інформації в умовах інтенсивної протидії (крипто аналізу).
67166. ДЕРЖАВА — ГОЛОВНИЙ ІНСТИТУТ ПОЛІТИЧНОЇ СИСТЕМИ 133.5 KB
  Держава – основний інструмент політичної системи суспільства, який організує, направляє та контролює спільну діяльність і відношення людей, суспільний груп, класів, асоціацій. Саме поняття держава звичайно вживається в двох значеннях.
67167. Происхождение и химическая природа нейромедиаторов 115.5 KB
  Поэтому у любого медиатора очень короткий путь до цели а его действие оказывается быстрым и точным. Но иногда действие медиатора не ограничено только соседней клеткой и в таких случаях он действует как модулятор с достаточно широким спектром деятельности. Существует специфический механизм удаления медиатора с места его действия.
67168. Омонимия. Понятие омонимии 87.5 KB
  Лексические омонимы собственно омонимы это разные по значению слова которые совпадают по звучанию и написанию во всех почти во всех формах и относятся к одной и той же части речи. По степени полноты лексические омонимы делят на полные абсолютные неполные частичные.