Ответы по параграфу 3.5 Программирование циклических алгоритмов
Задание 2. Дана последовательность операторов. Сколько раз будет повторен цикл и какими будут значения переменных a, b, s?
a:=1; b:=2; while a+b<8 do begin a:=a+1; b:=b+2; end; s:=a+b
Ответ: 2 раза будет повторен цикл, a=3, b=6, s=9.
Задание 3. Требовалось написать программу вычисления факториала. Программист написал его неправильно. Ниже представлена программа, в которой содержатся ошибки. Найдите ошибки и внесите исправления.
Задание 4. Проанализируйте следующий цикл. В чём его особенность?
Значение переменной "c" будет типом boolean, то есть значение будет true или false. Выражение c:=a=b проверяет равенство "a" и "b" и будет делать проверку, пока a < b. В этом случае программа зациклится.
Задание 5. Запишите на языке Паскаль программы решения задач № 26-30 из параграфа 2.4. Используйте оператор while.
program z26; var a, b, c: real; n: integer; BEGIN readln(a, b, c); n:=0; while a>c do begin a:=a+0.15*a-b; n:=n+1; end; writeln ('В течение ', n, ' лет'); END. program z27; var a, b, n: integer; BEGIN write('Сумма слагаемых первых членов последовательности: '); readln(b); a:=5; n:=1; while a<b do begin a:=a+(a+4); n:=n+1; end; writeln (n, ' слагаемых'); END. program z28; var m,k: longint; begin write('Введите число: '); readln(m); k:=0; while m<>0 do begin k:=k+1; m:=m div 10; end; writeln('Кол-во цифр: ',k); end. program z29; var m, d: real; n:integer; begin m:=10000; d:=2*m; n:=0; while m<d do begin m:=m*1.05; //Подсчитываем количество рублей через год n:=n+1; //Считаем количество лет end; writeln('Сумма увеличится в два раза через ',n, ' лет'); end. program z30; var m, t, X: real; begin write('Введите количество амёб: '); readln(X); m:=1; t:=0; while m<X do begin m:=m*2; t:=t+3; end; writeln('Пройдет ',t, ' часов'); end.
Задание 6. Дана последовательность операторов. Сколько раз будет повторен цикл и какими будут значения переменных a, b, s?
a:=1; b:=1; repeat a:=a+1; b:=b*2; until b>8; s:=a+b
Ответ: 4 раза будет повторен цикл, a=5, b=16, s=21.
Задание 7. Напишите программу, в которой осуществляется ввод целых чисел (ввод осуществляется до тех пор, пока не будет введен ноль) и подсчет суммы и среднего арифметического введенных положительных чисел. Используйте оператор repeat.
program z_7; var m, n: integer; s: real; begin n:=0; s:=0; repeat readln (m); if m>0 then begin n:=n+1; s:=s+m end; until m=0; writeln('Сумма положительных чисел: ', s); s:=s/n; writeln('Среднее арифметическое положительных чисел: ', s) end.
Задание 8. Напишите программу, в которой осуществляется ввод целых чисел (ввод осуществляется до тех пор, пока не будет введен ноль) и определение максимального (наибольшего) из введённых чисел. Используйте оператор repeat.
program z_8; var m, s: integer; begin repeat readln (m); if m>s then s:=m; until m=0; writeln('Наибольшее число: ', s) end.
Задание 9. Напишите программы вычисления наибольшего общего делителя НОД двух целых чисел:
а) используя оператор repeat:program z9_a; var a,b,с: integer; begin write('Введите два числа: '); readln(a, b); if a < b then с := a + 1 else с := b + 1; repeat с := с - 1 until (a mod с = 0) and (b mod с = 0); write('NOD = ', с) end.
б) используя оператор while:
program z9_b; var a,b: integer; begin writeln('Введите два числа: '); readln(a, b); while a <> b do if a > b then a := a - b else b := b - a; writeln('NOD = ', a); end.
Задание 10. Сколько раз будет выполнен цикл?
а) for i:=0 to 15 do s:=s+1;
б) for i:=10 to 15 do s:=s+1;
в) for i:=-l to 1 do s:=s+1;
г) for i:=10 to 10 do s:=s+1;
д) k:=5; for i:=k-1 to k+1 do s:=s+1;
а) 16 разб) 6 раз
в) 3 раза
г) 1 раз
д) 3 раза
Задание 11. Напишите программу, которая 10 раз выводит на экран ваши имя и фамилию.
program z11; var a, b: string; i: integer; begin write('Введите имя: '); readln(a); write('Введите фамилию: '); readln(b); for i:=0 to 9 do writeln (a,' ',b); end.
Задание 12. Напишите программу, выводящую на экран изображение шахматной доски, где черные клетки изображаются звёздочками, а белые – пробелами.
program z11; var a, b: string; i, k, n: integer; begin a:='*'; b:=' '; for i:=0 to 3 do begin for k:=0 to 3 do write (b,a); writeln; for n:=0 to 3 do write (a,b); writeln; end; end.
Задание 13. Напишите программу, которая вычисляет сумму:
а) первых n натуральных чисел;
б) квадратов первых n натуральных чисел;
в) всех чётных чисел в диапазоне от 1 до n;
г) всех двузначных чисел.
program z13; var i, z1, z2, z3, z4, n: integer; BEGIN write('Введите n: '); readln(n); z1 := 0; z2 := 0; z3 := 0; z4 := 0; for i := 1 to n do begin z1 := z1 + i; z2 := z2 + sqr(i); if i mod 2 = 0 then z3 := z3 + i; end; for i := 10 to 99 do z4 := z4 + i; writeln('Сумма первых n натуральных чисел: ', z1); writeln('Сумма квадратов первых n натуральных чисел: ', z2); writeln('Сумма всех четных чисел: ', z3); writeln('Сумма всех двухзначных чисел: ', z4); END.
Задание 14. Напишите программу, которая генерирует 10 случайных чисел в диапазоне от 1 до 20, выводит эти числа на экран и вычисляет их среднее арифметическое.
program z13; var i, s, d: integer; sr: real; BEGIN s:=0; for i:=1 to 10 do begin d:= random(20)+1; writeln(i, ' число: ', d); s:=s+d end; sr:=s/i; writeln('Среднее арифметическое: ', sr) END.
Задание 15. Запишите на языке Паскаль программы решения задач 33 и 34 из параграфа 2.4. Используйте оператор for.
program z15_1; var i, a, b, k: integer; BEGIN write('Введите первый множитель: '); readln (a); write('Введите второй множитель: '); readln (b); k:=0; for i:=1 to b do begin k:=k+a; end; writeln(a, '*', b, '=', k) END.
В программе мы вводим изначальную численность населения. Далее она считает количество населения в каждый год и итогом будет количество населения через три года.
program z15_2; var i: integer; k, a: real; BEGIN write('Введите население города: '); readln (a); k:=0; for i:=1 to 3 do begin a:=1.05*a; writeln(i, ' год: ', a, ' человек') end; writeln('Численность населения через 3 года: ', a) END.
Задание 16. Напишите программу, которая выводит на экран таблицу степеней двойки (от нулевой до десятой).
Десятую степень не добавили в цикл, она отрабатывает после цикла и выводит эту степень ровно по вертикали.program z16; var i, k, a: integer; BEGIN a:=2; k:=1; writeln('Таблица степеней двойки:'); writeln('0 1'); for i:=1 to 9 do begin k:=k*a; writeln(i,' ',k); end; k:=k*a; writeln('10 ',k); END.
Задание 17. Напишите программу, которая выводит на экран таблицу умножения на n (n – целое число от 2 до 10, вводимое с клавиатуры).
program z17; var i, k, n: integer; BEGIN write('Введите n>>'); readln(n); for i:=2 to 10 do begin k:=n*i; writeln(n,' * ',i,' = ',k) end; END.
Задание 18. Какой из трёх рассмотренных операторов цикла является, по вашему мнению, основным, т.е. таким, что им можно заменить два других?
Рассмотренные операторы:repeat until
while do
for 1 to n do
Я думаю, что циклы "repeat until" и "while do" могут заменить другие циклы. Цикл "for" не сможет заменить других, так как в этом цикле происходит известное количество повторений. А в двух других разница в том, что цикл "repeat until" сначала выполняется тело цикла и потом проверяется условие, а с циклом "while do" наоборот. Решение заданий из учебника Информатика 8 класс Босова, параграф 3.5 Программирование циклических алгоритмов. Программирование циклов с заданным условием продолжения работы, с заданным условием окончания работы, с фиксированным числом повторений, различные варианты программирования циклического алгоритма.