Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
10.07.2016
Размер:
76.8 Кб
Скачать

29.Понятие цикла. Виды циклов. При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции –циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.

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

Цикл for Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).

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

Цикл for существует в двух формах:

for счетчик:=значение to конечное_значение do

тело_цикла;

for счетчик:=значение downto конечное_значение do

тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

var

i, n: integer;

 

begin

write ('Количество знаков: ');

readln (n);

 

for i := 1 to n do

write ('(*) ');

 

30. Оперчатор цикла со счетчиком for

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

Можно, конечно, циклы со счетчиком моделировать при помощи операторов while и Repeat, но структура цикла со счетчиком проще.

Общая форма записи цикла со счетчиком

for i := A to B do   begin     . . .   end;

for i := A downto B    do   begin     . . .   end;

Здесь переменная i - управляющая переменная или переменная цикла,

А - начальное значение переменной цикла,

В - конечное значение переменной цикла.

При переходе к обработке оператора цикла for управляющей переменной присваивается заданное начальное значение. Затем в цикле выполняется исполнительный оператор (или составной оператор). Каждый раз при выполнении исполнительного оператора управляющая переменная увеличивается на 1 (для for...to) или уменьшается на 1 (для for...downto). Цикл завершается при достижении управляющей переменной своего конечного значения.

Например,

1) for i := 1 to ListSize do     begin       readln (Number):       S := S +Number;     end;

2) for Dlina := 15 downto 1 do       writeln (Sqr(Dlina));

3) for x := 1 to 10 do       for y := 1 to 10 do         writeln (x,'*',y,'=',x*y);

4) for Range := Number+1 to Multi*3 do       writeln (Sqrt(Range));

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

readln

end.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, еслиfalse – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

var

i, n: integer;

 

begin

write ('Количество знаков: ');

readln (n);

 

i := 1;

while i <= n do begin

write ('(*) ');

i := i + 1

end;

 

readln

end.

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

var

i, n: integer;

 

begin

write ('Количество знаков: ');

readln (n);

 

i := 1;

repeat

write ('(*) ');

i := i + 1

until i > n;

 

readln

end.

В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.

21. Будь-який із структурованих типів даних характеризується множинністю елементів, які складають цей тип. Змінна або константа структурованого типу завжди має декілька компонент. Кожна з цих компонент, у свою чергу, може належати структурованому типу, що дозволяє говорити про можливу вкладеність типів.

Турбо Паскаль має п’ять структурованих типів:

  • масиви;

  • рядки;

  • множини;

  • записи;

  • файли;

Перелічуваний тип даних

Перелічуваний тип являє собою обмежену упорядковану послідовність скалярних констант, що становлять даний тип. Значення кожної константи задається її ім'ям. Імена окремих констант відокремлюються один від одного комами, а вся сукупність констант, що становлять даний перелічуваний тип, обмежується круглими дужками.

Інтервальний тип даних

Відрізок (діапазон значень) будь-якого порядкового типу може бути визначений як інтервальний (обмежений) тип. Відрізок задається діапазоном від мінімального до максимального значення констант, розділених двома крапками. В якості констант можуть бути використані константи, що належать до цілого, символьного, логічного або перелічуваного типу. Скалярний тип, на якому будується відрізок, називається базовим типом. Приклади відрізків:

1 .. 10 -15 .. 25 'A' .. 'z'

Мінімальне і максимальне значення констант називаються нижньою і верхньою межею відрізка, що визначає інтервальний тип. Нижня межа повинна бути менше верхньої. Над змінними, що відносяться до інтервального типу, можуть виконуватися всі операції і застосовуватися всі стандартні функції, які допускаються до використання для відповідного базового типу.

Масиви

Масиви - це сукупності однотипних елементів. Вони мають наступні характеристики:

кожен компонент масиву може бути явно позначений і до нього є прямий доступ;

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

Для позначення компоненту масиву використовується ім'я змінної-масиву і так звані індекси, які вказують на певний елемент.

Рядки

Для обробки інформації, поданої в рядковому вигляді, в Турбо Паскаль введений рядковий тип даних. Рядком у Паскалі називається певна послідовність символів. Кількість символів послідовності називається довжиною

рядка. Синтаксис:

var s: string[n];,

var s: string;

Рядкові константи записуються як послідовності символів, обмежені апострофами.

Над рядковими даними визначена операція злиття (конкатенації), що позначається знаком +. Наприклад:

a: = 'Turbo'; b: = 'Pascal'; c: = a + b;

Множини

Поняття множини в мові Паскаль ґрунтується на математичному баченні поняття про кінцеві множини: це обмежена сукупність різних елементів. Для конкретного множинного типу використовується перелічуваний або інтервальний тип даних. Тип елементів, складових безлічі, називається базовим типом. Множинний тип описується за допомогою службових слів Set of, наприклад:

type M = Set of B;

Тут M – множинний тип, B – базовий тип.

Приклад опису змінної множинного типу.

type

M = Set of 'A'..'D';

var

MS: M;

Записи

Запис являє собою сукупність обмеженого числа логічно зв'язаних компонент, що належать до різних типів. Компоненти запису називаються полями, кожне з яких визначається ім'ям. Поле запису містить ім'я поля, після якого, через двокрапку, вказується тип цього поля. Поля запису можуть відноситися до будь-якого типу, допустимого в мові Паскаль, за винятком файлового.Опис запису в мові Паскаль здійснюється за допомогою службового слова record.

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

for i := 1 to 10 do   begin     . . .     i := i-1;     . . .   end;

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

Внимание! Следует помнить, что управляющая переменная не может быть типа real.

Исполнительная часть цикла может быть либо простым, либо составным оператором. Если начальное значение цикла for ...to больше конечного значения, то никакие операции не выполнятся. Таким образом, следующий оператор не приведет ни к каким действиям

for j := 1 to 0 do   writeln (j);

Однако цикл, представленный в такой форме, распечатает целые числа от единицы до десяти:

for j := 1 to 10 do   writeln (j);

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

for j := 10 downto 1 do   writeln (j);

Часто тело цикла For содержит еще один оператор цикла For. Структуры такого рода называются вложенными циклами. При завершении внутреннего цикла управляющая переменная внешнего цикла увеличивается. Повторение этих действий будет продолжаться до завершения внешнего цикла. Приведенный ниже вложенный цикл печатает пары чисел, начиная от (1,1), (1,2),... и кончая (10,10):

for х:= 1 to 10 do   for у:= 1 to 10 do     writeln ('(',х,',',y,'), ');


Соседние файлы в папке Информатика