Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика ЗКМЗКЕ_1курс / Лекция_1_Паскаль_2012_задачи.doc
Скачиваний:
22
Добавлен:
05.06.2015
Размер:
175.62 Кб
Скачать

Оператор выбора.

Оператор выбораCASEможет быть использован вместо условного оператора, если требуется сделать выбор более, чем из двух возможностей.

Простейший вариант оператора CASE :

CASE <селекторное выражение> OF

Метка1 : оператор 1 ;

Метка2 : оператор 2 ;

. . . . .

[ ELSE оператор К ];

END;

оператор 1, оператор 2 , оператор К - простой или составной оператор.

Селекторное выражение (селектор, переключатель) и метки-константы (метки варианта, метки выбора) должны иметь один и тот же простой тип (кроме вещественного). Метки-константы в отличие от меток программы не требуется описывать в разделе описания меток. Но на них нельзя ссылаться в операторе GOTO. Метки варианта могут быть перечисляемого и интервального типа.

Оператор выбора выполняется следующим образом. Сначала вычисляется селекторное выражение; затем выполняется оператор, метка варианта которого равна текущему значению селектора; после этого происходит выход из оператора CASEна следующий оператор. Если значение селектора не совпадает ни с одной из меток варианта, будет выполнен оператор послеELSE. Если ветвь ELSE отсутствует, то управление передается следующему заCASEоператору.

Например,

CASE K OF

0: Z := LN(X) ;

1: Z := EXP(X) ;

2: Z := SIN(X) ;

3: Z := COS(X)

ELSE Z := 0

END ; …

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

В следующем примере переменная OTVETполучает значениеYESилиNOв зависимости от введенного значения символьной переменнойV. Здесь метки варианта задаются перечислением.

Var V : char;

OTVET : STRING;

CASE V OF 1: OTVET := ‘YES’;

2 : OTVET := ‘NO’

ELSE

OTVET := ‘ ‘;

END; …

Операторы цикла.

Операторы цикла используются для многократного повторения входящих в их состав операторов. В языке Турбо Паскаль различают операторы цикла типа арифметической прогрессии (оператор цикла со счетчиком FOR) и операторы цикла итерационного типа (WHILEиREPEAT).

Оператор цикла типа арифметической прогрессиииспользуется, если заранее известно количество повторений цикла и шаг изменения параметра цикла +1 или –1.

Упр_перем- это управляющая переменная, параметр цикла, как правило, целого типа; это счётчик, который отмечает номер повторения цикла. Он же может применяться в качестве номера элемента массива .

Если в операторе употребляется TO, тогда шаг измененияУпр_перемравен +1;

Если DOWNTO - то шаг измененияУпр_перемравен -1;

НачЗнач- начальное значение параметра цикла, выражение целого типа;

КонЗнач -конечное значение параметра цикла, выражение целого типа;

Оператор, тело цикла, - простой или составной оператор.

При выполнении оператора FORвыполняются следующие действия:

  • вычисляется НачЗнач, которое присваивается параметру цикла;

  • проверяется условие окончания цикла: значение параметра цикла больше КонЗначпри использовании конструкции TOи параметр цикла меньшеКонЗначпри использовании конструкции DOWNTO;

  • выполняется тело цикла;

  • параметр цикла наращивается (если TO) или уменьшается (если DOWNTO) на единицу;

  • все этапы, кроме первого, циклически повторяются.

При использовании оператора необходимо помнить:

  • Внутри цикла FORнельзя изменять начальное, текущее или конечное значения параметра цикла.

  • Если в цикле с шагом +1 начальное значение больше конечного, то цикл не выполнится ни разу. Аналогично для шага -1, если начальное значение меньше конечного.

  • После завершения цикла значение параметр цикла считается неопределенным, за исключением тех случаев, когда выход из цикла осуществляется оператором GOTOили с помощью процедурыBREAK.

  • Телом цикла может быть другой оператор цикла.

Например, для того, чтобы вычислить значение факториала F=N! можно воспользоваться следующими операторами:

F:=1; b)

F:=1;

FOR I:=1 TO N DO FOR I:=N DOWNTO 1 DO

F:=F*I; F:=F*I;

… …

Операторы цикла итерационного типа ( с неизвестным заранее числом повторений)

Операторы цикла итерационного типаиспользуются обычно в том случае, если число повторений цикла заранее неизвестно или шаг изменения параметра цикла отличен от +1 или –1.

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

WHILE логическое выражение DO

условие выполнения цикла

{ тело цикла } оператор;

Логическое выражение определяет условие ВЫПОЛНЕНИЯ цикла, если условие истинно, цикл выполняется.

Телом цикла является простой или составной оператор.

Логическое выражение вычисляется перед каждым выполнением тела цикла. Если логическое выражение принимает значениеTRUE, то тело цикла выполняется, если значениеFALSE, происходит выход из цикла. Тело цикла может не выполниться ни разу, если логическое выражение ложно перед первым выполнением цикла.

Любой алгоритм, реализуемый с помощью оператора FOR, может быть записан с использованием конструкцииWHILE. Например, вычисление значения факториалаF=N!:

F:=1;

I:=1;

WHILE I<=N DO

BEGIN

F:=F*I;

I:=I+1;

END;

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

Данная конструкция оператора цикла используется, если число повторений цикла заранее неизвестно.

REPEAT

оператор 1 ;

оператор 2 ;

оператор n ;

UNTIL логическое выражение;

условие прекращения цикла

Логическое выражение– это условие выхода из цикла, условие прекращения цикла. Управляющее циклом логическое выражение является условием выхода из цикла. Если оно принимает значениеTRUE, то выполнение цикла прекращается. При использовании оператораREPEATцикл выполняется хотя бы один раз. В отличие от других операторов цикла оператор данного вида не требует операторных скобокBEGIN - END, так как их роль выполняютREPEAT - UNTIL.

Вычисление F=N!с использованием конструкцииREPEATUNTIL будет выглядеть следующим образом:

. . .

F:=1;

I:=1;

Repeat

F:=F*I;

I:=I+1;

Until I>N;

. . .

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

Program rep;

Var

A,K: integer;

C : char;

Begin

K:=0;

Repeat

Writeln(' Введите очередное число ');

Readln( A);

If A mod 7=0

then K:=K+1;

Writeln('Хотите выйти из цикла? д/y' );

Readln( C ) ;

Until ( C='д') or ( C='y') ;

Writeln('kol = ' , K);

End.

Здесь условием выхода из цикла является ввод символовД илиYпри ответе на вопрос о выходе из цикла. Если вводится одна из этих букв, логическое выражение, записанное послеUNTIL,становитсяTRUEи происходит выход из цикла.

В языке Турбо Паскаль 7.0 имеются процедуры BREAK иCONTINUE. Эти процедуры могут использоваться только внутри цикловFOR, WHILE илиREPEAT. ПроцедураBREAKпрерывает выполнение цикла и вызывает переход к оператору, следующему за циклом. ПроцедураCONTINUEосуществляет переход к следующему повторению цикла с пропуском последующих операторов тела цикла.

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

Program Kon;

Var

A:array [1.. 30] of integer;

FL: Boolean;