Массивы


Логические операции

Оператор Case...of...

Циклы с параметрами. Операторы for...to...do... и for...downto...do...

 

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

Формат записи таких операторов следующий:

for <пар.цикла> := <нач.знач> to <кон.знач.> do <оператор>.

Здесь for, to, do - зарезервированные слова (для, до, выполнить);

<пар. цикла> - параметр цикла - переменная типа integer (точнее, любого порядкового типа);

<нач. знач.> - начальное значение - число или выражение того же типа;

<кон. знач.> - конечное значение - число или выражение того же типа;

<оператор> - произвольный оператор Паскаля.

Если операторов несколько, тогда, как и в операторе while ... do ..., используются операторные скобки: begin ... end.

Например, возможны такие записи оператора цикла:

for i := a to b do s1;

for j := a to b do begin s1; s2; ..., sn end; или

for k := p to m do

begin

s1;

s2;

...

sn

end;

 

Здесь s1, s2, s3, ... sn - операторы цикла.

При выполнении оператора for вначале вычисляется выражение <нач .знач.> и осуществляется присваивание его значения переменной цикла

<пар .цикла> := <нач. знач.>.

После этого циклически повторяются:

1) проверка условия <пар .цикла> <кон. знач.>; если условие не выполнено, оператор for завершает работу;

2) выполнение оператора <оператор> или операторов s1; s2; s3; ... sn;

3) переменная цикла <пар. цикла> увеличивается на единицу.

Надо сразу заметить, что задать шаг цикла, отличный от 1 в этом операторе, нельзя.

Существует другая форма оператора цикла for:

for <пар .цик.> := <нач. зн.> downto <кон. зн.> do <оператор>.

Замена зарезервированного слова to на downto означает, что шаг параметра цикла равен (-1).

Изменение значения параметра идет от большего значения к меньшему, т. е. <нач. знач.> <кон. знач.>.

 

Графическое изображение циклов for будет таким:

 

 

Здесь: p - переменная цикла; n - ее начальное значение; k - ее конечное значение. Тело цикла составляет оператор или несколько операторов: s1; s2; ... sn;, которые нарисованы в прямоугольнике.

 

 

Часто возникает необходимость сделать выбор из любого количества вариантов. Структура оператора выбора в Turbo Pascal следующая:

 

Case I of

Const1 : S1;

Const2 : S2;

............

ConstN : SN;

else S

end;

 

В этой записи: I - выражение порядкового типа, значение которого вычисляется; Const1, Const2, ..., ConstN - константы, с которыми сравнивается значение выражения I; S1, S2, ..., SN - операторы, из которых выполняется тот, с соответствующей константой которого совпадает значение выражения I; S - оператор, который выполняется, если значение выражения I не совпадает ни с одной из констант Const1, ..., ConstN.

Ветвь оператора else является необязательной. Если она отсутствует и значение I не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора if перед словом else точку с запятой можно ставить.

Если для нескольких констант нужно выполнить один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если это возможно), сопроводив их одним оператором.

 

 

Логическая операция Значение Примеры записи Значение примера
AND Логическое "И" (x<7) and (x>3) x меньше 7 и x больше 3 (3<x<7)
  OR   Логическое "ИЛИ"   (y>100) or (y<10) y больше 100 или y меньше 10 (y<10, y>100)
NOT Логическое "НЕ" not (x=2) не x равно 2

 

Правила использования операций AND и OR (Таблица истинности)

 

a b a and b a or b
истина истина истина истина
истина ложь ложь истина
ложь истина ложь истина
ложь ложь ложь ложь

 

 

Массивы - формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое.

 

var

<имя массива> : array[n1. . n2] of <тип элементов массива>.

 

<имя массива> - это идентификатор, удовлетворяющий всем требованиям, предъявляемым к нему;

после этого обязательно записывается служебное (зарезервированное) слово: array;

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

 

[n1..n2] - тип-диапазон; n1 - левая граница, n2 - правая граница;

 

для примера [1..30] индексы элементов нумеруются от 1 до 30 (1 - левая граница, 30 - правая), всего элементов в массиве - 30;

 

далее указывается тип элементов массива.

 

Элемент массива обозначается как <имя массива>[индекс].

 

Рассмотрим пример описания массива и ввод его значений пользователем.

 

program aaa;

var a:array[1..10] of integer;

i:integer;

begin

for i:=1 to 10 do begin

write(‘a[‘,i,’]=’);read(a[i]);

end;

for i:=1 to 10 do writeln(‘a[‘,i,’]=’,a[i]);

end.

 

Как видно из примера использование циклов напрямую связано с массивами. Лучше всего выбирать цикл с параметрами.

 

Пример вывода массива на экран.

 

for i:=1 to 10 do writeln(‘a[‘,i,’]=’,a[i]);

 

Двумерные массивы отличаются от обычных одномерных тем, что представляют собой не один ряд объектов а несколько рядов одинаковой длины. Такие массивы удобно изображать в виде матрицы

 
 
1 2 3 4 5 6 7 8 9 0 1 5 3 9 8 6 2 4 0 7 5 4 3 2 1

 


В описании двумерных массивов тип-диапазон состоит из двух частей

[n1..n2,m1..m2] – столбцы и строки матрицы.

 

Элемент двумерного массива обозначается

<имя массива>[индекс1,индекс2]

 

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

 

Пользователь задает массив 3 X 3. Вывести на экран номера и значения элементов массива в виде “a[1,1]=0”.

 

program aaa;

var a:array[1..3,1..3] of integer;i,j:integer;

begin

for j:=1 to 3 do

for i:=1 to 3 do begin

write(‘a[‘,i,’,’,j,’]=’);read(a[i,j]);

end;

for j:=1 to 3 do

for i:=1 to 3 do begin

writeln(‘a[‘,i,’,’,j,’]=’,a[i,j]);

end;

end.

 

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

 

program aaa;

var a:array[1..20,1..20] of integer;i,j,n:integer;

begin

read(n);

for j:=1 to n do

for i:=1 to n do begin

write(‘a[‘,i,’,’,j,’]=’);read(a[i,j]);

end;

for j:=1 to n do begin

for i:=1 to n do write(a[i,j]:3);

writeln;

end;

end.