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;  
len: integer): string

Возвращает вырезку  из строковой переменной 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;  
start: integer)

Вставляет строку s1 в  строковую переменную s начиная с  символа с номером start.

S:=‘кот’;

insert(‘мпо’,s,3);

{в s станет ‘компот’}

процедура

Delete(s: string; start: integer;  
len: 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, если очередь клавиатуры не  пуста (то есть была нажата). Простейший пример использования  — повторять какие либо действия, пока не нажата клавиша: repeat ... until KeyPressed;.

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,width: word). Рассмотрим назначение параметров этой процедуры.

1. style - вид линии. Здесь удобно задавать не конкретные числа, а константы: SolidLn, DottedLn, CenterLn, DashedLn, UserBitLn. Первая обозначает сплошную линию, следующие три - разные виды прерывистых линий, последняя - линию, вид которой определяется пользователем (см. ниже).

2. pattern - образец для вида линии, определяемого пользователем. Этот параметр вступает в действие лишь тогда, когда в предыдущем указано

UserBitLn. Образец - это фрагмент линии, заданный в виде числа.

Переход от конкретного  фрагмента к числу выполняется, например, так:

[pic]

Удобнее всего переводить полученное число в шестнадцатеричный  вид, в нашем примере получится $999C. При изображении линии закодированный нами фрагмент будет повторяться столько раз, сколько нужно.

3. width ( толщина линии.  Можно использовать числа, однако  определены 2 константы: NormWidth и ThickWidth (нормальная и толстая линии).

Перейдём теперь к  рисованию закрашенных фигур. По умолчанию внутренняя область фигуры будет закрашиваться белым цветом, причём закраска будет сплошной. Для управления цветом и видом закраски используется процедура 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. | 
| |Если такой границы нет или она | 
| |незамкнута, то краска может залить | 
| |весь экран. |

Информация о работе Turbo Pascal