ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.04.2024
Просмотров: 210
Скачиваний: 0
<список имен>: <тип> или var<список имен>: <тип>
В первом случае говорят о параметрах-значениях, во втором - о параметрах-переменных. В простейшем случае заголовок процедуры может содержать только имя процедуры.
Оператор вызова процедуры имеет вид
<имя процедуры> (<список выражений>);
Указанные выражения называют фактическими параметрами. Их список должен точно соответствовать списку описаний формальных параметров процедуры. Во время вызова процедуры каждому параметру-значению присваивается значение соответствующего фактического параметра и поэтому их обычно используют для передачи входных данных.
Параметры-переменные следует использовать для представления результатов процедуры.
Функция - это подпрограмма, определяющая единственное скалярное, вещественное или строковое значение. Отличия подпрограммы-функции от процедуры:
• заголовок функции начинается со служебного слова functionи заканчивается указанием типа значения функции:
function<имя> (список описаний формальных параметров): <тип>;
•раздел операторов функции должен содержать хотя бы один оператор присваивания имени функции;
• обращение к функции - не оператор, а выражение вида
<имя функции> (<список фактических параметров>).
Функции (и процедуры) могут использовать свое имя в собственном описании, т.е. могут быть рекурсивными.
Внешние библиотеки.Как известно, подпрограммы (процедуры и функции) используются в программах с целью их структурирования, а также при многократных повторениях некоторых частей программы. Процедуры и функции описываются в программных единицах в разделе описания подпрограмм. Они являются внутренними для этих программных единиц.
Бывают случаи, когда одни и те же подпрограммы могут использоваться в различных программах одного и даже нескольких пользователей. В подобных ситуациях целесообразно создавать внешние подпрограммы, которые можно в необходимый момент подключать в любые программы. Как правило, внешние подпрограммы объединяют в отдельные пакеты, так называемые, библиотеки внешних подпрограмм. Могут создаваться личные библиотеки, специализированные библиотеки коллективного пользования и др. С одной из таких библиотек - встроенной библиотекой стандартных подпрограмм - пользователи имеют дело практически всегда. В состав этой библиотеки входят процедуры и функции вычисления значений ряда элементарных функций: синуса, косинуса, экспоненты и т.д., процедуры и функции обработки символьных величин, процедуры ввода-вывода и др. (список их приведен в конце § 3). Встроенная библиотека подключается к любой программе автоматически при компиляции. Поэтому откомпилированный файл с расширением .corn(иногда называемый «комовским»), как правило, занимает в 8 -10 раз больше места в памяти, чем исходный текст.
Внешние подпрограммы создаются обычным образом в виде отдельного файла или файлов. Для подключения внешних подпрограмм в программе пользователя в разделе описания ставится директива $Iимя файла. С этого момента все процедуры и функции внешнего файла становятся внутренними для программы, и на все входящие в него процедуры и функции распространяется правило локальных и глобальных переменных. В этой связи, директива подключения внешнего файла должна размещаться после описания всех ею используемых глобальных параметров, процедур и функций.
Модулииспользуют в более поздних версиях Паскаля для создания библиотек и разделения больших программ на логически связанные независимые друг от друга составные части. В состав модуля входят следующие разделы: заголовок, интерфейс, реализация, инициализация. Заголовок необходим для ссылок на модуль. Интерфейс содержит объявления, включая процедуры и функции, представленные списком заголовков и доступные пользователям в теле основной программы. Раздел «реализация» содержит тела процедур и функций, перечисленных в интерфейсной части модуля. Раздел «инициализация» содержит операторы, необходимые для инициализации модуля. Таким образом модуль - это набор констант, типов данных, переменных, процедур и функций. Каждый модуль компилируется отдельно; результат компилляции - файл с расширением .tpu(TurboPascalUnit). Каждый элемент модуля можно использовать в программе пользователя без дополнительного объявления, для чего достаточно записать имя используемого модуля в директивеUsesв начале программы после его заголовка.
В Турбо-Паскале версии 5.0 и выше применяют стандартные модули CRT,GRAPHи др. В этих модулях содержатся сервисные процедуры и функции по работе с экраном дисплея, с клавиатурой, графическими примитивами и т.п. Модули подключаются к программе путем специальной команды, размещаемой сразу после заголовка:
uses<имя модуля>
Программист может сам создать модуль. Ниже приведен пример с соответствующими комментариями.
3.7. Работа с файлами
Файл (последовательность) - это одна из наиболее фундаментальных структур данных. Программная организация компьютеров, их связь с внешними устройствами основаны на файловой структуре.
Файлы позволяют решить две проблемы:
1) возможность формирования и сохранения значений для последующего использования другими программами (например, в программах многократной обработки информационных систем, таких как платежные ведомости, различные АСУ, базы данных, необходимость длительного хранения информации очевидна);
2) взаимодействие программ с внешними устройствами ввода-вывода: дисплеем, принтером, АСП и т.п.
В Паскале эти проблемы снимаются с помощью структурированных данных файлового типа.
Файловый тип данных в программе задается следующем образом:
type<имя файлового типа> =fileof<тип компонентов>
В качестве типа компонентов файла разрешается использовать любой тип данных, кроме файлового
Описание файловой переменной задается обычным способом в разделе описаний. Например:
var f: intfile; или var f: file of integer;
Файловая переменная является буфером между Паскаль-программой и внешним устройством и должна быть логически с ним связана. Связь осуществляется оператором языка Паскаль:
assign(<имя файловой переменной>,'<имя устройства>')
Как правило, файлы для хранения данных связаны с устройством внешней памяти на магнитных носителях (дисковод) и носят название внешние файлы. Если, например, файл с именемprimer,datлогически связан с дисководом А:, то все данные, помещаемые в файл, будут храниться на этом дисковом накопителе,a установка «окна» между программой и файлом будет определяться через файловую переменную f оператором
assign(f, 'primer.dat')
Если внешним устройством является принтер, то связь осуществляется оператором assign(f, '1st:'). Здесь 1st - логическое имя печатающего устройства. Ниже приведены логические имена внешних устройств ввода-вывода:
con- консоль;trm- терминал;kbd- клавиатура; 1st - принтер;aux- буфер сети;
usr-драйвер пользователя.
После осуществления связи файловая переменная fотождествляется с соответствующим файлом.
Для работы с файлом его необходимо открыть, а по окончании работы — закрыть Файл открывается для чтения оператором reset(f), для записи - операторомrewrite(f).
Чтение и запись данных осуществляется известными командами read/write, только в начале списка помещается имя файловой переменной:
read(f, <список ввода>);readln(f, <список ввода>);
write(f, <список вывода>);writeln(f, <список вывода>).
Закрытие файла осуществляется командой close(f).
3.8. Работа с графикой
Машинная (компьютерная) графика - одно из важных направлений в современной прикладной информатике. В отличие от базового Паскаля, современные версии содержат мощные средства разработки графических программ. Рассмотрим часть соответствующих возможностей Турбо-Паскаля, в котором они реализованы с помощью стандартного модуляGraph.
Модуль представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами CGA,EGA,VGA,SVGAIBM-совместимых персональных компьютеров.
Подключение модуля Graph,tpuк программе выполняется директивой
usesgraph;
Инициализация графического экрана осуществляется с помощью процедуры Initgraph. Драйвер поддерживает тот или иной режим экрана:
Некоторые сведения о драйверах н определяемых ими режимах
Адаптер
|
Драйвер
|
Режим (Номер, имя)
|
Разрешимость
|
Число страниц
|
EGA
|
EGA
|
OEgalo
|
640х200
|
4
|
1 Egahi
|
640х350
|
2
|
||
VGA
|
VGA
|
OVgalo
|
640х200
|
4
|
IVgalo
|
640х350
|
2
|
||
2Vgalo
|
640х480
|
1
|
Процедура инициализации в Турбо-Паскале имеет три аргумента:
Initgraph(<драйвep>, <режим>, '<путь к драйверу>').
Она может быть выполнена так:
uses graph;
Var gd, gm: integer; {переменные gd и gm определяют драйвер и режим}
begin
gd:=vga; gm:=vgahi;
initgraph(gd,gm.'d:\tp55);
Первые две команды можно заменить одной:
gd:=detect
Целая константа detect=0 в модулеGraphавтоматически распознает драйвер и устанавливает режим максимального разрешения для данной машины.
Процедура closegraphосвобождает память от драйвера и устанавливает режим работы экрана, который был до инициализации графики.
Для обнаружения ошибок в графике применяются функции graphresultиgrapherrormsg(код ошибки). Последняя выдает строку сообщения о характере ошибки, соответствующей коду.
Для формирования палитры используется система смешения красного, зеленого и синего цветов и изменения яркости луча. Цвет задается номером из списка цветов палитры в интервале 0 .. 15.
Процедуры sе1со1ог(<цвет>) иsetbkcolor(<цвет>) устанавливают текущий цвет рисунка и цвет фона. При инициализации графики по умолчанию устанавливается черный фон и белый цвет рисунка.
Координаты точек воспринимаются в «экранной» системе координат, в которой начало - верхний левый угол экрана, ось «х» направлена вниз, ось «у» -направо.
Основные процедуры модуля Graph
Заголовок процедуры
|
Геометрический смысл
|
putpixel(x,y,c)
|
Построить точку (х,у) цветом с
|
setlinestyle(a,b,t)
|
Установить стиль, образей и толщину линий
|
line(xl,yl,x2,y2)
|
Соединить две точки отрезком
|
rectangle(xl,yl.x2.y2)
|
Построить прямоугольник с заданными концами диагонали и
|
|
сторонами, параллельными осям координат
|
circle(x,y,r)
|
Построить окружность с центром (х,у) и радиусом г
|
arc(x,y,a,b,r)
|
Построить дугу окружности: a,b- начальный и конечный угол в
|
|
Градусах
|
ellipse(x,y,a,b,rx,ry)
|
Построить эллиптическую дугу: rx, rу - полуоси эллипса
|
setfillstyle(t,c)
|
Установить стиль закраски и ее цвет
|
fillellipse(x,y,rx,ry)
|
Построить закрашенный эллипс, используя цвет рисунка
|
floodfill(x,y,cg)
|
Закрасить фигуру до границы с цветом cg; (x,y) - внутренняя
|
|
точка фигуры
|
bar(xl,yl,x2,y2)
|
Построить столбец, используя тип и цвет закраски
|
pieslice(x,y,a,b.r)
|
Построить и закрасить сектор круга
|
sector(x,y.a,b,rx,ry)
|
Построить и закрасить эллиптический сектор
|
settextsiyle(f,n,d)
|
Установить шрифт, направление вывода и размер символа текста '
|
outtextxy(x,y,st)
|
Вывести строку st, начиная с точки (х,у)
|
outtext(st)
|
Вывести строку, начиная с точки расположения текущего указателя
|