11 Класс. Глава 2. Тема 2. Уроки 1-7

advertisement
Глава 2. Тема 2. «Структурное программирование»
Урок 1. Тема урока: Структура языка программирования Паскаль. (1 час).
Общие замечания: следующие несколько уроков носят в целом знакомую для учащихся
информацию, поэтому учителю важно систематизировать знания учащихся и построить
уроки, сочетая теорию с практикой.
Цель урока: Знакомство учащихся со структурой процедурных языков программирования.
Систематизация знаний учащихся программирования по основам языка Паскаль, развитие
навыков учащихся по отладке программ.
Примерный ход урока:
1 часть - теоретическая (20 минут). Урок проводится в форме дискуссии по истории
развития языка Паскаль, обсуждения подсистем системы процедурных языков
программирования, понятий синтаксис и семантика языка. Затем следует обсудить
структуру Паскаль-программы, основные понятия: алфавит языка, понятие
идентификатор, комментарии.
2 часть – практическая (20 минут).
Подготовьте примеры программ, содержащие синтаксические и семантические ошибки
(или предложите учащимся привести свои примеры), пусть сначала ученики
проанализируют программы и визуально определят ошибки. Затем можно проверить
высказанные предположения и отладить программы. Необходимо подчеркнуть, что
компьютер – это формальный исполнитель программы, написанной человеком, и даже
если компилятор выдаёт сообщение об ошибке, то понимать его надо не буквально, а
пытаться разобраться с причиной, приведшей к ошибке. Здесь уместно вспомнить этапы
решения алгоритмической задачи и исследовать, какие ошибки на каком этапе могут
возникнуть.
Подведение итогов занятия.
Домашнее задание. §2.2.1, знать структуру Паскаль-программы, назначение каждого
раздела.
Урок 2. Тема урока: Концепция типов данных. (1 час).
Цель урока: Систематизация знаний учащихся программирования по основам языка
Паскаль, знакомство с новыми типами данных.
Примерный ход урока:
1.
Повторение материала прошлого урока (10 минут). Можно подготовить 2-3
слайда с небольшими программами, содержащими синтаксические ошибки: неверно
записан идентификатор, дважды описанная переменная, неверно расставлены (или не
расставлены) «;», отсутствует конец программы и т.п. В последний пример целесообразно
включить 1-2 команды, содержащие ошибки применения типов данных. Таким образом,
возникнет проблема, связанная с необходимостью обсудить концепцию типов данных.
2.
Обсуждение понятия «тип данных» в языке Паскаль. Данный вопрос имеет
важное значение для воспитания культуры программирования. Необходимо донести до
учащихся мысль, что прежде чем разрабатывать программу, необходимо чётко
представлять, какие переменные будут использованы в программе и какого типа они
должны быть. В основе этого понимания лежит представление о форме представления
значения в памяти компьютера, множестве допустимых операций и диапазоне
принимаемых значений.
В учебнике представлена таблица, содержащая всю информацию о простых типах
данных языка Паскаль. Обязательно следует разобрать таблицу, напомнить учащимся
связь: представление значения в памяти - диапазон значений. Для грамотного
использования типов в программах надо знать диапазон значений всех целых типов
данных и хотя бы порядок значений вещественного (real).
Новой информацией для учащихся являются сведения о возможности создавать свой
тип и о перечислимом типе данных. Следует разобрать примеры, приведённые в учебнике.
Так же можно добавить, что перечислимый тип имеет ограничения по использованию, так
как нельзя вводить-выводить значения перечислимого типа. Его, как правило, применяют
для использования в программах, где необходимо перечислить дни недели, названия
месяцев и т.п.
Например, определить недельную учебную нагрузку можно с помощью программы,
в которой применяется перечислимый тип данных:
type week_day= (mon, tue, wed, thu, fri, sat, sun) ;
var day:week_day ;
S,k:byte;
begin
S:=0;
for day:=mon to sun do
begin
case day of
mon,wed: k:=6;
tue,fri:k:=8;
thu,sat:k:=4
else
k:=0;
end;
S:=S+k;
end;
writeln('s=',S);
Readln
end.
Затем необходимо остановиться на особенностях применения ограниченного типа:
это подмножество значений порядкового типа, причем нижнее значение не должно
превышать верхнее значение.
Домашнее задание. §2.2.1, §2.2.2, ответить на вопросы, выучить сведения о
порядковых типах (табл. 2.1), §2.2.3, выучить стандартные математические функции
Паскаля, выполнить упражнения 1-4 после §2.2.3.
Урок 3. Тема урока: Операции, функции, выражения в языке Паскаль. (1 час).
Цель урока: Систематизация знаний учащихся программирования по основам языка
Паскаль, развитие навыков отладки программ.
Примерный ход урока:
1 часть – Проверка домашнего задания (10 минут). Обсудите возникшие у учащихся
вопросы, затруднения. Особое внимание уделите приоритетам операций в выражениях,
типу получаемого значения.
Например, в упражнении 4 и) значение выражения вычисляется слева направо:
3*7 div 2 mod 7/3 — trunc(sin(1))=21 div 2 mod 7/3 – trunc(sin(1))=10 mod 7/3 trunc(0,0175)=3/3 – 0=1.0 (имеет результат вещественного типа)
Остановите внимание на приоритеты выполнения логических операций при
составлении логических выражений.
2 часть – (7-8) выполнение упражнений 5, 6 после §2.2.3.
3 часть – Практическая работа (20-25 минут) – составить и отладить программы к
заданиям 1-2 практической работы 3.1 (данные вводятся с клавиатуры). Выполнить №8-9
в тетради, обсудить результаты.
Домашнее задание. §2.2.3, составить и отладить программы к заданиям 3-7
практической работы 3.1, принести в электронном виде, задания 10-14 оформить в
тетради.
Урок 4. Тема урока: Оператор присваивания в языке Паскаль. (1 час).
Цель урока: Систематизация знаний учащихся о командах присваивания, ввода-вывода
данных в языке Паскаль.
Примерный ход урока:
1. Проверка домашнего задания, обсуждение возникших трудностей, исправление
ошибок (20 минут).
Следует обратить внимание учащихся на следующие моменты: во-первых, возможные
ошибки, которые можно выявить только в процессе тестирования. Например, в задании
№6 практической работы 3.1, если в арифметическом выражении вычисления квадратного
b D
корня x1 :
при записи на языке Паскаль не расставить правильно скобки,
2a
можно получить результат, но неверный. И эта ошибка выявляется только правильно
подобранным тестом.
Неверное выражение: x1:=(-b+sqrt(D))/2*a; - ошибка не выявляется при a=1,
поэтому нужно подобрать тест при a≠1;
Правильная запись: x1:=(-b+sqrt(D))/(2*a); или x1:=(-b+sqrt(D))/2/a.
Во-вторых, в задаче №7 (вычисления площади равнобедренной трапеции) используется
значение угла при большем основании трапеции. Необходимо напомнить учащимся, что
тригонометрические функции sin(x), cos(x) вычисляют значение для аргумента,
выраженного в радианах. В задаче после ввода данных необходимо значение угла из
«градусов - xg» перевести в «радианы-xr» следующей командой: xr:=xg*Pi/180.
2. Теоретическая часть (25 минут). Обсуждение особенностей выполнения
оператора присваивания. Упражнения №3-6 после параграфа 2.2.4.
Особое внимание необходимо обратить на соответствие типов данных (упр. 3),
напомнить, что «вещественное деление» - «/» - всегда даёт результат вещественного типа,
даже если выполняется команда n:=n/1, равно как результат функции sqrt(4) и т.д.
Можно практически проверить решение №4 (выполнить с целыми и вещественными
величинами). Решение задачи без использования дополнительной переменной:
var x,y:integer;
begin
writeln(‘введите x y’);
Readln(x,y);
x:=x+y ;
y:=x-y;
x:=x-y;
writeln('x=',x);
writeln('y=',y);
end.
При вводе x,y соответственно
10 20000
Ответ: x=20000 y=10
Далее предложите выполнить программу при вещественных значениях x = 10.3 и y=
20000.1, объяснить результат: x=20000.1 y=10.2999999999993.
Домашнее задание. Составить и отладить программы к № 15-21 практической работы
3.1.
Уроки 5-6. Тема занятий: Текстовые файлы в языке Паскаль. Ввод-вывод
данных. (2 часа).
Общие замечания: На следующих двух занятиях необходимо с учащимися освоить
чтение данных их текстового файла и их использование в программе, а также запись
результатов в файл. Если группа достаточно сильная, можно сразу на одном уроке
объяснить операции ввода и вывода данных в файл, а на следующем уроки практически
закрепить полученные знания. Здесь приводится вариант последовательного освоения
учебного материала.
Урок 5. Текстовые файлы в языке Паскаль. Ввод данных из файла. (1 час).
Цель занятия: Знакомство учащихся с особенностями хранения данных в текстовом
файле и операциями ввода данных из файла в языке Паскаль.
Примерный ход занятия:
1. Объяснение нового материала (25 минут).
Занятие можно начать с постановки проблемы: как сохранить получаемые при
выполнении программы результаты или вывести их на внешнее устройство? Как в
программе использовать данные, хранящиеся во внешнем файле? Затем перейти к
объяснению понятия «файл», назначения и типов файлов, подробнее остановиться на
особенности хранения данных в текстовом файле.
Следует обсудить отличия команд read-Readln, write-writeln при работе со
стандартными файлами ввода-вывода, исследовать особенности выполнения команд на
практике. Желательно подготовить и разобрать несколько примеров с программами,
подобных тем, что приведены в учебнике. Учащиеся выполняют, делают выводы.
Далее необходимо объяснить порядок подключения текстового файла для ввода
информации из текстового файла. Обсудите с учащимися, какие действия надо для этого
выполнить: создать с помощью текстового редактора и сохранить текстовый файл с
данными, затем в программе обратиться к нему (порядок подключения файла к программе
описан в учебнике, §2.2.4).
Необходимо обратить внимание учеников на корректность представления в файле
числовых данных: целая часть отделяется от дробной части символом ‘.’, межу числами
обязательно должен стоять 1 или несколько пробелов.
Практическая часть урока. В качестве примера можно рассмотреть программу
решения следующей задачи:
В двух строках текстового файла находится по два действительного числа. Найти
сумму этих чисел. Результат вывести на экран.
Текст программы:
Program one;
Var a,b,c,d,S: real;
F: text;
Begin
Assign(F, 'c:\temp\abc.txt');
Reset(F);
Readln(F, a, b);
Readln(F, c, d);
S:=a+b+c+d;
writeln('сумма=',S) ;
Close(F);
end.
При содержимом файла:
-1.5 3.5
6.5 4
Результат программы:
сумма=12.5
Для контроля прочитанных из файла значений желательно добавлять в программу
следующую команду: writeln(‘из файла прочитаны значения: a=’, a,’
b=’,b, ‘ c=’,c, ‘ d=’ , d).
2.
Практическая часть урока (20 минут) – закрепление навыков чтения данных
из файла. Задание: внести изменения в составленные дома программы практической
работы 3.1 (№ 8-14) таким образом, чтобы ввод данных осуществлялся не с клавиатуры, а
из файла. Обязательно выводить прочитанные из файла данные на экран. Учитель
консультирует, помогает справиться с проблемами.
Домашнее задание. Изменить программы к № 15-21 практической работы 3.1 таким
образом, чтобы данные вводились из файла. Составить и отладить программы для заданий
№22-24, принести в электронном виде.
Урок 6. Тема занятия: Вывод данных в текстовый файл. (1 час).
Цель занятия: Знакомство учащихся с операцией вывода данных в файл; закрепление
навыков чтения из файла, использования стандартных функций языка Паскаль.
Примерный ход занятия:
1.
Проверка домашнего задания (15-20 минут). Проверьте правильность
выполнения заданий, особенно №18, 19, 21, так как при выполнении этих заданий
требуется неформальное применение математических функций языка Паскаль.
Приведём решения заданий.
Задание №18:
Примечание: в данной задаче для выделения дробной части необходимо использовать
целочисленные операции, а не функцию frac(x), так как в результате вызова функции
возвращается приближённое значение, например,
Frac(338.169)=0.168999999999983.
program n18;
var t,h,m,s:integer;
f:Text;
begin
Assign(f,’18.txt’);
Reset(f);
Readln(f,t);
Close(f);
writeln(‘введено время в секундах’,t);
h:= t div 3600;
m:= t mod 3600 div 60;
s:=t mod 60;
writeln('часы h=',h);
writeln('минуты m=',m);
writeln('секунды s=',s);
end.
Задание №19:
program n19;
var number1, number2,dr:real;
c:integer;
f:Text;
begin
Assign(f,’19.txt’);
Reset(f);
Readln(f, number1);
Close(f);
writeln('исходное число', number1);
c:=trunc(number1); {целая часть числа}
dr:=trunc(number1*1000) mod 1000 ;{дробная часть числа,
записанная как целое 3-хзначное число}
number2:=dr+ c/1000;
writeln('число 1= ',number1,'число 2= ', number2);
end.
Задание №21:
Пояснения к решению:
Для решения данной задачи требуется провести ряд выкладок:
1.
Окружность составляет 360○, это значение – 12 часов. Следовательно, в 1 часе
360/12=30○.
2. в 1 часе (30○)– 60 минут. Следовательно, одному градусу соответствует 2 минуты.
3. Если будет введено число, содержащее дробную часть, то округление должно
производиться по правилам математики, например, число 90.5 будет производиться
в большую сторону, так как 0.5○ соответствует 1 мин.
program n21;
var y:real;
yc:integer;
h,m:0..60;
f:Text;
begin
Assign(f,’19.txt’);
Reset(f);
Readln(f,y);
Close(f);
writeln(‘угол составляет’, y,’градусов’);
yc:=round(y); {преобразовали вещественное число к целому}
h:=yc div 30; {полное количество часов}
m:= yc mod 30 *2 ;{целое количество минут}
writeln(число полных часов',h, 'прошло минут ',m)
end.
2.
Объяснение нового материала (20 минут). Логику объяснения можно
построить аналогично тому, как описано в учебнике: обсудить команды, порядок их
выполнения, проверить работу программы записи в текстовый файл таблицы умножения.
Кроме того, целесообразно пояснить особенности работы команды Rewrite(f) –
каждый вызов операции стирает содержимое файла, запись будет осуществляться «с
нуля». Если необходимо добавить данные в конец непустого текстового файла, то надо
вызвать команду Append (f)-открыть текстовый файл для «дозаписи».
Также можно более подробно остановиться на особенностях форматов вывода для
целочисленных и вещественных величин.
В заключение можно предложить учащимся в программах, рассмотренных в первой
части занятия, изменить экранный вывод результатов на вывод в файл.
Например, программа к №18 из практикума преобразуется к следующей:
Program n18;
var t,h,m,s:integer;
Fi, Fo:Text;
begin
Assign(Fi,’18.txt’);
Assign(Fo,’Result_18.txt’);
Reset(Fi);
Readln(Fi,t);
Close(Fi);
Rewrite(Fo);
writeln(Fo,‘введено время в секундах’,t);
h:= t div 3600;
m:= t mod 3600 div 60;
s:=t mod 60;
writeln(Fo,'часы h=',h);
writeln(Fo,'минуты m=',m);
writeln(Fo,'секунды s=',s);
Close(Fo)
end.
Домашнее задание. §2.2.4, задание №7 после параграфа. Составить программы к
заданиям 25-28 практикума (данные вводить из файла, результаты выводить в файл).
Урок 7. Практическая самостоятельная работа на тему «Программирование
линейных алгоритмов на Паскале (1 час).
Цель занятия: закрепление навыков построения линейных алгоритмов, работы с
текстовыми файлами, построения арифметических и логических выражений с
использованием стандартных функций языка Паскаль.
Примерный ход занятия:
1. Проверка домашнего задания (10 минут).
Рассмотрим решение задачи №28 из практической работы 3.1 (Вывести результат
логического выражения: Среди первых трёх цифр из дробной части вещественного числа
есть нуль).
program N28;
var
Dr:real;
cd:integer;
a,b,c:0..9;
begin
Writeln('введите вещественное число');
Readln(Dr);
cd:=Trunc(frac(Dr)*1000); {выделение из дробной части числа
трёх первых цифр, результат – целое трёхзначное число}
a:=cd div 100;
b:=cd div 10 mod 10;
c:=cd mod 10;
writeln((a=0) or (b=0) or (c=0));
end.
2. Практическая самостоятельная работа на тему «Программирование линейных
алгоритмов на Паскале (35 минут).
Задание 1. Один из вариантов задания №29 из Практической работы 3.1. Данные
должны вводиться из файла, результаты выводиться в файл. Разработать тесты к
программе и проверить их.
Задание 2. Задание из №30-36 из Практической работы 3.1. Данные должны
вводиться из файла, результаты выводиться в файл. Разработать тесты к программе и
проверить их.
Домашнее задание. §2.2.5, №3,4 после параграфа (блок-схемы в тетради, программы в
электронном виде).
Download