Turbo Pascal
Автор работы: Пользователь скрыл имя, 05 Ноября 2013 в 11:46, реферат
Краткое описание
В 1992 году фирма Borland International выпустила два пакета программирования на использовании языка Паскаль, - Borland Pascal 7.0 и Turbo Pascal 7.0. Пакет Borland Pascal 7.0 учитывает многие новейшие достижения в программировании и практике создания программ и включает в себя три режима работы: в обычном режиме операционной системы MS DOS, в защищенном режиме MS DOS и в среде Windows. Обладая расширенными возможностями, пакет Borland Pascal 7.0 тем не менее требует для использования всех своих возможностей довольно большую память – примерно 30 Мбайт на жестком диске и не менее 2 Мбайт оперативной памяти.
Содержание
Введение….……………………………………………………………………......3
1. История…………………...……………………………………………………..5
2. Этапы……………………………………………………………………………8
3. Структура программы на языке Turbo Paskal……………………………….10
4. Процедуры ввода-вывода. Некоторые встроенные функции
Turbo Paskal…………………………………………………………...………15
5. Операторы условного выполнения…………………………………………..17
6. Операторы циклов в Паскале. Символьные и строковые
переменные …………………………………................................................18
7. Модуль CRT…………………………………………………………………...24
8. Графика в Турбо Паскале…………………………………………………….28
9. Текстовые файлы……………………………………………………………...36
10. Двоичные файлы……………………………………………………………..40
11. Модули в Турбо Паскале……………………………………………………42
12. Динамические переменные………………………………………………….44
13. Динамические структуры данных…………………………………………..46
14. Динамические переменные: другие виды списков, стек и очередь……...48
15. Деревья и поиск в деревьях………………………………………...……….50
16. Достоинства и недостатки, интересные факты……………………………52
Заключение…………………………………………………………………….…54
Список использованной литературы…………………………………………...55
Прикрепленные файлы: 1 файл
програмирование2.doc
— 284.00 Кб (Скачать документ)Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки. В следующем примере из строки 'Привет' мы сделаем 'Привет!': s[0]:=#7; s[7]:='!';.
Сравнение строк
Строки сравниваются
последовательно, по символам.
Сравниваются первые символы строк, если они равны — то
вторые, и т. д. Если на каком-то этапе появилось
различие в символах, то меньшей будет
та строка, в которой меньший символ. Если
строки не различались, а затем одна из
них закончилась, то она и считается меньшей.
Склеивание (конкатенация) строк
К строкам можно применять операцию «+», при этом результатом будет строка, состоящая из последовательно записанных «слагаемых».
Процедуры и функции для работы со строками
Наиболее часто употребляется функция length(s: string): integer (после двоеточия записан тип значения, возвращаемого функцией, в нашем случае — целое число). Эта функция возвращает длину строки s.
Другие процедуры и функции приведены в таблице:
Процедура или функция |
Назначение |
Пример |
функция Copy(s: string; start: integer; |
Возвращает вырезку из строковой переменной s, начиная с символа с номером start, длина которой len |
s:=’Бестолковый’; s1:=Copy(s,4,4); {в s1 станет ‘толк’} |
функция Pos(s1: string; s: string): byte |
Ищет подстроку s1 в строке s. Если находит, то возвращает номер символа, с которого начинается первое вхождение s1 в s; если s1 не входит в s, то функция возвращает 0 |
n:=pos(‘министр’, ‘администратор’); {=3} n:=pos(‘abc’, ‘stuvwxyz’);{=0} |
процедура Insert(s1: string; s: string; |
Вставляет строку s1 в строковую переменную s начиная с символа с номером start. |
S:=‘кот’; insert(‘мпо’,s,3); {в s станет ‘компот’} |
процедура Delete(s: string; start: integer; |
Удаляет из строковой переменной s фрагмент, начинающийся с символа с номером start и длиной len |
s:= ‘треугольник’; delete(s,4,7); {в s останется ‘трек’} |
7. Модуль CRT
Модуль CRT - набор средств для работы с экраном в текстовом режиме, клавиатурой и для управления звуком. Для того чтобы использовать эти средства требуется после заголовка программы записать: uses CRT;.
1. Управление экраном
В текстовом режиме экран представляется разбитым на маленькие прямоугольники одинакового размера, в каждом из которых может находиться какой-либо символ из набора ASCII. Для символов можно задавать цвет самого символа и цвет прямоугольника, в котором он рисуется (цвет фона). Строки экрана нумеруются сверху вниз, а столбцы слева направо, нумерация и строк, и столбцов начинается с единицы.
Наиболее распространённым в настоящее
время является текстовый режим
80x25 при 16 возможных цветах текста и фона.
Многие графические адаптеры позволяют
использовать другие режимы, например:
40x25, 80x43, 80x50 и т. д.
В управлении текстовым экраном важную роль играет курсор. Вывод символов на экран (т.е. write и writeln) осуществляется начиная с позиции курсора, когда все символы выведены, курсор останавливается в следующей позиции после последнего символа. Ввод также будет производиться начиная с позиции курсора.
Ниже приведены основные
процедуры и функции для
|Название |Назначение |
|InsLine |Вставить строку в том месте где
|
| |находится курсор, все строки ниже |
| |курсора сдвигаются вниз на одну позицию.|
| |Курсор остаётся на том же месте. |
|DelLine |Удалить строку в позиции курсора.
Курсор|
| |остаётся на том же месте. |
|GotoXY(x,y: byte) |Переместить курсор в позицию
(x,y); x — |
| |номер строки, y — номер столбца. |
|ClrEOL |Очистить строку от курсора и до правого
|
| |края экрана. Курсор остаётся на прежнем
|
| |месте |
|HighVideo |Устанавливает повышенную яркость
для |
| |вывода текста |
|LowVideo |Пониженная яркость |
|NormVideo |Нормальная яркость |
|TextColor(color: byte) |Устанавливает цвет для
вывода текста. |
| |Значения цветов — обычно числа от 0
до |
| |15. Вместо этих чисел можно указывать
и |
| |существующие константы (black, white, |
| |red, green, blue, magenta, cyan, brown, |
| |lightgray и т. п.). При необходимости |
| |можно заставить текст мерцать прибавляя
|
| |к номеру цвета число 128 или константу
|
| |Blink. |
|TextBackGround(color: byte) |Устанавливает цвет для
фона. |
|ClrScr |Очистить экран и поместить курсор
в |
| |левый верхний угол, т.е. в позицию (1,1)|
| |— 1-я строка, 1-й столбец. При очистке
|
| |экран заполняется цветом фона (см. |
| |TextBackground) |
|WhereX: byte |Эта функция возвращает номер
строки, в |
| |которой находится курсор. |
|WhereY: byte |Номер столбца, в котором находится
|
| |курсор |
2. Работа с клавиатурой
При работе с клавиатурой
компьютер помещает всю информацию
о нажатии клавиш в очередь
до тех пор, пока эта информация не
потребуется программе
(например, для вывода на экран, для движения
объектов в играх и т.п.). Для работы с клавиатурой
важны 2 функции:
1. KeyPressed: boolean — возвращает
true, если очередь клавиатуры не
пуста (то есть была нажата).
Простейший пример
2. ReadKey: char — возвращает символ, соответствующий нажатой клавише (из очереди клавиатуры). Если пользователь нажал клавишу, для которой имеется код ASCII, то в очередь будет положен один соответствующий символ, а если это специальная клавиша (F1, F2, ... F12, клавиши управления курсором, Ins, Del, Home, End, PgUp, PgDn), то сначала в очередь будет положен символ с кодом 0, а затем дополнительный символ.
Если очередь клавиатуры пуста, то Readkey будет ждать, пока пользователь не нажмёт какую-либо клавишу.
Для демонстрации работы ReadKey можно написать такую программу: uses Crt; var c: char; begin repeat c:=ReadKey; writeln(ord(c)); until c=#27 {клавиша Escape}; end.
При нажатии вышеперечисленных специальных клавиш эта программа будет выводить по два кода сразу.
3. Другие возможности
При необходимости организации задержек в программе можно использовать процедуру Delay(time: word). Параметр time — время в миллисекундах, на которое нужно приостановить программу.
Ещё одна возможность
модуля CRT — работа с системным
динамиком. Для включения звука
нужна процедура Sound(f: word) (f — частота в
герцах).
После включения требуется задержка (Delay)
на необходимое время звучания, затем
— выключение с помощью NoSound. Если не воспользоваться
NoSound, то звук будет слышен даже после выхода
из программы на Паскале.
8. Графика в Турбо Паскале
В отличие от уже знакомого текстового режима, экран в графическом режиме разбит на большое количество точек, каждая из которых может иметь определённый цвет. Точки считаются одинаковыми и прямоугольными, все они плотно «уложены» на экране, то есть для любой точки можно указать, в какой строке и в каком столбце она находится. Номера строк и столбцов в графическом режиме используются как координаты точки, следовательно, координаты всегда целочисленные. В графическом режиме начало координат находится в левом верхнем углу экрана, ось x направлена вправо, ось y направлена вниз.
Заметим, что существуют
разные графические режимы, они отличаются
количеством точек по горизонтали
и вертикали (разрешением), а также
количеством возможных цветов, например: 320x200x16,
640x480x16, 640x200x16,
800x600x256 и т. п.
Все средства для работы
с графикой содержаться в стандартном
модуле
Graph, поэтому его нужно будет упоминать
после слова uses.
1. Включение и выключение графического режима
Для включения графического
режима используется процедура
InitGraph(driver,mode,path) опишем назначение её параметров: driver - переменная
типа integer, в котором задаётся тип видеоадаптера,
установленного в компьютере. В модуле
определены константы для различных адаптеров,
которые избавляют нас от необходимости
запоминать числа. Имеются такие константы:
CGA, EGA, EGA64, EGAMono, VGA, MCGA, IBM8514 и т. п. Для нас
наиболее важной будет константа detect,
при указании которой InitGraph сама подыщет
наиболее мощный тип адаптера, совместимый
с тем адаптером, который установлен на
компьютере. mode - также переменная типа
integer, задаёт режим, в котором работает
выбранный видеоадаптер (здесь также определены
константы). Почти каждый видеоадаптер
может работать в нескольких режимах,
например, у VGA есть
640x200x16 (VGALo), 640x350x16 (VGAMed), 640x480x16 (VGAHi). Если
в первом параметре было указано значение
detect, то InitGraph не обращает внимания на mode,
а устанавливает наилучший, на её взгляд,
режим. path - строковый параметр. Для каждого
видеоадаптера (или для группы сходных
видеоадаптеров) существует программа-драйвер,
с помощью которой модуль Graph общается
с видеоадаптером. Такие драйверы хранятся
в файлах с расширением «bgi». В параметре
path указывается каталог, в котором хранятся
драйверы. Если они находятся в текущем
каталоге, то этот параметр равен пустой
строке.
Обычно для включения графики мы будем использовать InitGraph в таком виде:
const gpath = ‘Y:WIN_APPSBPBGI’ var gd,gm: integer;
... begin
... gd:=Detect;
InitGraph(gd,gm,gpath);
...
Для завершения работы с графикой и выхода в текстовый режим используется процедура CloseGraph.
2. Построение элементарных изображений
Система координат при работе с графикой имеет начало (точку (0,0)) в левом верхнем углу экрана. Ось x направлена вправо, ось y - вниз. Очевидно, что все точки экрана имеют целочисленные координаты.
При построении простейших
элементов изображений
|Название |Назначение |
|PutPixel(x,y: integer; c: |Поставить точку (x,y), используя цвет
c. |
|word); |Значение цвета обычно меняется от
0 до 15, |
| |вместо номера цвета можно употреблять
|
| |цветовые константы модуля Graph. |
|SetColor(c: word); |Установить текущий цвет для
рисования |
| |отрезков, окружностей и т. п. Все линии
после|
| |употребления этого оператора будут
рисоваться|
| |установленным цветом. |
|SetBkColor(c: word); |Установить текущий цвет
для фона (то есть |
| |цвет всего экрана). |
|GetMaxX; GetMaxY; |Эти функции возвращают максимальные
|
| |допустимые значения координат x и y,
|
| |соответственно. |
|Line(x1,y1,x2,y2: integer); |Рисовать отрезок из (x1,y1)
в (x2,y2) текущим|
| |цветом. |
|Rectangle(x1,y1,x2,y2: |Рисует текущим цветом прямоугольник,
левый |
|integer); |угол которого ( (x1,y1), а правый нижний
( |
| |(x2,y2). |
|Circle(x,y: integer; r: word); |Рисует текущим цветом
окружность с центром в |
| |точке (x,y) радиуса r. |
|Arc (x,y: integer; a1,a2,r: |Рисует дугу окружности.
a1 и a2 ( начальный и|
|word); |конечный углы (в градусах), соответственно.
|
| |Угол отсчитывается традиционно, против
|
| |часовой стрелки, угол величиной 0( |
| |соответствует лучу y=0, x>0. |
|Ellipse(x,y: integer; |Рисует дугу эллипса с полуосями
xr и yr от |
|a1,a2,xr,yr: word); |угла a1 до a2. |
|DrawPoly(n: word; P); |Рисует многоугольник, количество
сторон в |
| |котором ( n, а информация о вершинах хранится|
| |в нетипизированном параметре P. В качестве
P |
| |удобнее всего использовать массив из
записей,|
| |каждая из которых содержит поля x,y: integer;|
|MoveTo(x,y: integer); |Эта процедура опирается
на понятие текущей |
| |позиции. Она «запоминает» позицию (x,y)
на |
| |экране, а в дальнейшем из этой позиции
можно |
| |рисовать отрезки. |
|LineTo(x,y: integer); |Рисует отрезок из текущей
позиции в точку |
| |(x,y). При этом текущая позиция перемещается
|
| |в конец нарисованного отрезка. |
|MoveRel(dx,dy: integer); |Перемещает текущий указатель
из прежнего |
| |положения (x,y) в точку (x+dx,y+dy). |
|LineRel(dx,dy: integer); |То же, что и предыдущая
процедура, но при |
| |перемещении рисует отрезок от (x,y) до
|
| |(x+dx,y+dy). |
|GetX; GetY; |Возвращают координаты текущего
указателя (по |
| |отдельности). |
|ClearDevice; |Очищает экран. |
Все приведённые выше
процедуры для рисования
SetLineStyle(style,pattern,
1. style - вид линии. Здесь удобно задавать не конкретные числа, а константы: SolidLn, DottedLn, CenterLn, DashedLn, UserBitLn. Первая обозначает сплошную линию, следующие три - разные виды прерывистых линий, последняя - линию, вид которой определяется пользователем (см. ниже).
2. pattern - образец для вида линии, определяемого пользователем. Этот параметр вступает в действие лишь тогда, когда в предыдущем указано
UserBitLn. Образец - это фрагмент линии, заданный в виде числа.
Переход от конкретного фрагмента к числу выполняется, например, так:
[pic]
Удобнее всего переводить
полученное число в шестнадцатеричный
вид, в нашем примере получится
$999C. При изображении линии
3. width ( толщина линии.
Можно использовать числа,
Перейдём теперь к
рисованию закрашенных фигур. По
умолчанию внутренняя область фигуры будет закрашиваться белым цветом,
причём закраска будет сплошной. Для управления
цветом и видом закраски используется
процедура SetFillStyle(style, color: word); Также как
и для стиля линии, для style предусмотрены
константы: EmptyFill, SolidFill, LineFill, LtSlashFill,
SlashFill, BkSlashFill, LtBkSlashFill, HatchFill, XHatchFill,
InterleaveFill, WideDotFill, CloseDotFill, UserFill. Первая обозначает
отсутствие закраски, вторая - сплошную,
последующие - различные специфические
виды закраски, самая последняя - закраску,
задаваемую пользователем. Чтобы задать
пользовательский образец закраски, нужно
использовать процедуру SetFillPattern(Pattern:
FillPatternType; Color:
Word); FillPatternType определяется как array[1..8] of
byte, каждый элемент массива кодирует одну
строчку образца закраски (как и для линий),
а всего таких строчек 8. В результате закраска
выполняется с помощью одинаковых квадратиков
8x8.
Ниже приводятся процедуры рисования закрашенных фигур.
|Название |Назначение |
|Bar(x1,y1,x2,y2: integer); |Рисует закрашенный прямоугольник.
|
|FillEllipse(x,y: integer; xr,yr: |Закрашенный эллипс.
|
|word); | |
|FillPoly(n: word; P); |Закрашенный многоугольник.
|
|PieSlice(x,y: integer; a1,a2,r: word);|Закрашенный круговой
сектор. |
|Sector (x,y: integer; a1,a2,xr,yr: |Закрашивает эллиптический
сектор. |
|word); | |
|FloodFill(x,y: integer; Cborder: |Выливает краску в
точку (x,y), откуда |
|word); |она растекается во все стороны, пока
|
| |не достигнет границы цвета Cborder. |
| |Если такой границы нет или она |
| |незамкнута, то краска может залить |
| |весь экран. |