Turbo Pascal (Borland Pascal) 7.0. Руководство пользователя
Алфавит и словарь языка Паскаль
Большинство программ создаются для решения какой-либо задачи. В процессе ее решения на ПК необходимо: ввести данные, указать способ их обработки, задать способ вывода полученных результатов. Поэтому нужно знать следующее:Необходимо также уметь упорядочивать команды так, чтобы:
Таким образом, нужно уметь использовать семь основных элементов программирования: ввод, данные, операции, вывод, условное выполнение, циклы и подпрограммы и на их основе строить программы.
Это список не является полным, однако, он содержит те элементы, которые присущи обычно всем программам. Многие языки программирования имеют еще и дополнительные средства, в том числе и Паскаль.
Основные файлы пакета Турбо Паскаль:
Для работы в графическом режиме необходимы Graph.tru – модуль с графическими процедурами и функциями Турбо Паскаля, несколько файлов с расширением *.BGI – драйверы различных типов видеосистем ПК, несколько файлов с расширением *.CHR, содержащих векторные шрифты.
После загрузки системы экран разделен на три части: основное (или рабочее) окно, главное меню и строка, в которой указывается назначение основных функциональных клавиш. Переход из основного окна в главное меню и обратно осуществляется посредством клавиши F10.
В рабочем окне осуществляется набор текста программы, запуск же происходит следующим образом: выход в меню, выбор пункта Run – Run.
Для того чтобы сохранить программу, необходимо: выйти в меню, выбрать File – Save (Save as …), в появившемся окне ввести имя файла и нажать клавишу Enter.
Выход из системы программирования: выход в меню, пункт File – Exit.
Язык – совокупность символов, соглашений и правил, используемых для общения. При записи алгоритма решения задачи на языке программирования необходимо четко знать правила написания и использования языковых единиц. Основой любого языка является алфавит (набор знаков, состоящий из букв, десятичных и шестнадцатеричных цифр, специальных символов).
Алфавит Паскаля составляют:
Зарезервированные слова (см таб.1) имеют фиксированное написание и навсегда определенный смысл. Они не могут изменяться программистом и их нельзя использовать в качестве имен для обозначения величин.
Идентификатор – имя (identification – установление соответствия объекта некоторому набору символов). Для обозначения определенных разработчиками языка функций, констант и т.д. служат стандартные идентификаторы, например Sqr, Sqrt и т.д. В этом примере Sqr вызывает функцию, которая возводит в квадрат данное число, а Sqrt – корень квадратный из заданного числа. Пользователь может переопределить любой стандартный идентификатор, но чаще всего это приводит к ошибкам, поэтому на практике их используют без изменения. Идентификаторы пользователя – это те имена, которые дает сам программист. При записи программ нужно соблюдать общие правила написания идентификаторов:
Арифметические операции и стандартные функции
Арифметические операции и стандартные функции Арифметическим называется выражение, составленное из операндов – величин, над которыми производится операция, скобок и знаков операций. В результате вычисления выражения получается значение определенного типа. Порядок вычисления выражения определяется скобками и старшинством операций. Они делятся на арифметические, отношения, логические и другие. Операции могут быть унарными и бинарными.Арифметические операции
| Операция | Действие | Тип операндов | Тип результата |
| Бинарные | |||
| + | Сложение | Целый, вещественный | Целый, вещественный |
| - | Вычитание | Целый, вещественный | Целый, вещественный |
| * | Умножение | Целый, вещественный | Целый, вещественный |
| / | Деление | Целый, вещественный | Вещественный |
| DIV | Целочисленное деление | Целый | Целый |
| MOD | Остаток от деления | Целый | Целый |
| Унарные | |||
| + | Сохранение знака | Целый, вещественный | Целый, вещественный |
| - | Отрицание знака | Целый, вещественный | Целый, вещественный |
Базовые процедуры и функции
Для построения изображений на экране используется система координат. Отсчет начинается от верхнего левого угла экрана, который имеет координаты (0,0). Значение Х (столбец) увеличивается слева направо, значение Y (строка) увеличивается сверху вниз. Чтобы строить изображения, необходимо указывать точку начала вывода. В текстовых режимах эту точку указывает курсор, который присутствует на экране. В графических режимах видимого курсора нет, но есть невидимый текущий указатель CP (Current Pointer). Фактически это тот же курсор, но он невидим.Целочисленные типы данных
| Тип | Диапазон | Требуемая память (байт) | ||
| Byte Shorint Integer Word Longint |
0…255 -128 …127 -32768 … 32767 0 … 65535 -2147483648 …2147483647 | 1 1 2 2 4 |
Значения целых типов могут изображаться в программе 2 способами: в десятичном виде и в шестнадцатеричном. Если число представлено в шестнадцатеричной системе, перед ним без пробела ставится знак $, а цифры старше 9 обозначаются латинскими буквами от A до F. Диапазон изменений таких чисел от $0000 до $FFFF .
Циклы в графике. Построение случайных процессов
Для того, чтобы картинки не были монотонными и регулярными, можно задавать фигурам случайные размеры, цвет, координаты. Для этого имеется специальная функция Random. Она генерирует случайные числа из [0, 1). Для расширения первоначального промежутка используется функция Random(I: word), которая выдает число из диапазона 0… I. На самом деле эти функции генерируют некоторую последовательность псевдослучайных чисел, и чтобы добиться иллюзии полной «случайности» используют команду Randomize, которая изменяет базу датчика случайных чисел.Пример. Нарисовать в случайном месте экрана точку случайного цвета
Фрагмент программы:
Randomize
x:=random(640); y:=Random(480); c:=Random(15);
PutPixel(x, y, c);
Пример. Нарисовать 5000 точек случайного цвета в случайном месте.
Фрагмент программы:
For i:=1 to 5000 do
begin
x:=Random(640); y:=Random(480); c:=Random(15);
PutPixel(x, y, c);
end;
| Цвет | Код | Цвет | Код |
| Black – черный | 0 | DarkGray – темно-серый | 8 |
| Blue – синий | 1 | LightBlue – голубой | 9 |
| Green - зеленый | 2 | LightGreen – ярко-зеленый | 10 |
| Gyan – бирюзовый | 3 | LightGyan – ярко-бирюзовый | 11 |
| Red – красный | 4 | LightRed – ярко-красный | 12 |
| Magenta – малиновый | 5 | LightMagenta – ярко-малиновый | 13 |
| Brown – коричневый | 6 | Yellow – желтый | 14 |
| LightGray – светло-серый | 7 | White – белый | 15 |
Пример.
PutPixel(320, 240, 4);
PutPixel(320,240, Red);
Выводит в центре экрана точку красного цвета
Двумерные массивы
Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:Var a: array [1..10] of array [1.. 20] of real;
Var a: array [1..10, 1..20] of real;
Чаще всего при описании двумерного массива используют второй способ. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индексов (первый индекс – номер строки, второй индекс – номер столбца). Все действия над элементами двумерного массива идентичны действиям над элементами линейного массива. Только для инициализации двумерного массива используется вложенный цикл for.
Например, For i:= 1 to 10 do
For j:= 1 to 20 do
A[i, j] := 0;
При организации вложенных (сложных) циклов необходимо учитывать:
Пример 1. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
Program Pifagor; Uses crt; Var p: array[1..9, 1..9] of integer; i, j:integer; Begin Clrscr; for i:=1 to 9 do for j:= 1 to 9 do p[i,j]:= i*j; for i:=1 to 9 do begin for j:=1 to 9 do write(p[i,j], ‘ ‘); writeln end; end.
Пример 2. Задан двумерный массив В(10, 10), заполненный случайными числами из
[-10,10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.
Program massiv; Uses crt; Var b: array[1..10, 1..10] of integer; i, j, k :integer; Begin Clrscr; for i:=1 to 10 do begin for j:= 1 to 10 do begin b [i,j]:= random(20)-10; write(b[i,j], ‘ ‘); end; writeln; end; write(‘Введите число k’); readln (k); For i:=1 to 10 do For j:=1 to 10 do If b[i, j] >k then write (b[i, j]); End.
| GetBkColor | Возвращает текущий фоновый цвет |
| GetColor | Возвращает текущий цвет |
| GetX | Возвращает координату X текущей позиции |
| GetY | Возвращает координату Y текущей позиции |
| GetPixel | Возвращает цвет точки в (x, y) |
Функции
Подпрограмма-функция обрабатывает данные, переданные ей из главной программы, и затем возвращает полученный результат (в отличие от процедуры). Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, имя, список формальных параметров (заключенный в скобки) и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре сходный с программой.Общий вид описания функции:
Function (): ;
Const …; u
… y блок описания
Var ….; u
begin
end;
В разделе операторов должен находиться, хотя бы один оператор, присваивающий имени функции значение. Обращение к функции осуществляется по имени с указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам и иметь тот же тип.
Пример 1. Найти значение следующего выражения: F(t) – F(c), где F(x)=Ox +2x2 +3x
Program m; Uses crt; Var t, c, r : real; Function F(x: real) : real; Begin F:= sqrt(x)+ 2*sqr(x) + 3*x; End; Begin Clrscr; Write(‘Введите числа’); Readln (t, c); r:= F(t) – F(c); write(‘результат =’, r:8:3); {8 символов на все число, 3 – на дробную часть} end.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max; Uses crt; Var a, b, c, d, m, p, q:real; Function Bid(x, y: real) : real; Begin If x>y then bid:=x else bid:=y; End; Begin Clrscr; Write(‘Введите числа’); Readln (a, b, c, d); p:=bid(a, b); q:= bid(c, d); m:=bid(p, q); write(‘наибольший элемент’, m:8:3); end.
| A | B | Not A | A and B | A or B | A xor B |
| T | T | F | T | T | F |
| T | F | F | F | T | T |
| F | F | T | F | F | F |
| F | T | T | F | T | T |
Приоритеты операций: not, and, or, xor. Операции отношения ( = , <> …) имеют более высокий приоритет, чем логические операции, поэтому их следует заключать в скобки при использовании по отношению к ним логических операций.
Пример. Составить программу, по которой будет выведено значение «истина», если точка с заданными координатами (x, y) лежит внутри некоторой области, и «ложь» – в противном случае. Область состоит из 2 частей: первая часть x ? 0; y ? -x-3 и y2 + x2 ? 9, вторая часть - x ? 0 и x2 + y2 ? 25.
Решение:
Данная область состоит из 2 частей.
1: x= - x-3.
2: x>=0; x2+y2
Точка с координатами (x,y) лежит в данной области, если она принадлежит 1 или 2 части.
Program point; Var x, y:real; L:boolean; Begin Writeln(‘Введите х и y’); Readln(x,y); L:= (x=-x-3) or (x>=0) and (sqr(x)+sqr(y)
Результатом выполнения программы будет:
Введите x и y
2 0 {с клавиатуры сами ввели через пробел 2 и 0}
Точка лежит в области?TRUE
Приоритет операций (в порядке убывания):
вычисление функции;
унарный минус, not;
умножение, деление, div, mod, and;
сложение, вычитание, or, xor;
операции отношения
Логический тип
Логический (булевский) тип boolean определяется двумя значениями: true (истина) и false (ложь). Он применяется в логических выражениях и выражениях отношения. Для размещения в памяти - 1 байт.| Absolute | Абсолютный | Library | Библиотека |
| And | Логическое И | Mod | Остаток от деления |
| Array | Массив | Not | Логическое НЕ |
| Begin | Начало блока | Or | Логическое ИЛИ |
| Case | Вариант | Of | Из |
| Const | Константа | Object | Объект |
| Div | Деление нацело | Procedure | Процедура |
| Go to | Переход на | Program | Программа |
| Do | Выполнять | Repeat | Повторять |
| Downto | Уменьшить до | String | Строка |
| Else | Иначе | Then | То |
| End | Конец блока | To | Увеличивая |
| File | Файл | Type | Тип |
| For | Для | Until | До |
| Function | Функция | Uses | Использовать |
| If | Если | Var | Переменная |
| Interrupt | Прерывание | While | Пока |
| Interface | Интерфейс | With | С |
| Label | Метка | Xor | Исключающее ИЛИ |
Группа слов, имеющая смысл, называется словосочетание. В языке программирования словосочетание, состоящее из слов и символов и задающее правило вычисления некоторого значения, называется выражением. Минимальная конструкция языка, представляющая законченную мысль, есть предложение. Если предложение языка программирования задает полное описание действия, которое необходимо выполнить, то оно называется оператором. Предложение, описывающее структуру и организацию данных, называется описанием.
Общие сведения
Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке Турбо Паскаль представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Эти операторы можно разделить на три группы: составные, условные и повтора.Одномерные массивы
Линейный (одномерный) массив – массив, у которого в описании задан только один индекс, если два индекса – то это двумерный массив и т.д. Одномерные массивы часто называют векторами, т.е. они представляют собой конечную последовательность пронумерованных элементов.Присваивание начальных значений (заполнение массива) заключается в присваивании каждому элементу массива некоторого значения, заданного типа. Наиболее эффективно эта операция осуществляется при помощи оператора for. Ввод данных может осуществляться : с клавиатуры, при помощи различных формул, в том числе и датчика случайных чисел.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.
Алгоритм решения задач с использованием массивов:
Program massiv; Uses crt; Var b:array [1..10] of integer; I, k, s : integer; Begin Clrscr; S:=0; For i:=1 to 10 do Begin Write(‘Введите’, i, ‘-й элемент массива ’); Readln (B[i]); Write(b[i], ‘ ‘); End; Write(‘Введите число k’); Readln(k); For i:=1 to 10 do If b[i]>k then s:=s+1; Write(‘Количество элементов’, s); End.
Пример 2. Определить самую высокую температуру и самый теплый день в мае.
Program massiv; Uses crt; Var t:array [1..31] of integer; I, max, n : integer; Begin Clrscr; For i:=1 to 31 do Begin t[i]:=random(20); Write(b[i], ‘ ‘); End; Max:=t[1]; n:=1; For i:=2 to 31 do Begin If t[i] > max then max:=t[i]; n:=i ; End; Write(‘максимальная температура’, max, ‘в’, n, ‘день’); End.
Операции отношения
Операции отношения выполняют сравнение двух операндов и определяют, истинно значение или ложно. Сравниваемые величины могут принадлежать к любому типу данных, и результат всегда имеет логический тип, принимая одно значение из двух: истина или ложь.| Операция | Название | Выражение |
| = | Равно | А=В |
| Неравно | А | |
| > | Больше | A>B |
| < | Меньше | A |
| >= | Больше или равно | A>=B |
| Меньше или равно | A |
Оператор безусловного перехода
Оператор безусловного перехода (go to) означает «перейти к» и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой, оператор. Общий вид: go to .Метка объявляется в разделе описания меток и состоит из имени и следующего за ним двоеточия. Имя метки может содержать цифровые и буквенные символы, максимальная длина имени ограничена 127 знаками. Раздел описания меток начинается зарезервированным словом Label, за которым следует имя метки.
Пример.
Program primer;
Label 999, metka;
Begin
….
Go to 999;
…
999: write (‘ Имя’);
…
Go to metka;
….
Metka: write(‘Фамилия’);
…
end.
Использование безусловных передач управления в программе считается теоретически избыточным и подвергается критике, так как способствует созданию малопонятных и трудномодифицируемых программ, которые вызывают сложности при отладке. Поэтому рекомендуется минимальное использование оператора безусловного перехода с соблюдением следующих правил:
Оператор присваивания
Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке Турбо Паскаль представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Эти операторы можно разделить на три группы: составные, условные и повтора.Оператор вызова процедуры
Оператор вызова процедуры служит для активизации стандартной процедуры или процедуры, определенной пользователем. Стандартные процедуры находятся в файлах, подключаемых модулем и для их использования достаточно указать имя процедуры, и если необходимо дополнительные параметры. Для того, чтобы вызвать свою процедуру, ее для этого надо описать перед началом программы (begin), а затем уже использовать.Например, ClrScr; {Вызов стандартной процедуры очистки экрана}.
Операторы повтора (цикла)
Если в программе возникает необходимость неоднократного выполнения некоторых операторов, то для этого используются операторы повтора (цикла). В языке Паскаль различают три вида операторов цикла: цикл с предусловием (while), цикл с постусловием (repeat) и цикл с параметром (for).Если число требуемых повторений заранее известно, то используется оператор, называемый оператором цикла с параметром.
Оператор цикла с параметром имеет два варианта записи:
1) for := to do
2) for := downto do
Имя переменной – параметр цикла, простая переменная целого типа; - операторы или оператор. Цикл повторяется до тех пор пока значение параметра лежит в интервале между начальным и конечным значениями. В первом варианте при каждом повторении цикла значение параметра увеличивается на 1, во втором - уменьшается на 1.
При первом обращении к оператору for вначале определяются начальное и конечное значения, и присваивается параметру цикла начальное значение. После этого циклически повторяются следующие действия.
1. Проверяется условие параметр цикла
2. Если условие выполнено, то оператор продолжает работу (выполняется оператор в теле цикла), если условие не выполнено, то оператор завершает работу и управление в программе передается на оператор, следующий за циклом.
3. Значение параметра изменяется (увеличивается на 1 или уменьшается на 1).
Если в теле цикла располагается более одного оператора, то они заключаются в операторные скобки begin … end;
Пример 1. Вывести на экран таблицу перевода из градусов по шкале Цельсия в градусы по Фаренгейту для значений от 15°С до 30°С с шагом в 1°С. Перевод осуществляется по формуле: F=C*1.8+32.
Program zf; Var i:integer; f:real; Begin Writeln(‘Температура’); For i:=15 to 30 do Begin F:=i*1.8+32; Writeln(‘по Цельсию’, i, ‘по Фаренгейту’, f:5:2); End; End.
Пример 2. Вывести на экран натуральные числа от 1 до 9 в обратном порядке.
Program z; Var i:integer; Begin For i:=9 downto 1 do Writeln(i); End.
Если число повторений заранее неизвестно, а задано лишь условие его повторения (или окончания), то используются операторы while и repeat. Оператор While часто называют оператором цикла с предусловием. Так как проверка условия выполнения цикла производится в самом начале оператора.
Общий вид:
While do
;
Тело цикла – простой или составной оператор или операторы. Если операторов в теле цикла несколько, то тело цикла заключается в операторные скобки begin…end.
Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат – «истина», тело цикла выполняется и снова вычисляется выражение условия. Если результат–«ложь», происходят выход из цикла и переход к первому после while оператору.
Пример. Найти сумму 10 произвольных чисел.
Program z; Const N=10; Var k, x, s: integer; Begin k:=0; s:=0; {k- количество введенных чисел} while k < n do begin k:=k+1; write(‘Введите число’); readln(x); s:=s+x; end; writeln(‘Сумма чисел равна’, s); end.
Оператор цикла repeat аналогичен оператору while, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения операторов тела цикла и таким образом гарантируется хотя бы однократное выполнение цикла. Во-вторых, тем, что критерием прекращения цикла является равенство выражения константе true . За это данный оператор часто называют циклом с постусловием, так как он прекращает выполняться, как только условие, записанное после слова until, выполнится. Оператор цикла repeat состоит из заголовка, тела и условия окончания.
Общий вид:
Repeat
. . . . .
until
Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. В любом случае этот цикл выполняется хотя бы один раз. Если условие не выполняется, т.е. результатом выражения является False, то цикл активизируется еще раз. Если условие выполнено, то происходит выход из цикла. Использования операторных скобок, в случае, если тело цикла состоит из нескольких операторов, не требуется.
Пример. Составить программу, которая вводит и суммирует целые числа. Если введено значение 999, то на экран выводится результат суммирования.
Program s; Var x, s:integer; Begin S:=0; Repeat Write(‘Ввести число’); Readln(x); If x<>999 then s:=s+x; Until x=999; Writeln(‘Сумма введенных чисел’, s); End.
| Параметр | Значение | Комментарий |
| Горизонтальное выравнивание | ||
| LeftText | 0 | Выровнять влево |
| CenterText | 1 | Центрировать |
| RightText | 2 | Выровнять вправо |
| Вертикальное выравнивание | ||
| BottomText | 0 | Переместить вниз |
| CenterText | 1 | Центрировать |
| TopText | 2 | Переместить вверх |
В качестве примера выведем x2:
SetTextJustify(1, 1);
OutTextXY(100,100, ‘X’);
SetTextJustify(1, 0);
OutTextXY(108,100, ‘2’);
| Процедура | Формат | Действие |
| SetColor | SetColor (a: word); | Устанавливает цвет, которым будет осуществляться рисование |
| SetBkColor | SetBkColor (a: word); | Устанавливает цвет фона |
| SetFillStyle | SetFillStyle (a,b: word); a – стиль закраски, b – цвет | Устанавливает стиль и цвет закраски |
| SetLineStyle | SetLineStyle (a,b,c: word); а – стиль линии, b- образец построения линии (может устанавливаться пользователем), с-толщина линии | Устанавливает стиль и толщину линии |
| SetTextStyle | SetTextStyle (a,b,c: word); | Устанавливает шрифт, стиль и размер текста |
| SetFillPattern | SetFillPattern (Pattern: FillpatternType; Color:word); Pattern- маска | Выбирает шаблон заполнения, определенный пользователем |
| ClearDivice | ClearDivice | Очищает экран и устанавливает текущий указатель в начало |
| SetViewPort | SetViewPort (x1, y1 , x2, y2 : integer, Clip:boolean); | Устанавливает текущее окно для графического вывода |
| ClearViewPort | ClearViewPort | Очищает окно |
| PutPixel | PutPixel (a,b,c :integer); | Рисует точку цветом с в (x,y) |
| Line | Line(x1, y1 , x2,y2 :integer); | Рисует линию от (x1, y1) к (x2,y2) |
| Rectangle | Rectangle (x1, y1 , x2, y2:integer ); | Рисует прямоугольник с диагональю от (x1, y1) к (x2, y2) |
| Bar | Bar (x1, y1 , x2, y2:integer); | Рисует закрашенный прямоугольник |
| Bar3D | Bar3D (x1, y1 , x2,y2, d:integer, a:boolean); | Рисует трехмерную полосу (параллелепипед) |
| Circle | Circle (x,y,r: word); | Рисует окружность радиуса r с центром в точке (x, y) |
| Arc | Arc(x, y, a, b, R:integer); a, b- начальный и конечный углы в градусах | Рисует дугу из начального угла к конечному, используя (x,y) как центр |
| Ellipse | Ellipse (x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах | Рисует эллиптическую дугу от начального угла к конечному, используя (x, y) как центр |
| FillEllipse | FillEllipse (x, y, Rx, Ry:integer); Rx, Ry – вертикальная и горизонтальная оси | Рисует закрашенный эллипс |
| MoveTo | MoveTo (x, y:integer); | Передвигает текущий указатель в (x, y) |
| MoveRel | MoveRel(x, y : integer); | Передвигает текущий указатель на заданное расстояние от текущей позиции на x по горизонтали и на y по вертикали |
| OutText | OutText (text: string); | Выводит текст от текущего указателя |
| OutTextxy | OutTextxy(x, y: integer, text: string); | Выводит текст из (x, y) |
| Sector | Sector(x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах | Рисует и заполняет сектор эллипса |
Процедуры
Для использования подпрограммы-процедуры необходимо сначала описать процедуру, а затем обращаться к ней (обращение к процедуре – отдельный оператор). Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, имени процедуры и, заключенного в скобки, списка формальных параметров с указанием типа. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут поставлены конкретные значения. Тело процедуры – блок, по структуре аналогичный программе.При создании программ, использующих процедуры, следует учитывать, что все объекты, которые описываются после заголовка в теле процедуры, называются локальными объектами и доступны только в пределах этой процедуры.
Все объекты, описанные в вызывающей программе, называются глобальными и являются доступными внутри процедур, вызываемых этой программой.
Общий вид описания процедуры:
Procedure (список формальных параметров, блок описания);
Const …; u
… y блок описания
Var ….; u
begin
end;
Пример 1. Вывести по четырем углам экрана свое имя цветными буквами, можно с эффектом мерцания.
Program names; Uses crt; Procedure name(x, y, c: byte, ); Begin Gotoxy (x, y); Textcolor(c); {textcolor (c+16);} Write(‘Имя’); end; begin Clrscr; {очистка экрана} name (2,2, 14); name (2, 22, 8); name (75,2, 3); name (75, 22, 5); End.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max; Uses crt; Var a, b, c, d, m, p, q:real; Procedure Bd(x,y:real, var z: real); Begin If x>y then z:=x else z:=y; end; begin Clrscr; {очистка экрана} Write(‘Введите числа’); Readln(a,b,c,d); Bd (a, b, p); Bd (c, d, q); Bd (p, q, m); Writeln(‘наибольший элемент’, m:8:3); End.
Пустой оператор
Пустой оператор не содержит никаких символов и не выполняет никаких действий. Используется для организации перехода к концу блока в случаях, если необходимо пропустить несколько операторов, но не выходить из блока. Для этого перед зарезервированным словом end ставятся метка и двоеточие, например:Label m;
…
begin
…
go to m;
…
m:
end;
| Константа | Значение | Операция | Пояснения |
| NormalPut | 0 | Замена существующего на копию | Стирает часть экрана и на это место помещает копию |
| XorPut | 1 | Исключительное или | Рисует сохраненный образ или стирает ранее нарисованный, сохраняя фон |
| OrPut | 2 | Объединительное или | Накладывает сохраненный образ на существующий |
| AndPut | 3 | Логическое и | Объединяет сохраненный образ и уже существующий на экране |
| NotPut | 4 | Инверсия изображения | То же самое, что и 0, только копия выводится в инверсном виде |
program NLO;
uses crt, graph;const
k=20; Pause=50;
var
gd, gm, xmin, xm, ymin, ym, x, y, tx, ty, rx, ry, size, i, dx, dy, width, height: integer;
sauser:Pointer;
begin
Randomize;
gd:= detect; initgraph(gd, gm, ‘путь к драйверу’);
SetTextStyle(0, 0, 2); OutTextXY(50, 10, ‘Демонстрация движения НЛО’);
{Рисуем НЛО}
x:=R*5; y:=R*2; xm:=GetmaxX- 5; ym:=GetmaxY-25;
Ellipse(x, y, 0, 360, R, R div 3+2);
Ellipse(x, y-4, 190, 357, R, R div 3);
Line(x + 7, y - 6, x + 10, y - 12);
Line(x -7, y - 6, x + 10, y - 12);
Circle(x + 10, y - 10, 2);
Circle(x -10, y - 10, 2);
FloodFill(x+1, y+4, White);
{определяем габариты НЛО и помещаем в специальную динамическую переменную}
Tx:= x-R; Ty:=y-14; Rx:;=x+R; Ry:=y+R div3 +3;
Width:=Rx-Tx+1; Size:=ImageSize(Tx, Ty, Rx, Ry);
GetMem(sauser, Size);
GetImage(Tx, Ty, Rx, Ry, sauser^);
{стираем построенное изображение}
PutImage(Tx, Ty, sauser^, XorPut);
{рисуем звездное небо}
SetStyle(1, blue); {установить стиль и цвет закраски голубое небо}
SetColor(White);
{начертить прямоугольник и открыть окно}
Rectangle(xmin, ymin, GetmaxX, GetmaxY);
SetViewPort(xmin, ymin, GetmaxX, GetmaxY, ClipOn);
FloodFill(xmin+1, ymin+1, White);
For i:=1 to 500 do {нарисовать 500 звезд белого цвета}
PutPixel(Random(GetmaxX), Random(GetmaxY- ymin), 15);
{задаем начальное положение НЛО}
x:=xm div 3 – xmin; y:=ym div 3 – ymin; dx:=6; dy:=6;
Repeat {цикл: повторять, пока не нажата любая клавиша}
PutImage(x, y, sauser^, XorPut); {изображаем объект}
Delay (Pause);{ задержка}
PutImage(x, y, sauser^, XorPut); {после паузы стираем объект}
{перемещаем объект}
If (x xm) Or (y+Height +1> ym) Then
begin {если объект смещается влево- вверх за границы окна, изменить координаты так, чтобы он оставался в окне}
If (x- Dx< xmin) then x:= xmin else x := x- Dx;
If (y- Dy< ymin) then y:= ymin else y := y- Dy;
Dx:= GetmaxX div 10 -
| Обращение | Тип аргумента | Тип результата | Функция |
| Abs(x) | Целый, вещественный | Целый, вещественный | Модуль аргумента |
| Arctan(x) | Целый, вещественный | Вещественный | Арктангенс |
| Cos(x) | Целый, вещественный | Вещественный | Косинус |
| Exp(x) | Целый, вещественный | Вещественный | ех - экпонента |
| Frac(x) | Целый, вещественный | Вещественный | Дробная часть х |
| Int(x) | Целый, вещественный | Вещественный | Целая часть х |
| Ln(x) | Целый, вещественный | Вещественный | Натуральный логарифм |
| Random | - | Вещественный | Псевдослучайное число [0,1] |
| Random(x) | Целый | Целый | Псевдослучайное число [0,х] |
| Round(x) | Вещественный | Целый | Округление до ближайшего целого |
| Sin(x) | Целый, вещественный | Вещественный | Синус |
| Sqr(x) | Целый, вещественный | Вещественный | Квадрат х |
| Sqrt(x) | Целый, вещественный | Вещественный | Корень квадратный из х |
| Trunc(x) | Вещественный | Целый | Ближайшее целое, не превышающее х по модулю |
Стандартные шрифты
| Шрифт | Файл |
| TriplexFont | Trip.chr |
| SmallFont | Litt.chr |
| SansSerifFont | Sans.chr |
| GothicFont | Goth.chr |
Большинство стандартных шрифтом не содержат русских символов. Разработка же собственных шрифтов – довольно сложный и трудоемкий процесс. Он может быть ускорен, если воспользоваться специализированными пакетами TurboFont, BgiToolKit.
Установить нужный шрифт можно процедурой SetTextStyle(Font,d,c:word), где Font – выбранный шрифт, d – направление ( горизонтальное или вертикальное), с – размер выводимых символов. Возможные значения двух первых параметров представлены в таблице 5. При организации вертикального вывода необходимо учитывать, что если не установить точку начала вывода с помощью MoveTo, то текст начинается с нижней строки экрана и продолжается вверх. Величина символов устанавливается коэффициентом с. Если с=1, то символ строится в матрице 8?8, если с= 2, то матрица 16?16 и т.д. до 10-кратного увеличения.
Например выведем 2 строки (вертикальную и горизонтальную) шрифтом DefaultFont разной величины:
SetTextStyle(0,11); {буквы стандартной величины}
OutTextXY(200,200, ‘Вертикальная строка’);
SetTextStyle(0,0,2); {размер букв увеличен}
OutTextXY(200,220, ‘Горизонтальная строка’);
Стандартные стили заполнения
| Константа | Значение | Маска |
| EmptyFill | 0 | Заполнение цветом фона |
| SolidFill | 1 | Заполнение текущим цветом |
| LineFill | 2 | Заполнение символами --, цвет – color |
| LtslashFill | 3 | Заполнение символами // нормальной толщины, цвет – color |
| SlashFill | 4 | Заполнение символами // удвоенной толщины, цвет – color |
| BkslashFill | 5 | Заполнение символами \\ удвоенной толщины, цвет – color |
| LtbkSlahFill | 6 | Заполнение символами \\ нормальной толщины, цвет – color |
| HatchFill | 7 | Заполнение вертикально-горизонтальной штриховкой тонкими линиями, цвет – color |
| XhatchFill | 8 | Заполнение штриховкой крест-накрест по диагонали «редкими» тонкими линиями, цвет – color |
| InterLeaveFill | 9 | Заполнение штриховкой крест-накрест по диагонали «частыми» тонкими линиями, цвет – color |
| WideDotFill | 10 | Заполнение «редкими» точками |
| CloseDotFill | 11 | Заполнение «частыми» точками |
| UserFill | 12 | Заполнение по определенной пользователем маске заполнения, цвет – color |
Для построения секторов можно использовать следующие процедуры:
PieSlice (x, y: integer, a, b, R: word), которая рисует и заполняет сектор круга. Координаты x, y – центр окружности, сектор рисуется от начального угла a до конечного угла b, а закрашивание происходит при использовании специальных процедур;
Sector (x, y: integer, a, b, Rx, Ry: word), которая создает и заполняет сектор в эллипсе. Координаты x, y – центр, b, Rx, Ry – горизонтальный и вертикальный радиусы, и сектор вычерчивается от начального угла a до конечного угла b.
Пример использования PieSlice:
SetFillStyle(10, 10); {установка стиля}
SetColor(12); {цвет вычерчивания}
PieSlice(100, 100, 0, 90, 50);
Пример использования Sector:
SetFillStyle(11, 9); {установка стиля}
SetColor(LightMagenta); {цвет вычерчивания}
Sector(300, 150, 180, 135, 60, 70);
Строковые величины
Строка (строковый тип данных) – это последовательность символов кодовой таблицы ПК. Количество символов в строке (длина строки) может лежать в диапазоне от 0 до 255. Для определения данных строкового типа используется идентификатор string, за которым следует значение максимальной длины строки данного типа (заключается в квадратные скобки).Строковые данные могут использоваться в качестве констант. Строковая константа – последовательность символов, заключенная в апострофы. Например, ‘237’, ‘это строковая константа’.
Переменную строкового типа можно определить в разделе описания переменных:
Var : string[].
Например, var Name: string[20]. В описании строки можно не указывать длину, в этом случае она равна максимальной величине – 255. Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, N[5]. Первый символ строки имеет номер 1 и т.д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.
Выражения, в которых операндами служат строковые данные, называются строковыми. Они могут состоять из строковых констант, переменных, знаков операций. Над этими данными допустимы операция сцепления (конкатенация) и операции отношения.
Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно и константы, и переменные. Длина результирующей строки не должна превышать 255 символов.
Операции отношения (=, <>, >, =) проводят сравнение двух строк и имеют приоритет более низкий, чем операция конкатенации. Сравнение строк производится слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.
Например, ‘MS-DOS’
Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.
Например, ‘Компьютер’
Строки равны, если они полностью совпадают.
Например, ‘Маска’ = ’Маска’.
Для обработки строковых данных можно использовать специальные процедуры и функции.
Процедура Delete(St, poz, n) – удаление n символов строки St, начиная с позиции Poz.
Процедура Insert (S1, S2, Poz) – вставка строки S1 в строку S2, начиная с позиции Poz.
Процедура Str(N,St) – преобразование числового значения N в строковый и помещение результата в строку St.
Процедура Val(St, N,Code) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в N. Code – целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно 0, если же обнаружена ошибка, то Code будет содержать номер позиции первого ошибочного символа, а значение N не определено.
Функция Copy(S, Poz, N) – выделяет из строки S подстроку длиной N символов, начиная с позиции Poz.
Функция Concat(S1,S2,…,Sn) – выполняет сцепление строк S1,S2,…,Sn в одну строку.
Функция Length(S) – определяет текущую длину строки S.
Функция Pos(S1,S2) – определяет первое появление в строке S2 подстроки S1.
Функция UpCase (ch) – преобразует строчную букву в прописную.Обрабатывает буквы только латинского алфавита
Пример. Из данной символьной строки выбрать все цифры и сформировать другую строку из этих цифр, сохранив их последовательность.
Program Stroki; Var S1, S2:string; Begin Write(‘Введите строку’); Readln(S1); S2:= ‘ ‘; For i:=1 to length(S1) do If (S1[i]>=’0’) and (S1[i]
| Константа | Значение | Описание |
| SolidLn | 0 | Непрерывная линия |
| DottedLn | 1 | Линия из точек |
| CenterLn | 2 | Линия из точек и тире |
| DashedLn | 3 | Штриховая линия |
| UserBitLn | 4 | Тип пользователя |
Написать программу, которая вычерчивает треугольник
| Константа | Значение | Описание |
| NormWidth | 1 | Нормальная толщина (1 пиксель) |
| ThickWidth | 3 | Жирная линия (3 пикселя) |
Program treug;
uses graph; { подключение библиотеки графических процедур}
var gd,gm: integer; {описание переменных, определяющих графический драйвер и монитор}
begin
gd:=detect; {определение значений переменных по выбору ПК}
initgraph(gd, gm, ‘ c/bp’); {инициализация графического режима}
SetColor(4); {задание цвета линии}
SetLineStyle(1,0,3); {задание стиля линии}
Line(320, 240, 320, 180);
Line(320, 240, 390, 240);
Line(390, 240, 320, 180);
end.
| Тип | Диапазон | Мантисса | Требуемая память (байт) |
| Real Single Double Extended Comp | 2.9*10E-39 … 1.7*10E38 1.5*10Е-45 … 3.4*10Е38 5.0*10Е-324 … 1.7*10Е308 1.9*10Е-4951 … 1.1*10Е4932 -2Е+63+1 … 2Е+63-1 |
11 – 12 7 – 8 15 – 16 19 – 20 10 – 20 |
6 4 8 10 8 |
Примечание. Все вещественные типы, кроме Real, могут быть использованы в программе при наличии в ПК математического сопроцессора Intel 8087/80287.
Действительные числа с фиксированной точкой записываются по обычным правилам арифметики, только целая часть от дробной отделяется точкой. Если точка отсутствует, число считается целым. Перед числом может стоять знак «+» или «-». Если знака нет, то число считается положительным.
Числа в форме с плавающей точкой представляются в экспоненциальном виде: mE+p, где m – мантисса (целое или дробное число), Е означает 10 в степени, р – порядок (целое число).
Например, 5.18Е+2 = 5.18 * 102 = 518
10Е-03 = 10 * 10 –3 = 0.01
Ввод данных с клавиатуры
Процедура чтения Read обеспечивает ввод данных для последующей их обработки программой. Общий вид: Read ();В списке перечисляются имена переменных. Значения этих переменных набираются через пробел на клавиатуре и высвечиваются на экране после запуска программы. После набора данных для одной процедуры Read нажимается клавиша ввода Enter. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено, то возникают ошибки.
Процедура чтения Readln аналогична процедуре Read, единственное отличие в том, что после считывания последнего в списке значения курсор переходит на начало новой строки.
Пример:
Program primer;
Var i, k:integer; c,d, s: real;
begin
readln (c,d);
read(i,k);
…
end.
В данном случае необходимо ввести сначала два действительных числа через пробел. Переменной с присваивается значение, равное первому введенному числу, а переменной d – значение, равное второму введенному числу. После ввода этих значений курсор переходит на начало новой строки (за это отвечает ln следующий за словом Read). Далее требуется ввести еще два целых числа, которые будут присвоены значениям переменных i и k соответственно.
Ввод и вывод данных
Решение даже самой простой задачи на компьютере не обходится без операций ввода – вывода информации. Ввод данных – это передача информации от внешнего носителя в оперативную память для обработки. Вывод - обратный процесс, когда данные передаются после обработки из оперативной памяти на внешний носитель (экран монитора, принтер, дискету или винчестер и другие устройства). Выполнение этих операций производится путем обращения к стандартным процедурам: Read, Readln, Write, Writeln.Выравнивание текста
В некоторых случаях требуется в пределах одной строки выводить символы выше или ниже друг друга. Выравнивание текста выполняется с помощью процедуры SetTextJustify(Horiz, Vert : word) как по вертикали, так и по горизонтали посредством задания параметров Horiz и Vert (возможные значения в таблице 6).Вывод численных значений
В модуле Graph нет процедур, предназначенных для вывода численных данных. Поэтому для вывода чисел сначала нужно преобразовать их в строку с помощью процедуры Str, а затем подключить посредством ‘+’ к выводимой строке.Например: Max:=34.56;
Str(Max : 6 : 2, Smax);{результат преобразования находится в Smax}
OutTextXY(400, 40, ‘Максимум=’ + Smax);
Для удобства преобразование целочисленных и вещественных типов данных в строку лучше осуществлять специализированными пользовательскими функциями IntSt и RealSt:
function IntSt(Int: integer) : string; var Buf : string[10]; begin Str(Int, Buf); IntSt := Buf; end; function RealSt(R : real, Dig, Dec : integer) : string; var Buf: string[20]; begin Str(R : Dig : Dec, Buf); RealSt := Buf; end;
Эти функции указываются как параметры в процедурах OutText и OutTextXY. Например: x:= 5.295643871;
OutTextXY(20, 20, ‘x=’+RealSt(x,11,9));
В результате на экране появится x=5.29564443871
Вывод данных
Процедура вывода Write производит вывод данных.Общий вид: Write();
В списке вывода могут быть представлены выражения допустимых типов данных (integer, real, char и т.д.) и произвольный текст, заключенный в апострофы.
Например, Write(‘Привет’); Write(34.7); Write(45+55); Write(b, d);
Процедура Writeln аналогична процедуре Write. Отличие в том, что после вывода последнего в списке выражения курсор переходит на начало новой строки.
В процедурах вывода Write и Writeln имеется возможность записи выражения, определяющего ширину поля вывода.
При рассмотрении форматов вывода примем следующие обозначения:
I, p, q – целочисленное выражение;
R - выражение вещественного типа;
# - цифра;
* - знак «+» или «- »;
_ - пробел.
| Значение I Выражение Результат | 324 Write (I); 324 | 34 Write (I, I, I); 343434 | 324 Write (I : 6); ___324 | 312 Write (I + I : 7); ____624 |
| Значение R Выражение Результат | 123.432 Write (R); __1.2343200000E+02 | -1.34E+01 Write (R); _ -1.3400000000E+01 | 304.55 Write (R :15); 3.045500000E+02 | |
| Значение R Выражение Результат | 304.66 Write (R :8 : 4); 304.6600 | 45.322 Write (R : 5 : 2); 45.32 |
Пример:
Program primer;
Var
a, b, c, sum:integer;
begin
a:=4; b:=6; c:=55;
Write(a:3); Write(b:3); Write(c:3);
Sum:=a+b+c;
Writeln (‘A=’,a);
Writeln (‘B=’,b);
Writeln (‘C=’,c);
Writeln (‘Сумма A+B+C равна ’, sum);
End.
Результат выполнения:
4 6 55
А=4
В=6
С=55
Сумма А+В+С равна 65
Программирование: Языки - Технологии - Разработка