Предмет: Информатика
ГДЗ Учебник по Информатике 8 класс Босова

Решение заданий к параграфу 3.5 «Программирование циклических алгоритмов» | Информатика 8 класс Босова


Задание 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 z7;
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 z8;
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 z12;
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 z14;
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. Какой из трёх рассмотренных операторов цикла является, по вашему мнению, основным, т.е. таким, что им можно заменить два других?

По моему мнению, основным оператором цикла является while do. Его можно использовать для замены как for 1 to n do, так и repeat until, но не наоборот (или с большими сложностями).

  • Почему while do можно заменить на repeat until?
    repeat until — это while с инвертированным условием и гарантированным первым выполнением. Пример эквивалентной замены:

    repeat  S;  // тело циклаuntil C;  // условие выхода

    Эквивалентно:

    S;  // сначала выполняется телоwhile not C do  // пока условие выхода НЕ истинно  S;
  • Почему for 1 to n do можно заменить на while do?
    for — это просто синтаксический сахар для while с счётчиком. Пример эквивалентной замены:

    for i := 1 to n do  S;

    Эквивалентно:

    i := 1;while i <= n do begin  S;  i := i + 1;end;
  • Почему while do нельзя (или сложно) заменить на repeat until или for?

    • repeat until не может напрямую имитировать while, потому что repeat всегда выполняет тело хотя бы раз, а while может не выполнить ни разу. Чтобы заменить while через repeat, нужно добавлять проверки (например, с if), что усложняет код.
    • for вообще не подходит для условных циклов, где нет фиксированного числа итераций.

Таким образом, while do является наиболее фундаментальным и универсальным: он позволяет реализовать оба других цикла. repeat until тоже может заменить while (с доп. логикой), но while считается базовым в большинстве учебников по алгоритмам и программированию.


Решение заданий из учебника Информатика 8 класс Босова, параграф 3.5 Программирование циклических алгоритмов. Программирование циклов с заданным условием продолжения работы, с заданным условием окончания работы, с фиксированным числом повторений, различные варианты программирования циклического алгоритма.

Поделиться
Выберите параграф или тестовое задание:

Глава 1. Математические основы информатики

1.1 Системы счисления 1.2 Представление чисел в компьютере 1.3 Элементы теории множеств и комбинаторики 1.4 Элементы алгебры логики

Глава 2. Основы алгоритмизации

2.1 Алгоритмы и исполнители 2.2 Способы записи алгоритмов 2.3 Объекты алгоритмов 2.4 Основные алгоритмические конструкции

Глава 3. Начала программирования

3.1 Общие сведения о языке программирования Паскаль 3.2 Организация ввода и вывода данных 3.3 Программирование линейных алгоритмов 3.4 Программирование разветвляющихся алгоритмов 3.5 Программирование циклических алгоритмов

Интерактивные тесты из Электронного приложения к учебнику «Информатика» для 8 класса (https://lbz.ru/metodist/authors/informatika/3/eor8.php)

§ 1.1§ 1.2§ 1.3§ 1.4Глава 1§ 2.1§ 2.2§ 2.3§ 2.4Глава 2§ 3.1§ 3.2§ 3.3§ 3.4§ 3.5Глава 3