ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6808
Скачиваний: 51
256
тана интегрированная среда пользователя. В ней появилась возможность работать в многооконном
режиме, редактируя несколько файлов одновременно. Допускается работа с «мышью». Сущест-
венно улучшен сервис для работы с окнами и с системой помощи Help, которая контекстно вызы-
вается из любого окна, а в окне Help допустимы некоторые команды редактирования. Увеличился
максимальный размер редактируемого файла и имеется возможность менять цветовую палитру
самой интегрированной среды.
Еще одна возможность, появившаяся в Турбо-Паскале 6.0 - объектно-ориентированное
проектирование программ. Подобная технология стала возможной благодаря новому типу данных
«объект». Объект - это структура данных, содержащая поля данных (подобно записи) различных
типов и заголовки методов. Метод - это процедура или функция, объявленные внутри объявления
элемента типа «объект». Большую популярность среди программистов приобрела объектно-
ориентированная библиотека TurboVision, включающая объекты, управляющие
• перекрывающими окнами с изменяемыми размерами;
• выпадающими меню;
• диалоговыми окнами;
• работой мыши;
• кнопками,полосами скроллинга.
Следует отметить, что сама интегрированная среда Турбо-Паскаля 6.0 разработана с ис-
пользованием библиотеки TurboVision.
Система программирования Турбо-Паскаль 7.0.
Главное меню интегрированной среды
Турбо-Паскаль 7.0 в дополнение к меню Турбо-Паскаля 6.0 содержит
Tools - инструментальные программные средства.
По сравнению с предыдущей версией в интегрированной среде появилась возможность на-
стройки компилятора на работу в трех режимах: обычном режиме MS DOS (Real), защищенном
режиме (Protected) и в режиме операционной среды Windows (Windows). Введена новая команда
Object Browser - просмотр модулей, объектов и символов при редактировании исходного текста.
Появилось удобное средство - синтаксическая подсветка, которая обеспечивает подсвечивание
управляющих структур, зарезервированных слов, идентификаторов, строк и т.п. Новая секция ме-
ню Tools предназначена для передачи управления внешним программам и создания собственных
инструментальных программных средств. Нажатие клавиш Alt+Fl (или правый щелчок мыши) ак-
тивизирует локальные меню, чувствительные к контексту (Browse, Edit, Help, Message, Watch).
В версии 7.0 расширена библиотека стандартных модулей. Помимо известных в версии 6.0
модулей Crt, Graph, Graph3, Overlay, String, System, Turbo3 появились WinAPI, WinCrt, WinDos,
WinPrn, WinTypes, WinProcs.
Контрольные вопросы
1. В чем состоят основные различия версий Турбо-Паскаля?
2. Какие возможности версии Турбо-7.0 отсутствуют в предыдущих версиях?
3.9. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЮ ТУРБО-ПАСКАЛЯ
СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Принятые обозначения:
type -любой тип;
string - любой строковый тип;
file -любой файловый тип;
scalar - любой простой тип;
pointer -любой ссылочный тип.
Замечание:
если в списке параметров не указан спецификатор типа, то в качестве данного
параметра процедура допускает параметр любого типа; в некоторых процедурах допускаются не-
сколько вариантов заголовков процедур.
ПРОЦЕДУРЫ ВВОДА-ВЫВОДА
257
Процедура
Read
•
Read(var F:file of type; var v:type);
Read(var F:text; var I':intnger);
Read(var F:text; var R:real);
Read(var F:text; var C:char);
Read(var F:text; var S:string);
где F - имя переменной файлового типа, a var I,R,C,S - одна или несколько переменных,
совпадающих по типу с типом элементов файла.
Процедура
Readln
Readln(var F:text; var varl,var2,...varN);
Readln(var varl ,var2,...varN);
Readln(var F:text);
Readln;
где F - имя переменной типа text, a varl...varN - переменные типа Char. Если опущено имя
файла, то по умолчанию принимается
имя типа INPUT. Если опущея список переменных, то про-
исходит переход на другую строку.
Процедура
Write
Write(var F:file of type; var v:type);
Write(var F:text; var I:integer);
Write(var F:text; var B:boolean);
Write(var F:text; var C:char);
Write(var F:text; var S:string).
Процедура
Writeln
Writeln(var F:text; var varl ,var2,... varN);
Writeln(var var varl ,var2,... varN);
Writeln(var F:text);
Writeln.
СТАНДАРТНЫЕ ФУНКЦИИ
Функции арифметические
Abs(x); Arctan (x); Cos (x); Exp (x); Ln (x); Sin (x); Sqr (x); Sqrt (x)
имеют стандартный смысл. Функция
fruc(R:Real):Real;fruc(I:Integer):Real
возвращает значение дробной части своего аргумента.
Функция
int (R:real):real; int (I:integer):real;
возвращает значение целой части своего аргумента.
Функции скалярные
Odd(x); Pred(x); Succ(x)
имеют стандартный смысл.
Функции преобразования
Chr (x); Ord (x); Round (x); Trunc (x) имеют стандартный смысл.
СТРОКОВЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Процедура
Delete
(var S:Strina;Pos, Len: Integer) убирает из строки S Len символов, начиная
с Pos. Если Len больше длины S, то ничего не происходит. Если Pos+Len больше длины строки, то
удаляются все символы до конца строки.
Процедура
Insert
(S:String; var D:String;Pos:Integer) вставляет строку S в строку D перед
символом с номером Pos. Если Pos больше длины D, то S и D соединяются. Если длина результата
при этом больше максимальной длины
D, то в D записываются только самые левые символы.
Процедура
Str
(I:Integer; var S: String);
Str
(R:Real; var S:String) преобразует I или R из числа
258
в строку и записывает эту строку в S, причем R и I могут записываться
формально, т.е. как в про-
цедурах Write и Writeln.
Процедура
Val
(S:String; var R:Real; var P:Integer);
Val
(S:String; var I,P:Integer) преобразует
строковую переменную S в число (тип зависит от типа переменной I или R соответственно). Если
в строке S ошибок нет. то Р равно 0, иначе значение R (или I) не определено, а Р присваивается
номер первого ошибочного символа.
Функция
Concat
(Sl,S2,....Sn:string):String возвращает строку, полученную конкатенацией
строк Sl,...,Sn. Если длина результата больше 255, то возникает ошибка времени выполнения.
Функция
Copy
(S:String; Pos,Len:Integer):String возвращает строку, полученную из Len сим-
волов строки S, начиная с позиции Pos. Если Pos больше, чем длина строки S, то возвращается
пустая строка. Если Pos+Len больше, чем длина строки S, то возвращаются только символы, при-
надлежащие строке S.
Функция
Length
(S:Strina):Integer возвращает длину строки S.
Функция
Pos
(Pattern,Sourse:String):Integer возвращает номер символа, начиная с которого
Pattern входит в Sourse. Если вхождения нет, то возвращается 0.
ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ
Процедура
Assign
(var F:File: Name:String); Name - имя файла на диске, F – имя файловой
переменной. После выполнения этой процедуры Name и F отождествляются. Assign не должна
применяться к файлу, находящемуся в употреблении.
Процедура
BlockRead
(var F:File; var Dest:Type; Num:Integer)
F -нетипизируемый файл, Dest -переменная,
Num - количество 128-баитных записей, которые должны быть перенесены из дискового
файла в переменную.
Процедура
BlocKWrite
(var F:File; var Dest:Type; Num:Integer) I Num - количество 128-
баитных записей, которые должны быть перенесены из переменной в дисковый файл.
Процедура
Chain
(var F:File) активизирует CHN-файл, с которым предварительной проце-
дурой Assign было отождествлено имя F.
Процедура
Close
(var F:File); дисковый файл, отождествленный с переменной F, закрывает-
ся и в директорию диска вносятся необходимые изменения.
Процедура
Erase
(var F:File); дисковый файл, отождествленный с переменной F, уничтожа-
ется.
Процедура
Execute
(var F:File) загружает и выполняет файл с диска, с которым предвари-
тельно процедурой Assign было отождествлено имя F.
Процедура
Rename
(var F:File; Name:String); дисковому файлу, отождествленному с пере-
менной F, присваивается новое имя Name. Rename не должна применяться к уже открытому фай-
лу.
Процедура
Reset
(var F:File) открывает файл F для чтения и ставит указатель на начало фай-
ла.
Процедура
Rewrite
(var F:File) открывает файл F для записи, чистит его и ставит указатель
на начало файла.
Процедура
Seek
(var F:File
of type; Pos:Integer) устанавливает указатель файла F на Pos эле-
мент файла.
Процедура
Flush
(var F:File) очищает буфер дискового файла, отождествленного с перемен-
ной F. Гарантирует, что следующая операция чтения будет произведена непосредственно с диска.
Должна применяться к уже закрытым файлам.
Функция
Eof
(var F;File):boolean возвращает TRUE, если найден конец файла.
Функция
Eoln
(var F:Text):boolean возвращает TRUE, если найден конец строки или конец
файла F.
Функция
Filepos
(var: F: File of Type):Integer;
Filepos
(var: F:File):Integer возвращает теку-
щую позицию указателя файла.
Функция
Filesize
(var: F: File ofType):Integer;
Filesize(var: F:File):Integer возвращает текущее
количество элементов файла.
ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ СО ССЫЛОЧНЫМИ СТРУКТУРАМИ
259
Процедура
Getmem
(var P:Pointer; I:Integer) отводит под область памяти, на которую будет
ссылаться переменная Р, 1 байт памяти.
Процедура
Mark
(var P:Pointer) запоминает текущий указатель «кучи» в переменной Р.
Процедура
New
(var P:Pointer) отводит место в памяти под переменную того типа, на кото-
рый указывает Р.
Процедура
Release
(var P.Pointer) ставит указатель «кучи» на значение переменной Р. Пере-
менная Р должна быть предварительно обработана процедурой Mark. Уничтожаются все динами-
ческие переменные, расположенные в памяти после последнего вызова процедуры Mark.
Функция
MemAvai
:Integer возвращает размер доступной для динамических переменных
памяти.
Функция
Ord
(P:Pointer):Integer возвращает адрес переменной ссылочного типа Р.
Функция
Ptr
(I:Integer):Rointer возвращает ссылку на адрес памяти I.
ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ТЕКСТОВЫМ ЭКРАНОМ
Процедура
CrtExit
- выдача на экран строки сброса экрана, определенной в инсталляторе.
Процедура
Crtlnit
- выдача на экран строки инициализации экрана, определенной в инстал-
ляторе.
Процедура
CIrEol
уничтожает символы строки от курсора до крайнего правого символа без
перемещения курсора.
Процедура
CIrScr
очищает экран.
Процедура
DelLine
- удаление строки, на которой находится курсор, и сдвиг всех строк, на-
ходящихся ниже этой строки, на одну вверх.
Процедура
GotoXY
(X,Y:Integer) - позиционирование курсора по координатам
XnY.
Процедура
InsLine
- вставка пустой строки на место курсора и сдвиг всех строк, находя-
щихся под этой строкой на одну вниз.
ПРОЧИЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Процедура
Bdos
(func,param:Integer) - вызов функции Bdos с номером func, которая заносит-
ся в регистр С, и параметром param, который заносится в регистровую пару DE.
Процедура
BIOS
(func,param:Integer) - вызов функции Bios с номером func и параметром
param. который заносится в регистровую пару ВС.
Процедура
Delay
(Ms:Integer) - задержка программы на Ms миллисекунд.
Процедура
FillChar(var
dest; length:Integer;data:Char);
FillChar(var
dest;
length:Integer;data:Byte) - заполнение length байт памяти величиной data. Начало участка
памяти - адрес переменной dest.
Процедура
Halt
- аварийный выход из программы.
Процедура
Move
(var sourse.dest:length:Integer) - пересылка length байт, расположенных в
памяти, начиная с первого байта переменной sourse, в участок памяти длины length, начинающий-
ся с первого байта переменной dest.
Процедура
Randomise
- инициализация генератора случайных чисел.
Функция
Addr
(var variable):Integer;
Addr
(<function identifier>):Integer;
Addr(<procedure identifier>):Integer возвращает адрес первого байта своего аргумента.
Функция
Bdos
(funk,param:Integer):Byte аналогична соответствующей процедуре. Возвраща-
ет значение регистра А.
Функция
BdosHL
(funk,param:Integer):Integer аналогична функции Bdos. Возвращает значе-
ние регистровой пары HL.
Функция
Bios
(funk, param :Integer):Byte аналогична соответствующей процедуре. Возвра-
щает значение регистра А.
Функция
BiosHL
(func.param:Integer):Integer аналогична функции Bios. Возвращает значе-
ние регистровой пары HL.
Функция
Hi
(I:Integer):Integer возвращает число, младший байт которого содержит старший
байт параметра. Старший байт результата равен 0.
260
Функция
IOresult
:Integer работает после директивы компилятору $1-. Значение 0 соответ-
ствует отсутствию любой ошибки ввода-вывода. В противном случае возвращается произвольное
ненулевое число.
Функция
KeyPresscd
:Boolean возвращает TRUE, если нажата любая клавиша
на
клавиату-
ре, и FALSE в противном случае.
Функция
Lo
(I:Integer):Integer возвращает число, младший
байт которого содержит младший
байт параметра. Старший байт результата равен 0.
Функция
Random
(I:Integer):Integer; Random:Real возвращает случайное число. Для первого
варианта вызова это число лежит в интервале от 0 до 1, для второго -от 0 до 1.
Функция
Size0f
(var variable):Integer;
Size0f
(<type identifier>):Integer возвращает размер (в
байтах) своего аргумента.
Функция
Swap
(I:Integer):Integer возвращает число, у которого по сравнению с аргументом
поменялись местами первый и второй байты.
Функция
UpCase
(Ch:Char):Char возвращает верхний
регистр данного символа. Если тако-
вого нет, то возвращается аргумент.
Функция
ParamCount
:Integer; возвращает число параметров в строке вызова СОМ-файла.
Функция
ParamStr
(n:Integer):String[14]; возвращает n-параметр из строки вызова СОМ-
файла.
Процедура
Exit
- выполнение этой процедуры эквивалентно передачи управления на по-
следний END процедуры, функции или основной программы, где выполнена процедура
Exit.
§4. МЕТОДЫ И ИСКУССТВО ПРОГРАММИРОВАНИЯ
4.1. ПРОЕКТИРОВАНИЕ ПРОГРАММ
В предыдущем разделе, посвященном
языку Паскаль, приведено немало примеров про-
грамм. Однако, при анализе готовой программы чаще всего не ясно, как разработчики к ней при-
шли. В этом разделе рассказывается об общих моментах в технологии программирования. Конеч-
но, при разработке небольших учебных программ не все элементы этой технологии следует отра-
батывать (да это и не всегда возможно по-существу), однако само ее существование должно быть
осознано.
Современный подход к проектированию программ основан на декомпозиции задачи, кото-
рая в свою очередь основана на использовании абстракций. Целью при декомпозиции является
создание модулей, которые представляют собой небольшие, относительно самостоятельные про-
граммы, взаимодействующие друг с другом по хорошо определенным и простым правилам. Если
эта цель достигнута, то разработка отдельных модулей может осуществляться различными людь-
ми независимо друг
от
друга, при этом объединенная программа будет функционировать правиль-
но.
Различают абстракцию через параметризацию и через спецификацию. Смысл абстракции
через параметризацию в том, что одним алгоритмом можно решать задачи, отличающихся различ-
ными исходными данными, задаваемыми как параметры. Смысл абстракции через спецификацию
в том, что разными алгоритмами можно получить один и тот же искомый результат. При этом
описываются результаты работы программы, смысл обращения к программе становится ясным
через анализ ее спецификации, а не самого текста программы.
Разработка любой программы или программной системы начинается с определения требо-
ваний к ней для конкретного набора пользователей и заканчиваете," эксплуатацией системы этими
пользователями.
Существуют различные подходы и технологии разработки алгоритмов и программ. Хотя
программирование в значительной степени искусство, тем не менее. можно систематизировать и
обобщить накопленный профессиональный опыт. По современным взглядам проектирование и
разработку программ целесообразнс разбить на ряд последовательных этапов:
1)постановка задачи;
2) проектирование программы;
3) построение модели;
4) разработка алгоритма;
5) реализация алгоритма;