|
Циклы с условием Цикл с неизвестным числом шагов Пример: требуется отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача 1: Ввести целое число и определить число цифр в нем. Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик. Проблема: Неизвестно, сколько шагов надо сделать. Решение: Надо остановиться, когда n = 0, т.е. надо делать «пока n <> 0». var n, k: integer; begin writeln('Введите целое число'); read(n); k := 0; while n <> 0 do begin k := k + 1; n := n div 10; end; writeln('В числе ', n, ' нашли ', k, ' цифр'); end. Цикл с предусловием while <условие> do begin {тело цикла} end; Особенности цикла while: • можно использовать сложные условия: while (a < b) and (b < c) do begin {тело цикла} end; • если в теле цикла только один оператор, слова begin и end можно не писать: while a < b do a := a + 1; • условие пересчитывается каждый раз при входе в цикл • если условие на входе в цикл ложно, цикл не выполняется ни разу a := 4; b := 6; while a > b do a := a – b; • если условие никогда не станет ложным, программа зацикливается a := 4; b := 6; while a < b do d := a + b; Задание 1. Сколько раз выполняется цикл? а) a := 4; b := 6; while a < b do a := a + 1; б) a := 4; b := 6; while a < b do a := a + b; в) a := 4; b := 6; while a > b do a := a + 1; г) a := 4; b := 6; while a < b do b := a - b; д) a := 4; b := 6; while a < b do a := a - 1; Цикл с постусловием repeat {тело цикла} until <условие>; Особенности цикла repeat: • можно использовать сложные условия • цикл выполняется хотя бы один раз • условие пересчитывается каждый раз при выходе из цикла • цикл заканчивает выполнение когда условие становится верным • если условие на выходе цикла всегда ложно, программа зацикливается
Задание 2. Сколько раз выполняется цикл? а) a := 4; b := 6; repeat a := a + 1; until a > b; б) a := 4; b := 6; repeat a := a + b; until a > b; в) a := 4; b := 6; repeat a := a + b; until a < b; г) a := 4; b := 6; repeat b := a - b; until a < b; д) a := 4; b := 6; repeat a := a + 2; until a < b; Решим задачу 1 с использованием цикла с постусловием: program qq; var n,k: integer; Begin Read(n); k:=0; repeat n:=n div 10; k:=k+1; until n = 0; writeln(‘k=‘,k); end. Задача 2. Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10. program qq; var n, a, s: integer; Begin Read(n); s:=0; repeat a:= n mod 10; s:=s+a; n:=n div 10; until n = 0; if s=10 then writeln(‘верно‘); end. Задание 3. Определить результат выполнения фрагмента программы:
Задача 3. Составить программу нахождения количества делителей числа n (значение n вводится с клавиатуры). Решение: Делители числа n будут находиться в диапазоне от 1 до n. Чтобы найти количество делителей нужно проверить является ли число x делителем числа n. (x= 1, 2, 3, …, n). Read(n); k:=0; x:=1; While x<=n do Begin If n mod x =0 then k:=k+1; x:=x+1; End; Задача 4. Составить программу нахождения всех простых чисел n от 1 до 1000 (значение n вводится с клавиатуры). Число называется простым, если у него нет делителей кроме 1 и самого числа. Решение: Нужно подсчитать делители в диапазоне от 2 до n-1 для числа n, если количество таких делителей равно 0, то число простое. Алгоритм будет содержать вложенный цикл. Исполнение вложенных циклов происходит так: для каждого значения параметра внешнего цикла происходит полная «прокрутка» внутреннего цикла. Program z3; Var n, x, k:integer; begin For n:=1 to 1000 do begin K:=0; x:=2; While x<=n-1 do Begin If n mod x =0 then k:=k+1; X:=x+1; End; If k=0 then writeln (n, ‘-простое’); End; End. |
Обратная связьЗадачи для самостоятельной работы:
|