Песни о Паскале - страница 36

Шрифт
Интервал

стр.


>var N : integer;       { счетчик }

>begin

>      for N:=1 to 10 do Writeln(N);

>end.


Испытайте эту программку. Согласитесь, что ошибиться здесь труднее, чем в варианте с REPEAT. Как только вы написали FOR, то обязаны тут же указать начальное и конечное значения счетчика, а наращивать его Паскаль будет и без вас. В качестве начального и конечного значений вы вправе указать не только числа, но и выражения, – они будут вычислены один раз в начале цикла. Если начальное значение счетчика окажется равным конечному, цикл выполнится единожды. А если конечное значение окажется меньше начального, то ни разу!

Осталось ответить лишь на один вопрос: что, если внутри цикла надо выполнить несколько операторов? Ведь после слова DO предусмотрен лишь один. Впрочем, те, кто помнит об операторных скобках BEGIN-END, знают ответ. Напомню, что эти скобки превращают группу операторов в единый блок, этим мы и воспользуемся в новой версии экзаменатора.


>{ P_17_1 – экзаменатор, выставляющий оценку }

>var A, B, C : integer; { сомножители и произведение }

>      Q, E : integer; { счетчик вопросов и счетчик ошибок }

>      S: string;

>begin

>      Randomize;

>      E:= 0; { обнуляем счетчики ошибок }

>      for Q:= 1 to 15 do begin { 15 вопросов }

>      A:= 1+ Random(10);       B:= 1+ Random(10);

>      Write(Q,’) Сколько будет ’, A,’ x ’,B, ’ ? ’);

>      Readln(C);

>      { Если ответ неверный, увеличиваем счетчик ошибок }

>      if A*B <> C then E:= E+1;

>      end; { цикл и блок завершаются здесь}

>      case E of { выставляем оценку }

>      0: S:=’Отлично!’;

>      1,2: S:=’Хорошо’;

>      3..5: S:=’Удовлетворительно’;

>      else S:=’Ну оччччень плохо!’;

>      end;

>      Writeln(S, ’ Нажмите Enter’); Readln;

>end.


Рассмотрим изюминки этой программы. В операторе


>      Write(Q,’) Сколько будет ’, A,’ x ’,B, ’ ? ’);


вместе с вопросом печатается его порядковый номер Q.

Но самое интересное – это метки в операторе CASE. Напротив оценки «хорошо» стоит метка из двух разделенных запятой чисел (1, 2), – эта ветвь оператора CASE выполнится для этих двух значений. Такие объединенные метки могут содержать несколько чисел. А если числа следуют подряд, их заменяют числовым диапазоном – это два числа, разделенные двумя точками («многоточием»), причем первое число должно быть меньше второго. Такой диапазон (3..5) служит меткой для ветви «Удовлетворительно».

Итоги

• Цикл со счетчиком FOR-TO-DO удобен при известном количестве повторений, которое вычисляется при входе в цикл.

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

• Оператор выбора CASE-OF-ELSE-END допускает метки из нескольких чисел, и даже диапазоны целых чисел.

А слабо?

А) Позвольте ученику отказаться от сдачи экзамена. Признаком отказа будет ввод нуля в качестве ответа. В этом случае надо досрочно выйти из цикла и обойти выставляющий оценку оператор (вспомните о процедуре Break).

Б) Напишите программу, которая по введенному числу дает заключение о том, какому дню недели оно соответствует – рабочему (1-5) или выходному (6,7), например:


>День = 2

>Рабочий

>День = 7

>Выходной

>День = 20

>Ошибка!


Здесь выделенные числа напечатаны пользователем.

В) Напишите программу, которая, запросив число N, печатала бы числа от 1 до N в обратном порядке, например:


>N = 3

>3

>2

>1


Г) Существует вариант цикла FOR, где счетчик цикла не наращивается, а уменьшается, этот оператор выглядит так:

FOR N:= начальное_значение DOWNTO конечное_значение DO оператор

Ключевое слово DOWNTO задает счет в обратном порядке (DOWN – «вниз»); при этом начальное значение счетчика должно быть больше или равно конечному, иначе цикл не выполнится ни разу. Воспользуйтесь этим оператором для решения предыдущей задачи (задание В).

Д) Пусть программа запросит два числа N и M, а затем вычислит их произведение без использования операции умножения (*). Подсказка: организуйте цикл суммирования N раз числа M.

Е) Напишите программу, вычисляющую сумму чисел от 1 до N, где N – число, вводимое пользователем.

Ж) Напишите программу, вычисляющую сумму только тех чисел от 1 до N, которые делятся либо на три, либо на пять.


стр.

Похожие книги