Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по TURBO PASCAL.doc
Скачиваний:
18
Добавлен:
04.11.2018
Размер:
1.13 Mб
Скачать

Руками не трогать!

Все могут смотреть, но никто, кроме служебных работников, трогать не может!

Существует ещё одна разновидность цикла For, в котором вместо служебного слова to используется downto. В этом случае переменная цикла будет каждый раз уменьшать своё значение, а не увеличивать. Например, цикл

For i := 5 downto 1 do

begin

write (i, ’ ’);

end ;

напечатает:

5 4 3 2 1

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

Примечание.

По поводу синтаксиса языка Паскаль часто возникает такой

Вопрос: А надо ли ставить точку с запятой после слова do?

Ответ: Нет, ни в коем случае.

Вопрос: Почему?

Ответ: Потому что в этом месте ещё не закончен оператор цикла. После служебного слова do нужно указать оператор, который и будет телом цикла. Если вы поставите здесь точку с запятой, то компьютер посчитает, что телом цикла является пустой оператор и спокойно будет выполнять его (то есть ничего не выполнять) необходимое число раз. А то, что вы хотели записать в теле цикла, будет выполнено как обычный оператор – только один раз. Например:

For i := 1 to 10 do ; {Тело цикла – пустой оператор}

Writeln (i);

Вместо ожидаемых 10 чисел на экран выведется только одно число – число 10 – это то значение, которое принимает переменная i по завершению работы цикла.

Параметр цикла может быть не только числом, но и символом. В этом случае начальные и конечные значения тоже должны быть символами, а переменная цикла будет перебирать все значения между ними в том порядке, в каком они указаны в таблице ASCII.

program Abc;

var c : char;

begin

For c := ’a’ to ’z’ do

begin

write (c); { выводим буквы в строчку }

end

end.

На экране будет напечатан весь английский алфавит в одну строчку:

abcdefghijklmnopqrstuvwxyz

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

    1. Нахождение суммы

Циклы часто используют для нахождения суммы каких-либо последовательностей. Например, сумму натуральных чисел от 1 до 10. Можно, конечно, решить эту задачу таким способом:

s := 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 ;

Но у этого способа есть два недостатка:

  1. Решение громоздко и банально.

  2. Решение не поддается корректировке. Например, если мы захотим изменить эту программу так, чтобы она находило сумму первых 100 натуральных чисел, то размер программы увеличится почти в 10 раз.

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

обнулить счётчик суммы

начало цикла

прибавить к счётчику суммы очередное слагаемое

конец цикла

вывести значение счётчика суммы на экран

То есть для нахождения суммы мы должны специально выделить переменную, в которой эта сумма будет храниться. Пусть это будет переменная s. Вначале сумму нужно обнулить, то есть переменной s присвоить 0. Потом, уже в теле цикла, мы должны будем каждый раз увеличивать значение переменной s на значение очередного слагаемого. Этим слагаемым будет переменная цикла, так как именно она будет поочерёдно принимать все интересующие нас значения.

Переведём всё вышесказанное на язык Паскаль:

program The_sum_of_natural_numbers_from_1_to_10;

var s, i : integer;

begin

s := 0; { вначале сумма равна 0 }

For i := 1 to 10 do

begin

s := s + i { суммируем }

end;

writeln (’Сумма чисел от 1 до 10 равна ’, s)

end.

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

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