Урок 18. Тема урока: Вспомогательные алгоритмы и процедуры (1 час). Цель урока: Формирование навыков декомпозиции задачи на подзадачи, систематизация и развитие знаний по разработке вспомогательных алгоритмов и подпрограмм - процедур. Примерный ход урока: Изучение учебного материала можно построить, опираясь на логику параграфа 2.2.8 учебника (описание алгоритма на алгоритмическом языке, затем на Паскале). С методической точки зрения, сначала следует подробно остановиться на применении процедуры с параметрами, способах передачи параметров. С использованием процедур без параметров и подпрограмм-функций учащиеся смогут познакомиться самостоятельно. Для разбора возьмите несложную задачу, например, вычислить значение формулы n! из комбинаторики (число сочетаний из n значений по m, n>m): C nm . (Если m!(n m)! учащиеся не знакомы с данным материалом из курса математики, можно на конкретных примерах показать его применение). Для вычисления данного выражения требуется 3 раза обратиться к алгоритму вычисления факториала целого числа. Приведём программу решения данной задачи на языке Паскаль: Program C_n_m; Var N,M:byte; C, F1, F2, F3:longint; Procedure Fact(K:byte; var P:longint); Var I:byte; Begin Примечание: переменная P имеет P:=1; тип longint,т.к. значение For I:=1 to K do P:=P*I; К! быстро увеличивается End; в зависимости от К(K при Begin этом должно быть <16). Write(‘N=’); Readln(N); Write(‘M=’); Readln(M); Fact(N,F1); Fact(M,F2); Fact(N-M,F3); C:=F1 div (F2*F3); Writeln(‘число сочетаний из N по М=’,C) End. На данном примере объясните правила записи процедуры, виды параметров, способы передачи параметров. Требуется обратить особое внимание на следующие моменты: 1. подпрограмма должна полностью решать поставленную для неё задачу, с расчётом применения её для составления других программ. В данном случае: процедура fact м.б. использована при решении таких задач, где требуется вычисление факториала некоторого натурального числа. 2. Выбор имён формальных параметров осуществляется «формально», т.е. имя определяется формулировкой подзадачи, решаемой подпрограммой, и не связано с именами переменных основной программы. 3. Список фактических параметров должен соответствовать списку формальных параметров по количеству, по порядку следования и по типу. 4. Переменные, которые требуются для решения подзадачи, реализуемой подпрограммой, описываются в разделе описания подпрограммы и называются локальными переменными. 5. При взаимодействии фактического и соответствующего ему формального параметра-значения (тип взаимодействия «по значению») механизм передачи значения в подпрограмму реализует команду присваивания. Например, при выполнении оператора Fact(N-M,F3)выполняется команда К:=N-M. 6. Для передачи результата подпрограммы-процедуры в основную программу необходимо указать формальный параметр-переменную с описанием типа, совпадающего с типом фактического параметра. Предложите учащимся следующий эксперимент: убрать var из описания переменной P, выполнить программу. Пусть ученики пояснят полученный результат. Для закрепления нового материала можно обратиться к решению прошлого домашнего задания, например, упр. №8 (нахождение трёхзначных чисел, в записи которых нет одинаковых цифр), предложить учащимся применить метод декомпозиции: выделить ту часть задачи, которая м.б. реализована в виде подпрограммы. Учащиеся должны определить, что выделяется подзадача, определяющаяся, являются ли цифры некоторого трёхзначного числа различными. Данная задача интересна с той точки зрения, что результатом подпрограммы является величина логического типа, для её вычисления потребуется составить логическое выражение. Домашнее задание: изучить параграф 2.2.8, упр. № 4, 5. Урок 19. Тема урока: Процедуры и функции. (1 час). Цель урока: Развитие навыков декомпозиции задачи на подзадачи, систематизация и развитие знаний по разработке вспомогательных алгоритмов и подпрограмм – процедур, функций. Примерный ход урока: 1. Выяснить, как учащиеся освоили тему прошлого занятия. Можно предложить следующие задания: 1) В программе описана процедура Square, вычисляющая площадь прямоугольного треугольника: Procedure Square(a,b: real; var S : real); Из списка вызовов процедуры выберите только те, которые являются правильными. Поясните неверные вызовы подпрограмм. A. Square(m,n,S); (где m,n – integer, S – real) B. Square(m,n,S); (где m,n – real, S – integer) C. Square(m*2,n/2,S) (где m,n – integer, S – real) D. Square(m,n,S/2); (где m,n – integer, S – real) E. Square(m,n,S1); (где m,n – integer, S1 – real) 2) В программе вызывается процедура, вычисляющая факториал натурального числа: Fact(N,F), где N:integer; F: longint и реализуется стандартный алгоритм (составленный на прошлом уроке). Из списка описаний процедуры и выберите только те, которые являются неверными. Поясните свой выбор. A. Procedure Fact(N:integer; var F: longint); B. Procedure Fact(N:integer; F: longint); C. Procedure Fact(K:integer; var P: longint); D. Procedure Fact(K:byte; var P: longint); E. Procedure Fact(K:real; var P: longint); 2. Обсудите, как учащиеся разобрались по учебнику с механизмом взаимодействия между формальными и фактическими параметрами при обращении к подпрограмме. Вопросы, которые следует обсудить: Какие переменные называются глобальными, а какие локальными? Как осуществляется передача значений в подпрограмму, описанную без параметров? Какие подпрограммы (с параметрами или без параметров) предпочтительнее использовать и почему? В каких случаях применяются подпрограммы без параметров? 3. Разберите выполнение домашнего заданий - №4, 5 – с процедурой и с функцией, обсудите отличие описания, применения процедур и функций. Например, задача из упр. №5, реализованной с подпрограммой – функцией: program ADD_Drob; var A,B,C,D,M,N,K:integer; Function Nod (A,B:integer): integer; begin While A<>B do if A>b then A:= A-B else B:=B-A; Nod:=A end; begin readln(A,B,C,D); K:=Nod(A*D+C*D, B*D); {вычисляется НОД нового числителя и знаменателя} M:= (A*D+C*D)div K; N:= B*D div K; Writeln(A,'/',B,'+',c,'/',D,'=',M,'/',N) end. Обратите внимание учеников на то, что программу для этой задачи можно составить, используя как функцию, так и процедуру. Предложите придумать задачу, для которой нельзя воспользоваться функцией, а можно только процедурой. Вариант ответа: сложение простых дробей м.б реализовано только процедурой (два результата: числитель и знаменатель суммы). 4. Самостоятельное решение задач №6,7 после параграфа 2.2.8 (можно по вариантам, по одной задаче). Затем обсудить решение. Домашнее задание: параграф 2.2.8, индивидуальное задание из практической работы 3.4 (разработка программ с подпрограммами), по одному заданию уровня 1 и уровня 2 (номер задания назначает учитель). Требования к оформлению работы: 1. Текст программы должен быть структурирован. 2. Каждый блок программы сопровождается комментариями (включая постановку задачи). 3. К программе должны быть разработаны тесты в необходимом количестве. Урок 20. Урок-практикум. Тема урока: Разработка программ с использованием подпрограмм. (1 час). Цель урока: Развитие навыков декомпозиции задачи на подзадачи, систематизация и развитие знаний по разработке вспомогательных алгоритмов и подпрограмм – процедур, функций. Примерный ход урока: Учащиеся представляют решение задач по индивидуальным заданиям, консультируются с учителем, изменяют решение, если обнаруживаются ошибки. Ученикам, успешно справившимся с заданиями и сдавшими их первыми, учитель даёт новое задание (например, уровня 3). Так же полезно предложить этим ученикам параллельно с учителем принимать работы одноклассников: развиваются навыки критического анализа, вникать в условие и решение новой задачи, умения консультировать. Домашнее задание: параграф 2.2.8, индивидуальное задание из практической работы 3.4 (уровень 3). На усмотрение учителя: подготовиться к контрольной работе или к семинару по представлению индивидуальных заданий. Урок 21. Урок-зачёт по теме «Вспомогательные алгоритмы и подпрограммы». Цель урока: Закрепление навыков декомпозиции задачи на подзадачи, знаний по разработке подпрограмм – процедур, функций. Примерный ход урока: Урок можно провести в одной из нескольких форм: 1. Зачёт, включающий: небольшой тест на применение знаний и навыков разработки подпрограмм или устный опрос по теоретическим вопросам данной темы. 2. Урок - семинар по представлению программ, выполненных по индивидуальным заданиям из практической работы 3.4. Учащиеся поясняют выбор подпрограмм, параметров, обосновывают набор тестов к программе. 3. Контрольная работа, включающая теоретические и практические задания. Домашнее задание: изучить параграф 2.2.9, упр. №5.