Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тема «Перечислимый и интервальный типы данных»
Перечислимый тип данных, будучи реализованным в Паскале не вполне последовательно (например, очень мешает реализации многих алгоритмов запрет использовать величины перечислимых типов в операторах ввода-вывода), является, тем не менее, полезным средством решения ряда нечисловых задач. Начните эту тему с примеров описания типов. Некоторая свобода, допускаемая Паскалем при выборе средств описания между разделами var и type, может быть при начальном изучении языка ликвидирована выбором в пользу var. Однако, начиная с данной темы, использование type становится неизбежным. Приведя примеры определения перечислимых типов, остановитесь на допустимых операциях над соответствующими переменными и константами (операциями отношения) и функциях pred, succ, ord — лишь сейчас их можно определить в полной мере. Программы с использованием самостоятельно определенных программистом типов обычно довольно громоздки (в частности, из-за ограничений на ввод-вывод). Приведем задачу, которую можно рассмотреть на уроке: составьте программу, которая по дате (числу и номеру месяца) определяет дату следующего дня (число и номер месяца) в невисокосном году. Обратите внимание учащихся, что ввести не номер, а название месяца невозможно (по крайней мере, простого решения здесь нет). С интервальным типом проблем гораздо меньше. Фактически отдельные задачи на отработку навыков использования этого типа данных решать необязательно. В дальнейшем, особенно при описании массивов, использование интервального типа станет обычным (и не всегда осознаваемым) делом. Тема «Процедуры и функции»
Предварительно отметим, что в старших версиях Турбо Паскаля принято считать процедуры своего рода структурами данных. Однако на данном этапе обучения этот взгляд обосновать нелегко, и лучше интерпретировать процедуры и функции более традиционно, как средства реализации вспомогательных алгоритмов. После усвоения учащимися предшествующих разделов Паскаля можно приниматься за решение задач, в которых выделение вспомогательных алгоритмов является естественным. Начиная изучение этой сложной и принципиально важной темы, повторите принципы структурного программирования, особенно принцип модульности. Учащиеся должны понять, что без введения процедур ни одной профессиональной программы в принципе не бывает. Неочевидна поначалу разница между процедурой и программой. Основные различия необходимо понять сразу: процедура хоть и является самостоятельной программной единицей, но исполняется лишь тогда, когда к ней обращаются другие программные единицы (основная программа или другие процедуры и функции). Можно представить себе, что в разделе описания процедур присутствует некая процедура, но в процессе работы программы ни разу не исполняется, ибо обращений к ней нет. Итак, кроме процедуры должны быть команды обращения к процедуре. Введите понятие «формальные переменные» — те, через которые внешняя программа «общается» с процедурой. На простейших примерах объясните механизм замещения формальных переменных на фактические, происходящего при обращении к процедуре. На первых порах можно не фиксировать внимания на том, что замещение возможно либо по значению, либо по имени. Достаточно сложно на первом этапе изучения процедур достичь понимания различий между локальными и глобальными переменными. В методических целях следует в первых примерах отказаться от использования глобальных переменных (профессиональные программисты часто отказываются от них вообще). До тех пор, пока учащиеся не освоятся с данными понятиями, следует избегать использования одинаковых идентификаторов для локальной и глобальной переменных. Нелегко также учащимся понять различия между формальными параметрами-значениями и параметрами-переменными. Многословные объяснения в ряде руководств иногда лишь затрудняют понимание этого важного вопроса. Для начала вполне достаточно, если в разбираемых примерах процедур параметры будут четко подразделяться на входные и выходные и будет соблюдаться простое правило: входные параметры есть параметры-значения, выходные — параметры-переменные. Это правило страхует от ошибок, связанных с непониманием механизмов замещения параметров при обращении к процедуре. Разумеется, впоследствии этот вопрос должен быть отработан глубже. Приведем примеры заданий для начального этапа разработки программ с процедурами. Задание 1. Вычислить периметр треугольника по координатам его вершин. Процедура — вычисление длины отрезка (стороны треугольника) по координатам концевых точек. В ней совершенно отчетливо видны четыре параметра-значения (указанные координаты) и один параметр-переменная (результат, т.е. длина отрезка). Вызывающая программа три раза обратится к этой процедуре. Пример вполне элементарен. Задание 2. Найти наибольший общий делитель (НОД) 100 натуральных чисел по алгоритму Евклида. Процедура — НОД двух чисел. В заголовке — три переменные. Две из них — параметры-значения, третья — переменная (результат). После выполнения такого уровня заданий перейдите к более сложным ситуациям. Разберите какой-нибудь пример, специально сконструированный для иллюстрации различий между параметрами-значениями и параметрами-переменными. Один из них выглядит так:
program parametr; var k: integer; procedure plusl (n: integer); begin n: =n+10 end; procudure plas2 (var n: integer); begin n: =n+20 end; begin k: =10; plusl(k); writeln(k); k: =10; plus2(k); writeln(k) end.
Объясните, почему в первой печати результат оказался равен 20, а во второй — 30. В обучении использованию процедур можно пойти и по другому пути. Поскольку существуют и процедуры без параметров, то можно на одном примере показать все этапы: процедура без параметров, процедура с параметрами-значениями, процедура с параметрами-значениями и параметрами-переменными, отметить все плюсы и минусы каждого подхода. Тут же, по мере появления, можно ввести понятие о локальных и глобальных, формальных и фактических переменных. После решения простейших задач можно переходить к более сложным, с точки зрения организации процедур. Разберите детальнее вопрос об области действия описаний. Сформулируйте простое правило: в Паскале любая переменная должна быть описана перед своим употреблением. Это правило относится и к процедурам. Полезно привести возможную схему взаимного расположения описаний процедур в некоторой условной программе и по ней разобрать вопрос об области действия описаний подпрограмм. Одна из таких схем изображена на рис. 15.4.
Рис. 15.4. Взаимное расположение описаний процедур
Объясните, почему из основной программы можно обратиться к подпрограммам А и В, из А1 — к А2, но не наоборот, из В1 можно обратиться к А, но нельзя к А1и т.д. После разбора подобной схемы составляют программы с использованием глобальных переменных и отрабатывают понимание того, что если одно и то же имя описано во внешнем блоке (т.е. глобально) и во внутреннем блоке (локально), то локальное описание в пределах блока доминирует. Если понимание вопросов, связанных с процедурами, достигнуто, то изучение функций как частного случая процедур, несколько иначе оформленных, не вызывает затруднений. Ответ на вопрос о том, когда целесообразно оформлять процедуру как функцию, очень прост: когда вспомогательный алгоритм Должен возвращать лишь одно скалярное (т.е. не структурированное) значение. Обращение к функции привычнее и удобнее, чем к процедуре. В списке аргументов функции можно практически всегда ограничиваться параметрами-значениями (хотя не запрещены и параметры-переменные). Естественно, первые примеры на программирование с использованием функций приведите те же, что использовались при отработке процедур (см. выше задания 1 и 2). Рекурсивные процедуры — материал повышенной трудности. В теоретическом отношении организация рекурсий — принципиально важный прием программирования; на практике он по ряду причин не слишком популярен. Обычным примером при отработке понятия «рекурсивный алгоритм» является вычисление факториала натурального числа. Если учащиеся проявили понимание и заинтересованность, то после этого можно разобрать классическую задачу «Ханойская башня», приведенную во многих руководствах по Паскалю в разделах, посвященных рекурсиям. |
Последнее изменение этой страницы: 2017-05-05; Просмотров: 478; Нарушение авторского права страницы