- •1. Файловые системы, файлы, директории, пути
- •2.Основные команды операционной системы для работы с файлами.
- •3 Физические носители данных. Их классификация, характеристики и назначение.
- •4 Статическая и динамическая области оперативной памяти. Их назначение и использование.
- •5. Указатель
- •6. Типы данных (целые и вещественные числа). Размер используемой памяти, пределы изменения и точность представляемых данных.
- •7. Приоритеты выполнения операций при вычислении значений арифметических и логических выражений.
- •9.2. Логические выражения
- •9.3. Строковые выражения
- •11. Простые операторы
- •11.1. Оператор присваивания
- •8. Структурированные типы данных. Назначение и способы реализации.
- •8.1. Массивы
- •9. Алгоритм, его свойства и формы представления. Типовые структуры алгоритма.
- •10. Линейная структура и ее свойства. Ввод и вывод данных. Оператор присваивания.
- •11. Циклическая структура. Назначение и основные элементы.
- •12. Цикл с явно заданным количеством повторений. Основные элементы и варианты реализации.
- •13. Цикл с неявно заданным количеством повторений. Основные элементы и варианты реализации.
- •14. Типовая структура – разветвление. Основные элементы и варианты реализации.
- •15. Процедуры. Назначение, варианты реализации.
- •16. Функции. Назначение, варианты реализации.
- •17. Формальные и фактические параметры. Назначение, варианты реализации.
- •18. Линейный список. Реализация с использованием массивов. Реализация многомерного массива.
- •19. Линейный список. Реализация с использованием связных списков. Примеры применения
- •20. Поиск в линейном списке. Назначение и варианты реализации.
- •21. Сортировка данных в линейном списке. Назначение и варианты реализации.
- •22. Стек и очередь. Назначение, варианты реализации и примеры применения.
- •23. Дерево. Назначение, варианты реализации и примеры применения.
- •24. Текстовые и типизированные файлы. Обмен данных с внешними носителями.
15. Процедуры. Назначение, варианты реализации.
Как быть, если выделенная нами подзадача не похожа на функцию, т.е. не возвращает ни одного или возвращает много значений? Здесь нам пригодится процедура.
Процедура — это самостоятельная программная единица, которая выполняется по команде из другой программной единицы (программы, процедуры или функции). Процедура отличается от функции только заголовком и способом обращения к ней.
Схема заголовка процедуры следующая:
PROCEDURE имя (параметры);
Процедура не обязана возвращать значение, поэтому нет нужды указывать тип, как в заголовке функции.
Вот примеры заголовков процедур:
PROCEDURE ALPHA (X: INTEGER; Y: REAL; Z: CHAR); PROCEDURE BETA (M: ARR);
В том месте программы, где нужно выполнить действия, предусмотренные в описании процедуры, ставят оператор процедуры:
имя (аргументы), где имя то же, что в заголовке процедуры;
ПРИМЕР. Описание и вызов процедуры, которая печатает сумму N первых элементов вещественного массива, type
Arr = array [1..100] of real; procedure PrintSum (R: Arr; N: integer); var
Summa: real; i: integer; begin
Summa := 0;
i:=1;
while i N do begin
Summa := Summa + R [i]; i:=i+1;
end;
writeln (Summa); end;
var
A: Arr; begin
PrintSum (A, 2.0); end.
Параметры-переменные
Процедура может не только получать значения от вызывающей программы, но и возвращать в программу новые значения. Для этой цели служат параметры-переменные.
В то время, как параметр получает значение аргумента путем присваивания, параметр-переменная — это просто другое имя для аргумента. Под этим именем значение аргумента становится доступным в процедуре. Все преобразования, выполняемые в процедуре над параметром-переменной, выполняются, таким образом, над аргументом
В списке параметров заголовка процедуры перед параметрами-переменными ставят слово VAR. Например,
procedure PrintSum (var R: Arr; N: integer);
Параметры-переменные можно использовать не только в процедурах, но и в функциях.
Взаимодействие блоков. В некоторых вопросах различие между процедурами и функциями не играет роли. Обсуждая такие вопросы, будем называть их общим именем — блок. В программе может быть описано сколько угодно блоков. Внутри этих блоков могут быть описания других блоков и т.д. без видимых ограничений. Важно знать, откуда какие блоки могут быть вызваны или, как говорят программисты, видны.
Для ответа на этот вопрос вообразите, что блок — это дом с зеркальными стеклами в окнах. Изнутри через них видно все, что находится снаружи, внутрь же заглянуть нельзя.
На рисунке изображен пример программы А, внутри которой описаны блоки В и С. Внутри В описаны D и Е, внутри С описан блок F, а в нем — G . Если вы пишете код блока F, то, согласно правилу зеркальных стекол, можете обращаться к блокам В, С, а также G и даже самому блоку F. Заметим, что обращение блока к самому себе называется рекурсией.
Видимость — это свойство всех описаний, а не только блоков. Находясь в блоке, можно пользоваться всем, что видно из него. Так из блока F видны переменные, описанные в С и А, но не видны переменные, описанные в В, D, Е и G.
Объекты, описанные в блоке, называются внутренними, а те, что описаны в блоках, охватывающих данный, — внешними по отношению к блоку. Внешние переменные дают дополнительный канал связи между блоками (основным каналом следует считать параметры и параметры-переменные). Пользоваться этим каналом надо осторожно, ибо он усиливает зависимость блоков друг от друга и этим затрудняет разработку программы.
Может статься, что имена разных внешних переменных совпадут. Какая из одноименных переменных будет видна из блока? Будет видна та, что описана в ближайшем из внешних блоков. Если же конкуренция возникнет между внешней и внутренней переменными, видна будет внутренняя.