русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тема «Процедуры и функции»


Дата добавления: 2015-06-12; просмотров: 703; Нарушение авторских прав


 

Предварительно отметим, что в старших версиях Турбо Паскаля принято считать процедуры своего рода структурами данных. Однако на данном этапе обучения этот взгляд обосновать нелегко, и лучше интерпретировать процедуры и функции более традиционно, как средства реализации вспомогательных алгоритмов.

После усвоения учащимися предшествующих разделов Паскаля можно приниматься за решение задач, в которых выделение вспомогательных алгоритмов является естественным.

Начиная изучение этой сложной и принципиально важной темы, повторите принципы структурного программирования, особенно принцип модульности. Учащиеся должны понять, что без введения процедур ни одной профессиональной программы в принципе не бывает.

Неочевидна поначалу разница между процедурой и программой. Основные различия необходимо понять сразу: процедура хоть и является самостоятельной программной единицей, но исполняется лишь тогда, когда к ней обращаются другие программные единицы (основная программа или другие процедуры и функции). Можно представить себе, что в разделе описания процедур присутствует некая процедура, но в процессе работы программы ни разу не исполняется, ибо обращений к ней нет. Итак, кроме процедуры должны быть команды обращения к процедуре.

Введите понятие «формальные переменные» — те, через которые внешняя программа «общается» с процедурой. На простейших примерах объясните механизм замещения формальных переменных на фактические, происходящего при обращении к процедуре. На первых порах можно не фиксировать внимания на том, что замещение возможно либо по значению, либо по имени.

Достаточно сложно на первом этапе изучения процедур достичь понимания различий между локальными и глобальными переменными. В методических целях следует в первых примерах отказаться от использования глобальных переменных (профессиональные программисты часто отказываются от них вообще). До тех пор, пока учащиеся не освоятся с данными понятиями, следует избегать использования одинаковых идентификаторов для локальной и глобальной переменных.



Нелегко также учащимся понять различия между формальными параметрами-значениями и параметрами-переменными. Многословные объяснения в ряде руководств иногда лишь затрудняют понимание этого важного вопроса. Для начала вполне достаточно, если в разбираемых примерах процедур параметры будут четко подразделяться на входные и выходные и будет соблюдаться простое правило: входные параметры есть параметры-значения, выходные — параметры-переменные. Это правило страхует от ошибок, связанных с непониманием механизмов замещения параметров при обращении к процедуре. Разумеется, впоследствии этот вопрос должен быть отработан глубже.

Приведем примеры заданий для начального этапа разработки программ с процедурами.

Задание 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).

Рекурсивные процедуры — материал повышенной трудности. В теоретическом отношении организация рекурсий — принципиально важный прием программирования; на практике он по ряду причин не слишком популярен. Обычным примером при отработке понятия «рекурсивный алгоритм» является вычисление факториала натурального числа. Если учащиеся проявили понимание и заинтересованность, то после этого можно разобрать классическую задачу «Ханойская башня», приведенную во многих руководствах по Паскалю в разделах, посвященных рекурсиям.



<== предыдущая лекция | следующая лекция ==>
Тема «Перечислимый и интервальный типы данных» | Тема «Структурированные типы данных»


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.927 сек.