- •Алгоритмизация и основы программирования
- •1. Технология подготовки и решения задач на компьютере
- •Понятие об алгоритмических языках
- •2. Этапы решения задач на компьютере
- •Этапы процесса тестирования
- •Характерные ошибки программирования.
- •3. Основы языка программирования Паскаль
- •3.1. Алфавит языка программирования
- •Правила написания идентификаторов:
- •Константы
- •3.2. Выражения, операции
- •3.3. Операторы
- •3.3.1. Оператор присваивания
- •3.3.2. Операторы перехода
- •3.4. Использование комментариев для пояснений
- •3.5. Общая структура программ в Паскале
- •1. Раздел объявлений и соглашений
- •2. Раздел текстов процедур и функций
- •3. Раздел основного блока программы
- •3.6. Основные операторы модуля crt в turbo pascal
- •3.7. Типы данных
- •3.7.1. Целочисленный тип
- •3.7.2. Вещественные типы
- •3.7.3. Символьный тип
- •3.7.4. Логический тип (boolean)
- •Простые логические выражения
- •Составное логическое выражение
- •Перечисляемый тип
- •Интервальный тип
- •3.8. Ввод-вывод данных
- •Вывод данных
- •Способы представления вещественных чисел
- •Ввод данных
- •3.9. Математические функции и процедуры
- •Взаимные преобразования чисел
- •4. Конструкции языка программирования Паскаль
- •4.1. Организация ветвления
- •4.1.1. Условные операторы. Оператор if
- •4.1.2. Конструкция множественного выбора Case … Of
- •4.2. Операторы цикла
- •4.2.1. Оператор цикла For
- •4.2.2. Оператор цикла Repeat..Until
- •4.2.3. Оператор цикла While..Do
- •5. Структурированные типы данных
- •Одномерные массивы
- •Доступ к элементам массива
- •Заполнение массива
- •6. Подпрограммы пользователя. Назначение Преимущества модульности
- •Подпрограмма
- •Список используемой и рекомендуемой литературы
4.2. Операторы цикла
Циклы позволяют многократно выполнять отдельный оператор или последовательность операторов, причем при этом нет необходимости записывать в тексте программы одинаковые операторы несколько раз.
4.2.1. Оператор цикла For
Конструкция For … To (DownTo) …Do называется перечисляемым циклом, или циклом со счетчиком.
Синтаксис:
For <Переменная цикла> :=<Нач. значение> To (DownTo) <Кон. значение> Do
Begin
<блок операторов>
End;
<Переменная цикла> (счетчик цикла) автоматически увеличивается на единицу (от начального значения до конечного) после каждого выполнения <блока операторов> (тела цикла). Счетчик цикла может быть целочисленного, символьного или логического типа.
Если требуется, чтобы <Переменная цикла> не увеличивалась, а уменьшалась, то вместо слова To используется слово DownTo. Конструкция цикла с заданным количеством повторений изображена на рис.4.1.
i — параметр цикла;
n_nach — начальное значение параметра цикла;
n_kon_ - конечное значение параметра цикла;
1 — шаг изменения параметра цикла;
Рис. 4.1. Блок-схема конструкции цикла с заданным количеством повторений
Повторение цикла прекращается, если значение <Переменной цикла> превысит <Кон. значение>. Если заданы "противоречивые" начальное и конечное значения счетчика цикла, то цикл может не выполниться ни разу (for i:=1 to 0 do …).
Пример: печать первых десяти натуральных чисел на экран.
for i:=1 to 10 do
begin
writeln(i);
end;
Задача. Найти сумму заданного количества натуральных чисел, начиная с первого.
Var i,s,n:integer;
BEGIN
Writeln(‘Ведите количество’);
Readln(n);
for i:=1 to n do
begin
s:=s+i;
end;
writeln(s);
END.
4.2.2. Оператор цикла Repeat..Until
Конструкция Repeat..Until является называется циклом с постусловием.
Синтаксис:
Repeat
<блок операторов>;
Until <условие>;
Выполняется <блок операторов>, затем проверяется условие выхода из цикла, записанное после слова Until. Если условие выполняется, то цикл завершается, в противном случае вновь выполняется <блок операторов> и вновь проверяется условие и т. д.
Особенности:
1. <Блок операторов> обязательно выполнится хотя бы один раз.
2. Внутри конструкции Repeat..Until не нужны операторные скобки Begin...End, хотя их использование не запрещается.
3. В теле цикла (в отличие от цикла For) необходимо предусмотреть изменение значения параметра цикла!!!
Пример 1. Печать первых десяти натуральных чисел.
i:=1; {присвоение начального значения параметру цикла}
repeat
writeln(i);
i:=i+1; {изменение значения параметра цикла}
until (i<=10);
Пример 2. Определение стоимости покупки при ее указанной предельной сумме.
Var х, к, р, s: Integer;
Begin
WriteLn('Предельная сумма — ');
ReadLn(p);
s:=0;
Repeat
WriteLn('Введите цену товара и его количество9); ReadLn(x,k);
s:=s+x*k;
WriteLn('Стоимость покупки равна',s);
Until s>p;
WriteLn('Суммарная стоимость покупки превысила предельную сумму');
End.
Пример 3. Задержка выполнения программы до нажатия любой клавиши.
…
Writeln("Нажмите любую клавишу");
Repeat
Until KeyPressed;
Readkey;
…
При нажатии клавиш данные поступают в буфер клавиатуры и хранятся там до тех пор, пока не будут считаны процедурами или функциями ввода данных, либо сам буфер не будет очищен программно.
Пример 4 .
Алгоритм Евклида — это алгоритм нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел.
Алгоритм Евклида нахождения НОД основан на следующих свойствах этой величины. Пусть х и у одновременно не равные нулю целые неотрицательные числа и пусть х>у, тогда, если у=0, то НОД(х, у)=х, а если у0, то для чисел х, у и r, где r — остаток от деления х на у выполняется равенство НОД(х, у)=НОД(у, r).
Например, пусть х=48, а у=18, найдем их наибольший общий делитель.
x |
y |
|
Результаты |
48 |
18 |
|
|
48 mod 8=12 |
18 |
x>y |
НОД(48,18)=НОД(12,18) |
12 |
18 mod 12=6 |
x<y |
НОД(12,18)=НОД(12,6) |
12 mod 6=0 |
6 |
x>y |
НОД(12,6)=НОД(0,6) |
0 |
6 |
x=0 |
НОД(0,6)=6 |
Таким образом, НОД(48, 18)=6.
Написать программу нахождения наибольшего общего делителя (НОД) двух неотрицательных чисел. Для решения данной задачи воспользуемся циклом с постусловием:
Program Euclid;
Var х, у: Integer;
Begin
Writeln('Bвeдитe два числа');
Readln(x,y);{вводим два целых числа}
Repeat {выполнять}
If x>y Then
x:=x Mod у
Else y:=y Mod x;
Until (x=0) Or (у=0);{до тех пор, пока одно из чисел не станет равно нулю}
Writeln('HOД=',х+у); {вывод НОД - без условного оператора, так как одно из чисел обязательно равно нулю}
ReadLn;
End.