Перед каждым учителем информатики стоит задача: «чему учить в информатике и как учить». В настоящее время появилось большое количество литературы, определенных сайтов по программированию, где предлагается стандартный набор задач по основным разделам. Я думаю, никто не сомневается, что за основу обучения программированию, следует взять методику, с максимальным использованием компьютера на занятиях, и при этом должен формироваться определенный стиль мышления. Мне бы хотелось остановиться на разделе решения задач по теме «Целые числа». Как показывает практика работы с учащимися, ученик воспринимает целое число, как единое целое, а не набор цифр, с которыми можно совершать различные операции. На мой взгляд, имея набор таких задач можно раскрыть отдельные темы программирования достаточно качественно. Особенно это помогает при подготовке учащихся к олимпиадам. Преимуществом такого подхода является конструирование задач из минимального количества инструкций. В процессе занятий необходимо достичь такого уровня их понимания, чтобы работа программы учеником воспринималась в динамике. Ни для кого не секрет, что, имея по программе два недельных часа нельзя качественно обучить основам программирования, чтобы студент первокурсник не «ломал» голову над задачами в институте, которые он как бы видел в школе на уроках информатики. Я пропущу разделы предшествующие вводным урокам знакомства с языком, а постараюсь раскрыть те разделы тематического планирования в 8-9 классах, которые дают, на мой взгляд, ощутимый результат в качественном понимании материала учеником.
План занятий:
- Обсуждение темы урока;
- Разбор программ решения отдельных задач;
- Эксперименты с программой;
- Выполнение самостоятельной работы.
Занятие по теме «Целый тип данных»
Обсуждение темы. Существует пять целых типов: Shortint, Integer, Longint, Byte, Word. Они отличаются диапазоном значений, размером памяти, отводимой для их представления.
Тип |
Диапазон значений |
Объем памяти |
Shortint |
-128… 127 |
1 байт, со знаком |
Integer |
-32768… 32767 |
2 байта, со знаком |
Longint |
-2147483648…2147483647 |
4 байта, со знаком |
Byte |
0…. 255 |
1 байт, без знака |
Word |
0… 65535 |
2 байта, без знака |
Операции с величинами целого типа: сложение (+), вычитание (-), умножение (*), нахождение целой части деления (Div), нахождение остатка от деления (Mod), а также стандартные функции: Ord, Succ, Pred. Так как с функциями Div и Mod ученик не встречается на уроках математики, то есть необходимость решить несколько упражнений на их применение.
На первом этапе в 8 классе разбираем задачу: Написать программу, определяющую цифры (двухзначного) трехзначного числа.
Program task_1;
Var a, One, Dec, Han: Integer;
Begin
Writeln(‘Введи число’);
Readln(a);
One:= a Mod 10;
Writeln(‘Единиц:’,One);
Han:=a div 100;
Writeln(‘Сотен:’,Han)
Dec:= (a-Han*100) div 10;
Writeln(‘Десятков:’,Dec);
End.
Program task_2;{Изменить задачу для вывода числа , с приписанной 1 слева. Например: 234è1234}
Var a, One, Dec, Han, Rez: Integer;
Begin
Writeln(‘Введи число’);
Readln(a);
One:= a Mod 10;
Writeln (‘Единиц:’,One);
Han:=a div 100;
Writeln (‘Сотен:’,Han);
Dec:= (a-Han*100) div 10;
Writeln (‘Десятков:’,Dec);
Rez:=1*1000+Han*100+Dec*10+One;
Writeln (‘Rez=’, Rez);
End.
Задачи для самостоятельного решения.
- Изменить задачу для нахождения цифр двузначного (четырехзначного) числа.
- Определить сумму и произведение цифр числа (двузначного, трехзначного, четырехзначного). Определить число, образованное перестановкой цифр десятков и единиц.
- Определить число, полученное перестановкой цифр десятков и единиц, цифр сотен и единиц.
- Получить четырехзначное число, полученное из двузначного, приписыванием цифры единицы, в качестве цифры тысяч (например, из числа 321 необходимо получить число 1321).
Занятие по теме «Составной оператор и оператор ветвления»
Составной оператор записывается следующим образом:
Полный условный оператор
If <условие>Then<оператор 1>Else<оператор 2>
If <условие> Then <оператор>
Разбор темы начинаем со стандартных задач нахождения наибольшего из двух (трех) данных чисел.
Самостоятельная работа.
Дано двузначное (трехзначное) число. Написать программу определения:
- Является ли сумма его цифр двузначным числом;
- Больше ли числа M сумма его цифр, число M вводится с клавиатуры;
- Кратна ли 5 сумма его цифр;
- Что больше, цифра десятков или цифра единиц, цифра сотен или цифра десятков (единиц);
- Оканчивается ли число цифрой K,цифра K вводится с клавиатуры;
- Входит ли цифра 5 в данное число;
- Входят ли цифры 5,3,8 в данное число;
Задача. Дано трехзначное число. Написать программу определения, является ли число палиндромом (перевертышем), то есть числом, десятичная запись которого читается слева направо и справа налево.
Program task_1;
Var a, One, Dec, Han: Integer;
Begin
Writeln(‘Введи число’);
Readln(a);
One:= a Mod 10;
Han:=a div 100;
Dec:= (a-Han*100) div 10;
If ((Han*100+Dec*10+One)=(One*100+Dec*10+Han) Then Writeln (‘Yes’)
else Writeln(‘No’);
End.
Занятие по теме: «Оператор повторения For»
Инструкция используется для организации циклов с фиксированным, определяемым во время разработки программы, числом повторений. Количество повторений цикла определяется начальным и конечным значениями переменной-счетчика. Переменная счетчик должна быть целого типа. Оператор должен иметь одну точку входа и одну точку выхода.
Задача. Найти все двузначные числа, в которых есть цифра N и само число делится на N
Program task_1;
Var n:Integer;
a1,a2,i: Byte;
Begin
Writeln('Введи цифру');
Readln(n);
For I:=10 to 99 do begin
a1:=I mod 10; a2:=I div 10;
If ((n=a1) or (n=a2)) and (I mod n=0) then
Writeln('I= ',I);
end;
End.
Задача. Определить количество натуральных трехзначных чисел, сумма цифр которых равна заданному числу
Program task_3;
Var n,s,i:Integer;
a1,a2,a3,k:Byte;
Begin
Writeln('Введи число');
Readln(n);
s:=0; k:=0;
For I:=100 to 999 do begin
a1:=I mod 10;a3:=I div 100;a2:=(i-a3*100) div 10;
If (a1+a2+a3=n) Then begin Writeln('I= ',I);k:=k+1; end;
end;
Writeln('количество цифр=',k);
End.
Задача. Написать программу поиска двузначных чисел, таких, что если к сумме цифр этого числа прибавить квадрат этой суммы, то получится это число.
Program task_4;
Var n,i:integer; a1,a2:byte;
Begin
For I:=10 to 99 do begin
a1:=I mod 10;a2:=I div 10;
If (a1+a2+(a1+a2)*(a1+a2))=I Then Writeln('I= ',I);
end;
End.
Задача. Квадрат трехзначного числа оканчивается тремя цифрами, которые как раз составляют это число. Написать программу поиска таких чисел.
Program task_5;
Var n,i:Longint;
a1,a2,a3:integer;
Begin
For I:=100 to 999 do begin
a1:=(I*I) mod 10;a2:=(I*I) div 10 mod 10;
a3:=(I*I) mod 1000 div 100;
If (a3*100+a2*10+a1)=I Then
Writeln('I= ',I,’Квадрат числа=',I*I);
end;
End.
Задача. Найти сумму целых положительных чисел из промежутка от А до В, кратных 4 (значения А и В вводятся с клавиатуры)
Program task_5;
Var S:Integer;
A,B, I: Integer;
Begin
Writeln('Введи промежутки А,В');
Readln(A,B);
S:=0;
For I:=A to B do
If (I mod 4=0) then begin s:=s+i; Writeln('I= ',I,'s=',s);
end;
End.
Задача. В трехзначном числе зачеркнули первую цифру слева, когда полученное двухзначное число умножили на 7, то получили данное число.
Program task_6;
Var i,a1:Integer;
Begin
For I:=100 to 999 do begin
a1:=I mod 100;
If (a1*7=I) Then Writeln('I= ',i,'a1*7=',a1*7);
end;
End.
Задача. Среди четырехзначных чисел подсчитайте количество чисел, у которых все цифры не равны.
Program task_7;
Var m:Integer;
a1,a2,a3,a4,i,k:Integer;
Begin
For I:=1000 to 9999 do begin
m:=I;
a4:=m mod 10;m:=m div 10;a3:=m mod 10;m:=m div 10;
a2:=m mod 10;a1:=m div 10;
If (a1<>a2) and(a1<>a3) and (a1<>a4) and (a2<>a3) and(a2<>a4) and (a3<>a4)
Then begin k:=k+1;write('I= ',I);end;
end;
Writeln('k=',k);
End.
Занятие по теме оператор While
Решая предыдущие задачи, логично возникает вопрос, как определить количество цифр для любого числа, в том числе для длинного? Данная задача хорошо решается с использованием оператора цикла с предусловием While<условие> do<инструкция>. Такой цикл многократно выполняет одни и те же действия при истинности условия, которое изменяется обычно внутри цикла. Истинность условия обычно проверяется перед выполнением инструкций. Таким образом, если бы условие сразу оказалось ложным, то инструкция не будет выполняться не разу. Если в цикле необходимо выполнить несколько инструкций, то они объединяются после оператора Do операторными скобками Begin End.
Задача. Подсчитать количество цифр данного натурального числа.
Program task_1;
Var m,n:Longint;
k:Integer;
Begin
Writeln(' Введи целое число');
Readln(n);
m:=n;k:=0;
While m<>0 do begin
inc(k);m:=m Div 10;end;
Writeln('В числе',n,' цифр',k);
End.
Задача: Определить, является ли число палиндромом. Но диапазон данной задачи должен быть расширен, т.е. число может выходить за пределы типа Integer. Пусть дано число А<=99999. Например: 44444; 12321.
Program task_1;
Var d,n,m:Longint;
k:Integer;
Begin
Writeln(' Введи целое число');
Readln(n);
d:=0; m:=n;
While m<>0 do begin
d:=d*10+m mod 10;
m:=m Div 10;
end;
If d=n Then Writeln('Перевертыш:',d)
Else writeln('не перевертыш');
End.
Задачи для самостоятельного решения.
- Найти сумму цифр числа;
- Найти первую цифру числа, например, для числа 123456 цифра 1;
- Поменять порядок цифр числа, например, было 1234, стало 4321;
- Найти количество четных (нечетных) цифр числа;
- Найти самую большую (маленькую) цифру числа;
- Найти цифры кратные заданному числу M;
- Сколько раз данная цифра встречается в числе?;
- Приписать по 1 в начало числа и в конец;
- Поменять местами первую и последнюю цифру числа, например, из числа 1234 должно быть получено 4231;
- Приписать к исходному числу такое же число, например из числа 1234 получить 12341234;
- Определить, является ли заданное число степенью 3 (2…),
- выяснить, сколько раз встречается максимальная цифра.
Program task; {Сколько раз встречается максимальная и минимальная цифра?}
Var n,m,v:Longint;
k,g,f,max,min,i:Integer;
Begin
Readln(n);
m:=n;v:=n;{запоминаем число, т.к n будет изменено }
max:=n mod 10;k:=1;
min:=n mod 10;
While n<>0 do begin
m:=n mod 10; inc(k);
If m>=max Then max:=m;
If m
n:=n div 10;
end;
Writeln('max=',max);
Writeln('min=',min); g:=0;f:=0;
For I:=1 to k-1 do begin
If v mod 10=max then inc(g);
If v mod 10=min then inc(f);
v:=v div 10;
end;
Writeln('g=',g,'f=',f);
Readln
End.
Подбор задач тем хорош, что, имея практически одинаковую структуру программы, можно порешать большое количество задач, изменив лишь небольшой блок. Таким образом, достигается качественное понимание учеником задачи, нарабатывается необходимость использовать быстрые клавиши в среде (что немаловажно при работе). При таком подходе легко осуществляется постепенный переход детей, имеющих повышенный интерес к изучению информатики к решению задач более высокого уровня для подготовки к олимпиадам и некоторым заданиям ЕГЭ.