Массивы
Логические операции
Оператор 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]);
Двумерные массивы отличаются от обычных одномерных тем, что представляют собой не один ряд объектов а несколько рядов одинаковой длины. Такие массивы удобно изображать в виде матрицы
|
В описании двумерных массивов тип-диапазон состоит из двух частей
[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.