Меню
Видеоучебник
Видеоучебник  /  Информатика  /  10 класс  /  Информатика 10 класс (ФГОС)  /  Программирование циклов: циклы с заданным условием продолжения и окончания работы

Программирование циклов: циклы с заданным условием продолжения и окончания работы

Урок 24. Информатика 10 класс (ФГОС)

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

Конспект урока "Программирование циклов: циклы с заданным условием продолжения и окончания работы"

Вопросы:

·     Циклы с предусловием.

·     Цикл с постусловием.

Циклические алгоритмы – это алгоритмы, содержащие алгоритмическую конструкцию цикла. Цикл представляет собой последовательность действий, которые повторяются многократно. Действия, которые выполняются в цикле называются телом цикла.

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

Блок-схема цикла с предусловием

Посмотрим, как программируется цикл с предусловием на языке Pascal. Для этого есть оператор цикла с предусловием. Его запись начинается со служебного слова while. После него следует условие продолжения работы цикла, оно записывается по тем же правилам что и в условном операторе. После условия цикла через пробел следует служебное слово do. На русский язык эту строку можно перевести: «Пока выполняется условие – делай». На следующей строке на расстоянии одного пробела от служебного слова while следует тело цикла. Оно может содержать один или несколько операторов. Если тело цикла содержит больше одного оператора, оно записывается между логическими скобками, то есть служебными словами begin и end. После слова end следует точка с запятой.

while <условие> do

begin

  <оператор 1>;

  <оператор 2>;

  …

  <оператор n>;

end;

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

Задача: Написать программу, которая определяет, есть ли среди цифр натурального числа n цифра k. n и k вводятся с клавиатуры. 1 ≤ n ≤ 2 000 000 000.

Для решения задачи мы будем проверять правую цифру числа n, в случае если она не равна k мы будем убирать эту цифру. Так будет продолжаться до тех пор, пока мы не найдём цифру равную k или пока цифр не останется.

Напишем программу для решения задачи. Назовём её цифра. Для работы программы нам потребуются переменные n и k. Т. к. 1 ≤ n ≤ 2 000 000 000, зададим n принадлежащим к типу integer. Так как переменная k будет хранить всего одну цифру, то есть будет принимать значения в диапазоне от 0 до 9, для её хранения нам будет достаточно типа byte.

Напишем логические скобки. В начале тела программы будет следовать оператор writeln, который будет выводить на экран сообщение о том, что это программа поиска цифры k в натуральном числе n. После него будет следовать оператор write, выводящий на экран запрос на ввод n и оператор readln, считывающий его значение. Затем будут следовать те же операторы для k. Теперь запишем оператор цикла с предусловием while. Условием продолжения работы цикла будет: n > 0 and n mod 10 <> k. Запишем служебное слово do. Так как тело цикла будет содержать всего один оператор, логические скобки не требуются. Это будет оператор присваивания переменной n:=n div 10. После цикла запишем условный оператор, который проверяет условие n > 0. После служебного слова then в этом условном операторе будет следовать оператор write, выводящий на экран сообщение о том, что цифра k присутствует в числе n. После служебного слова else запишем оператор write, выводящий на экран сообщение о том, что цифра k отсутствует в числе n.

program cifra;

var

 n: integer;

 k: byte;

begin

 writeln ('Программа, определяющая присутствие цифры k в натуральном числе n.');

 write ('n=');

 readln (n);

 write ('k=');

 readln (k);

 while (n>0) and (n mod 10<>k) do

  n:=n div 10;

 if n>0

 then write ('k присутствует в n.')

 else write ('k отсутствует в n.');

end.

Программа для решения задачи

Запустим программу на выполнение. Зададим n = 7085 и k = 8. Цифра 8 действительно присутствует в числе 7085.

Снова запустим программу на выполнение и зададим n = 123, а k = 4. В числе 123 действительно нет такой цифры.

Программа работает правильно. Задача решена.

Второй тип циклов, который мы сегодня рассмотрим, это циклы с постусловием. Этот цикл работает так, что в начале выполняется тело цикла, а затем проверяется его условие. Если условие цикла не выполняется, то вновь будет выполнено тело цикла, а затем снова будет проверено его условие. Так будет продолжаться до тех пор, пока не выполнится условие цикла. Как только условие цикла выполнится, он завершит свою работу и начнут выполняться команды, следующие после него. Отличительная особенность цикла с постусловием состоит в том, что тело цикла в любом случае выполнится хотя бы один раз, в отличии от цикла с предусловием.

Блок-схема цикла с постусловием

На языке Паскаль цикл с постусловием записывается с помощью оператора repeat. В его начале записывается служебное слово repeat. После этого служебного слова со следующей строки, на расстоянии одного пробела от него, следует тело цикла, состоящее из одного или нескольких операторов. После тела цикла на одном уровне со служебным словом repeat следует служебное слово until, после которого через пробел следует условие завершения работы цикла, а после него следует точка с запятой. Важно запомнить, что при записи цикла с постусловием служебные слова repeat и until выполняют роль логических скобок, то есть даже если тело цикла состоит из нескольких операторов, слова begin и end записывать не требуется.

repeat

  <оператор 1>;

  <оператор 2>;

  …

  <оператор n>;

until <условие>;

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

Задача: Написать программу, которая выводит количество шагов необходимых для подтверждения гипотезы Коллатца, для заданного натурального числа n. Число n вводится с клавиатуры и находится на промежутке от 2 до 10 000. Для заданного промежутка чисел эта гипотеза уже подтверждена.

Рассмотрим гипотезу Коллатца. Она названа по имени математика, который её выдвинул. Возьмём любое натуральное число. Если оно чётное – разделим его на 2. Если же число нечётное – умножим его на 3 и прибавим 1. Повторим эти же действия над результатом и так далее… Гипотеза Коллатца заключается в том, что какое бы натуральное число мы не взяли изначально, через некоторое количество шагов в результате мы получим 1.

Составим блок-схему алгоритма решения задачи. В начале программы мы считаем число n, введённое пользователем. После этого переменной которая считает количество шагов – назовём её step – присвоим значение 0, так как ни одного шага ещё не было сделано. Запишем условный оператор, который будет проверять является ли число n чётным. Для того чтобы это проверить нужно вычислить остаток от его деления на 2. Если он равен нулю, то число является чётным, следовательно, мы должны разделить его на 2, то есть присвоить переменной n её собственное значение, делённое на 2. В противном случае, если остаток от деления n на 2 не равен нулю, то число является нечётным, и мы умножим его на 3 и прибавим к нему 1. После мы должны увеличить значение счётчика шагов step на 1. Теперь запишем блок ветвления с условием подтверждения гипотезы, то есть n = 1. Если это условие не выполняется, нам необходимо выполнить ещё один шаг вычислений, то есть мы вернёмся к выполнению предыдущего блока ветвления. Если же n равно единице, то гипотеза подтверждена и цикл завершит свою работу. После завершения работы цикла, мы должны вывести на экран количество шагов – значение переменной step. На этом наш алгоритм завершит свою работу.

Блок-схема алгоритма решения задачи

Напишем программу по составленной блок-схеме. Назовём её collatz. Для работы программы нам потребуется 2 переменные: n и step, так как это натуральные числа и n находится на промежутке от 2 до 10 000 – они будут принадлежать к целочисленному типу integer.

Запишем логические скобки. Тело программы будет начинаться с оператора writeln, который будет выводить на экран поясняющее сообщение о том, что это программа расчёта количества шагов для подтверждения гипотезы Коллатца для натурального числа n. Дальше будет следовать оператор write, выводящий на экран запрос на ввод n. Теперь запишем оператор readln, считывающий значение n. Далее будет следовать оператор присваивания переменной step значение 0. Теперь запишем оператор цикла с постусловием repeat. И сразу запишем служебное слово until с условием завершения работы цикла – n = 1. Между служебными словами repeat и until запишем условный оператор if с условием: n mod 2 = 0 После служебного слова then запишем оператор присваивания n:=n div 2. После слова else запишем оператор присваивания переменной n её значения умноженного на 3 и увеличенного на 1. После условного оператора увеличим значение переменной step на 1. После цикла напишем оператор write, который будет выводит на Экран сообщение о том, что для подтверждения гипотезы Коллатца для заданного n потребовалось количество шагов равное значению переменной step.

program collatz;

var

 n, step: integer;

begin

 writeln ('Программа расчёта количества шагов для подтверждения гипотезы Коллатца для натурального числа n.');

 write ('n=');

 readln (n);

 step:=0;

 repeat

  if n mod 2=0

  then n:=n div 2

  else n:=3*n+1;

  step:=step+1;

 until n=1;

 write ('Для подтверждения гипотезы Коллатца для заданного n потребовалось ', step, ' шагов.');

end.

Программа для решения задачи

Запустим программу на выполнение и введём n=19. Гипотеза для числа 19 действительно подтверждается через 20 шагов.

Снова запустим программу на выполнение и введём n=3. Для числа 3 гипотеза действительно подтверждается через 7 шагов.

Программа работает правильно задача решена.

Важно запомнить:

·        Цикл с предусловием на языке Pascal записывается так:

while <условие> do

begin

  <оператор 1>;

  <оператор 2>;

  …

  <оператор n>;

end;

·        Тело цикла с предусловием выполняется, после проверки его условия, и повторяется до тех пор, пока выполняется условие цикла.

·        Если условие цикла изначально ложно, то тело цикла с предусловием при работе программы не будет выполнено ни разу.

·        Цикл с постусловием на языке Pascal записывается так:

repeat

  <оператор 1>;

  <оператор 2>;

  …

  <оператор n>;

until <условие>;

·        Тело этого цикла начинает выполняться до проверки его условия и повторяется до тех пор, пока не выполняется условие цикла.

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

6980

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт