1. Циклы в Паскале

advertisement
Циклы в Паскале. Обработка последовательностей
1. Циклы в Паскале
Многократно повторяющийся участок программы называется циклом. Одно
повторение цикла называется итерацией. Операторы, выполняющиеся в цикле,
называется телом цикла.
В языке Паскаль существует три типа циклов:
1) цикл с параметром (цикл for);
2) цикл с предусловием (цикл while);
3) цикл с постусловием (цикл repeat).
Оператор цикла с параметром
Цикл с параметром используется в тех случаях, когда число повторений
цикла известно заранее. Синтаксическая диаграмма цикла for изображена на рис.
1.
Рис. 1. Синтаксическая диаграмма цикла с параметром
Идентификатор, указанный на диаграмме, называется параметром цикла
или счетчиком цикла. Выражения определяют нижнюю и верхнюю границы
изменения параметра цикла. Оператор, повторяемый в цикле, называется телом
цикла. Выполнение цикла с использованием ключевого слова to происходит в
следующем порядке:
1) вычисляются значения нижней и верхней границы;
2) параметру цикла (счётчику) присваивается значение нижней границы;
3) параметр цикла сравнивается со значением верхней границы и, если
значение параметра цикла меньше или равно значению верхней границы, то
происходит выполнение тела цикла, иначе работа цикла завершается;
4) значение параметра цикла автоматически увеличивается на 1 и
происходит возврат к пункту 3.
При использовании ключевого слова downto на очередной итерации цикла
счётчик автоматически уменьшается на 1 и выход из цикла происходит тогда,
когда счётчик станет меньше значения верхней границы.
Особенности цикла с параметром:
1) Счетчик цикла инициализируется автоматически значением
нижней
границы при входе в цикл, никакие другие действия по установке начального
значения параметра цикла не требуются.
2) Внутри цикла увеличение или уменьшение параметра происходит
автоматически, поэтому его изменение вручную недопустимо (это может привести
к непредсказуемым последствия и является семантической ошибкой).
3) Цикл с параметром умеет увеличивать или уменьшать счетчик цикла
только с шагом 1. Если требуется увеличение или уменьшение счетчика с иным
шагом (например, с шагом 2), то требуется использовать другие типы циклов (с
предусловием или с постусловием).
4) Количество повторений цикла определяется значениями верхней и
нижней границ, изменение верхней и нижней границ цикла во время работы цикла
недопустимо.
5) Возможны случаи, когда тело цикла выполниться ноль раз.
6) В качестве параметра цикла должна использоваться переменная
порядкового типа. В частности, тип Real использовать нельзя (семантическая
ошибка).
7) Если в цикле должно выполняться более одного оператора, тело цикла
оформляется с помощью составного оператора (ведь он является частным случаем
оператора в языке Паскаль).
Пример 1.1. Выводим квадраты чисел от 2 до 10.
Var x:Integer;
...
For x:=2 To 10 Do WriteLn(x*x);
Пример 1.2. Выводим прописные буквы латинского алфавита.
Var ch:Char;
...
For ch:='A' To 'Z' Do Writeln(ch);
Пример 1.3. Использование цикла с downto. Будут выведены все нечетные
двузначные числа в порядке убывания.
Var i:Integer;
...
For i:=99 Downto 11 Do
if
i mod 2 = 1
Пример 1.4.
0,
функции f(x)=  1
 2 x  4 ,
then
WriteLn(i);
Использование составного оператора. Вывод значений
x2
x2
в точках с целочисленными значениями x на отрезке
[1;10].
Var x:Integer; y:Real
...
For x:=1 To 10 Do
Begin
If x=2
Then y:=0
Else y:=1/(2*x–4);
WriteLn('f(',x,')=',y:7:5);
End;
Цикл с параметром очень часто используется для вычисления суммы или
произведения элементов некоторой числовой последовательности.
Пример 1.5. Вычисление суммы S=1+2+3+…+N, где N – произвольное
натуральное число.
Var i,N,S:integer;
Begin
ReadLn(N);
S:=0;
For i:=1 To N Do
S:=S+i;
WriteLn(‘S=’,S)
End.
Начальное значение суммы обычно берется равным 0, а произведения – 1.
Но не нужно считать, что этот прием универсален, в некоторых задачах
начальное значение суммы или произведения определяется каким-либо условием и
«стандартное» начальное значение использовать не получится.
При
решении
задач,
требующих
выделения
цифр
целого
числа,
используются следующие приемы:
1) если число x может быть отрицательным, перед выделением цифр
отбрасываем знак числа с помощью функции abs(), определяющей абсолютную
величину, например, x:=abs(x);
2) для выделения последней цифры числа используем выражение x mod 10;
3) для того, чтобы «отрубить» от числа последнюю цифру, сделав число на
одну цифру короче, используем оператор x:=x div 10;
4) повторяя в цикле приемы 2) и 3) можно выделить все цифры числа.
Пример 1.6. Дано целое пятизначное число N, определить произведение
цифр этого числа.
Var n,p,i:integer;
Begin
WriteLn(‘Введите целое пятизначное число’);
ReadLn(n);
n:=abs(n);
p:=1;
For i:=1 To 5 Do
Begin
p:=p*(n Mod 10);
n:=n Div 10
End;
Writeln(‘Произведение цифр Вашего числа - ’,p)
End.
Пример 1.7.
Дано
семизначное
натуральное
число
N
(1 000 000 ≤ N ≤ 9 999 999). Требуется написать программу для определения,
является ли оно палиндромом (палиндромом – это число, которое одинаково
читается слева направо и справа налево).
Program palindrom;
{программа написана в Паскаль ABC}
Var n,m,r,i: integer;
Begin
WriteLn(‘Введите семизначное натуральное число’);
ReadLn(n);
m:=n;
{Делаем копию исходного числа}
r:=0;
{Получаем «перевертыш» числа}
For i:=1 To 7 Do
Begin
r:=r*10+m Mod 10;
m:=m Div 10
End;
If r=n
{Сравниваем исходное число с «перевертышем»}
Then Writeln(‘Число ‘,n,’ является палиндромом’)
Else Writeln(‘Число ‘,n,’ палиндромом не является’)
End.
Построим трассировочную таблицу для N=1253984.
Таблица 1. Трассировочная таблица для программы “palindrom”
i
m
r
–
1253984 0
1
125398
0*10+1253984 mod 10=4
2
12539
4*10+125398 mod 10=48
3
1253
48*10+12539 mod 10=489
4
125
489*10+1253 mod 10=4893
5
12
4893*10+125 mod 10=48935
6
1
48935*10+12 mod 10=489352
7
0
489352*10+1 mod 10=4893521
Ответ: Число 1253984 палиндромом не является.
Download