Лекция 10

Download Report

Transcript Лекция 10

При составлении программ часто
возникают ситуации, когда
1. Заранее не известно количество
повторений цикла;
2. Переменная – счетчик цикла
должна изменяться с шагом ≠ 1.
В таких случаях используют
Циклы с условием
- Это повторение блока команд, до тех пока
выполняется (или не выполняется)
некоторое условие
Рассмотрим пример: Найти все двузначные числа, кратные 7.
Начало
k:=14
Нет
K<=99
Да
Вывести k
k:=k+7
Конец
Program Kratn_7;
Uses Crt;
Var k: integer;
Begin
Clrscr;
k:=14;
While k<=99 do
Begin
Writeln(k);
k:=k+7;
end;
readln;
end.
При использовании циклов с условием
необходимо всегда заботиться о том, чтобы
переменная, использующаяся в условии
завершения цикла, обязательно изменялась в теле
цикла. Это может быть команда присваивания ( как
в данной программе) или команда ввода.
Пример 1 При каком количестве слагаемых последовательности их сумма
превысит 10?
1
1
2

1
 ... 
3
1
k
Начало
sum:=0 k:=1
Нет
sum<=10
Да
Sum:=sum+1/k
k:=k+1
Kolichestvo elementov
=k
Конец
Program Ex;
Uses Crt;
Var sum, x: real;
K: integer;
Begin
Clrscr;
sum:=0;
k:=1;
While sum<=10 do
Begin
Sum:=sum+1/k;
k:=k+1;
end;
Writeln('Kolichestvo elementov=',k);
readln;
end.
Решаем задачи
Задача 1 Написать программу, которая «задумывает» число
в диапазоне от 1 до 9 и предлагает пользователю угадать это
число за 5 попыток.
Пояснения к программе:
1. Компьютер может «задумать» число с помощью функции
Random.
2. Количество повторений цикла в этой задаче может быть от 1
до 5 – то есть, заранее не известно.
3. Так как пользователь должен сделать хотя бы одну попытку,
то логично использовать команду цикла Repeat…until.
Program Ex;
const Npop=5;
Var pc, igrok, n: integer;
Begin
Randomize;
pc:=random(9)+1;
Writeln ('Game "Угадай число" ');
Writeln (‘Компьютер загадывает число от 1 до 9’);
Writeln (‘Вы должны угадать это число');
Writeln (‘за 5 попыток');
repeat
n:=n+1;
Write (‘Введите число- ');
readln(igrok);
until (n=npop) or (pc=igrok);
if pc = igrok
then Writeln (‘Ok!')
else Writeln (‘wrong number- ',pc);
readln; end.
Задача 2. Найти все цифры и их количество
заданного произвольного целого числа x>0 .
Для того, чтобы не «потерять» заданное число, введем
переменную y, значение которой сначала будет =x.
Последовательно будем находить целую часть и остаток от
деления числа y на 10.Именно остаток от деления будет
очередной цифрой x. На каждом шаге будем изменять число y:
присваивать ему значение целой части от деления y на 10.Для
нахождения количества цифр организуем счетчик, значение
которого будет увеличено на 1.Процесс повторяется пока
значение числа y не станет меньше 1.
начало
Ввод целого числа
0<x<10
k:=0;y:=x
Цифры заданного
числа x:
r:=y mod 10;
y:=y div 10;
k:=k+1;
k- ая цифра = r
Нет
y<>0
Да
Число Х содержит
k цифр
Конец
Program Zifry;
Uses Crt;
var x, y, c: longint;
r, k: integer;
Begin
clrscr;
Writeln ('Enter celoe chislo do 10
znakov');
Readln (x);
writeln;
y:=x; k:=0;
Writeln (‘cifry zadannogo chisla:');
repeat
r:= y mod 10;
y:=y div 10;
k:=k+1;
Writeln (k,' zifra = ',r);
until y<>0;
Writeln ('Chislo - ',x,' coderjit ', k, ' zifr');
readln;
end.
Таблица сравнения работы операторов While, repeat и for
Цикл с предусловием While
( пока условие истинно)
Цикл с постусловием repeat
( до истинности условия)
Цикл со счётчиком for
1.
До начала цикла должны быть сделаны начальные установки 1. Начальная установка переменной
переменных, управляющих условием цикла, для корректного входа в счетчика циклов до заголовка не
цикл
требуется
2. В теле цикла должны присутствовать операторы, изменяющие 2. Изменение в теле цикла значений
переменные условия так, чтобы цикл через некоторое число итераций переменных, стоящих в заголовка
завершился
цикла не допускается
3. Цикл
истинно
работает
пока
условие 3. Цикл
ложно
работает
пока
условие 3. Количество итераций цикла
неизменно и точно определяется
значениями нижней и верхней
границ и шага цикла
4. Цикл завершает работу, когда 4. Цикл завершает работу, когда 4. Нормальный ход работы цикла
условие становиться ложным
условие становиться истинным
может быть нарушен оператором
Goto или процедурами Break и
Continue
5Цикл может не выполниться ни 5. Цикл выполняется как минимум 5. Цикл может не выполниться ни
разу, если исходное значение один раз
разу,
если шаг
цикла
будет
условия при входе в цикл равно
изменять значение счётчика от
False
нижней границы в направлении,
противоположном верхней границе
6. Если в теле цикла требуется
более
одного
оператора,
то
необходимо
использовать
составной оператор
6.
Независимо
от
количества
операторов
в
теле
цикла
использование
составного
оператора не требуется
Решаем вместе
Написать программу, которая проверяет знание
учениками таблицы умножения. Сомножители
определяются с помощью функции Random.
Каждому ученику дается 5 попыток, за которые
программа выставляет оценку. Программу написать
3-мя способами – с использованием циклов For,
While и Repeat.
Проверь себя…..
1.Когда нельзя использовать цикл
FOR?
2.Как записывается цикл WHILE?
3.Как записывается цикл REPEAT?
4.Назовите различия циклов WHILE и
REPEAT.
Подведем итог
Сегодня мы познакомились с логическими
циклами While и Repeat.
Узнали об их отличиях и особенностях
применения.
Рассмотрели примеры использования цикла
WHILE.
Обратили особое внимание на
необходимость изменения в цикле
переменной, которая участвует в условии
завершения цикла.