- •Информатика
- •Введение
- •Алгоритм и программа
- •Интегрированная инструментальная среда turbo pascal 7.0.
- •Начало работы
- •Клавиатура
- •Диалоговые окна
- •Подготовка текста программы Начало работы
- •Ввод текста и внесение изменений в текст программы
- •Компиляция
- •Пробный запуск программы на выполнение
- •Буфер промежуточного хранения
- •Использование справочной системы
- •Сохранение текста программы в файле
- •Отладка программы
- •Завершение работы
- •Алфавит языка
- •Символы, используемые в идентификаторах
- •Разделители
- •Специальные символы
- •Знаки пунктуации
- •Основные типы данных
- •Описание переменных
- •Инструкция присваивания
- •Выражение
- •Тип выражения
- •Выполнение инструкции присваивания
- •Константы
- •Целые константы
- •Вещественные константы
- •Строковые и символьные константы
- •Константные выражения
- •Типизированные константы
- •Стандартные функции
- •Арифметические функции
- •Функции преобразования типа
- •Функции для величин порядкого типа
- •Ввод и вывод информации
- •Инструкции write и writeln
- •Инструкции read и readln
- •Общая структура программы
- •Раздел объявлений и соглашений
- •Заголовок
- •Глобальные директивы компилятора
- •Оператор uses
- •Объявления глобальных меток, констант, типов и переменных
- •Процедуры и функции
- •Заголовок процедуры или функции
- •Объявления локальных меток, констант, типов и переменных
- •Тело процедуры/функции
- •Основной блок программы
- •Управляющие структуры
- •Условие
- •Условный оператор if
- •Условный оператор case
- •Оператор цикла for
- •Оператор цикла repeat
- •Оператор цикла while
- •Оператор безусловного перехода goto
- •Пустой оператор
- •Составной оператор
- •Массивы
- •Объявление массива
- •Некоторые типичные действия с массивами
- •Вывод массива
- •Ввод массива
- •Сортировка массива
- •Сортировка методом прямого выбора
- •Сортировка методом прямого обмена
- •Поиск в массиве
- •Поиск минимального (максимального) элемента массива
- •Операции с матрицами
- •Сложение матриц
- •Транспонирование матрицы
- •Умножение матриц
- •Символы и строки
- •Символы
- •Массив символов
- •Функция length
- •Процедура delete
- •Функция pos
- •Функция copy
- •Процедуры и функции
- •Процедура
- •Функции
- •Параметры-процедуры и параметры-функции.
- •Процедура exit
- •Директивы подпрограмм
- •Директива forward
- •Директивы far и near
- •Директива external
- •Директива assembler
- •Директива inline
- •Директива interupt
- •Рекурсия Понятие рекурсии
- •Пример программы: поиск пути
- •Вывод в файл
- •Объявление файла
- •Назначение файла
- •Инструкции вывода в файл
- •Открытие файла для вывода
- •Ошибки открытия файла
- •Закрытие файла
- •Ввод из файла
- •Открытие файла
- •Чтение из файла
- •Конец файла и конец строки
- •Введение в структурное программирование
- •Рекомендательный библиографический список Основной:
- •Дополнительный:
Функции
Функция пользователя по назначению и структуре аналогична процедуре пользователя, но, как правило, используется в тех случаях, когда результат работы подпрограммы одно число. Функция, определенная пользователем, состоит из заголовка и тела.
Она имеет следующую структуру:
Function < имя > ( p1,p2, ... ,pn ) :<тип возвращаемого результата>;
< раздел описаний >
begin
<раздел операторов>
end ;
Заголовок включает в себя зарезервированное слово Function, идентификатор (имя) функции, заключенный в круглые скобки список формальных параметров (p1,p2, ... ,pn) и тип возвращаемого функцией значения. Имя функции - идентификатор уникальный в пределах блока. Возвращаемый результат может иметь любой скалярный тип (вещественный, целый и некоторые другие).
Тело функции представляет собой локальный блок, по структуре аналогичный программе, т.е. содержит раздел описаний и раздел операторов. В разделе операторов должен находиться по крайней мере один оператор, присваивающий идентификатору функции значение-результат. Если таких операторов несколько, то результатом является значение последнего оператора присваивания.
Обращение к функции осуществляется по имени с указанием списка фактических параметров (аргументов). Каждый фактический параметр должен соответствовать формальному параметру по типу и порядку следования.
Формат вызова таков:
< имя > ( f1,f2,...fn );
Как правило, вызов функции включается в выражение как операнд. При использовании функции, как при использовании процедур работает тот же механизм замены формальных параметров на фактические, т.е. все действия выполняются над фактическими параметрами, вычисляется результат и этот результат передается в точку вызова.
Следующая программа вычисляет площадь двух треугольников ABC и DEF используя определенную программистом функцию SqGeron. У функции SqGeron три параметра стороны треугольника. Возвращает функция значение типа REAL. В основе вычисления площади треугольника лежит формула Герона.
Program Example ;
VAR
A,B,C:Real ; { стороны треугольника ABC }
D,E,F:Real ; { стороны треугольника DEF }
Sq1:Real ; {площадь треугольника ABC }
Sq2:Real ; {площадь треугольника DEF }
{ функция программиста }
{ Вычисление площади треугольника по формуле Герона }
Function SqGeron(a,b,c:real):real ;
var
p:real ;
begin
p:=(a+b+c)/2;
SqGeron:=sqrt(p*(p-a)*(p-b)*(p-c))
end;
{ Основная программа }
BEGIN
writeln('Введите значения сторон треугольника ABC') ;
readln(A,B,C) ;
writeln('Введите значения сторон треугольника DEF') ;
readln(D,E,F) ;
Sq1:=SqGeron(A,B,C);
Sq2:=SqGeron(D,E,F);
writeln('Площадь треугольника ABC =',Sq1:6:3) ;
writeln('Площадь треугольника DEF =',Sq2:6:3) ;
END.
Параметры-процедуры и параметры-функции.
В программировании на любом алгоритмическом языке часто возникает необходимость передать в процедуру параметр, который является именем другой процедуры или функции. Поскольку все формальные параметры в Паскале должны быть типизированы, т.е. должен быть указан их тип, то появляется потребность ввести новый тип.
Описание процедурного типа осуществляется в соответствии с принятым синтаксисом языка.
Формат оператора:
Type < имя-типа >=Procedure( p1,p2,...,pn );
или
Type < имя-типа >=Function( p1,p2,...,pn ):< тип результата >;
При использовании процедурного типа часто бывает необходимо включить директиву компилятора, обеспечивающую дальний вызов процедур (так называемая Far - адресация). Это объясняется тем, что при отсутствии данной директивы работает Near -адресация , т.е. адрес передается в сокращенной форме без указания сегмента.
Включение директивы компилятора осуществляется записью {$F+}. Знак $, расположенный сразу после открывающей фигурной скобки показывает, что это директива компилятора. Символ F показывает, что устанавливаем Far (дальний) вызов, а знак + показывает, что включаем эту директиву.
Параметры-процедуры и параметры-функции не должны быть стандартными подпрограммами, не должны объявляться внутри других подпрограмм, не иметь директив inline и interrupt.
Пример. Программа, печатающая таблицы сложения и умножения двух целых чисел в заданном диапазоне.
Program Example ;
TYPE
Func = function(X, Y : Integer) : Integer ;
{$F+}
function Add(X, Y : Integer) : Integer ;
begin
Add := X + Y
end ;
function Multiply(X, Y : Integer) : Integer ;
begin
Multiply := X * Y
end ;
{$F-}
Procedure PrintTable(A, B : Integer; Operation : Func) ;
{ процедура печати таблицы }
var
i,j : integer ;
begin
for i:=1 to A do
begin
for J:=1 to B do
write(Operation(i,j):5) ;
writeln
end ;
writeln
end ;
BEGIN
{ основная программа }
PrintTable(10, 10, Add) ;
PrintTable(10, 10, Multiply) ;
END.