Показаны сообщения с ярлыком while. Показать все сообщения
Показаны сообщения с ярлыком while. Показать все сообщения

12.03.2022

Циклический алгоритм, операторы цикла while, repeat, for, использование в решении задач

Циклический алгоритм, операторы цикла while, repeat, for, использование в решении задач

По своей структуре алгоритмы делят на следующие типы:

  • линейный
  • разветвляющийся
  • циклический

В этой публикации речь пойдет о циклическом алгоритме и его реализации в языке программирования Паскаль, приведем решения задач с использованием операторов цикла.

Циклический алгоритм – это алгоритм, в котором действия повторяются многократно.

В языке Паскаль для описания циклического алгоритма используют операторы цикла, такие как:

  • оператор цикла с предусловием while
  • оператор цикла с постусловием repeat
  • оператор цикла с параметром for, его еще называют оператор цикла с счетчиком.

Оператор цикла с предусловием while

Формат оператора

Перевод слов

while условие do

begin

операторы;

end;

Пока условие делай

тело цикла

Как работает оператор цикла while

Пока условие ИСТИНА выполняются операторы между словами begin и end (тело цикла).

Приведем примеры фрагментов программы с оператором цикла while

Пример 1

k:=2;

while k<=4 do

begin

k:=k+1;

end;

Пока условие k<=4 ИСТИНА выполняется оператор k:=k+1 (тело цикла).

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

2

2<=4 да

2

2+1=3

3<=4 да

3

3+1=4

4<=4 да

4

4+1=5

5<=4 нет

Таким образом, тело цикла выполнилось 3 раза. Переменная k управляет работой цикла.

Пример 2

k:=10;

while k<5 do

begin

k:=k+1;

end;

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<5

1

10

10<5 нет

В этом примере тело цикла ни разу не выполнилось, так как условие продолжения цикла ложно. Поэтому оператор цикла while называют оператором цикла с предусловием, сначала осуществляется проверка условия, а только потом выполняется тело цикла.

Использование оператора цикла while в решении задач

Задача 1. С клавиатуры вводятся числа до первого введенного 0. Сколько чисел было введено?

Задача 2. Натуральное число N вводится с клавиатуры. Найти сумму чисел 1+1/2+1/3+…+1/N.

Задача 3. Дано натуральное число N.Вывести на экран цифры данного числа в столбец.

Оператор цикла с постусловием repeat

Формат оператора

Перевод слов

repeat

операторы;

until условие;

Повторяй

 тело цикла

пока условие ложно

Как работает оператор цикла repeat

Выполняются операторы между словами repeat и until (тело цикла), пока условие ложно.

Приведем примеры фрагментов программы с оператором цикла repeat

Пример 1

k:=0;

repeat

k:=k+1;

until k>5;

Выполняется оператор k:=k+1, пока k>5 ложно.

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

0

 

2

1

1>5 нет

3

2

2>5 нет

4

3

3>5 нет

5

4

4>5 нет

6

5

5>5 нет

7

6

6>5 да

Тело цикла выполнилось 6 раз. Переменная k управляет работой цикла.

Пример 2

k:=0;

repeat

k:=k+1;

until k>=1;

Выполняется оператор k:=k+1, пока k>=1 ложно.

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

0

 

2

1

1>=1 да

Тело цикла выполнилось 1 раз. Условие стало истинным после первой итерации. Оператор цикла repeat называют оператором цикла с постусловием, так как сначала выполняется тело цикла, а затем проверяется условие выхода из цикла. Таким образом, тело цикла в операторе repeat всегда выполнится хотя бы один раз.

Оператор цикла for с параметром (счетчиком)

Формат оператора

Перевод слов

for k:=a to b do

begin

операторы;

end;

Для счетчика k от начального значения a до конечного значения b делай тело цикла.

Как работает оператор цикла for с параметром

Выполняются операторы между словами begin и end (тело цикла) пока счетчик меняет свое значение от начального до конечного с шагом 1. Увеличение счетчика на 1 происходит автоматически.

Приведем примеры фрагментов программы с оператором цикла for

Пример 1

for k:=1 to 5 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 5 раз для значений k=1,2,3,4 и 5. В результате на экран будут выведены числа от 1 до 5.

Пример 2

for k:=10 to 10 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 1 раз для значения k=10. В результате на экран будет выведено одно число 10.

Пример 3

for k:=5 to 1 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) ни разу не выполнится, так как конечное значение счетчика меньше начального (1<5).

Таким образом, для того чтобы тело цикла выполнилось хотя бы один раз, необходимо, чтобы конечное значение счетчика было больше или равно начальному значению.

Другой способ использования оператора цикла с параметром for

Формат оператора

Перевод слов

for k:=a downto b do

begin

операторы;

end;

Для счетчика k от начального значения a до конечного значения b делай тело цикла.

В данном случае для работы цикла конечное значение счетчика b должно быть меньше или равно начального значения a.

Пример 1

for k:=5 downto 1 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 5 раз для значений k=5,4,3,2 и 1. В результате на экран будут выведены числа от 5 до 1.

Пример 2

for k:=10 downto 20 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) ни разу не выполнится, так как конечное значение счетчика больше начального (20>10).

Использование оператора цикла for в решении задач

Задача 1. Дано целое число A.Вывести на экран в столбец 30 раз число A.

Задача 2. Вывести на экран в столбец все натуральные двузначные числа.

Задача 3. Вывести на экран таблицу умножения на 2 для чисел от 1 до 9.

Задача 4. Дано натуральное число N.Верно ли, что данное число простое?

Задача 5. Известны максимальные скорости каждой из 10 иномарок легковых автомобилей. Определить, какой автомобиль (по номеру) самый быстрый.

04.02.2022

Верно ли, что четных цифр больше, чем нечетных

Задача. Дано натуральное число N. Верно ли, что четных цифр больше, чем нечетных?

Воспользуемся циклом while с условием продолжения: n не равно 0.

Пока число n не равно 0, будем вычислять остаток от деления на 10 - это будет цифра числа, будем уменьшать число n в 10 раз операцией div (деление нацело). Также будем выяснять, какая перед нами цифра, четная или нечетная, и копить два счетчика k и c (количество четных и количество нечетных цифр).

После цикла сравним значения счетчиков k и c.

Программа решения задачи на языке Паскаль:

var n,k,c:integer;

begin

readln(n);

k:=0; c:=0;

while n<>0 do

begin

d:=n mod 10; //цифра

if (d mod 2=0) then k:=k+1 else c:=c+1;

n:=n div 10;

end;

if k>c then writeln('верно') else writeln('неверно');

end.

Программа решения задачи на языке Python

n = int(input('Введите натуральное число: ')) k = 0 c = 0 while n!=0: d = n % 10 if d % 2 == 0: k+=1 else: c+=1 n//=10 if k>c: print('Верно') else: print('Неверно')

Вывести на экран цифры заданного числа

Задача. Дано натуральное число N. Вывести на экран в столбец цифры данного числа

Воспользуемся циклом while с условием продолжения n не равно 0. Пока число n не равно 0, будем вычислять остаток от деления на 10,  и это будет цифра числа, будем уменьшать число n в 10 раз операцией div (деление нацело).

Программа решения на языке Паскаль

var n, d:integer;

begin

readln(n);

while n<>0 do

begin

d:=n mod 10;

println(d);

n:=n div 10;

end;

end.

Программа решения на языке Python

n = int(input('Введите число n = '))
while n!=0:
    d = n % 10
    print(d)
    n = n // 10

Результат запуска программы


Обратим внимание на то, что цифры выводятся в обратном порядке.

01.02.2022

Вывести на экран числа из промежутка

Вывести на экран целые числа из промежутка [-100; +50] с шагом 5.

Будем использовать оператор цикла while с начальным значением счетчика i = -100 и условием продолжения цикла i<=50. В теле цикла будем выводить значение счетчика на экран и увеличивать его значение на величину шага 5.

Программа решения на языке Паскаль:

var i:integer;

begin

i:=-100;

while i<=50 do

begin

writeln(i);

i:=i+5;

end;

end.

30.01.2022

Найти сумму чисел 1+1/2+1/3+…+1/N

Вычисление суммы гармонического ряда 1 + 1/2 + 1/3 + ... + 1/N

Постановка задачи

Дано натуральное число N. Необходимо вычислить сумму гармонического ряда:

S = 1 + 1/2 + 1/3 + ... + 1/N

Примечание: Для точного результата используем вещественный тип данных.

Алгоритм решения

  1. Вводим значение N с клавиатуры
  2. Инициализируем переменную для суммы (s = 0)
  3. Используем цикл while с параметром i от 1 до N
  4. На каждой итерации добавляем к сумме 1/i
  5. Выводим полученную сумму

Решение на Pascal с пояснениями

program HarmonicSeries;
var
  i, n: integer; // Счетчик и верхняя граница
  s: real;       // Для хранения суммы ряда
begin
  // Ввод числа N
  write('Введите натуральное число N: ');
  readln(n);
  
  // Инициализация переменных
  s := 0;
  i := 1;
  
  // Цикл вычисления суммы
  while i <= n do
  begin
    s := s + 1/i; // Добавляем очередной элемент ряда
    i := i + 1;    // Увеличиваем счетчик
  end;
  
  // Вывод результата с 4 знаками после запятой
  writeln('Сумма ряда: ', s:0:4);
end.

Пояснение работы программы:

  1. Программа запрашивает ввод натурального числа N
  2. Инициализирует переменные: s (сумма) и i (счетчик)
  3. Цикл while выполняется пока i ≤ N
  4. На каждой итерации к сумме добавляется 1/i
  5. После цикла выводится отформатированный результат

Примеры работы программы

Пример 1: N = 5

Введите натуральное число N: 5
Сумма ряда: 2.2833

Пример 2: N = 10

Введите натуральное число N: 10
Сумма ряда: 2.9290