1) познакомить учащихся с алгоритмической конструкцией «цикл», видами циклов;

advertisement
Урок №12
Тема урока: «Циклические алгоритмы. Виды циклов. Оператор цикла For».
Цель урока: познакомить учащихся с оператором цикла For.
Задачи урока:
1) познакомить учащихся с алгоритмической конструкцией «цикл», видами циклов;
2) познакомить учащихся с оператором цикла For;
3) научить использовать команду For при написании программ;
4) продолжить работу по развитию алгоритмического мышления учащихся,
аккуратности при работе в тетради;
5) продолжить работу по формированию навыков программирования.
Дополнительные материалы: презентация.
Ход урока
I. Изучение нового материала (презентация Цикл.ppt, слайды 1-4,43-65).
...Пока свободою горим,
Пока сердца для чести живы,
Мой друг, отчизне посвятим
Души прекрасные порывы!
А.С.Пушкин. К Чаадаеву.
В жизни очень часто нам приходится повторять одни и те же действия. Например,
при мытье посуды, приеме пищи и т.д. Кроме того из года в год сменяют друг друга
времена года, месяцы.
Организация действий, при которой одна и та же последовательность команд
выполняется несколько раз, называется циклом.
В языке программирования Турбо Паскаль существуют 2 вида циклов: цикл с
заранее известным числом повторений For и циклы с неизвестным числом повторений
While и Repeat. Сегодня мы познакомимся с циклом For.
Блок-схема цикла For:
Формат записи оператора цикла for:
For <параметр>:=<нач> to <кон> do <оператор>;
For <параметр>:=<нач> downto <кон> do <оператор>;
Действия, которые повторяются, составляют тело цикла.
Если в цикле нужно указать больше одного оператора, то необходимо использовать
операторные скобки begin и end.
При выполнении оператора For вначале вычисляется выражение <нач> и
осуществляется присваивание <параметр>:=<нач>. После этого циклически повторяется:
 проверка условия <параметр><=<кон>; если условие не выполнено, оператор For
завершает свою работу;
 выполнение оператора <оператор>;
 наращивание переменной <параметр> на единицу.
Как видите, оператор цикла For не существует сам по себе, а организуется
специально для какой-либо целой переменной (параметра цикла). Она автоматически
увеличивает свое значение после каждого выполнения операторов цикла, пока не примет
1
своего конечного значения. Когда это произойдет, операторы цикла выполнятся
последний раз и выполнение цикла закончится.
Переменную цикла можно использовать внутри цикла как обычную переменную.
Однако ей нельзя ничего присваивать, ведь не зря же для неё организовали целый цикл!
Организаторы сами следят за значением этой переменной…
В зависимости от начального и конечного значения параметра цикла, которые
задаются в заголовке, цикл может выполнится то или иное количество раз. Например,
если начальное и конечное значения совпадают, то цикл выполнится только один раз.
Если же начальное значение превышает конечное, то цикл не выполнится ни разу!
А сколько раз выполнятся циклы со следующими заголовками:
for i := 5 to 9 do
{5 раз}
for i := 0 to 8 do
{9 раз}
for i := -1 to 10 do
{12}
for i := 100 to 200 do
{101}
for i := 0 to 0 do
{1}
Итак, еще раз, запомните! Оператор цикла является замкнутой структурой, поэтому
все, что не входит в него, выполняется один раз!
Переменная цикла не может быть вещественным числом, только целым (integer, byte,
word и др). Ее значение в цикле все время изменяется, и она может быть использована для
каких-либо целей, например, получим таблицу квадратов первых 9 чисел.
program Kvadraty_chisel;
uses crt;
var i, s : integer;
begin
clrscr;
for i := 1 to 9 do
begin
write (i, '*', i);
s := i*i;
writeln (' = ', s)
end;
readln;
end.
Существует еще одна разновидность цикла for, в котором вместо служебного слова
to используется downto. В этом случае переменная цикла будет каждый раз уменьшать
свое значение на 1, а не увеличивать.
Параметр цикла может быть не только числом, но и символом. В этом случае
начальные и конечные значения тоже должны быть символами, а переменная цикла будет
перебирать все значения между ними в том порядке, в каком они указаны в таблице
ASCII.
Итак, закрепим еще раз основные выводы:
1. Параметр цикла – это переменная порядкового типа.
2. Оператор может быть составным.
3. В цикле For..to..do параметр цикла увеличивается на 1 от начального значения до
конечного. В цикле For..downto..do параметр цикла уменьшается на 1 от начального
значения до конечного.
4. В теле цикла запрещается явное изменение значения параметра.
Циклы часто используют для обработки рядов. Например, нахождение суммы целых
чисел от 1 до 5. Можно решить эту задачу таким способом:
s := 1 + 2 + 3 + 4 + 5;
Но тут есть два недостатка:
1. Решение громоздко и банально.
2
2. Решение не поддается корректировке. Например, если мы захотим изменить эту
программу так, чтобы она находила сумму первых 10 натуральных чисел, то размер
программы увеличится в 2 раза, если сумму первых 100, то почти в 20 раз.
Поэтому
такую
задачу
нужно
решать
с
использованием
цикла.
Решать будем по такой общей схеме:
обнулить счётчик суммы
начало цикла
прибавить к счётчику суммы очередное слагаемое
конец цикла
вывести значение счётчика суммы на экран
То есть, для нахождения суммы мы должны специально выделить переменную, в
которой эта сумма будет храниться. Пусть это будет переменная s. Вначале её нужно
обнулить: s := 0;
Потом, уже в теле цикла, мы должны будем каждый раз увеличивать значение
переменной s на значение очередного слагаемого. Этим слагаемым будет переменная
цикла, так как именно она будет поочерёдно принимать все интересующие нас значения:
s := s + «слагаемое»;
Переведём всё вышесказанное на язык Pascal:
program Summa_chisel_ot1do5;
uses crt;
var s, i : integer;
begin
clrscr;
s := 0;
for i := 1 to 5 do
s := s + i;
writeln (’Сумма чисел от 1 до 5 равна ’, s);
readln;
end.
Проверим с помощью трассировки:
i
Условие
1
1
15 True
3
2
25 True
6
3
35 True
10
4
45 True
15
5
55 True
s
0
6
65 False
Похожим образом находится произведение нескольких различных элементов.
Только начальное значение переменной, в которой будет храниться произведение, должно
быть равно не нулю, а единице. И множители надо не прибавлять, а домножать:
program Proizvedenie_chesel_ot1do5;
var p, i : integer;
begin
p := 1;
for i := 1 to 5 do
p := p * i;
3
writeln (’Произведение чисел от 1 до 5 равно ’, p)
end.
Эта программа находит произведение первых пяти натуральных чисел. Измените эту
программу так, чтобы она находила произведение первых 10 натуральных чисел и
объясните причину полученного неправильного результата (Примечание: происходит
выход за пределы значений типа integer, нужно использовать тип longint). Исправьте
программу так, чтобы она давала правильный результат. А чему равно произведение
чисел от -5 до 5? Почему? (Примечание: равно нулю, так как между значениями -5 и 5
есть число 0).
Очень часто приходится решать задачу, в которой необходимо найти количество
чисел, которые удовлетворяют некоторым условиям. Например, найти количество
нечётных чисел в заданном интервале. Для решения этой задачи необходимо организовать
цикл, в котором будут поочерёдно перебираться все значения из заданного интервала. В
теле цикла надо будет проверять: удовлетворяет ли параметр цикла указанному условию?
Если да, то это найденное значение надо посчитать, то есть увеличить счётчик найденных
элементов на единицу (в самом начале этот счётчик должен быть равен нулю); если нет,
то перейти к следующему элементу.
Задача: «Найти количество нечётных чисел из интервала от 30 до 50».
Для этого нам надо будет организовать цикл для переменной i, которая будет
перебирать поочерёдно значения от 30 до 50. В теле цикла мы должны будем проверять:
является ли i нечётным числом? Помните как это делать? Нужно сравнить остаток от
деления i на 2 с нулём – чётные числа делятся на 2, нечётные нет. Для такой проверки
надо использовать условный оператор if. Если i – число нечётное, то этот остаток не равен
нулю. В этом случае нужно увеличить счётчик на единицу, то есть посчитать найденное
число. В конце программы выводим результат на экран.
Переведём теперь это всё с русского языка на Pascal:
program Kol-vo;
var k, i : integer;
begin
k := 0;
for i := 30 to 50 do
if k mod 2 <> 0 then k := k + 1;
writeln('В интервале от 30 до 50 ', k, ' нечётных чисел')
end.
II. Закрепление нового материала. Решение задач.
№1. Составить программу вычисления суммы кубов чисел от a до b. Значения a и b
вводятся с клавиатуры.
s := 0;
for i := a to b do
s:=s+i*i*i;
№2. Дано целое a и натуральное число n. Найти an.
st := 1;
for i := 1 to n do
st:=st*a;
III. Домашнее задание.
Занятие 6 (разобрать все примеры), №2[1], задача:
Составить программу, которая находит факториал числа n: n!=1234…n.
Урок №13
Тема урока: «Решение задач с использованием оператора For».
Цель урока: закрепить навыки использования оператора For при решении задач.
4
Задачи урока:
1) закрепить навыки использования оператора For при написании программ;
2) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
3) продолжить работу по формированию навыков программирования.
Ход урока
I. Повторение. Проверка домашнего задания.
Ответьте на следующие вопросы:
 Какая алгоритмическая конструкция называется циклом?
 Какие виды циклов вы знаете?
 Как на языке Турбо Паскаль записывается цикл For? Как он работает?
Проверим домашнее задание:
№1.
s := 1;
for i := 1 to n do
s:=s+2*i-1;
№2.
f := 1;
for i := 1 to n do
f:=f*i;
II. Закрепление нового материала. Решение задач.
№1. В некотором году (назовем его условно первым) на участке в 100 гектаров
средняя урожайность ячменя составила 20 центнеров с гектара. После этого каждый год
площадь участка увеличивалась на 5%, а средняя урожайность – на 2%. Определить
площадь участка и среднюю урожайность за 2, 3, ..., 10 год, а также какой урожай будет
собран за первые 10 лет.
Program Zadacha;
uses crt;
var s,sr,u,ou:real;
i:integer;
begin
clrscr;
s:=100; sr:=20; u:=s*sr; ou:=u;
for i:=2 to 10 do
begin
s:=s*1.05;
sr:=sr*1.02;
u:=s*sr;
ou:=ou+u;
writeln('Площадь участка в ',i,' год: ',s:10:2);
writeln('Средняя урожайность с гектара за ',i,' год:
',sr:10:2);
end;
writeln;
writeln('За 10 лет будет собрано: ',ou:10:2,' цент.');
readln;
end.
№2. Составить программу для решения задачи: сколько можно купить быков, коров
и телят, платя за быка 10 р., за корову – 5 р., а за теленка – 0,5 р., если на 100 р. надо
купить 100 голов скота?
Program Zadacha;
uses crt;
5
var b,k,t:integer;
begin
clrscr;
for b:=1 to 10 do
for k:=1 to 20 do
for t:=1 to 200 do
if (b*10+k*5+t*0.5=100)and(b+k+t=100) then
writeln('Быков-',b,' коров-',k,' телят-',t);
readln;
end.
x1 x 2 x 3
xn
№3. Вычислить сумму 1     ...  , где n!=1·2·…·n. Значения n и x
1! 2! 3!
n!
вводятся с клавиатуры (1n10).
Program Zadacha;
uses crt;
var x,s,ch:real; n,i:integer; zn:longint;
begin
clrscr;
writeln('Введите данные');
write('x='); readln(x);
write('n='); readln(n);
s:=1; ch:=1; zn:=1;
for i:=1 to n do
begin
ch:=ch*x;
zn:=zn*i;
s:=s+ch/zn;
end;
writeln('Сумма равна:',s:10:5);
readln;
end.
III. Домашнее задание.
Повторить материал занятия 6, №20[1], задача:
Найти все двузначные числа, которые делятся на n или содержат цифру n.
№1.
y := 20;
for i := 19 downto 1 do
y:=sqr(y)-sqr(i);
№2.
if n=0 then writeln('10 20 30 40 50 60 70 80 90')
else
begin
for i:=10 to 99 do
if (i mod n=0)or(i mod 10=n)or(i div 10=n) then
write(i,' ');
end;
Урок №14
Тема урока: «Циклы с пред- и постусловием».
Цель урока: познакомить учащихся с циклами While и Repeat.
Задачи урока:
6
1) познакомить с операторами цикла While и Repeat, научить использовать данные
команды при написании программ;
2) продолжить работу по развитию алгоритмического мышления учащихся,
аккуратности при работе в тетради;
3) продолжить работу по формированию навыков программирования.
Дополнительные материалы: презентация.
Ход урока
I.Изучение нового материала (презентация Циклы.ppt, слайды 4-42).
Сегодня на уроке мы познакомимся с вами с циклами While и Repeat.
Цикл While (пока) особенен тем, что позволяет организовывать циклы, для которых
нельзя заранее сказать, сколько раз он выполнится. Цикл выполняется до тех пор, пока
верно условие в заголовке цикла. Блок-схема цикла While:
На языке Турбо Паскаль команда While записывается следующим образом:
While <условие> do <операторы>;
Условие проверяется перед входом в цикл, поэтому его еще называют циклом с
предусловием. Если результат условия True, то выполняются операторы, стоящие в теле
цикла и снова проверяется условие. Если результат условия False, то осуществляется
выход из оператора цикла. Если условие с самого начала было ложно, то оператор не
выполнится ни разу.
Напомню, что условие – это логическое выражение, построенное из выражений
отношения, логических операций and, or, xor, not и круглых скобок. Если необходимо
повторить несколько команд, то они записываются в операторных скобках begin и end.
Давайте на примере посмотрим, как выполняется цикл While. Определите, чему
равно значение переменной s после выполнения фрагмента программы:
a:=1; b:=1;
While a+b<8 do
begin
a:=a+1;
b:=b+2;
end;
s:=a+b;
Последовательно заполняем следующую таблицу:
s
Условие
a
b
1
1
2<8 True
2
3
5<8 True
3
5
8
8<8 False
Цикл выполняется 2 раза, значение s = 8.
В цикле Repeat (повторять) условие проверяется после того, как тело цикла
выполнится 1 раз:
7
На языке Турбо Паскаль цикл Repeat записывается следующим образом:
Repeat
<операторы>;
Until <условие>;
Обращаю внимание, что условие проверяется после того как операторы, стоящие в
теле цикла, хотя бы один раз выполнятся. Снова операторы выполняются в том случае,
если результат условия False, а выход из оператора цикла – когда результат условия True.
Итак, тело цикла Repeat всегда выполнится хотя бы один раз. Потому можно сказать,
что цикл While сначала думает, а потом делает, а Repeat наоборот: сначала делает, а потом
думает. Еще раз обратите внимание, что цикл Repeat повторяется только тогда, когда
условие после Until ложно. Цикл Repeat называют циклом с постусловием.
Если в теле цикла Repeat необходимо записать несколько команд, то операторные
скобки begin и end использовать не надо.
Давайте на примере посмотрим, как выполняется цикл Repeat. Определите, чему
равно значение переменной s после выполнения фрагмента программы:
x:=10; y:=0;
Repeat
x:=x-2;
y:=y+x;
Until x<2;
s:=x+y;
Последовательно заполняем следующую таблицу:
s
Условие
x
y
10
0
8
8
8<2 False
6
14
6<2 False
4
18
4<2 False
2
20
2<2 False
0
20
20
0<2 True
Цикл выполнится 5 раз, s = 20.
Решим следующую задачу. Дано натуральное число n. Требуется подсчитать
количество цифр данного числа.
При подсчете мы будем число n уменьшать в 10 раз, убирая тем самым из него
последнюю цифру, и увеличивать счетчик цифр на единицу. Так как количество цифр
неизвестно, то необходимо использовать оператор While или Repeat. Составим программу
с оператором While. До каких пор можно отбрасывать последнюю цифру в числе? Пока
число не станет равным нулю.
8
Проверим наш алгоритм с помощью таблицы «трассировки». Пусть n=73485. Чтобы
не потерять первоначальное значение числа, присвоим это значение переменной m.
Значение счетчика k положим равным 0. Выполним действия, описанные выше. Мы
видим, что при m=0 значение переменной k равно 5, следовательно, в числе 5 цифр.
m
k
73485
0
7348
1
734
2
73
3
7
4
0
5
Program Cikl;
uses crt;
var n,m,k:integer;
begin
clrscr;
write(‘Введите натуральное число: ‘); readln(n);
m:=n;
k:=0;
while m<>0 do
begin
m:=m div 10;
inc(k);
end;
writeln(‘В числе ‘,n,’ ‘,k,’ цифр’);
readln;
end.
Заменим цикл While циклом Repeat. Что необходимо изменить в программе?
repeat
m:=m div 10;
inc(k);
until m=0;
Мы видим, что циклы While и Repeat взаимозаменяемы: условия, используемые в
них противоположны друг другу.
В заключение следует отметить, что при использовании данных циклов необходимо
обеспечить влияние по крайней мере одного из операторов тела цикла на значение
условия, иначе цикл будет выполняться бесконечно. Например,
x:=10;
while x>0 do x:=x+1;
II. Закрепление нового материала. Решение задач.
№1. Модифицируя рассмотренную программу, решите следующие задачи:
 найдите количество четных цифр числа;
 найдите сумму цифр числа;
 найдите сумму цифр числа, больших 5;
 найдите первую цифру числа;
 ответьте на вопрос, сколько раз данная цифра встречается в числе.
Фрагменты программ:
1) while m<>0 do
9
begin
c:=m mod 10;
if (c mod 2 =0)and(c<>0) then inc(k);
m:=m div 10;
end;
writeln(‘Кол-во четных цифр: ’,k);
2) while m<>0 do
begin
c:=m mod 10;
s:=s+c;
m:=m div 10;
end;
writeln(‘Сумма цифр: ’,s);
3) while m<>0 do
begin
c:=m mod 10;
if c>5 then s:=s+c;
m:=m div 10;
end;
writeln(‘Сумма цифр, больших 5: ’,s);
4) while m<>0 do
begin
c:=m mod 10;
m:=m div 10;
end;
writeln(‘Первая цифра: ’,c);
5) readln(l);
while m<>0 do
begin
c:=m mod 10;
if c=l then inc(k);
m:=m div 10;
end;
III. Домашнее задание (для проверки домашнего задания прошлого урока собрать
тетради).
Занятие 7,8 (разобрать все примеры), №1-3 стр. 65, №3 стр. 75 (решить, используя
While и Repeat) [1].
Урок №15
Тема урока: «Решение задач с использованием операторов цикла While и Repeat».
Цель урока: закрепить навыки использования операторов While и Repeat при решении
задач.
Задачи урока:
1) повторить понятие «цикл», виды циклов;
2) закрепить навыки использования операторов While и Repeat при написании
программ;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
Ход урока
I. Повторение. Проверка домашнего задания.
10
Ответьте на следующие вопросы:
 Какая алгоритмическая конструкция называется циклом?
 Какие виды циклов вы знаете?
 Как на языке Турбо Паскаль записывается цикл While? Как он работает?
 Как на языке Турбо Паскаль записывается цикл Repeat? Как он работает?
 В чем состоит отличие данных циклов?
Проверим домашнее задание:
№1.
a
b
Условие
1
1
2<8 True
2
3
5<8 True
3
5
8<8 False
Условие проверяется 3 раза, a=3, b=5, s=8.
№2.
a
b
Условие
1
1
1<=3 True
2
2<=3 True
3
3<=3 True
4
2
4<=3 False
a=4, b=2.
№3.
s
i
Условие
0
0
0<5 True
1
1<5 True
2
2<5 True
3
3<5 True
4
4<5 True
20
5
5<5 False
s
i
Условие
0
1
1>1 True
100
0
0>1 False
№3.
while (a<>0)and(b<>0) do
begin
if a>b then a:=a mod b else b:=b mod a;
end;
nod:=a+b;
nok:=abs(a*b) div nod;
--repeat
if a>b then a:=a mod b else b:=b mod a;
until (a=0) or (b=0);
nod:=a+b;
nok:=abs(a*b) div nod;
II. Закрепление нового материала. Решение задач.
№1. Гражданин 1 марта открыл счет в банке, вложив 10000 руб. Через каждый месяц
размер вклада увеличивается на 2% от имеющейся суммы. Определить через сколько
месяцев размер вклада превысит 12000 руб.
Program Wklad;
uses crt;
11
var wkl:real; m:integer;
begin
clrscr;
wkl:=10000; m:=0;
while wkl<=12000 do
begin
m:=m+1; wkl:=wkl*1.02;
end;
writeln('Через ',m,' месяцев размер вклада превысит 12000
руб.');
readln;
end.
1 1 1 1
1
№2. Вычислить сумму ряда     ...  n  ... с заданной точностью е (е>0).
2 4 8 16
2
Program Ryad;
uses crt;
var s,e,sl:real;
begin
clrscr;
write('Введите точность: '); readln(e);
s:=0;
sl:=1/2;
while sl>=e do
begin
s:=s+sl;
sl:=sl/2;
end;
writeln('Сумма равна:',s:10:5);
readln;
end.
№3. Составить программу вычисления значений функции f(x)=2x3–x2+5 на отрезке
[a; b] с шагом h.
Program Func;
uses crt;
var a,b,h,x,y:real;
begin
clrscr;
write('Введите a='); readln(a);
write('Введите b='); readln(b);
write('Введите h='); readln(h);
x:=a;
while x<=b do
begin
y:=2*sqr(x)*x-sqr(x)+5;
writeln('x=',x:7:2,'
y=',y:7:2);
x:=x+h;
end;
readln;
end.
III. Домашнее задание.
Повторить теоретический материал занятий 6,7,8, №6 стр. 66, №4,6 стр.76 [1].
12
Урок №16
Тема урока: «Решение задач с использованием циклов».
Цель урока: закрепить навыки использования операторов цикла при решении задач.
Задачи урока:
1) закрепить навыки использования операторов цикла при написании программ;
2) подготовиться к контрольной работе по теме «Операторы цикла в Турбо Паскале»;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
Ход урока
I. Проверка домашнего задания.
№1.
n:=301;
m:=0; {метка}
while m<>1 do
begin
if n mod 19 =0 then
begin
write(n);
m:=1;
end;
inc(n);
end;
№2.
f_1:=1; f_2:=1; n:=1;
while f_2<=maxint-f_1 do {maxlongint}
begin
f:=f_2+f_1;
inc(n);
f_1:=f_2;
f_2:=f;
end;
Для нахождения суммы решение аналогично.
№3.
for i:=1 to 999 do
begin
sq:=sqr(i);
j:=i;
while (j<>0)and(j mod 10=sq mod 10) do
begin
sq:=sq div 10;
j:=j div 10;
end;
if j=0 then writeln(I,’:’,sqr(i));
end;
II. Подготовка к контрольной работе. Решение задач.
№1. Даны натуральные числа n и k. Найти значение выражения 1k+2k+…+nk.
s:=0;
for i:=1 to n do
begin
y:=1;
13
for j:=1 to k do y:=y*i;
s:=s+y;
end;
№2. Начав тренировки, лыжник в первый день пробежал 10 километров. Каждый
следующий день он увеличивал длину пробега на 10% от пробега предыдущего дня.
Определить, в какой день суммарный пробег за все дни превысит 100 км. На экран
вывести также сообщение о том, сколько км лыжник пробегал за текущий день и всего за
прошедшие дни.
Program Zadacha;
uses crt;
var perv,vse: real;
dat: integer;
begin
clrscr;
vse:=10; dat:=1; perv:=10;
writeln('За',dat:3,'-й день пробежал ',perv:6:2,' км');
repeat
perv:=perv*1.1;
vse:= vse+perv;
dat:=dat+1;
write('За',dat:3,'-й день пробежал ',perv:6:2,' км');
writeln('
Всего:',vse:6:2);
until vse>100;
writeln('Чтобы превысить 100 км потребуется количество
дней:',dat:4);
readln;
end.
№3. Определить, является ли заданное натуральное число палиндромом.
m:=n;
while m<>0 do
begin
c:=m mod 10;
k:=k*10+c;
m:=m div 10;
end;
if k=n then writeln(‘Число является палиндромом’)
else writeln(‘Число не является палиндромом’);
III. Домашнее задание.
Повторить теоретический материал занятий 6,7,8, еще раз просмотреть все
разобранные задачи, составить тест или кроссворд по теме «Основные алгоритмические
конструкции языка Турбо Паскаль».
Урок №17
Тема урока: «Обобщающий урок по модулю «Циклы». Контрольная работа №4».
Цель урока: итоговый контроль усвоения изученного материала.
Задачи урока:
1) проверить знания учащихся по модулю «Циклы»;
2) проверить навыки решения задач с использованием операторов For, While и Repeat;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
14
Дополнительные материалы: карточки с заданиями для контрольной работы.
Ход урока
I. Контрольная работа (Карточка1.doc).
Вариант 1.
1. Найти сумму ряда:
1 1 1 1 1
1      ...
2 3 4 5 6
Суммирование производить до тех пор, пока очередное слагаемое не станет
меньше заданного числа e (e>0).
2. Найти все трехзначные числа, такие, что сумма цифр равна А, а само число делится
на В (А и В вводятся с клавиатуры).
3. Найти все натуральные числа a, b и с из интервала от 1 до 20, для которых
выполняется равенство: а + b=с2.
Вариант 2.
1. Найти сумму ряда:
1 1 1 1
1
    ...
3 6 9 12 15
Суммирование производить до тех пор, пока очередное слагаемое не станет
меньше заданного числа e (e>0).
2. Найти количество трехзначных чисел, таких, что сумма цифр равна А, а само число
заканчивается цифрой В (А и В вводятся с клавиатуры).
3. Найти все натуральные числа a, b и с из интервала от 1 до 20, для которых
выполняется равенство: а + b2=с2.
Решение:
Вариант 1.
1. s:=0;
i:=3;
while 1/i>=e do
begin
s:=s+1/i;
i:=i+3s;
end;
writeln('Сумма равна:',s:10:5);
2. k:=0;
for i:=100 to 999 do
begin
n:=i;
s:=0;
repeat
c:=n mod 10;
s:=s+c;
n:=n div 10;
until n=0;
if (s=a)and(i mod b =0) then
begin
inc(k);
write(i,' ');
end;
end;
if k=0 then writeln('Таких чисел нет');
3. for a:=1 to 20 do
15
for b:=1 to 20 do
for c:=1 to 20 do
if a+b=sqr(c) then writeln(a,' ',b,' ',c);
Вариант 2.
1. s:=0;
i:=1;
while 1/i>=e do
begin
s:=s+1/i;
i:=i+1;
end;
writeln('Сумма равна:',s:10:5);
2. k:=0;
for i:=100 to 999 do
begin
n:=i;
s:=0;
repeat
c:=n mod 10;
s:=s+c;
n:=n div 10;
until n=0;
if (s=a)and(i mod 10 =b) then inc(k);
end;
if k=0 then writeln('Таких чисел нет');
3. for a:=1 to 20 do
for b:=1 to 20 do
for c:=1 to 20 do
if a+sqr(b)=sqr(c) then writeln(a,' ',b,' ',c);
II. Домашнее задание (собрать тетради с тестом или кроссвордом).
Повторить материалы модуля.
16
Download