Организация сложных циклов

Пример

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

Пример

Обращение к элементам двумерного массива

Пример

Пример

Пример

var

bas: array [0..5,1..10] ofreal;

В разделе описания переменных объявлен двумерный массив вещественного типа bas, состоящий из 6 строк и 10 столбцов; длина массива 6*10=60 элементов.

type

c = array [1..3,1..10] ofinteger;

var

maxim: c;

Здесь массив maxim описан в двух разделах - типов и переменных, и состоит из 3 строк и 10 столбцов; базовый тип элементов - целый, длина массива - 30 элементов. Если в программе необходимо использовать отдельные строки матрицы, то её удобно описать как массив строк, каждая из которых является одномерным массивом.

type

str = array [1..5] ofreal;

var

matr: array [1..4] of str;

Описан двумерный массив matr состоящий из 4-х строк, каждая из которых представляет собой одномерный массив (вектор) str содержащий по 5 элементов.

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

x[2,1] - обращение к элементу массива Х с индексами 2 и 1;

zet[m,n] - обращение к элементу массива zet; индексы элемента m и n должны быть предварительно определены численно;

beta[i+2,k] - обращение к элементу массива beta; индексное выражение i+2 должно быть предварительно вычислено, а значение k определено.

Для хранения элементов массива ЭВМ в своей памяти резервирует непрерывную последовательность ячеек, число которых равно его длине. Последовательность эта может быть заполнена элементами массива двумя способами - строка за строкой ("по строкам") или столбец за столбцом ("по столбцам"). И в том и в другом случае используется сложный цикл, содержащий два цикла - внешний и внутренний. Последний должен содержать оператор ввода.

var

i,k: integer;

c: array [0..5,0..10] ofreal;

begin

for i:=0 to 5 do

for k:=0 to 10 do

read(c[i,k]);

end.

Внешний цикл начинается с присваивания параметру i его начального значения, равного нулю, после чего выполняется внутренний цикл с параметром k, последовательно принимающим значения 0,1,2,...,10, т.е. вводится элементы нулевой строки матрицы c[0,0], c[0,1], c[0,2],..., c[0,10]. Далее произойдет возврат во внешний цикл, значение переменной i увеличится на 1. При новом значении i снова будет выполнен внутренний цикл, т.е. введены элементы следующей строки. Операции ввода будут продолжаться до тех пор, пока не будут введены все элементы массива.

При вводе данных (чисел) программа считывает их в том порядке, в котором они были набраны на клавиатуре ЭВМ, а размещает в памяти в последовательности, определяемой взаиморасположением операторов for внешнего и внутреннего циклов. Поэтому, во избежание ошибок набирать данные на клавиатуре надо так, чтобы последовательность их набора и ввода соответствовали бы друг другу.

Сложные циклы можно программировать с использованием как операторов передачи управления, так и операторов цикла. Последние более предпочтительны, так как позволяют разработать компактную и простую для понимания программу. Наилучшим для программирования процессов обработки двумерных массивов является оператор for.

Использование операторов цикла при разработке программ подразумевает соблюдение нескольких простых правил:

1) внутренние циклы должны находиться в теле внешнего цикла полностью;

2) передача управления из тела внешнего цикла в тело внутреннего возможна только через начало внутреннего цикла (рис.2);

Рис.2. Варианты передачи управления из внешнего цикла во внутреннний: 1-правильно; 2 и 3-неправильно.

3) передача управления из тела внутреннего цикла в тело внешнего возможна в двух случаях:

а) после того, как вычисления, предусмотренные телом внутреннего цикла выполнены заданное число раз, - это так называемый нормальный выход во внешний цикл;

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

Рис.3 Варианты передачи управления из тела внутреннего цикла в тело внешнего: 1-нормальный выход; 2 и 3-выход "по условию".

Рассмотрим несколько задач, решение которых требует программирования сложных циклов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: