ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Учебное пособие
Дисциплина: Информатика
Добавлен: 19.10.2018
Просмотров: 12740
Скачиваний: 132
71
В этом случае операторы тела цикла выполняются по край-
ней мере один раз.
В теле цикла можно указывать несколько операторов без
использования операторных скобок.
Пример использования операторов цикла при программи-
ровании циклических алгоритмов (табл. 4).
Пусть требуется вычислить сумму первых n натуральных
чисел
1
n
i
S
i
.
Переменная цикла i будет выполнять две функции: номер
очередного слагаемого и одновременно его значение.
Т а б л и ц а 4
Пример использования операторов цикла для решения задачи
Цикл с параметром
Цикл с предусловием
Цикл с постусловием
program Z1;
var S, i, n: integer;
begin
writeln('задайте
кол-во
слагаемых');
readln(n);
S:=0;
for i:=1 to n do
S:=S+i;
writeln('сумма= ',
S);
end.
program Z2;
var S, i, n: integer;
begin
readln(n);
S:=0;
i:=1;
while i <= n do
begin
S:=S+i;
i:=i+1
end;
writeln('сумма= ',
S);
end.
program Z3;
var S, i, n: integer;
begin
readln(n);
S:=0;
i:=1;
repeat
S:=S+i;
i:=i+1
until i > n
writeln('сумма= ',
S);
end.
Массивы
Массивы представляют собой упорядоченную совокупность
данных, имеющую одно имя. Каждому элементу массива соответ-
ствует выражение порядкового типа (чаще целое число), опреде-
ляющее место этого элемента в массиве, которое называется индек-
сом. Размерность массива – количество индексов, необходимое
72
для однозначного доступа к элементу массива. Если для определе-
ния места элемента в массиве используется один индекс, то массив
называют одномерным (вектором), два – двумерным (матрицей).
В языке Pascal индекс заключается в квадратные скобки. Индекс
может быть константой – a[5], b[1,1]; переменной – a[i],
b[i,j]; выражением – a[i+3], b[i+1,j+1].
Одномерные массивы
Массивы описываются в разделе описания переменных
в следующей форме:
var имя_массива: array[тип_индекса] of тип_элементов;
В качестве типа индекса чаще всего используется тип-
диапазон – [n..k].
Количество элементов в диапазоне определяется следую-
щим образом: k–n+1.
Пример:
var a: array[1..10] of integer;
Здесь a – имя массива, элементы которого имеют базовый
тип integer, первый элемент имеет индекс 1, индекс послед-
него элемента 10, всего 10 элементов.
В языке Pascal есть возможность создавать свои типы дан-
ных, которые должны быть описаны в специальном разделе опи-
сания типов type.
Пример:
const n=10;
type vector=array[1..n] of real;
{тип vector объединяет
в себе все одномерные
массивы, состоящие из
n действительных
элементов}
var a, b: vector;
73
Ввод и вывод массивов в языке Pascal осуществляется по-
элементно, для чего необходимо организовать цикл.
Примеры ввода элементов одномерного массива (с клавиа-
туры и с помощью датчика случайных чисел).
for i:=1 to n do
read(a[i]);
randomize;
for i:=1 to n do
begin
a[i]:=1+random(100);
write(a[i]:5,' ');
end;
Пример вывода элементов одномерного массива:
for i:=1 to n do
write(a[i], ' ');
Перебор элементов одномерного массива
Элементы массива можно обрабатывать, двигаясь от начала
массива к его концу или в обратном направлении:
for i:=1 to n do
{обработка a[i]}
for i:=n downto 1 do
{обработка a[i]}
Можно обрабатывать элементы массива сразу по два эле-
мента, двигаясь одновременно с обеих сторон:
i:=1; {задание нижней границы индекса}
j:=n; {задание верхней границы индекса}
while i<=j do
begin
{обработка a[i] и a[j]};
i:=i+1; {движение слева направо, индекс
увеличивается}
j:=j-1; {движение справа налево, индекс
уменьшается}
end;
74
Если необходимо перебирать только элементы массива с
четным номером, то это может быть реализовано следующим
образом:
Вариант 1.
i:=2;
{индекс начинает изменяться с
четного числа 2}
while i<=n do
begin
{обработка a[i]};
i:=i+2;
{величина
шага,
равная
двум,
обеспечивает сохранение четности
индекса}
end;
Вариант 2.
for i:=1 to n do
if i mod 2 = 0 then {обработка a[i]};
{внутрь цикла перебора индекса вложен опера-
тор, проверяющий его четность}
Вариант 3.
for i:=1 to n div 2 do
{обработка a[2*i]}; {используется формула чет-
ного числа. Поскольку эле-
ментов с четным индексом –
половина от всего количе-
ства, то параметр цикла i
изменяется до n div 2}
Двумерные массивы (матрицы)
Для работы с элементами двумерного массива нужно орга-
низовать два цикла. Каждый из них отвечает за перебор значе-
ний соответствующего индекса, т.е. получается структура вло-
женных циклов. Параметры внешнего и внутреннего циклов
75
разные и изменяются не одновременно: при одном значении па-
раметра внешнего цикла параметр внутреннего цикла принимает
поочередно все значения.
Двумерный массив A(m,n) с количеством строк, равным
m, и количеством столбцов, равным n, содержащий элементы
целого типа (integer), описывается в разделе описания пере-
менных в следующей форме:
var a: array[1..m,1..n] of integer;
К элементу двумерного массива обращаются следующим
образом: a[i,j], где i – номер строки; j – номер столбца. Об-
рабатывать элементы двумерного массива можно как по стро-
кам, так и по столбцам:
Обработка по строкам
Обработка по столбцам
for i:=1 to m do {перебор
строк}
for j:=1 to n do {перебор
столбцов}
{обработка a[i,j]}
for j:=1 to n do {перебор
столбцов}
for i:=1 to m do {перебор
строк}
{обработка a[i,j]}
Примеры ввода элементов двумерного массива (с клавиату-
ры и с помощью датчика случайных чисел):
for i:=1 to m do
for j:=1 to n do
read(a[i,j]);
randomize;
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=1+random(100);
write(a[i,j]:5,' ');
end;
writeln;
end;