Операторы цикла в языке программирования паскаль

Операторы цикла заставляют выполнять входящие в их состав операторы

несколько раз.

В Паскале существует три вида операторов цикла: оператор цикла с параметром, оператор цикла с предусловием, оператор цикла с постусловием.

Оператор цикла с параметром

Формат оператора цикла с параметром:

for V:=E1 to E2 do S

где V - переменная порядкоавого типа , Е1, Е2 - выражения того же типа, S - оператор, называемый телом цикла. Выражения Е1 и Е2 вычисляются один раз при входе в цикл. Параметр V принимает сначала значение Е1 затем непос редственно следующее за ним (SUCC(V)) и т.д. до достижения Е2. При каждом значении V выполняется оператор S. Если в теле цикла необходимо выполнить несколько операторов, то их объединяют в один с помощью составного оператора. Если конечное значение Е2 меньше начального Е1, то оператор S не выполняется ни разу.

Оператор цикла с параметром применяется также в следующем виде:

for V:=Е1 downto E2 do S

В отличии от первого случая V изменяется от Е1 до Е2, переходя от V к pred(V).

Отметим, что если V, Е1, Е2 типа INTEGER, то в первом случае это цикл с шагом +1, а во втором с шагом -1.

Оператор цикла с предусловием

Формат оператора цикла с предусловием:

while B do S

где B - логическое выражение, S - оператор. Оператор S будет выполняться пока условие B будет истинно. Выполнение оператора цикла завершится когда выражение B впервые примет значение false.

Оператор цикла с постусловием

Формат оператора цикла с постусловием:

repeat S until B

где B - логическое выражение, S - оператор. Оператор S выполняется до тех пор, пока B не станет истинным. Оператор REPEAT выполняется по крайней мере один раз, так как проверка истинности условия B осуществляется после выполнения оператора S.

Служебные слова REPEAT и UNTIL уже играют роль скобок, поэтому операторные скобки BEGIN и END являются необязательными.

Примеры программ

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

Программа 2.1.1. Цикл с параметром (шаг +1)

PROGRAM FACTORIAL1;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1;

FOR I:=1 TO N DO F:=F*I;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН ',F)

END.

Программа 2.1.2. Цикл с параметром (шаг -1)

PROGRAM FACTORIAL2;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1;

FOR I:=N DOWNTO 1 DO F:=F*I;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН ',F)

END.

Программа 2.2. Цикл с предусловием

PROGRAM FACTORIAL3;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1; I:=1;

WHILE I<=N DO

BEGIN

F:=F*I;

I:=SUCC(I)

END;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН ',F)

END.

Программа 2.3. Цикл с постусловием

PROGRAM FACTORIAL4;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1; I:=1;

REPEAT

F:=F*I;

I:=SUCC(I)

UNTIL I>N;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН ',F)

END.

Массивы в языке программирования паскаль

Понятие массива

Массив представляет собой упорядоченное множество однотипных элементов. В Турбо Паскале массив описывается переменной сложной структуры. При описании необходимо указать:

- способ объединения элементов в структуру;

- число элементов;

- тип элементов.

Общий вид описания массива:

<имя массива>: ARRAY [тип–диапазон индексов] OF <тип элементов массива>;

Доступ к каждому элементу массива осуществляется с помощью индексов. Тип – диапазон каждого индекса задается левой и правой границами изменения индекса. Число индексов определяют структуру массива: если используется один индекс, то такой массив называется одномерным, если два индекса – двумерным. В общем случае размерность массива может быть произвольной.

Одномерные массивы

В математике одномерному массиву соответствует Операторы цикла в языке программирования паскаль - student2.ru мерный вектор, например:

Операторы цикла в языке программирования паскаль - student2.ru , где

Операторы цикла в языке программирования паскаль - student2.ru компонента (координата) вектора;

Операторы цикла в языке программирования паскаль - student2.ru номер компоненты;

Операторы цикла в языке программирования паскаль - student2.ru число компонент.

Описание одномерного массива

В Турбо Паскале описание одномерного массива задается следующим образом:

<имя массива>: ARRAY [m1 ..m2] OF < тип элементов>;

Индекс одномерного массива определяет порядковый номер элемента в массиве.

m1 ..m2 – диапазон значений индекса.

Тип элементов в массиве может быть любым: простым (REAL, INTEGER, CHAR), структурным (ARRAY), строковым (STRING).

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

Var

X: array [1..5] of real;

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

Индексные переменные

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

Операторы цикла в языке программирования паскаль - student2.ru индексная переменная (элемент массива);

Операторы цикла в языке программирования паскаль - student2.ru имя массива;

Операторы цикла в языке программирования паскаль - student2.ru индекс (номер элемента массива).

В качестве индекса используются:

- целые константы, например, Операторы цикла в языке программирования паскаль - student2.ru ;

- целые переменные, например, Операторы цикла в языке программирования паскаль - student2.ru ;

- индексные выражения, например, Операторы цикла в языке программирования паскаль - student2.ru .

Замечание. Индексными выражениями являются арифметические выражения целого типа.

Индексная переменная, как и простая, может стоять в левой части оператора присваивания, например:

Операторы цикла в языке программирования паскаль - student2.ru ;

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

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

Пример 1. Организовать ввод с клавиатуры массива:

Операторы цикла в языке программирования паскаль - student2.ru .

В разделе описания переменных необходимо задать описание массива и индекса.

Var

A: array [1..4] of real;

i: integer;

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

Begin {начало программы}

writeln(‘Введите массив А’);

for i := 1 to 4 read(a[i]);

……………

На клавиатуре набирается:

1.2 5 6.8 14 < Enter >.

Пример 2. Организовать вывод массива А на экран таким образом, чтобы все элементы располагались на одной строке экрана.

В программе надо записать следующие операторы:

for i := 1 to 4 do write(a[i]:5:1);

writeln;

Вид выводимого массива на экране:

1.2 5.0 -6.8 14.0

Оператор WRITELN без списка служит для перевода курсора к началу следующей строки.

Обработка одномерных массивов

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

Задача 1. Организация счетчика.

Определить количество элементов заданного целочисленного массива Операторы цикла в языке программирования паскаль - student2.ru , которые делятся на 3 без остатка.

Program OM_1;

Var

B: array [1… 20] of integer;

i, L: integer;

Begin

writeln(‘Введите массив В’);

for i :=1 to 20 do read(b[i]);

L := 0;

for i :=1 to 20 do

if (b[i] MOD 3) = 0 then L := L+1;

writeln(‘L =’, L);

End.

Задача 2. Накопление суммы и произведения.

Дано целое число Операторы цикла в языке программирования паскаль - student2.ru и массив вещественных чисел Операторы цикла в языке программирования паскаль - student2.ru . Вычислить среднее арифметическое и среднее геометрическое чисел массива, используя формулы:

Операторы цикла в языке программирования паскаль - student2.ru ; Операторы цикла в языке программирования паскаль - student2.ru .

Program ОМ_2;

Var

Х: array [1… 100] of real;

n, i: integer;

S, P: real;

Begin

writeln(‘Введите размер массива n’);

read(n);

writeln(‘Введите массив Х’);

for i := 1 to n do read(x[i]);

S := 0;

P := 1;

for i := 1 to n do

begin

S := S + x[i];

P := P * x[i];

end;

S := S/n;

P := exp(1/n * ln(P));

writeln(‘S =’, S:6:2);

writeln(‘P =’, P:10:2);

End.

Задача 3. Поиск минимального и максимального элементов массива.

Дан вещественный массив Операторы цикла в языке программирования паскаль - student2.ru .

Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена.

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

Введем обозначения:

min – минимальный элемент;

imin – индекс минимального элемента;

max – максимальный элемент;

imax – индекс максимального элемента.

Program ОМ_3;

Var

T: array [1… 10] of real;

i, imin, imax: integer;

min, max: real;

Begin

writeln(‘Введите массив T’);

for i := 1 to 10 do read(t[i]);

min := +1E6;

max := -1E6;

for i := 1 to 10 do

begin

if t[i]<min then

begin

min := t[i];

imin := i;

end;

if t[i]>max then

begin

max := t[i];

imax := i;

end;

end;

t[imin]:= max;

t[imax]:= min;

for i := 1 to 10 do write(t[i]:6:2);

writeln;

End.

Двумерные массивы

Двумерные массивы в математике представляются матрицей:

Операторы цикла в языке программирования паскаль - student2.ru

или сокращенно можно записать:

Операторы цикла в языке программирования паскаль - student2.ru , где

Операторы цикла в языке программирования паскаль - student2.ru число строк;

Операторы цикла в языке программирования паскаль - student2.ru число столбцов;

Операторы цикла в языке программирования паскаль - student2.ru индексы (номера) текущих строки и столбца, на пересечении которых находится элемент Операторы цикла в языке программирования паскаль - student2.ru .

Описание двумерного массива

Описание матрицы в разделе VAR задается структурным типом вида:

<имя массива>: ARRAY [m1..m2, n1..n2] OF <тип элементов>;

m1..m2 – диапазон значений индекса i, определяющий число строк;

n1..n2 – диапазон значений индекса j, определяющий число столбцов.

По описанию матрицы во внутренней памяти компьютера выделяется область из ( Операторы цикла в языке программирования паскаль - student2.ru ) последовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:

Var

A: array [1..3, 1..5] of real;

в памяти компьютера выделяется область, состоящая из Операторы цикла в языке программирования паскаль - student2.ru последовательных ячеек, для записи элементов матрицы вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов.

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

Операторы цикла в языке программирования паскаль - student2.ru ;

Операторы цикла в языке программирования паскаль - student2.ru ;

Операторы цикла в языке программирования паскаль - student2.ru .

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

Для поэлементного ввода и вывода матрицы используется двойной цикл FOR. Если задать индекс Операторы цикла в языке программирования паскаль - student2.ru как параметр внешнего цикла, а индекс Операторы цикла в языке программирования паскаль - student2.ru как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется по строкам.

Пример 1. Организовать ввод целочисленной матрицы Операторы цикла в языке программирования паскаль - student2.ru по строкам.

Операторы цикла в языке программирования паскаль - student2.ru .

Описание матрицы вместе с текущими индексами имеет вид:

Var

M: array [1..2, 1..3] of integer;

i, j: integer;

Ввод в программе реализуется в форме диалога, т.е. сопровождается соответствующим сообщением:

Begin {начало программы}

writeln(‘Введите матрицу М’);

for i := 1 to 2 do

for j := 1 to 3 do read(m[i, j]);

…………

На клавиатуре нагляднее всего набирать элементы матрицы по строкам.

1 2 3 <Enter>

4 5 6 <Enter>

Пример 2. Организовать вывод матрицы M на экран.

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

for i := 1 to 2 do

begin

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

writeln

end;

Вид матрицы на экране будет следующим:

1 2 3

4 5 6

Обработка матриц

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

1. Алгоритмы реализуются при обработке всех элементов матрицы.

2. Алгоритмы реализуются внутри каждой строки или каждого столбца матрицы.

Реализация алгоритмов для задач первого типа

Задача 1. Дана матрица вещественных чисел Операторы цикла в языке программирования паскаль - student2.ru . Вычислить значение Операторы цикла в языке программирования паскаль - student2.ru , где P1 и P2 – произведения положительных и отрицательных элементов матрицы соответственно.

Program DМ_1;

Var

A: array [1..4, 1..6] of real;

i, j: integer;

P1, P2, Z: real;

Begin

writeln(‘Введите матрицу А’);

for i := 1 to 4 do

for j := 1 to 6 do read(a[i,j]);

P1 := 1;

P2 := 1;

for i := 1 to 4 do

for j :=1 to 6 do

begin

if a[i,j]>0 then P1 := P1 * a[i,j];

if a[i,j]<0 then P2 := P2 * a[i,j];

end;

Z := P1/abs(P2);

writeln(‘Z=’, Z:10:2);

End.

Задача 2. В квадратной целочисленной матрице Операторы цикла в языке программирования паскаль - student2.ru вычислить модуль разности между числом нулевых элементов, стоящих ниже главной диагонали, и числом нулевых элементов, стоящих выше главной диагонали.

Введем обозначения:

L1 – число нулевых элементов ниже главной диагонали;

L2 – число нулевых элементов выше главной диагонали;

L= |L1-L2|.

Program DМ1_2;

Var

B: array [1..5, 1..5] of integer;

i, j, L1, L2, L: integer;

Begin

writeln(‘Введите матрицу B’);

for i := 1 to 5 do

for j := 1 to 5 do read(b[i,j]);

L1 := 0;

L2 := 0;

for i := 1 to 5 do

for j := 1 to 5 do

if b[i,j]=0 then

begin

if i>j then L1 := L1+1;

if i<j then L2 := L2 +1;

end;

L := abs(L1 – L2);

writeln(‘L=’, L);

End.

Реализация алгоритмов для задач второго типа

Задача 1. В матрице Операторы цикла в языке программирования паскаль - student2.ru вещественных чисел первый элемент каждой строки поменять местами с минимальным элементом этой строки. Вывести матрицу Х после обмена.

Program DМ2_1;

Var

X: array [1..3,1..6] of real;

i, j, jmin: integer;

min: real;

Begin

writeln(‘Введите матрицу X’);

for i:= 1 to 3 do

for j := 1 to 6 do read(x[i,j]);

for i:=1 to 3 do

begin

min:=+1E6;

for j:=1 to 6 do

if x[i,j]<min then

begin

min:=x[i,j];

jmin:=j;

end;

x[i,jmin]:=x[i,1];

x[i,1]:=min;

end;

for i:=1 to 3 do

begin

for j:=1 to 6 do write (x[i,j]:6:1);

writeln;

end;

End.

Задача 2. Дана матрица вещественных чисел Операторы цикла в языке программирования паскаль - student2.ru . Вычислить среднее арифметическое каждого столбца. Результат оформить в виде одномерного массива Операторы цикла в языке программирования паскаль - student2.ru .

Program DМ2_2;

Var

C: array [1..8, 1..4] of real;

S: array [1..4] of real;

i, j: integer;

Begin

writeln(‘Введите матрицу C’);

for i := 1 to 8 do

for j := 1 to 4 do read(c[i,j]);

for j := 1 to 4 do

begin

s[ j ] := 0;

for i := 1 to 8 do s[ j ]:= s[ j ] + c[i,j];

s[ j ] := s[ j ]/8;

end;

for j := 1 to 4 do write(s[ j ]:8:2)

writeln;

End.

В данной программе следует обратить внимание на то, что при вычислении каждого элемента s[j] организован двойной цикл, в котором индекс Операторы цикла в языке программирования паскаль - student2.ru является внешним параметром цикла, а индекс Операторы цикла в языке программирования паскаль - student2.ru внутренним. Это обеспечивает обработку элементов матрицы по столбцам.

Наши рекомендации