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

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 иномарок легковых автомобилей. Определить, какой автомобиль (по номеру) самый быстрый.

09.02.2022

Язык Паскаль. Является ли число простым?

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

Простое число - это натуральное число, имеющее ровно 2 делителя (единицу и само число).

Для ответа на вопрос задачи будем перебирать натуральные числа i в диапазоне от 1 до N, если число i делит N без остатка, будем увеличивать значение переменной k (счетчик делителей). Если значение k = 2, то число простое, иначе не простое.

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

var i,n,k:integer;

begin

   writeln('Введите натуральное число N ');

   readln(n);

   k:=0;

   for i:=1 to n do

    if n mod i=0 then k:=k+1;

   if k=2 then writeln('число простое') else writeln('число не простое');

end.

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

Выполнение программы

Выполнение программы

Похожим алгоритмом можно искать совершенные числа, такие как:
6, 28, 496..

Совершенное число - натуральное число, равное сумме своих делителей, не считая само число.

6 = 1 + 2 + 3

28 = 1 + 2 + 4 + 7 + 14

Напишите программу и найдите 4, 5, 6-ое совершенные числа.

08.02.2022

Язык Паскаль. Найти максимум и его номер

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

Скорость 1-ого автомобиля возьмем за начальное значение искомого максимума m, а искомый номер тогда возьмем за 1. Будем вводить скорости и сравнивать их с m, если очередная введенная скорость больше m, то значение m будем менять на значение этой скорости, также будем сохранять порядковый номер в переменной k.

Программа решения:

var i,a,k,m:integer;

begin

   writeln('Введите максимальные скорости 10 автомобилей ');

   readln(m);k:=1;

   for i:=2 to 10 do

    begin

     readln(a);

     if a>m then begin m:=a;k:=i;end;

    end;

   writeln('Скорость самого быстрого автомобиля ',m);

   writeln('Номер автомобиля ',k);

end.

Результат выполнения программы:

Выполнения программы

Найдите максимальную скорость автомобиля вторую по величине и номер этого автомобиля.

Например: всего 5 автомобилей

Максимальные скорости автомобилей: 150 180 220 250 210

Ответ: 220, 3

Напишите программу в комментариях


06.02.2022

Язык Паскаль. Числа с заданным числом делителей

Задача. В промежутке от 1 до 100 найти числа с 6 делителями.

Воспользуемся конструкцией вложенных циклов

for k:=1 to 100 do

 begin

  for j:=1 to k do

   begin

     if k  mod j = 0 then...

   end;

 end;

Где k - это число от 1 до 100, j - предполагаемый делитель числа k.

Если число k делится на j без остатка, то будем копить количество делителей s. Если количество делителей для данного числа k равно 6, то число k выводим на экран, для каждого числа k количество делителей s обнуляем во внешнем цикле.

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

var k,s,j:integer;

begin

    for k:=1 to 100 do

    begin

      s:=0;

      for j:=1 to k do

        if k mod j=0 then s:=s+1;

      if s=6 then write(k,' ');

    end;

end.

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

результат запуска

А что, если в заданном промежутке нужно найти числа ровно с 1000 делителями?

Напишите свои предположения в комментариях.

03.02.2022

Вывести на экран все натуральные двузначные числа

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

Запустим цикл for для счетчика i с начальным значением 10 (наименьшее двузначное число) и конечным значением 99 (наибольшее двузначное число), в теле цикла выведем значение счетчика на экран.

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

var i:integer;

begin

for i:=10 to 99 do

writeln(i);

end.

Вывести на экран таблицу умножения

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

яблоко

Будем использовать оператор цикла for  с счетчиком от 1 до 9, значение счетчика будем умножать на 2 и результат выводить на экран.

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

var i:integer;

begin

for i:=1 to 9 do

writeln(2*i);

end.

30.01.2022

Доход магазина

Известно, что доход магазина в каждый из 12 месяцев года увеличивался на 5% от дохода предыдущего месяца. Найти средний доход магазина в месяц, если в 1-й месяц доход магазина составлял A тыс. руб.

В цикле for, начиная со второго месяца, будем искать доход магазина в каждый месяц (5% от дохода предыдущего месяца) и будем копить общий доход. Для расчета среднего дохода разделим общий доход на 12.

Программа решения:

var i,a:integer;s,p,s1:real;

begin

readln(a);

s:=a; s1:=a;

for i:=2 to 12 do

begin

p:=s*5/100;

s:=s+p;

s1:=s1+s;

end;

writeln(s1/12:2:2);

end.

Как найти натуральные делители числа более эффективно (быстро)

 Как найти натуральные делители числа более эффективно (быстро)?

Пусть N=100.

Делителями числа 100 являются числа: 1, 2, 4, 5, 10, 20, 25, 50, 100.

Найдем "симметричные" пары делителей:

1 и 100, 2 и 50, 4 и 25, 5 и 20, 10 и ...все :)

Язык Паскаль. Верно ли, что число простое

Проверка числа на простоту: решение на Pascal

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

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

Простое число - это натуральное число, имеющее ровно 2 делителя (1 и само число). Например: 2, 3, 5, 7, 11, 13.

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

Используем следующий подход:

  1. Вводим число N с клавиатуры
  2. Инициализируем счетчик делителей k = 0
  3. В цикле от 1 до N проверяем делимость числа N на текущее значение счетчика
  4. Если делитель найден, увеличиваем счетчик k
  5. После цикла проверяем: если k = 2, число простое

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

program CheckPrimeNumber;
var
  i, n, k: integer;
begin
  // Ввод числа для проверки
  write('Введите натуральное число n=');
  readln(n);
  
  // Инициализация счетчика делителей
  k := 0;
  
  // Цикл поиска делителей
  for i := 1 to n do
    if n mod i = 0 then 
      k := k + 1;
  
  // Проверка количества делителей
  if k = 2 then
    writeln('верно')  // Число простое
  else
    writeln('неверно');  // Число составное
end.

Как работает программа:

  • Программа запрашивает число для проверки
  • Перебирает все возможные делители от 1 до N
  • Подсчитывает количество делителей
  • Выводит "верно", если делителей ровно 2 (число простое)
  • Выводит "неверно" в противном случае

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

Пример 1: Проверка простого числа

Введите натуральное число n=7
верно

Пример 2: Проверка составного числа

Введите натуральное число n=8
неверно

Оптимизация алгоритма

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

  • Проверяет все числа от 1 до N, хотя достаточно проверить до √N
  • Продолжает проверку после нахождения более двух делителей

Попробуйте оптимизировать алгоритм, используя эти наблюдения.

Вывести на экран число 30 раз

Вывод числа 30 раз: решение на Pascal

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

Дано целое число A. Необходимо вывести это число на экран 30 раз, каждое значение с новой строки.

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

Для решения задачи используем:

  • Оператор цикла for с фиксированным количеством повторений (30)
  • Функцию writeln для вывода числа с переводом строки
  • Простой ввод числа с клавиатуры

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

program PrintNumber30Times;
var
  i, a: integer;
begin
  // Ввод числа A от пользователя
  writeln('Введите целое число:');
  readln(a);
  
  // Цикл от 1 до 30 включительно
  for i := 1 to 30 do
    // Вывод числа A на каждой итерации
    writeln(a);
end.

Как работает программа:

  1. Программа запрашивает ввод целого числа
  2. Инициализируется цикл со счетчиком от 1 до 30
  3. На каждой итерации цикла число A выводится на новой строке
  4. После 30 повторений программа завершает работу

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

Входные данные: 42

Вывод программы:

42
42
42
... (30 раз)

Дополнительные варианты решения

Альтернативные реализации на Pascal:

// Вариант 1: с использованием while
var
  i, a: integer;
begin
  readln(a);
  i := 1;
  while i <= 30 do
  begin
    writeln(a);
    i := i + 1;
  end;
end.

// Вариант 2: с использованием repeat-until
var
  i, a: integer;
begin
  readln(a);
  i := 1;
  repeat
    writeln(a);
    i := i + 1;
  until i > 30;
end.

Практическое применение

Данная программа демонстрирует:

  • Работу с циклами в Pascal
  • Организацию повторяющихся действий
  • Базовый ввод-вывод данных
  • Использование счетчиков цикла

Циклические алгоритмы: операторы while, repeat, for в Pascal

Подробное руководство по использованию циклов в Pascal с примерами решения задач.

Читать

Вывести на экран N раз слово "HELLO". Программа решения задачи на языке Паскаль и Python

Как вывести слово "HELLO" N раз: готовые программы с пояснениями

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

Дано натуральное число N. Необходимо вывести на экран слово «HELLO» N раз, каждое с новой строки.

Решение на Python с объяснением ввода данных

# Ввод данных: просим пользователя ввести число N
# Функция input() выводит сообщение и ждет ввода
# int() преобразует строковое значение в целое число
n = int(input('Введите натуральное число N: '))

# Цикл for повторяется n раз
# Переменная _ используется как счетчик, но не участвует в вычислениях
for _ in range(n):
    print('HELLO')  # Вывод слова на каждой итерации

Как работает программа:

  1. Программа выводит приглашение к вводу числа N
  2. Пользователь вводит целое число (например: 5)
  3. Функция int() преобразует ввод в число
  4. Цикл for выполняется ровно N раз
  5. На каждой итерации выводится слово "HELLO"

Решение на Pascal для сравнения

program PrintHello;
var
  i, n: integer;
begin
  writeln('Введите натуральное число N:');
  readln(n);  // Ввод числа N
  
  // Цикл от 1 до n
  for i := 1 to n do
    writeln('HELLO');  // Вывод на каждой итерации
end.

Особенности реализации:

  • Переменная i используется как счетчик цикла
  • Цикл for выполняется от 1 до N включительно
  • writeln автоматически добавляет перевод строки

Альтернативные решения (Python)

# Вариант 1: с использованием умножения строк
print('\n'.join(['HELLO'] * int(input('Введите N: '))))

# Вариант 2: с использованием while
n = int(input('Введите N: '))
while n > 0:
    print('HELLO')
    n -= 1

Примечания:

  • Первый вариант создает список из N элементов "HELLO" и объединяет их через перевод строки
  • Второй вариант использует цикл while с уменьшением счетчика
  • Для учебных целей рекомендуется первый вариант как наиболее "питонический"