Turbo Pascal (Borland Pascal) 7.0. Руководство пользователя

Алфавит и словарь языка Паскаль

Большинство программ создаются для решения какой-либо задачи. В процессе ее решения на ПК необходимо: ввести данные, указать способ их обработки, задать способ вывода полученных результатов. Поэтому нужно знать следующее:

  • Как ввести информацию в память (ввод).
  • Как хранить информацию в памяти (данные).
  • Как указать правильные команды для обработки данных (операции).
  • Как передать данные из программы пользователю (вывод).

  • Необходимо также уметь упорядочивать команды так, чтобы:
  • некоторые из них выполнялись только в случае, если соблюдается некоторое условие или ряд условий (условное выполнение);

  • другие выполнялись повторно некоторое число раз (циклы);

  • третьи выделялись в отдельные части, которые могут быть неоднократно выполнены в разных местах программы (подпрограммы).

  • Таким образом, нужно уметь использовать семь основных элементов программирования: ввод, данные, операции, вывод, условное выполнение, циклы и подпрограммы и на их основе строить программы.

    Это список не является полным, однако, он содержит те элементы, которые присущи обычно всем программам. Многие языки программирования имеют еще и дополнительные средства, в том числе и Паскаль.

    Основные файлы пакета Турбо Паскаль:
  • Turbo.exe – интегрированная среда программирования;

  • Turbo.hlp – файл, содержащий данные для оперативной подсказки;

  • Turbo.tp – файл конфигурационной системы;

  • Turbo.tpl – библиотека стандартных модулей Турбо Паскаля.

  • Для работы в графическом режиме необходимы Graph.tru – модуль с графическими процедурами и функциями Турбо Паскаля, несколько файлов с расширением *.BGI – драйверы различных типов видеосистем ПК, несколько файлов с расширением *.CHR, содержащих векторные шрифты.

    После загрузки системы экран разделен на три части: основное (или рабочее) окно, главное меню и строка, в которой указывается назначение основных функциональных клавиш. Переход из основного окна в главное меню и обратно осуществляется посредством клавиши F10.

    В рабочем окне осуществляется набор текста программы, запуск же происходит следующим образом: выход в меню, выбор пункта Run – Run.

    Для того чтобы сохранить программу, необходимо: выйти в меню, выбрать File – Save (Save as …), в появившемся окне ввести имя файла и нажать клавишу Enter.

    Выход из системы программирования: выход в меню, пункт File – Exit.

    Язык – совокупность символов, соглашений и правил, используемых для общения. При записи алгоритма решения задачи на языке программирования необходимо четко знать правила написания и использования языковых единиц. Основой любого языка является алфавит (набор знаков, состоящий из букв, десятичных и шестнадцатеричных цифр, специальных символов).

    Алфавит Паскаля составляют:
  • прописные и строчные буквы латинского алфавита: A, B, C…Y, Z, a, b, c,…y, z ;

  • десятичные цифры: 0, 1, 2,…9;

  • специальные символы: + - * / > < = ; # ‘ , . : {} [] ( )

  • комбинации специальных символов , которые нельзя разделять пробелами, если они используются как знаки операций: «:=», «..», «<>», «=», «{}».

  • Неделимые последовательности знаков алфавита образуют слова, отделенные друг от друга разделителями. Ими могут быть пробел, комментарий или символ конца строки. Словарь Паскаля можно разделить на три группы слов: зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.


  • Зарезервированные слова (см таб.1) имеют фиксированное написание и навсегда определенный смысл. Они не могут изменяться программистом и их нельзя использовать в качестве имен для обозначения величин.

    Идентификатор – имя (identification – установление соответствия объекта некоторому набору символов). Для обозначения определенных разработчиками языка функций, констант и т.д. служат стандартные идентификаторы, например Sqr, Sqrt и т.д. В этом примере Sqr вызывает функцию, которая возводит в квадрат данное число, а Sqrt – корень квадратный из заданного числа. Пользователь может переопределить любой стандартный идентификатор, но чаще всего это приводит к ошибкам, поэтому на практике их используют без изменения. Идентификаторы пользователя – это те имена, которые дает сам программист. При записи программ нужно соблюдать общие правила написания идентификаторов:
  • Идентификатор начинается только с буквы (исключение составляют специальные идентификаторы меток).

  • Идентификатор может состоять из букв, цифр и знака подчеркивания.

  • Максимальная длина – 127 символов.

  • При написании идентификаторов можно использовать прописные и строчные буквы.

  • Между двумя идентификаторами должен стоять хотя бы один пробел.


  • Арифметические операции и стандартные функции

    Арифметические операции и стандартные функции Арифметическим называется выражение, составленное из операндов – величин, над которыми производится операция, скобок и знаков операций. В результате вычисления выражения получается значение определенного типа. Порядок вычисления выражения определяется скобками и старшинством операций. Они делятся на арифметические, отношения, логические и другие. Операции могут быть унарными и бинарными.

    Арифметические операции


    Операция Действие Тип операндов Тип результата
    Бинарные
    + Сложение Целый, вещественный Целый, вещественный
    - Вычитание Целый, вещественный Целый, вещественный
    * Умножение Целый, вещественный Целый, вещественный
    / Деление Целый, вещественный Вещественный
    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.


    Функции модуля Graph


    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.


    Графика в Турбо Паскале

    Экран дисплея ПК представляет собой прямоугольное поле, состоящее из большого количества точек. Дисплей может работать в текстовом и графическом режимах. Но в отличие от текстового режима в графическом режиме имеется возможность изменять цвет каждой точки.


    Чтобы сделать процесс графического программирования более эффективным, фирма Borland International разработала специализированную библиотеку Graph (в этом библиотечном модуле содержится 79 графических процедур, функций, различных стандартных констант и типов данных), набор драйверов, позволяющих работать с разными типами мониторов, и набор шрифтов для вывода на графический экран текстов разной величины и формы.


    Аппаратная поддержка графики ПК обеспечивается двумя основными модулями: видеомонитором и видеоадаптером. Какой бы адаптер ни был установлен на компьютере, мы можем использовать один и тот же набор графических процедур и функций Турбо Паскаля благодаря тому, что их конечная настройка на конкретный адаптер осуществляется автоматически. Эту настройку выполняют графические драйверы.


    Запуск и завершение работы в графической системе осуществляется следующим образом:


    1. Подключить модуль Graph (библиотеку графических процедур): normal">uses Graph;


    2. Установить графический режим:

    - описываем переменные, которые определяют графический драйвер и монитор:

    var gd, gm: integer;

    - задаем команду ПК для самовыбора значений переменных:

    gd:=Detect;(значение gm после команды gd:=detect; определяется автоматически)

    - инициализируем графический режим:

    InitGraph( gd, gm,’ указывается путь к драйверу, чем подробнее, тем лучше’)

    С этого момента все графические средства доступны пользователю.


    3. Завершить работу в графической системе: CloseGraph;

    Экран и окно в графическом режиме

    По аналогии с текстовыми режимами графический экран может рассматриваться как одно большое или несколько меньших по размеру окон. После установки окна вся остальная площадь экрана как бы не существует, и весь ввод-вывод осуществляется только через окно. В каждый отдельный момент может быть активным только одно окно. Если окон несколько, за переключение ввода-вывода в нужное окно отвечает программист.

    По умолчанию окно занимает весь экран, значения координат его левого верхнего и правого нижнего угла устанавливаются автоматически процедурой инициализации InitGraph.

    Если требуется создать окно, следует воспользоваться процедурой SetViewPort (x1, y1, x2, y2 : integer, Clip:boolean) ; где x1, y1 – координаты левого верхнего угла, x2, y2 –
    координаты правого нижнего угла окна. Параметр Clip определяет, будет ли рисунок отсекаться при выходе за границы окна (Clip:= True) или нет (Clip:=False). После создания окна за точку отсчета принимается верхний левый угол окна, имеющий координаты (0,0).

    Координатную систему полного экрана можно восстановить, в частности, с помощью ClearDevice или задав в процедуре установки окна максимально возможные значения:

    SetViewPort( 0, 0, GetMaxX, GetMaxY, true);

    Необходимо помнить, что в отличие от текстовых окон графические окна после команды установки фона SetBkColor и очистки с помощью ClearViewPort меняют фон вместе с общим фоном экрана. Поэтому фон (точнее «закраску») графического окна следует устанавливать с помощью процедур SetFillStyle и SetFillPattern.

    Логические операции

    Логические выражения в результате вычисления принимают логические значения True и False. Операндами это выражения могут быть логические константы, переменные, отношения. Идентификатор логического типа в Паскале: boolean.

    В Паскале имеется 4 логические операции: отрицание -NOT, логическое умножение -AND, логическое сложение - OR, исключающее «или» -XOR . Использованы обозначения: T – true, F – false.


    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. Ввод данных может осуществляться : с клавиатуры, при помощи различных формул, в том числе и датчика случайных чисел.

    Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.


    Алгоритм решения задач с использованием массивов:

  • Описание массива
  • Заполнение массива
  • Вывод (распечатка) массива
  • Выполнение условий задачи ·
  • Вывод результата
  • Пример 1. Задан одномерный массив В(10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.

    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’);



    Построение дуг и окружностей

    Процедура вычерчивания окружности текущим цветом имеет следующий формат:

    Cicrle(x, y, r: word), где x, y – координаты центра окружности, r – ее радиус.

    Например, фрагмент программы обеспечит вывод ярко-зеленой окружности с радиусом 50 пикселей и центром в точке (450, 100):

    SetColor(LightGreen);

    Circle(450, 100, 50);

    Дуги можно вычертить с помощью процедуры Arc(x, y: integer, a, b, R:integer), где x, y- центр окружности, a, b- начальный и конечный углы в градусах, R – радиус. Для задания углов используется полярная система координат.

    Цвет для вычерчивания устанавливается процедурой SetColor. В случае a=0 и b=360, вычерчивается полная окружность.

    Например, выведем дугу красного цвета от 0 до 90° в уже вычерченной с помощью Circle(450, 100, 50) окружности:

    SetColor(Red);

    Arc(450, 100, 0, 90,50);

    Для построения эллиптических дуг предназначена процедура Ellipse (x, y: integer, a, b, Rx, Ry: integer), где x, y – центр эллипса, Rx, Ry: горизонтальная и вертикальная оси. В случае a=0 и b=360 вычерчивается полный эллипс. Например, построим голубой эллипс:

    SetColor(9);

    Ellipse(100, 100, 0, 360, 50,50);

    Фон внутри эллипса совпадает с фоном экрана. Чтобы создать закрашенный эллипс, используется специальная процедура FillEllipse (x, y: integer, Rx, Ry: integer). Закраска эллипса осуществляется с помощью процедуры SetFillStyle (a, b: word), где а – стиль закраски (таблица 4), b – цвет закраски (таблица 1). Например, нарисуем ярко-красный эллипс, заполненный редкими точками зеленого цвета:

    SetFillStyle(WideDotFill, Green); { установка стиля заполнения}

    SetColor(12); {цвет вычерчивания эллипса}

    FillEllipse(300, 150, 50, 50);


    Построение графиков функций

    Для построения графиков функций при помощи графического режима предполагается свободное владение учениками понятием функции, ее графическим и аналитическим представлением. Необходимо также использовать операторы цикла, которые помогут избежать однообразного труда по вычислению ординаты каждой точки.

    До сих пор при создании рисунков использовали только первый квадрант системы координат. Для построения большинства функций в требуемом интервале изменения необходимо работать хотя бы в двух квадрантах. В общем случае полезно изображать систему координат в любой части плоскости, но наиболее наглядно располагать ее в центре экрана. В таких случаях, установив начало координат в точке (x0, y0) на экране, можно координаты (x, y) произвольной точки кривой определять разностью (x-x0, y-y0). После этого в программе можно употреблять не только положительные, но и отрицательные значения.

    Рисунок получается маленьким, поэтому требуется увеличить масштаб изображения. Если для функции будет использован весь экран, надо увеличить рисунок по x и по y в зависимости от выбранного экрана.

    Выбрать масштаб увеличения можно следующим образом:

    -определить горизонтальный и вертикальный размеры графика (для этого вводятся границы области значений и определяются максимальное и минимальное значение функции на заданной области определения, затем вычисляются разности максимального и минимального значений аргументов и функции, которые и являются горизонтальным и вертикальным размерами графика соответственно);

    -определить масштаб (сначала определяются масштабы изображения по горизонтали и вертикали с учетом размеров выбранного экрана по формуле:

    масштаб(г/в) = размер экрана (по г/в) / размер графика (по г/в), затем из них выбирается меньший, который и принимается за необходимый масштаб. В нашем случае графический экран имеет размеры 640 на 480.

    В любом случае, чтобы высветить на экране точку, надо взять x, вычислить по данной абсциссе y и выполнить рисование точки. Так как на экране можно получить лишь ограниченное количество значений х, то их перебираем с помощью цикла.


    Пример. Построить график функции y=x2

    Вариант 1

    program f; uses graph; var gd, gm: integer; x, y: real; begin gd:= detect; initgraph( gd, gm, ‘c/ bp’); SetColor(5); Line(0, 240, 640, 240); Line(320, 0, 320, 480); x:= -20; While x

    Вариант 2

    program f; uses graph, crt; var gd, gm: integer; x, y, mx, my, m,x1, x2, y1, y2,h: real; function f(x:real): real; begin f:= Sqr(x); end; clrscr; Write(‘Введите границы отрезка’); Read(x1, x2); y1:=f(x1); y2:=f(x2); mx:=640 /(x2 –x1); my:=480 / (y2 – y1); If mx< my Then m:=mx else m:= my; h:= 1/m; x:=x1; gd:= detect; initgraph(gd, gm, ‘c/ bp’); SetColor (5); Line(0, 240, 640, 240); Line(320, 0, 320, 480); While x

    Рассмотрим построение графика функции, заданной параметрически. В отличие от функции, заданной в явном виде y=f(x), параметр х в этом случае также является функцией, зависящей от некоторого значения.

    Пример.

    Построить график функции (кардиоида)

    x = a cos t ( 1+ cost), y = a sin t( 1+cost), a > 0, t I [0, 2p )

    Приведем фрагмент программы:

    SetColor (5); Line(0, 240, 640, 240); Line(320, 0, 320, 480); t:=0; a:=3; While t

    Построение многоугольников

    Многоугольники можно рисовать самыми различными способами, например с помощью процедуры Line. Однако в Турбо Паскале имеется процедура DrawPoly, которая позволяет строить любые многоугольники линией текущего цвета, стиля и толщины. Она имеет формат DrawPoly( a: word, var PolyPoints)

    Параметр PolyPoints является нетипизированным параметром, который содержит координаты каждого пересечения в многоугольнике. Параметр а задает число координат в PolyPoints. Необходимо помнить, что для вычерчивания замкнутой фигуры с N вершинами нужно передать при обращении к процедуре DrawPoly N+1 координату, где координата вершины с номером N будет равна координате вершины с номером 1.

    Проиллюстрируем на примере:

    program tr; {Программа вычерчивает в центре экрана треугольник красной линией} uses crt, graph; var gd, gm: integer; pp: array[1..4] of PointType; xm, ym, xmaxD4, ymaxD4:word; begin gd:= detect; Initgraph(gd, gm, ‘ c/bp’); xm:=GetmaxX; ym:=GetmaxY; xmaxD4:=xm div 4; ymaxD4:= ym div 4; {определение координат вершин} pp[1].x := xmaxD4; pp[1].y := ymaxD4; pp[2].x := xm - xmaxD4; pp[2].y := ymaxD4; pp[3].x := xm div 2; pp[3].y := ym - ymaxD4; pp[4] :=pp[1]; SetColor(4); {цвет для вычерчивания} DrawPoly(4,pp); {4 – количество пересечений +1} readln; CloseGraph end.

    В результате работы программы на экране появится красный треугольник на черном фоне. Изменить фон внутри треугольника можно с помощью процедуры FillPoly(a: word, var PolyPoints). Значения параметров те же, что и в процедуре DrawPоly. Действие тоже аналогично, но фон внутри многоугольника закрашивается. В качестве примера нарисуем в левой верхней части экрана четырехугольную звезду зеленого цвета:

    program g; uses crt, graph; const Star: array[1..18] of integer = (75, 0, 100, 50, 150, 75, 100, 100, 75, 150, 50, 100, 0, 75, 50, 50, 75, 0); var gd, gm: integer; begin gd:= detect; initgraph(gd, gm, ‘ c/bp’); SetFillStyle(1,2); FillPoly(9,Star); {9 – количество пересечений + 1} CloseGraph; end.

    Построение прямоугольников

    Для построения прямоугольных фигур имеется несколько процедур. Первая из них – вычерчивание одномерного прямоугольника: Rectangle (x1, y1 , x2, y2:integer ), где x1, y1 – координаты левого верхнего угла, x2, y2- координаты правого нижнего угла прямоугольника. Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.

    Более эффектные для восприятия прямоугольники можно строить с помощью процедуры Bar (x1, y1 , x2, y2:integer), которая рисует закрашенный прямоугольник. Цвет закраски устанавливается с помощью SetFillStyle. Еще одна эффектная процедура: Bar3D (x1, y1 , x2,y2, d: integer, a:boolean) вычерчивает трехмерный закрашенный прямоугольник (параллелепипед). При этом используются тип и цвет закраски, установленные с помощью SetFillStyle. Параметр d представляет собой число пикселей, задающих глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника ( d:= (x2 - x1) div 4 ). Параметр a определяет, строить над прямоугольником вершину (а:=True) или нет (a:=False).

    Примеры использования:

    1. SetColor(Green);

    Rectangle (200, 100, 250,300);

    2. SetFillStyle(1,3);

    Bar(10,10,50,100);

    3. SetFillStyle(1,3);

    Bar3D(10,10,50,100,10,True);


    Процедуры модуля Graph


    Процедура Формат Действие
    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;



    Шрифты

    Вывод текста в графическом режиме может осуществляться различными стандартными (таблица 5) и пользовательскими шрифтами. Различают два типа шрифтов: растровые и векторные. Растровый шрифт задается матрицей точек, а векторный – рядом векторов, составляющих символ.

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


    Символьные величины

    Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПК. Каждому символу задается целое число от 0 до 255. В программе значения переменных и констант типа char должны быть заключены в апострофы.

    Пример.

    Program lit; Var c, symbol: char; Begin C:= ‘A’; Symbol:=’д’; Writeln(c); Write(symbol); End.

    Результат выполнения программы:

    А

    д

    Над данными символьного типа определены операции отношения: =, <>, >,=, вырабатывающие результат логического типа, и следующие стандартные функции:

    Chr(x) – преобразует выражение х в символ и возвращает значение символа

    Ord(ch) – преобразует символ ch в его код и возвращает значение кода

    Pred(ch) – возвращает предыдущий символ

    Succ(ch) – возвращает следующий символ

    Пример.

    Ord(‘:’) =58 Ord(‘A’)=65 Chr(128)=Б Pred(‘Б’)=А Succ(‘Г’)=Д

    Символьный тип

    Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПК. Каждому символу приписывается целое число в диапазоне от 0 до 255. Для кодировки используется код ASCII. Например код символа 'A' при русской раскладке клавиатуры будет равен 192

    Для размещения в памяти переменной литерного типа нужен 1 байт.

    Составной оператор

    Это оператор представляет собой совокупность произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end. Он воспринимается как единое целое и может находиться в любом месте программы, где возможно наличие оператора.

    Создание иллюзии движения

    Создать видимость движения изображения на экране можно несколькими способами. Рассмотрим два из них.

    I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать – пауза – стереть (нарисовать в том же месте цветом фона) – изменить координаты положения рисунка.

    Перед началом составления программы надо продумать описание «двигающегося» объекта, характер изменения координат, определяющих текущее положение объекта, диапазон изменения и шаг.

    Упражнение 1. Изучить текст программы, которая рисует модель атома. Проверить ее действие.

    program Model_At;
    uses Crt, Graph;
    const
    Ra=100;{радиус атома}
    Rc=10; {радиус ядра}
    Re=4; {радиус электрона}
    k=0.5; {коэффициент сжатия орбит электронов}
    Dr=30; {параметр изменения координат электрона}
    Step1=0.2; {шаг изменения положения электрона}
    Step=100; {время задержки – скорость движения электронов}
    var
    cx, cy, y, y1, y2, x, x1, x2, x3, y3:integer;
    I, I1, I2, I3: real; gd, gm: integer;
    begin
    clrscr;
    gd:=detect; initgraph(gd, gm, ‘путь к драйверу’);
    SetTextStyle(0, 0, 2); OutTextXY(200, 30, ‘Модель атома’);
    cx:= GetMaxX div 2; {определить центр экрана- положение ядра}
    cy:= GetMaxY div 2;
    PieSlice(cx, cy, 0, 360, Rc);{нарисовать ядро атома}
    SetColor(Red); SetLineStyle(0, 0, 3);
    Line(cx-7, cy, cx+7, cy); Line(cx, cy-5, cx, cy+5);
    SetLineStyle(0,0,1); SetFillStyle(1, 1);
    I:=Pi/4; {задать начальное положение 4 электронов}
    I1:= - Pi/4; I2:= - Pi/2; I3:= Pi/2;
    SetTextStyle(0, 0, 1);SetColor(jellow);
    OutTextXY(180, 420,’Для отмены нажмите любую клавишу’);
    While not KeyPressed do {повторять, пока не нажата любая клавиша }
    begin
    { определить координаты электронов}
    x:=Round (Ra*cos(I)) +cx; Y:= Round (k+Ra*sin(I)) +cy;
    x1:= Round((Ra+Dr)*cos(I1)) +cx; y1:= Round (k*(Ra+Dr)*sin(I1)) +cy;
    x2:= Round((Ra-Dr)*cos(I2)) +cx; y2:= Round (k*(Ra-Dr)*sin(I2)) +cy;
    x3:= Round((Ra-Dr)*cos(I3)*2.3) +cx; y3:= Round (k*(Ra-Dr)*sin(I3)*2.3) +cy;
    {установить синий цвет и нарисовать электроны}

    SetColor(1);

    Circle (x, y, Re); PutPixel(x, y, 2);

    Circle (x1, y1, Re); PutPixel(x1, y1, 2);

    Circle (x2, y2, Re); PutPixel(x2, y2, 2);

    Circle (x3, y3, Re); PutPixel(x3, y3, 2);

    Delay(Step);

    {нарисовать электроны цветом фона}

    SetColor(0);

    Circle (x, y, Re); PutPixel(x, y, 2);

    Circle (x1, y1, Re); PutPixel(x1, y1, 2);

    Circle (x2, y2, Re); PutPixel(x2, y2, 2);

    Circle (x3, y3, Re); PutPixel(x3, y3, 2);

    {задать изменение положения электронов}

    I:=I + Step1; I1:=I1 – Step1; I2:=I2 + Step1; I3:=I3 + Step1;

    end; {конец цикла}

    CloseGraph;

    end.

    II способ. Иллюзия движения создается при помощи специальных процедур и функций.

    Функция ImageSize(x1, y1, x2, y2: integer):word возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения, где x1,y1 – координаты левого верхнего и x2, y2 – правого нижнего углов фрагмента изображения.

    Процедура GetImage(x1, y1, x2, y2:integer, var Buf) помещает в память копию прямоугольного фрагмента изображения, где x1, ..,y2 – координаты углов фрагмента изображения, Buf – специальная переменная, куда будет помещена копия видеопамяти с фрагментом изображения. Buf должна быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами.

    Процедура PutImage(x1, y1, x2, y2:integer, var Buf, Mode:word) выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X, Y – координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf –специальная переменная, откуда берется изображение, Mode – способ копирования. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии изображения. Координаты левого верхнего угла могут быть любыми, лишь бы только копия уместилась в пределах экрана (если копия не размещается на экране, то она не выводится , и экран остается без изменений). Параметр Mode определяет способ взаимодействия размещаемой с уже имеющимся на экране изображением ( табл.)


    Константа Значение Операция Пояснения
    NormalPut 0 Замена существующего на копию Стирает часть экрана и на это место помещает копию
    XorPut 1 Исключительное или Рисует сохраненный образ или стирает ранее нарисованный, сохраняя фон
    OrPut 2 Объединительное или Накладывает сохраненный образ на существующий
    AndPut 3 Логическое и Объединяет сохраненный образ и уже существующий на экране
    NotPut 4 Инверсия изображения То же самое, что и 0, только копия выводится в инверсном виде
    Упражнение 2. Изучить программу, которая рисует звездное небо и перемещает на его фоне рисунок НЛО. Проверить действие программы.

    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 -

    Стандартные библиотечные модули

    В систему Турбо Паскаль версии 6.0. и старше включены 8 модулей: System, Crt, Dos, Graph, Graph3, Overlay, Printer, Turbo3 и специализированная библиотека Turbo Vision. Модуль System подключается по умолчанию, поэтому в любой программе становятся доступными все его встроенные процедуры и функции (см главу 1.3.). Остальные модули должны подключаться с помощью зарезервированного слова uses с добавлением имени модуля. Например: uses Crt.

    Рассмотрим кратко назначение каждого модуля.

    System - сердце Турбо Паскаля. Подпрограммы, содержащиеся в нем, обеспечивают работу всех остальных модулей системы.

    Crt - содержит средства управления дисплеем и клавиатурой компьютера.

    Dos - включает средства, позволяющие реализовывать различные функции Dos.

    Graph3 - поддерживает использование стандартных графических подпрограмм.

    Overlay - содержит средства организации специальных оверлейных программ.

    Printer - обеспечивает быстрый доступ к принтеру.

    Turbo3 - обеспечивает максимальную совместимость с версией Турбо Паскаль 3.0.

    Graph - содержит пакет графических средств.

    Turbo Vision - библиотека объектно-ориентированных программ для разработки пользовательских интерфейсов.

    На примере модуля Crt познакомимся поближе с работой встроенных процедур и функций. Он устанавливает режим работы адаптера дисплея, организует вывод в буфер экрана, регулирует яркость свечения символов и т.д. С момента подключения пользователю доступны все содержащиеся в нем стандартные средства. Рассмотрим некоторые из них.

    § Установка текстового режима

    TextMode(Mode:integer);

    Значение Mode равно 1 (40 / 25) или 3(80 / 25).

    § Очистка экрана

    ClrScr – полностью очищает экран;

    ClrEol – стирает все символы в строке, начиная с текущей позиции до конца строки;

    § Управление курсором

    GotoXY(x,y) – перемещает курсор в позицию, заданную координатами x, y.

    § Управление цветом

    TextColor(Color:byte) - установка цвета выводимых символов;

    TextBackGround(Color) – цвет фона.

    Чтобы добавить при выводе эффект мерцания, при установке цвета указывается Blink (16).

    Пример. Вывести в центре экрана цветными символами слово «Привет» с эффектом мерцания.

    Program primer; Uses crt; Begin TextMode(3); Clrscr; Gotoxy(36,12); Textcolor(5+16); Write(‘Привет’); End.

    Стандартные математические функции


    Обращение Тип аргумента Тип результата Функция
    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]

    Структура программы

    В программе программист записывает последовательность действий, выполняемых над определенными данными с помощью различных операций для реализации заданной цели. Основные требования, предъявляемые к программе:
  • точность полученного результата;

  • время выполнения;

  • объем требуемой памяти (Максимальный размер программы ограничен. Компилятор позволяет обрабатывать программы, в которых объем данных и генерируемый машинный код не превышают 64 Кбайт каждый. Если объем программы требует большего количества памяти то необходимо использовать дополнительные средства).

  • Структура программы:
  • Заголовок, состоящий из зарезервированного слова program и имени программы. Заголовок несет смысловую нагрузку и может отсутствовать, однако рекомендуется всегда его записывать для быстрого распознавания нужной программы.

  • Программный блок, состоящий из 2 разделов:

  • 1. Раздел описаний, в котором должны быть описаны все идентификаторы, встречающиеся в программе.


    Он представляет собой список имен подключаемых библиотечных модулей (определяется зарезервированным словом uses);

    описание меток;

    описание констант;

    определение типов данных;

    описание переменных;

    описание процедур и функций;

    Раздел описания начинается соответствующим каждому элементу списка служебным словом, после которого идет последовательность величин одного типа, разделенных запятой. После списка имен ставится двоеточие и указывается тип данных.

    Любой элемент данного списка в программе может отсутствовать.

  • 2. Раздел операторов.

    Данный раздел начинается со служебного слова Begin и заканчивается служебным словом End. Далее задаются действия над объектами программы, введенными в разделе описаний. Операторы, посредством которых эти действия производятся, разделяются точкой с запятой. После последнего слова End ставится точка.

    Для лучшего восприятия текста программы и поиска ошибок рекомендуется следующая схема:

    зарезервированные слова program, procedure, function и т.д. пишутся строчными буквами;

    идентификаторы начинаются с прописных букв;

    операторы записываются строчными буквами;

    логически подчиненные структуры записываются на 1 строку ниже и на 1- 2 позиции правее по отношению к более старшим.


  • Структурные операторы

    Структурные операторы представляют собой конструкции, построенные из других операторов по строгим правилам. Их можно разделить на три группы: составные, условные и повтора. Применение структурных операторов в вашей программе очень часто просто незаменимо, потому что они позволяют программисту сделать его программу зависимой от каких-либо условий, например введенных пользователем. К тому же применяя операторы повтора вы получаете возможность обрабатывать большие объемы данных за сравнительно малый отрезок времени (это конечно же зависит и от процессора)

    Линия из точек


    Константа Значение Описание
    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.

    Типы данных

    При решении задач выполняется обработка информации различного свойства, например дробные и целые числа, слова, строки и т.д. Для описания множества допустимых значений величины и совокупности операций, в которых участвует данная величина, используется указание ее типа данных. Тип данных – это множество величин, объединенных определенной совокупностью допустимых операций. Каждый тип имеет свой диапазон значений и специальное зарезервированное слово для описания. Все типы данных можно разделить на две группы: скалярные (простые) и структурированные (составные). Простые типы данных также делятся на стандартные и пользовательские. Стандартные – предлагаются разработчиками Турбо Паскаля, а пользовательские разрабатывают сами программисты.

    Представим типы данных в виде схемы:
    1. Простые типы
  • Порядковые типы

  • Целые типы

  • Логический тип

  • Символьный тип

  • Перечисляемый тип

  • Интервальный тип

  • Вещественные типы

  • Ссылочный тип

  • 2. Структурированные типы
  • Строковый тип

  • Регулярный тип

  • Комбинированный тип

  • Множественный тип

  • Файловый тип

  • 3. Процедурные типы
    В данном учебном пособии будут рассмотрены лишь основные типы данных, используемые наиболее часто в курсе учебного школьного программирования. С другими интересующими типами данных можно познакомиться в специальной литературе. Рассмотрим пока лишь простые типы данных, структурированные типы требуют отдельного более тщательного рассмотрения и будут изучены в других разделах.

    Условные операторы

    Условные операторы предназначены для выбора к исполнению одного из возможных действий, в зависимости от некоторого условия (при этом одно из действий может отсутствовать). Для программирования ветвящихся алгоритмов в Турбо Паскале есть специальные операторы. Одним из них является условный оператор If. Это одно из самых популярных средств, изменяющих порядок выполнения операторов программы.

    Он может принимать одну из форм:

    If then else; или If then ;

    Оператор выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисление получается значение логического (булевского) типа. Если это значение – «истина», то выполняется оператор1, указанный после слова then. Если же в результате имеем «ложь», то выполняется оператор2. В случае, если вместо оператора1 или оператора2 следует серия операторов, то эту серию операторов необходимо заключить в операторные скобки begin…end.

    Обратить внимание, что перед словом else точка с запятой не ставится.

    Пример 1. Составить программу, которая запрашивает возраст ребенка и затем выдает решение о приеме ребенка в школу (возраст ? 7лет).

    Program sh; Var v: integer; Begin Write(‘Введите возраст ребенка’); Readln(v); If v>=7 then writeln(‘Принимаем в школу’) else writeln (‘Не принимаем в школу’); end.
    Задание. Модифицировать данную программу, чтобы ограничить верхнюю границу приема в школу 16 годами.

    Решение:

    Program sh; Var v: integer; Begin Write(‘Введите возраст ребенка’); Readln(v); If (v>=7) and (v

    Пример 2. Даны два числа. Меньшее из этих чисел заменить суммой данных чисел, большее - произведением.

    Program sh; Var x, y,s,p: integer; Begin Write(‘Введите 2 числа’); Readln(x, y); S:=x+y; p:=x*y; If x>=y then begin y:=s; x:=p; end else begin x:=s; y:=p; end; writeln(‘x=’, x); writeln(‘y=’, y); end.

    Если оператор If обеспечивает выбор из двух альтернатив, то существует оператор, который позволяет сделать выбор из произвольного числа вариантов. Это оператор выбора Case. Он организует переход на один из нескольких вариантов действий в зависимости от значения выражения, называемого селектором.


    Общий вид: Case k of

    : ;

    : ;

    …..

    :

    else

    end;

    Здесь k – выражение-селектор, которое может иметь только простой порядковый тип (целый, символьный, логический). , … - константы того же типа, что и селектор.

    Оператор Case работает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна значению селектора, то выполняется оператор, стоящий за словом else. Если же это слово отсутствует, то активизируется оператор, находящийся за границей Case, т.е. после слова end.

    При использовании оператора Case должны выполняться следующие правила:

    1. Выражение-селектор может иметь только простой порядковый тип (целый, символьный, логический).

    2. Все константы, которые предшествуют операторам альтернатив, должны иметь тот же тип, что и селектор.

    3. Все константы в альтернативах должны быть уникальны в пределах оператора выбора.

    Формы записи оператора

    Селектор интервального типа:

    Case I of 1..10 : writeln(‘число в диапазоне 1-10’); 11.. 20 : writeln(‘число в диапазоне 11-20’); else writeln(‘число вне пределов нужных диапазонов’) end;

    Селектор целого типа:

    Case I of 1 : y:= I+10; 2 : y:= I+20; 3: y:= I +30; end;

    Пример 1. Составить программу, которая по введенному номеру дня недели выводит на экран его название.

    Program days; Var day:byte; Begin Write(‘Введите номер дня недели’); Readln(day); Case day of 1: writeln(‘Понедельник’); 2: writeln(‘Вторник’); 3: writeln(‘Среда’); 4: writeln(‘Четверг’); 5: writeln(‘Пятница’); 6: writeln(‘Суббота’); 7: writeln(‘Воскресенье’) else writeln(‘Такого дня нет’); end; end.

    Пример 2. Составить программу, которая по введенному номеру месяца выводит на экран название времени года.

    Program m; Var k:byte; Begin Write(‘Введите номер месяца’); Readln(k); Case k of 1, 2, 12: writeln(‘Зима’); 3, 4, 5: writeln(‘Весна’); 6, 7, 8: writeln(‘Лето’); 9, 10, 11: writeln(‘Осень’) else writeln(‘Такого месяца нет’); end; end.

    Величины в Паскале

    Решение задач на ПК - это процесс сбора, обработки и передачи информации. Поэтому задача любой программы состоит в обработке данных. В Паскале данные делятся на константы и переменные. Они определяются идентификаторами (именами).

    Константами называются такие данные, которые не изменяются в процессе выполнения программы, в отличие от переменных, которые могут менять свои значения. Имя переменной подобно ящичку, который можно заполнить различными значениями, что нельзя сделать с константой. Переменная характеризуется именем, типом (см.1.2.) и значением.

    Кроме констант и переменных существуют так называемые типизированные константы, которые являются как бы промежуточным звеном между переменными и константами (В данном пособии не рассматриваются. Рекомендуется дополнительная литература).

    Вещественные типы данных

    Вещественные (действительные) типы данных представляют собой значения, которые используются в арифметических выражениях и могут быть представлены двумя способами: с фиксированной и с плавающей точкой.


    Тип Диапазон Мантисса Требуемая память (байт)
    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



    Вывод линии

    Из точек строятся линии (отрезки прямых). Это можно сделать с помощью процедуры

    Line (x1, y1 , x2,y2 :integer);

    где x1, y1 – координаты начала, x2,y2 - координаты конца линии, например Line(1,1,600,1);

    В процедуре Line нет параметра для установки цвета. В этом случае цвет задается процедурой SetColor (цвет: word); где цвет из таблицы 1.

    Пример.

    SetColor(Gyan);

    Line(1,1,600,1);

    Для черчения линий применяются еще две процедуры: LineTo и LineRel. Процедура LineTo (x,y: integer) строит линию из точки текущего положения указателя в точку с координатами x,y. Процедура LineRel (dx,dy: integer) проводит линию от точки текущего расположения указателя (x, y) в точку x+dx, y+dy.

    Турбо Паскаль позволяет вычерчивать линии самого различного стиля: тонкие, широкие, штриховые, пунктирные и т.д. Установка стиля производится процедурой SetLineStyle(a,b,c: word), где a устанавливает тип строки, возможные значения которого приведены в таблице 2; b – образец, с – толщина линии, определяемая константами, указанными в таблице 3. Если применяется один из стандартных стилей, то значение b равно 0. Если пользователь хочет активизировать собственный стиль, то значение b =4. В этом случае пользователь сам указывает примитив (образец), из которого строится линия.

    Например:

    SetLineStyle(1,0,1);

    Line(15,15, 150,130);

    или

    SetLineStyle(UserBitLn,$5555,ThickWidth);

    Line(15,15, 150,130);

    Вывод текста

    Выводимые на экран изображения лучше всего сопровождать пояснительным текстом. В графическом режиме для этого используются процедуры OutText и OutTextXY.

    Процедура OutText(Textst: string) выводит строку текста, начиная с текущего положения указателя. Например, OutText(‘нажмите любую клавишу’); Недостаток этой процедуры – нельзя указать произвольную точку начала вывода.

    В этом случае удобнее пользоваться процедурой OutTextXY(x, y: integer, Textst: string), где x, y – координаты точки начала вывода текста, Textst – константа или переменная типа String. Например, OutTextXY(60, 100, ‘Нажмите любую клавишу’)

    Вывод точки

    Какие бы изображения не выводились на экран, все они построены из точек, теоретически можно создать любое изображение путем построения точек определенного цвета в нужном месте экрана. В библиотеке Graph вывод точки осуществляется процедурой

    PutPixel (x, y: integer, color:word);

    где x, y: координаты расположения точки, color – цвет.

    Возможные значения Color приведены в таблице:

    

        Программирование: Языки - Технологии - Разработка