- •Содержание
- •Алгоритм. Блок-схема. Элементы блок-схемы
- •Циклы
- •Массивы. Работа с массивами
- •Сортировка данных
- •Матрица. Работа с матрицами
- •Язык программирования Turbo Pascal
- •Алфавит языка Turbo Pascal
- •Вещественные типы данных
- •Логический тип данных
- •Символьный тип данных
- •Массивы в ТР
- •Cтроки в ТР
- •Оператор присваивания в ТР
- •Целочисленные типы данных
- •Условный оператор
- •Составной и пустой оператор
- •Оператор выбора
- •Оператор перехода и метка
- •Циклы в ТР
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла repeat
- •Подпрограммы в ТР
- •Локальность имен в ТР
- •Формальные и фактические параметры
- •Рекурсия. Рекурсивные функции
- •Модули в ТР
- •Стандартные модули в ТР
- •Использование модуля GRAPH
- •Файлы в ТР
- •Общие принципы работы с файлами в ОС
- •Элементы объектно-ориентированного программирования
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Список литературы
for j:=i+1 to N do
if a[i]>a[j] then Swap(a[i],a[j]);
end; begin
{----------- Здесь точка входа в программу!!! ----------} InitArray;
DisplayArray;
SortArray; end.DisplayArray;
Локальность имен в ТР
Описать процедуру/функцию в ТР – это значит:
–задать имя подпрограммы в разделе описания;
–указать ее параметры и их типы;
–описать тело подпрограммы.
ВТР действует принцип локализации имен, т.е. все идентификаторы, описанные в теле подпрограммы, действительны только в ней и недоступны извне. Переменные, доступные всей программе, называются глобальными. На рис. 5 иллюстрируются области действия переменных.
Рис. 5
Вопрос: Еще раз посмотрите программу сортировки данных. Какие переменные являются локальными? Для какой подпрограммы?
24
Формальные и фактические параметры
Для обмена информацией между главной программой и подпрограммой, а также между самими подпрограммами используются параметры, заключающиеся в круглые скобки. Список параметров, на входе которого ожидает подпрограмма, а также их типы описываются в разделе описаний при объявлении подпрограмм и потому называются формальными параметрами. В ходе выполнения программы в списке параметров могут быть переданы реальные данные и их называют
фактическими параметрами.
Пример. var z:integer;
function Summa(a,b:byte):integer; begin
Summa:=a+b
end; begin
z:=Summa(2,3); writeln(Summa(z,z))
end.
Вопрос. Какой результат будет выведен на экран?
В стек при передаче параметров в подпрограмму данные могут передаваться такими двумя способами, как:
–передача по значению;
–передача по ссылке на переменную.
При первом способе передаются только непосредственные значения, сами переменные не могут быть изменены в ходе исполнения подпрограммы. Во втором способе с помощью ключевого слова var передаются ссылки на переменные, сами переменные могут быть изменены в ходе выполнения подпрограммы.
Вопрос: Еще раз посмотрите программу сортировки данных, в частности, на функцию Swap. Каким способом передаются данные? Что будет, если передавать другим способом?
Рекурсия. Рекурсивные функции
Рекурсия – это такой способ организации кода программы, в ходе
исполнения которого подпрограмма обращается к самой себе. Функция, которая вызывает саму себя, называется рекурсивной.
25
Пример: Procedure DisplayMessage; begin
Writeln(’У попа была собака,’); Writeln(’Он ее любил.’); Writeln(’Она съела кусок мяса,’); Writeln(’Он ее убил.’);
Writeln(’Похоронил. И надпись надписал:’); DisplayMessage
end; begin
DisplayMessage end.
При вызове DisplayMessage из главной программы управление передается в эту подпрограмму. После того как на экран будут выведены сообщения, управление опять передается в ту же подпрограмму путем вызова самой себя. Теоретически выполнение программы циклически продолжается бесконечно долго, что является примером некорректно написанной рекурсии.
Задача-пример: Вычислить N! = 1·2·3·...·N.
var N:longint;
function factorial(N:longint):longint; begin
if N>1 then factorial:=N*factorial(N-1) else factorial:=1
end; begin
Readln(N);
Writeln(factorial(N))
end.
Модули в ТР
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описания (типы, константы, переменные, процедуры, функции) и, возможно, некоторые исполняемые операторы иницирующей части. Появление объектов в интерфейсной части делает их видимыми для основной программы и других модулей. Тела подпрограмм располагаются в исполняемой части и могут быть скрыты от пользователя.
26
Модуль имеет следующую структуру.
UNIT <имя модуля>;
INTERFACE
<интерфейсная часть>;
IMPLEMENTATION
<исполняемая часть>; begin
<начальные действия при подключении модуля>; end.
Для подключения модуля следует использовать ключевое слово USES. Каждый модуль располагается в отдельном файле. Обратите внимание, имя модуля должно совпадать с именем содержащего его файла. При сборке программы, состоящей из модулей, компилятор ищет модуль по его имени, которое должно совпадать с именем файла.
|
Стандартные модули в ТР |
В ТР используются 8 стандартных модулей: |
|
SYSTEM |
– подключается по умолчанию, не нужно использовать |
слово USES |
|
DOS |
– для работы с файлами и системных вызовов ОС |
PRINTER – для работы с печатью |
|
GRAPH |
– для работы с графическим режимом экрана |
CRT |
– для работы с текстовым режимом экрана и клавиатурой |
|
27 |
OVERLAY – для работы с большим объемом кода и данных про-
граммы |
|
TURBO3 |
– для совместимости с ТР версии 3.0 |
GRAPH3 |
– для совместимости с ТР версии 3.0 |
Более подробную информацию о каждом стандартном модуле можно получить во встроенной справочной информации интегрированной среды программирования. К примеру, в SYSTEM входит набор таких функций, как sin, cos, abs, read, write и т.д.
Программист может не только пользоваться стандартными модулями, но и разрабатывать свои собственные и подключать их. Рассмотрим на примере модуль, позволяющий работать с отдельными цифрами любого целого числа.
Пример. UNIT Digits; Interface
function Digit(N:longint; Pos:byte):byte; {Получить цифру с позиции
Pos в числе N}
function NumberOfDigits(N:longint):byte; {Получить число цифр в чис-
ле N}
implementation
function NumberOfDigits; var S:longint;
begin
S:=0; While N>0 do begin S:=S+1; N:=N div 10 end;
NumberOfDigits:=S
end;
function Digit; var i:byte; begin
for i:=1 to Pos do N:=N div 10; Digit:=N mod 10
end;
begin
{нет начальных действий} end.
28
