Автор работы: Пользователь скрыл имя, 24 Марта 2012 в 00:26, реферат
В данной работе будут описаны основные возможности языка, работа в интегрированной среде, набор стандартных модулей.
Паскаль замечательный язык программирования, который относительно прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком программирования, приучает к хорошему стилю. Паскаль воспитывает дисциплину структурного программирования и программирования вообще лучше, чем другие языки программирования, такие, как, например Бейсик.
Введение….……………………………………………………………………......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
Сравнение символов. Также как и числа, символы можно сравнивать на =,
, , =. В этом случае Паскаль сравнивает не сами символы, а их коды. Таблица ASCII составлена таким образом, что коды букв (латинских и большинства русских) возрастают при движении в алфавитном порядке, а коды цифр расположены по порядку: ord(‘0’)=48, ord(‘1’)=49, ... ord(‘9’)=57.
Сравнения символов можно использовать везде, где требуются логические выражения: в операторе if, в циклах и т.п.
2. Строковый тип
Для хранения строк (то есть последовательностей из символов) в Турбо-
Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами: либо var s: string; (максимальная длина строки — 255 символов), либо var s: string[n]; (максимальная длина — n символов, n — константа или конкретное число).
Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами. В случае присваивания конкретной строки, это строка должна записываться в апострофах (s:='Hello, world!').
Хранение строк
В памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с 1). Перед первым символом строки имеется ещё и нулевой, в котором хранится символ с кодом, равным длине строки. Нам абсолютно безразлично, какие символы хранятся в байтах, находящихся за пределами конца строки. Рассмотрим пример. Пусть строка s объявлена как string[9], тогда после присваивания s:=’Привет’; она будет хранится в следующем виде:
Номер байта | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Содержимое | #6 | ‘П’ | ‘р’ | ‘и’ | ‘в’ | ‘е’ | ‘т’ | ‘ю’ | ‘s’ | ‘%’ |
Для того чтобы в программе получить доступ к 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, если очередь клавиатуры не пуста (то есть была нажата). Простейший пример использования — повторять какие либо действия, пока не нажата клавиша: 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; |Очищает экран. |