Открытый урок по информатике в 10-м классе по теме: "Циклы в языке программирования Turbo Pascal"

Разделы: Информатика


Цели:

  • Образовательные:
    • проконтролировать уровень усвоения материала по теме: “Условный оператор”;
    • развивать наблюдательность, логическое мышление;
    • познакомить учащихся с применением циклов в языке Турбо Паскаль.
  • Воспитательные:
    • воспитание познавательной потребности, интереса к предмету.

План

  1. Проверка домашнего задания.
  2. Изучение нового материала:
    1. Цикл с предусловием.
    2. Цикл с постусловием.
    3. Цикл с параметром.
  3. Итог урока.
  4. Домашнее задание.

Ход урока.

I. Проверка домашнего задания

– Ребята, на прошлом уроке вы получили домашнее задание – решить задачу под названием “Сумма или квадрат”. Программа должна вычислить сумму двух вещественных чисел х и у, если х – положительное, иначе вычислить х2. В этой задаче, если х неположительное, у уже выводить не надо.

– Вот как выглядит программа:

program sum_or_square;
uses crt;
var
x, y: Real;
begin
clrscr;
WriteLn (‘Введите вещественное число х: ’);
ReadLn (x);
if x > 0 then
begin
WriteLn (‘Введите вещественное число у: ’);
ReadLn (y);
WriteLn (x + y)
end;
else
WriteLn (x * x);
Readkey;
end.

– Молодцы, решили задачу правильно.

II. Изучение нового материала

– Первой остановкой в нашем путешествии по стране Программирование, полной чудес, даже опасностей была Англия, Лондон, Бейкер-Стрит, дом знаменитого сыщика Шерлока Холмса. Там мы останавливались в поисках лжи и истины.
Перенесемся из Англии конца XIX века на две тысячи лет назад – в Древнюю Грецию. Древняя Греция – страна великих ученых, поэтов и легендарных героев. Познакомимся с историей одного из них.
“...Сизиф, сын бога повелителя всех ветров Эола, был основателем города Коринфа, который в древнейшие времена назывался Эфирой.
Никто во всей Греции не мог равняться по коварству, хитрости и изворотливости ума с Сизифом. Сизиф благодаря своей хитрости собрал неисчислимые богатства у себя в Коринфе; далеко распространилась слава о его сокровищах.
Когда пришел к нему бог смерти мрачный Танат, чтобы низвести его в печальное царство Аида, то Сизиф, еще раньше почувствовав приближение бога смерти, коварно обманул бога Таната и заковал его в оковы. Перестали тогда на земле умирать люди. Нигде не совершались большие пышные похороны; перестали приносить и жертвы богам подземного царства. Нарушился на земле порядок, заведенный Зевсом. Тогда громовержец Зевс послал к Сизифу могучего бога войны Ареса. Он освободил Таната из оков, а Танат исторг душу Сизифа и отвел ее в царство теней умерших.}
Но и тут сумел помочь себе хитрый Сизиф. Он сказал жене своей, чтобы она не погребала его тела и не приносила жертвы подземным богам. Послушалась мужа жена Сизифа. Аид и Персефона долго ждали похоронных жертв. Всё нет их! Наконец приблизился к трону Аида Сизиф и сказал владыке царства умерших:
– О, властитель душ умерших, великий Аид, равный могуществом Зевсу, отпусти меня на светлую землю. Я велю жене моей принести тебе богатые жертвы и вернусь обратно в царство теней.
Так обманул Сизиф владыку Аида, и тот отпустил его на землю. Сизиф не вернулся, конечно, в царство Аида. Он остался в пышном дворце своем и весело пировал, радуясь, что один из всех смертных сумел вернуться из мрачного царства теней.
Разгневался Аид, снова послал он Таната за душой Сизифа. Явился Танат во дворец хитрейшего из смертных и застал его за роскошным пиром. Исторг душу Сизифа ненавистный богам и людям бог смерти; навсегда отлетела теперь душа Сизифа в царство теней.
Тяжкое наказание несет Сизиф в загробной жизни за все коварства, за все обманы, которые совершил он на земле. Он осужден вкатывать на высокую, крутую гору громадный камень. Напрягая все силы, трудится Сизиф. Пот градом струится с него от тяжкой работы. Все ближе вершина; еще усилие, и окончен будет труд Сизифа; но вырывается из рук его камень и с шумом катится вниз, поднимая облака пыли. Снова принимается Сизиф за работу. .
Так вечно катит камень Сизиф и никогда не может достигнуть цели – вершины горы...”

– Ничего не скажешь – грустная история! Ведь Сизиф – в общем-то неплохой парень, во всяком случаев уме ему не откажешь! Нельзя ли помочь бедняге?
Вот что интересно – дайте прочитать древний миф программисту, и он скажет: “Ничего страшного. Речь идет о выполнении бесконечного цикла. Я и сам иногда попадаю в такое же положение и нахожу из него выход!”

– Цикл является одной из важнейших алгоритмических структур и представляет собой последовательность операторов, которая выполняется неоднократно. В программах, связанных с обработкой данных или вычислениями, часто приходится выполнять циклически повторяющиеся действия. Циклы позволяют записать такие действия в компактной форме.
Циклы принадлежат к числу управляющих операторов. Внимательный ученик мог заметить, что до сих пор мы использовали два вида операторов. Одни из них (Read, Write, оператор присваивания) только выполняли какие-либо действия, другие же управляли ходом выполнения программы (например, условный оператор). Последние и называются управляющими операторами.
Давайте познакомимся с примерами использования циклов в программах на Паскале. Рассмотрим задачу на вычисление суммы большого числа слагаемых:

– Можно было бы выбрать простое решение и записать вычисление данной суммы в строчку, употребив 99 операций деления и 99 операций сложения. Ну а если число элементов суммы равно 1000 или просто любому целому числу? Представьте себе программу с оператором, который занимает несколько страниц и содержит 999 сложений! Очевидно, простое решение здесь уже не подходит. Можно заметить, что при вычислении суммы повторяются всего три операции, причем в определенном порядке:

1. Разделить единицу на знаменатель.
2. Прибавить частное к ранее полученной сумме.
3. Увеличить на 1 значение знаменателя.

– Следовательно, задачу можно решить, например, так:

1. Присвоить переменной Sum значение, равное 0 (Sum : = 0).
2. Присвоить переменной i значение, равное 1 (i:= 1).
3. Добавить к сумме значение 1 / i (Sum := Sum + 1 / i).
4. Увеличить i на 1 (i:= i + 1).
5. Повторить шаги 3 и 4.

– Повторив операции 3 и 4 99 раз, мы получим требуемую сумму. Это пример алгоритмической конструкции “цикл”.

– В языке программирования Паскаль имеется три разновидности цикла:

  • Цикл с предусловием (цикл “пока” – whi1е);
  • Цикл с постусловием (цикл “до тех пор, пока” repeat...unti1);
  • Цикл с параметром (со счетчиком) (цикл “для” – for ... to / downto);

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

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

– Цикл с предусловием имеет следующий вид:

While условие do {эта часть называется заголовком цикла}
оператор; {эта часть называется телом цикла}

Телом цикла может быть и группа операторов, заключенная в операторные скобки begin... end (то есть составной оператор).
Цикл с предусловием выполняется до тех пор, пока истинно условие в заголовке цикла, причем оно проверяется вначале, потом исполняется оператор. Переменным, входящим в условие, должны быть присвоены определенные значения до входа в цикл.
В теле цикла должны быть операторы, которые в какой-то момент изменят значение условия, сделав его ложным. Если этого не случится, цикл будет бесконечным. При возникновении в программе бесконечного цикла говорят, что программа “зациклилась”. Зациклившуюся программу приходится останавливать одновременным нажатием клавиш CtrL + Break, иначе она будет выполняться вечно (точнее, до первого отключения компьютера).
Задача о вычислении суммы может быть решена с использованием цикла whilе... do следующим образом:

program summa1;
uses crt;
const
n = 100; {Так объявляется именованная константа программы}

var
i : Integer;
sum : Real;

begin
clrscr;
sum := 0;
i : = 1; {Присвоим переменной sum начальное значение 0, а i – начальное значение 1}
while i <= n do
begin
sum := sum +1 / i;

i := i + 1 {Переменная i меняется внутри цикла, и ее величина определяет очередное повторение тела цикла}

end;

WriteLn (' сумма', n, ' элементов= ' sum:10:5) ;
Readkey;
end.

– Цикл в этой программе работает следующим образом:

  • вначале i = 1, sum = 0;
  • условие i <= 100 в заголовке оператора while истинно, поэтому начинается выполнение цикла;
  • значение суммы увеличивается на единицу: sum = 0 + 1;
  • i увеличивается на 1 i = 2;
  • условие i <= 100 вновь истинно, поэтому тело цикла повторяется очередной раз;
  • значение суммы sum = 0 + 1 + 1 / 2, а переменной i = 3;
  • после выполнения данной последовательности действий необходимое число раз получаем: sum =...+ 1 / 100,i = 101;
  • условие i <= 100 ложно, поэтому цикл завершается. Следующим действием будет вывод результата.

– Отметим, что в данном решении использовалась константа. Константа может иметь имя, тогда она называется именованной константой. Объявляется именованная константа в предложении описания констант, которое размещается в разделе описаний программы и имеет вид:

const имя = значение;

– Использование именованных констант преследует две цели:

  • сделать программу более удобной для понимания. Если, допустим, в программе часто используется число 12, то иногда удобнее один раз дать ему имя, например dozen, а затем использовать это имя;
  • облегчить изменение программы. Если, скажем, нужно изменить количество элементов суммы, то лучше изменить одну строку в предложении описания констант, чем вносить исправления во всей программе.

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

– Следующая разновидность цикла – цикл с постусловием. Рассмотрим эту разновидность:

repeat
группа операторов
until условие;

– Здесь вначале выполняется группа операторов, а потом производится проверка, следует ли вновь повторить эту группу. Если условие ложно, выполнение цикла повторяется, иначе – заканчивается.
Решение предыдущей задачи о суммировании с использованием цикла repeat... until выглядит так:

program summa2;
uses crt;

const

n = 100;

var

i : Integer;
sum : Real;

begin
sum := 0;
i := 1;

repeat

sum := sum + 1 / i;
i : = i + 1; {управляет повторением цикла}

until i > n;

WriteLn ( ‘сумма', n , ‘элементов = ‘, sum:10:5);
Readkey;
end.

– Здесь выполнение цикла происходит следующим образом:

  • вначале i = 1 и sum = 0 + 1;
  • i увеличивается на 1: i = 2;
  • условие i > 100 ложно, поэтому выполнение цикла повторяется;
  • значение суммы изменяется: sum = 1 + 1 / 2;
  • i увеличивается на 1: i = 2 + 1;
  • условие i > 100 ложно, цикл повторяется;
  • цикл повторяется, пока не окажется i = 100 + 1, а значение суммы sum = 1 + 1 / 2 +...+ 1 / 100;
  • условие i > 100 истинно, цикл завершен.

– Слова rереаt и until являются зарезервированными, как, впрочем, и слово while. В отличие от цикла while операторы внутри цикла repeat выполняются хотя бы один раз, в то время как в цикле whi1е они могут не выполниться ни разу.

2.3 Цикл с параметром (со счетчиком)

– Цикл со счетчиком имеет следующий вид:

for i := начальное_значение to
конечное_значение do ...
оператор;

– Здесь переменная i, называемая управляющей переменной цикла for (или его счетчиком), является произвольным идентификатором, который объявляется как переменная целого (чаще всего) типа. Она может быть также логической или символьной (о символьном типе речь пойдет дальше). Допускаются и некоторые другие типы, но этот случай мы рассматривать не будем.
При выполнении оператора for сначала вычисляется значение выражения начальное_значение, затем вычисляется значение выражения конечное_значение, далее управляющая переменная цикла последовательно пробегает все значения от начального до конечного. В том случае, когда начальное значение оказывается больше конечного значения, тело цикла не будет выполняться вовсе. Начальное и конечное значения остаются неизменными в ходе выполнения всего цикла fог.
Параметр цикла i, если он целого типа, пробегает все значения с приращением 1, и его текущее значение не должно изменяться операторами внутри цикла. Такое изменение не запрещено правилами языка, но его последствия будут непредсказуемы. После завершения цикла параметр i считается неопределенным.

В цикле:

for i := начальное_значение
dоwntо конечное_значение do...
оператор;

параметр цикла меняется от начального значения до конечного с шагом – 1.

– Программа вычисления суммы с использованием цикла со счетчиком дана далее в двух вариантах (ва риант с to и вариант с downto).

program summa3;

uses crt;
const

n = 100;

vaг

i : Integeг;
sum: Real;

begin
clrscr;
sum := 0;
for i := 1 to n do {При первом выполнении цикла i равняется 1, к sum добавляется 1, затем i = 2, к sum добавляется 1/2}

sum := sum + 1 / i; {Затем i = 3, к sum добавляется 1/3, и так продолжается до i = n}
WгiteLn('cуммa ‘, n,' элементов = ', sum:10:5);

Readkey;
end.

Второй вариант:

program summa4;
uses crt;
const

n = 100;

vaг

i : Integeг;
sum: Real;

begin
clrscr;
sum := 0;
foг i := n downto 1 do

sum := sum + 1 / i;

WriteLn (‘Сумма ’, n, ‘элементов = ’, sum:10:5);
Readkey;
end.

– Самостоятельно разберите работу циклов for в обоих случаях.

– Какую разновидность цикла лучше выбрать в каждом конкретном случае?

  • Использовать цикл for в том случае, когда точно знаете, сколько раз должно быть выполнено тело цикла. В противном случае обратитесь к другим циклам.
  • Используйте цикл repeat, если необходимо, чтобы тело цикла выполнялось по крайней мере один раз.
  • Используйте цикл while, если необходимо, чтобы проверка была произведена прежде, чем будет выполняться тело цикла.

III. Итог урока

– Итак, мы познакомились с циклами, важнейшей составной частью большинства программ. Но как нам быть с героем древнегреческого мифа? Мы выяснили, что циклическое действие, которое он выполняет, будет конечным, если существует условие, при выполнении (или невыполнении) которого цикл должен завершиться. Ограничение может быть и по числу повторений цикла. От цикла, который выполняет Сизиф, немного пользы, ведь каждый раз он повторяет одно и то же действие. Цикл в программе при каждом новом повторении выполняет действие, которое хотя бы немного отличается о предыдущего. Так, сизиф мог бы, скажем, каждый раз вкатывать на гору камень меньшего размера, чем предыдущий. Условием окончания нелегкого сизифова труда было бы в этом случае выкатыванием на гору камня, например, весом в 1 грамм. Следовательно помочь Сизифу можно, изменив алгоритм его работы, введя в него “правильный” цикл.

– Завершим мы тему “Циклы” решением задач на следующем уроке. В каждой задаче вначале нужно придумать алгоритм, а затем написать программу.

IV. Домашнее задание

– Подумайте над решением следующей задачи: дано натуральное число. Посчитать количество цифр в числе.