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

Программирование циклов с заданным числом повторений

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

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

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

Вопросы:

·     Организация цикла с заданным числом повторений.

·     Цикл с заданным числом повторений в программе.

Рассмотрим алгоритм чтения книги, в которой 100 страниц:

·     открыть книгу,

·     50 раз:

·     прочесть 2 страницы,

·     перевернуть страницу;

·     закрыть книгу.

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

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

Блок-схема цикла с параметром.

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

Рассмотрим, как записывается цикл с параметром в языке Паскаль. Для этого используется оператор for, что в переводе на русский язык означает «Для». После этого слова следует название параметра, который должен быть заранее объявлен в разделе описания переменных. Параметр может принадлежать только к одному из целочисленных типов. Далее следует знак присваивания, после него начальное значение параметра. Дальше, через пробел, следует одно из двух служебных слов to или downto. Первое используется, когда конечное значение параметра больше начального, когда конечное значение меньше начального используется второе. После через пробел указывается конечное значение параметра, а после него через пробел служебное слово do. В языке Pascal шаг изменения параметра всегда равен 1, поэтому его указывать не требуется. Дальше со следующей строки, на расстоянии одного пробела от слова for следует тело цикла. Если в нём больше одного оператора, оно записывается между логическими скобками.

for <параметр>:=<начальное значение> to/downto <конечное значение> do

begin

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

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

 …

end;

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

Задача: Написать программу, которая возводит число k в целую положительную степень n.

Составим блок-схему алгоритма решения задачи. В начале пользователь вводит значения k и n. Обозначим результат выполнения программы r и присвоим ему в начале значение k0, то есть 1. В дальнейшем мы будем умножать его на k необходимое количество n раз. Напишем для этого цикл с параметром. Назовём параметр i, начальным значением параметра будет 1, а конечным – n. Так как шаг будет равен 1, указывать его не требуется. В цикле будет следовать всего один блок, в котором переменной r присваивается его значение, умноженное на n. Таким образом с помощью цикла мы умножим r на k n раз. После цикла нам достаточно вывести на экран значение r. На этом наша программа завершит работу.

Блок-схема алгоритма

Напишем программу по составленной блок-схеме. Назовём её stepen. В разделе описания переменных объявим переменные n и i. n целое по условию задачи, а i параметр цикла, значит обе они будут целочисленного типа byte. Дальше укажем переменные k и r, так как в условии задачи не сказано, что k целое, они будут принадлежать к вещественному типу real.

Запишем логические скобки. В начале запишем оператор writeln, который будет выводить сообщение о том, что это программа вычисления значения k^n. Дальше будет следовать оператор write, который будет выводить запрос на ввод k, считаем его с помощью оператора readln. Точно также выведем запрос на ввод и считаем n. Теперь запишем оператор присваивания переменной r значения 1. Теперь запишем цикл с параметром i, изменяющимся от 1 до n. Он будет содержать всего один оператор, поэтому логические скобки указывать не требуется. Это будет оператор присваивания r:=r*k. После цикла будет следовать оператор Райт, который будет выводить на экран поясняюще сообщения что значение выражения равно r.

program stepen;

var

 n, i: byte;

 k, r: real;

begin

 writeln ('Программа вычисления значения k^n.');

 write ('k=');

 readln (k);

 write ('n=');

 readln (n);

 r:=1;

 for i:=1 to n do

  r:=r*k;

 write ('k^n=', r);

end.

Исходный код программы

Запустим программу на выполнение. Введём k = 2, а n = 10.

210 = 1024.

Снова запустим программу и введём k = 0.5, а n = 2.

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

Циклы также, как и ветвления, могут содержать другие циклы. Такие циклы называются вложенными.

Задача: Вычислить значение суммы 11 + 22 + 33 + … + nn. Значение n пользователь вводит с клавиатуры. 2 ≤ n ≤ 10.

Запишем блок-схему алгоритма решения задачи. В начале пользователь вводит с клавиатуры значение n. Обозначим результат выражения s, и сразу учтём в нём первое слагаемое. Так, как 11 = 1, присвоим s значение 1. Далее будет следовать цикл для i от 2 до n. В нём нам нужно расcчитать значение очередного слагаемого, то есть ii и добавить его к результату выражения. Обозначим очередное слагаемое p, и присвоим ему значение i0, то есть 1. Дальше будет следовать вложенный цикл для j от 1 до i. Это будет цикл для расчёта значения ii. В нём будет всего один блок, присваивания переменной p её значения умноженного на i. После внутреннего цикла нам достаточно присвоить s её значение, увеличенное на p. После внешнего цикла нужно вывести на экран значение переменной s. На этом наша программа завершит свою работу.

Блок-схема алгоритма

Напишем программу по составленной блок-схеме. Назовём её summa. В программе на понадобится 5 переменных. Переменные s и p будут хранить значение итоговой суммы и отдельных слагаемых, они будут принадлежать к целочисленному типу integer. Так как n по условию задачи не превышает 9, а i и j изменяются в диапазоне от 1 до n, для их хранения нам будет достаточно типа byte.

Запишем логические скобки. В начале запишем оператор write, который будет выводить запрос на ввод n. Дальше запишем оператор readln (n). Дальше будет следовать оператор присваивания s:=1. Сразу с помощью оператора write выведем на экран сообщение: «1^1». Теперь запишем цикл для i от 2 до n. Так как в нём будет несколько операторов, они будут замкнуты между логическими скобками, запишем их. В начале цикла запишем оператор write, который будет выводить на экран сообщение, состоящее из знака «+», а также «i^i». Дальше присвоим переменной p значение 1. Теперь запишем вложенный цикл для j от 1 до i, который будет содержать оператор присваивания p:=p*i. После внутреннего цикла будет следовать оператор присваивания s:=s+p. После внешнего цикла запишем оператор write, который будет выводить на экран знак равенства и значение s.

program summa;

var

 s, p, i, j, n: integer;

begin

 write ('n=');

 readln (n);

 s:=1;

 write ('1^1');

 for i:=2 to n do

 begin

  write (' + ', i, '^', i);

  p:=1;

  for j:=1 to i do

   p:=p*i;

  s:=s+p;

 end;

 write (' = ', s);

end.

Исходный код программы

Запустим программу на выполнение. Введём n = 5.

11 + 22 + 33 + 44 + 55 = 3413. Программа работает правильно. Задача решена.

Задача: Написать программу для перевода целых положительных чисел из двоичной системы счисления в десятичную.

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

10102 = 0 × 20 + 1 × 21 + 0 × 22 + 1 × 23

Составим блок-схему алгоритма решения задачи. Число в двоичной системе счисления будем хранить в виде строки, назовём её s. В начале пользователь вводит её значение с клавиатуры. Обозначим число в десятичной системе счисления d. Так как мы ещё не рассчитали его значение, присвоим ему значение 0. Так же нам понадобится множитель слагаемых суммы, обозначим его m, присвоим ему начальное значение 20, то есть 1.  Мы будем рассчитывать сумму начиная с цифры, младшей по разряду. Запишем цикл для i от значения равного длине s до 1. Он будет начинаться с преобразования i-того символа строки s, в число равное соответствующей цифре двоичного числа, назовём её c. Дальше присвоим d:=d+c*m. После этого присвоим m его значение, умноженное на основание системы счисления, то есть 2. После завершения работы цикла выведем на экран значение переменной d. На этом наша программа завершит свою работу.

Блок-схема алгоритма

Напишем программу по составленной блок-схеме. Назовём её BinToDec. Раздел описания переменных будет содержать строку s, а также переменные d, i, m, c и дополнительную переменную е, принадлежащие к целочисленному типу integer. Запишем логические скобки. В начале запишем оператор writeln, который будет выводить сообщение о том, что это программа перевода чисел и двоичной системы счисления в десятичную и запрос на ввод числа. Дальше будет следовать оператор readln, который будет считывать значение строки s. Запишем операторы присваивания: d:=0 и m:=1. Теперь запишем цикл для i от длины s до 1. В этом цикле после слова for будет следовать присваивания i значения функции определяющей длины строки, которая записывается словом length, в качестве параметра зададим ей строку s. Далее, так как параметр цикла будет уменьшаться, будет следовать служебное слово downto. Конечным значением i будет 1. Дальше в логических скобках запишем тело цикла. Оно будет начинаться с функции преобразования i-того символа строки s в число c. Она записывается служебным словом val, после которого в скобках через запятую указывается символьное или строковое значение, в нашем случае i-тый символ строки s, числовая переменная, в нашем случае c, и дополнительная целочисленная переменная, в которую в случае ошибки будет сохранён номер некорректного символа, в нашем случае e. Теперь увеличим значение переменной d на произведение c и m, а также увеличим значение m в 2 раза. После цикла запишем оператор write, который будет выводить значение d и сообщение о том, что это введённое число в десятичной системе счисления.

program BinToDec;

var

 s: string;

 d, i, m, c, e: integer;

begin

 writeln ('Программа перевода чисел из двоичной системы счисления в десятичную. Введите двоичное число.');

 readln (s);

 d:=0;

 m:=1;

 for i:=length(s) downto 1 do

 begin

  val (s[i], c, e);

  d:=d+c*m;

  m:=m*2;

 end;

 write (d, ' - введённое число в десятичной системе счисления.');

end.

Исходный код программы

Запустим программу на выполнение. Введём 1111 1111.

В десятичной системе счисления это число действительно равно 255. Ещё раз запустим программу и введём 1000.

В десятичной системе счисления это действительно число 8.

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

·     Циклы с заданным числом повторений (с параметром) организованы таким образом, что с каждым выполнением тела цикла заданный параметр изменяется, на значение заданного шага. Так продолжается до тех пор, пока он не превысит заданное конечное значение.

11254

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

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