Надо Знать

добавить знаний



Pascal



План:


Введение

Pascal - алгоритмическая язык универсального назначения. Существуют диалекты языка с поддержкой объектно-ориентированного программирования. В 1990 году был утвержден стандарт ISO 7185:1990, "Pascal" [1], и ISO 10206:1990 "Extended Pascal" [2].


1. История возникновения и особенности языка

Первым компилятором языка Pascal является ETH Pascal, созданный в 1970 -м. Название ETH происходит от названия института немецкой Eidgen?ssische Technische Hochschule Z?rich (Украинский Федеральная высшая техническая школа Цюриха), где он был разработан. Творцом языка является Никлаус Вирт. В конце того же года Вирт обнародовал первый официальный описание языка, синтаксиса и семантики. Новая версия языка вышла в 1972 году. Тогда же Вирт и его английский коллега Чарльз Энтони Хоар ( Тони Хоар) выпустили аксиоматический описание языка Pascal.

В 1969 году Вирт поручает разработку компилятора одному из своих студентов (Е. Мармье). На тот момент Мармье владел Фортраном ( Fortran) и писал компилятор исключительно на этом языке. После написания компилятор Pascal был переписан на самом себе. Как вспоминал потом Вирт, выбор Фортрану был серьезной ошибкой, потому что он не мог адекватно представлять сложные структуры данных компилятора Pascal, только запутывало программу.

Следующая попытка создания компилятору началась с четкого формулирования на описании (1970 года) самого Паскалю. Синтаксический анализ нового однопроходного компилятору реализовывался с помощью рекурсии. Теперь команду разработчиков составили: В. Амман, Е. Мармье, Р. Шилд. После того как компилятор был написан на еще неизвестном языке, Шилд поехал домой, где он в течение двух недель вручную транслировал программу во вспомогательную низкоуровневую язык. Итак, в середине 1970 компилятор ETH Pascal был готов.

ETH Pascal был интересен прежде всего тем, что стал он одним из первых реализаций языков высокого уровня написанных на самой себе, на два года опередив компилятор Си. В 1973 году была создана абстрактная Pascal-машина (P-машина), которая выполняла специальный P-код. Чтобы решить проблему совместимости компилятора, Вирт решил воспользоваться проверенными временем методами интерпретации. Самыми известными решениями, которые предшествовали P-кода, можно назвать реализацию языка Snobol-4 (Р. Грисуолдом, в 1967 году), где в качестве кода абстрактной машины использовался язык SIL (System Implementation Language).

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

Однако речь разрабатывалась как исследовательский проект и первоначальный Pascal был мало пригоден для написания больших проектов, поскольку программу нельзя было составить из нескольких программных частей - просто не было предусмотрено такой возможности. Но этот язык программирования быстро завоевала популярность в учебных заведениях при изучении программирования. А когда появились диалекты языка где возможно было отдельное компилирования программных частей - Pascal стал средством написания больших программных систем.

Существует ряд объективных причин, обусловивших выдающийся успех языка Pascal. Среди них в первую очередь нужно указать следующие:

  • Язык в естественной и элегантной форме отразила важнейшие современные концепции технологии разработки программ.
  • Благодаря своей компактности, концептуальной целостности и ортогональности понятий, а также удачному оригинальном описанию, предложенному автором языка, Pascal оказался очень легким для изучения и освоения.
  • Несмотря на относительную простоту языка, она оказалась подходящей для очень широкого спектра приложений, в том числе для разработки очень больших и сложных программ, например, операционных систем.
  • Pascal весьма технологичен для реализации практически всех, в том числе и нетрадиционных, машинных архитектур. Утверждается, что разработка Pascal-транслятора "почти" не превышает по трудоемкости хорошей дипломной работы выпускника ВУЗа.
  • Язык Pascal стандартизован во многих странах, а в 1983 году был принят международный стандарт ( ISO 7185:1983).



2. Turbo Pascal и Borland Pascal

2.1. Общие сведения

Turbo Pascal 1.0 IDE (1983 год)
Borland Pascal 7.0 IDE (1992 год)

Turbo, а позже Borland Pascal-это одна из самых удачных и распространенных реализаций языка Pascal, созданная компанией Borland. Turbo Pascal - расширение американского стандарта ( ANSI Pascal), которое учитывает архитектурные особенности MS-DOS и MS Windows и поставляется со значительными по объему и разнообразию пакетами стандартных процедур. Такие принципиальные новшества, как аппарат модулей и объектно-ориентированные средства облегчают конструирование больших программных систем на основе технологии модульного программирования.

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

Система Turbo Pascal является интегрированной средой ( IDE), которое насчитывает ряд компонентов, в совокупности поддерживают все виды работ по созданию программ. Система содержит универсальный текстовый редактор, компилятор входного языка, редактор связей и встроенный символьный зневаджувач. Многооконный интерфейс с развитой системой меню и совершенной справочной системой обеспечивает высокую производительность труда программиста.

Borland Pascal 7.0, 7.01 компилирует программы для DOS и ОС Windows 1.0, Windows 2.0, Windows 3.x, а также содержит ряд дополнительных утилит и компиляторов типа: Turbo Pascal for Windows (TPW), Borland Pascal for Windows (BPW), редактор ресурсов (иконок, графических файлов, курсоров и т.п.) и другие.

Хронологическая таблица версий компилятора серии "Turbo":

Название компилятора Дата выхода Особенности и прочее
Turbo Pascal 1.0 20 ноября 1983 Разработана для PC-DOS и ОС CP / M. Компилятор требует лишь 64 КИБ оперативной памяти и компилирует код для COM или CHN файлов (формата / структуры файлов). Выходной машинный код не может превышать 64 КИБ, графический режим- CGA, манипуляции со звуком с помощью PC-динамика (подключенного к 2-гого выхода таймера (в IBM AT-совместимых).
Turbo Pascal 2.0 17 апреля 1984 Цвет интерфейса изменен с желто-серого на серо-белый. Удаленная команда меню "выполнить", увеличен возможный размер кода и добавлено множество новых примеров программ.
Turbo Pascal 3.0 17 сентября 1986 Цвета EGA палитры, новые графические процедуры (в том числе графическая черепаха), оверлеи, BCD, новые процедуры для работы с файлами, параметры компиляции можно задавать через командную строку.
Turbo Pascal 4.0 2 ноября 1987 В компилятор внесены кардинальные изменения. Он перестал поддерживать ОС CP / M, стала возможной компиляция в EXE-файлы, работа с EGA, VGA графикой, добавлен тип данных LongInt.

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

Turbo Pascal 5.0 осень 1988 Появился встроенный видлагоджувальник (от англ. Debugger), а также отдельный видлагоджувальник Turbo Debugger, драйвер BGI.
Turbo Pascal 5.5 2 мая 1989 В язык вводится понятие объектно-ориентированного программирования (понятие классов, статических и динамических объектов, конструкторов и деструкторов, а также наследования).

В интерфейсе стал преобладать синий цвет, который использовался во всех последующих версиях серии "Turbo". В ИСР (акроним от "Интегрированная среда разработки", англ. integrated development environment ( IDE)) введены две важные изменения: пошаговый видлагоджувальник и контекстная справка с описанием всех встроенных функций и возможностью копирования фрагментов кода.

Turbo Pascal 6.0 4 октября 1990 Язык имеет ряд изменений по сравнению с предыдущей версией: встроенный ассемблер, улучшение объектно-ориентированной парадигмы, улучшенный админстратор кучи (от англ. Heap). Появляется библиотека Turbo Vision, которая предназначена для разработки программ со сложным визуальным интерфейсом.

Интерфейс. Улучшенный поддержкой мыши, буфером обмена текстом, возможностью манипуляций с оконным редактором (а также одновременным редактированием нескольких файлов). Видлагоджувальник также улучшилось. Стало возможным использованием паузточок (от англ. Breakpoints) и окна наблюдения (watches).

Turbo Pascal 7.0 9 марта 1993 Компилятор стал кросс-платформенных - это позволило компилировать программы как для DOS так и для Windows. Другой важной особенностью является возможность создания динамических библиотек (англ. DLL - ДЗБ) и подсветку синтаксиса.


Хронологическая таблица версий компилятора серии "Borland":

Название компилятора Дата выхода Особенности и прочее
Borland Pascal with Objects 7.0 27 октября 1992 7:00 Генерирования кода исполняемые файлы для Windows, DOS, DPMI. Скорость компиляции более 85000 линий в минуту. Полный доступ ко всем функциям Windows и сообщений. Динамически загружаемые библиотеки для DOS и Windows. C, C + + код может быть использован благодаря ДЗБ ( DLL). Встроенный ассемблер для скорости и полного контроля кода. Математический сопроцессор и оффлайн поддержка. Умный компоновщик для удаления ненужных объектов и кода. Зарезервированные слова: "public", "private" и "inherited". Открытые массивы и строки. 80386-инструкции для операций с 32-битовыми числами. Оптимизация множеств. Быстрые операции со строками и файлами. Неограниченное вложенность. Пакет включает в себя: DOS-, Windows-интегрированные среды разработки. Подсветка синтаксиса, неограниченные количество операций "Undo" (вернуть) и "Redo" (повторить). Выбор целевого файла кода для: DOS, DPMI или Windows. В объектов (ObjectBrowser), он-лайн справка, Turbo Debugger, Turbo Profiler, Turbo Assembler, Resource Workshop, Winsight / Winspector, компилятор ресурсов, компилятор справки, модуль "Windows CRT". Цена - $ 500, обновление Turbo Pascal-150.
Borland Pascal with Objects 7.01 9 марта 1993 7:01 Устранены некоторые ошибки в самом компиляторе (некоторые моменты проверки диапазона и переполнения типа Byte и ShortInt были реализованы неправильно), в работе таймера (процедура Delay), а также в тексте Turbo Vision-модулей. Зарегистрированные пользователи версии 7.0 получили 7.01 бесплатно. Была исправлена ​​серьезная ошибка сдвига (операции shl и shr) для типа LongInt (с числом сдвига битов 16-31), которая проходила во время исполнения кода на процессорах 80386 (на некоторых процессорах код работал, на других-нет). Проблема была решена путем внедрения глобальной переменной Save8086 типа Byte и вставкой дополнительного тесткоду, который окружал инструкции. Это замедлило сдвиги, но сделало их стабильным, потому что теперь они выполняются с использованием 16-битных регистров как в TP 4.0-6.0 реализации.

Исправлены ошибки, согласно информации предоставленной Джимом Хиггинсом (Jim Higgins):
1.Перевирка диапазона и переполнения типа Byte и ShortInt;
2.Помилка, связана со смещением со значениями 16-31 на процессорах 80386, 80486;
3.Функции GetDir не вызывала ошибку № 15, если переданный параметр несуществующего диске
4.В программ откомпилированный директивой $ N, была проблема с правильным определением INFs и NaN;
5.Функции Exp, когда использовалась для очень малых аргументов типа Real виклакала переполнения вместо того, чтобы вернуть ноль;
6.Була проблема превращения денормализованих чисел в нуле при использовании сопроцессора 8087;
7.Денормализовани числа типа Extended не превращались надлежащим образом в десятичные с помощью процедур Str и Write (Ln);
8.Инициализации процедур не проверяли должным образом, чтобы предотвратить ложного выполнение кода скомпилированного для процессоров 80286 директиве $ G, работающие на процессорах 8086/8088.


2.2. Компиляторы Turbo Pascal 7.0 и Borland Pascal 7.x

Начальные версии компилятора имеют другой вид. Далее будут розлянути версии корпорации Borland : Turbo Pascal 7.0 и Borland Pascal 7.0/7.01, которые уже давно стали классическими. Текст компилируется в машинный язык для центральных процессоров 8086, 8088, 80186, 80188, 80286, 80386 (BP 7.0/7.01) и совместимых с ними. Компиляция кода для работы с числами с плавающей точкой может здийнюватися, как в прямые машинные инструкции сопроцессоров 8087, 80187, 80287 и совместимых с ними, так и путем эмуляции.

Алфавит языка
Имена в языке Pascal формируются из латинских букв AZ, az, цифр 0-9 и знака "подчеркивание" ("_"). Также используются специальные символы: + - * / = <> [] () {} $ ^ #. Любое имя должно начинаться с латинской буквы или символа "подчеркивание" (от англ. "Underscore"), исключение составляют лишь имена меток. В отличие от Си в Паскале не учитывается регистр букв.

Служебные слова
Служебное слово представляет собой неделимое образование, содержание которого фиксированный языке. Служебные слова нельзя использовать в качестве имен. Комментарии в коде программы оформляются фигурными скобками {комментарий} или же сочетанием обычных скобок со звездочкой (* комментарий *).
Зарезервированные слова:
and, asm, array, begin, case, const, constructor, destructor, div, do, downto, else, end, exports, file, for, function, goto, if, implementation, in, inherited, inline, interface, label, library, mod, nil, not, object, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor, absolute, assembler, export, external, far, forward, index, interrupt, near, private, public, resident, virtual.
Использование имен псевдомасивив Port, PortW, Mem, MemW, MemL не вызывает ошибки, но исключает их дальнейшее применение.

Структура программы
Учитывая, что для имен можно использовать только латинские буквы, все названия параметров представлены на английском.
Условные обозначения:
<> - Обязательный параметр;
[] - Не обязательный параметр.

Описание директив (макросов):
{$ , , ..}
Место описания директив (макросов) является произвольным. Некоторые директивы имеют более чем одно значение. Например:
$ I и $ I ;
$ L $ L .
Большинство директив имеет одинаковую форму записи, но есть и исключения, вроде:
$ M , , ;
$ IFDEF ; $ ELSE; $ INC.

Пример:

 {$ A-, B-, D +, E-, F-, G-, I-, L +, N +, O-, P-, Q +, R-, S +, T-, V +, X +, Y +}  {$ M 16384,0,655360}  {$ I i8042.pas}  var  f  :  File  ;  begin  Assign  (  f  ,  'File'  )  ;  {$ I-}  Reset  (  f  ,  $ 200  )  ;  {$ I +}  if  IOResult <>  0  then  Rewrite  (  f  ,  $ 200  )  ;  end  . 


Название программы (имя главного модуля):
program [(input, output)];

Пример:

 {$ X +}  program  t80c187;  function  New  :  ByteBool  ;  begin  end  ;  begin  t80c187.  New  ;  New  ;  end  . 


Подключение откомпилированный модулей:
uses , , .. ;
Порядок подключения оверлейных модулей другой, и осуществляется с помощью директивы $ O.

Пример:

 uses  crt  ,  dos  ,  vbe30;  var  screen  :  Text;  begin  Crt.  AssignCrt  (  screen  )  ; AssignCrt  (  screen  )  ;  end  . 


Описание меток:
Метка-целое число от 0 до 9999.
label , , ..;

Пример:

 label  0  ,  9999  ;  begin  0  :  goto  9999  ;  9999  :  goto  0  ;  end  . 


Описание констант:
const = ; = , .. ;
Описание статических переменных:
const : = ; : = , .. ;
Если статическая переменная описана в процедуре или функции, то после вызова последней стек для переменной не резервируется (место уже в самом коде), что позволяет сэкономить время.

Описание новых типов (в том числе процедурных и функциональных), структур и объектов:
type

  = record 
end;
= ;
= object [(father's name)]
[Private]

[Public]

end;


Описание переменных:
var , , .. : ;
var , , .. : Byte absolute ;

Примеры:

 type  Pointer  =  record  case  Byte  of  $ 00  :  (  ofs  ,  seg  :  Word  )  ; $ 01  :  (  fulladdr  :  LongInt  )  ;  end  ; _RGBA  =  record  red  ,  green  ,  blue  :  Single; alpha  :  Single;  end  ; _VideoBuffer  =   array  [  16  *  12  ]  of  _RGBA; _Beer  =  (  BEST  ,  BESTER  ,  MORE  )  ; _Element  =  ^ _List; _List  =  record  prev  :  _Element; Data  :  _Beer; Next  :  _Element;  end  ; _SimpleProc  =  Procedure  ; _ByteFunc  =  Function  :  Byte  ; _New  =  object  private  right  ,  bottom  :  Integer  ;  procedure  Destroy;  (* Or destructor .. *)  public  left  ,  top  :  Integer  ; Width  ,  height  :  Word  ;  procedure  Create;  (* Or constructor .. *)  procedure  Free;  end  ; _Newest  =  object  (  _New  )  procedure  Create;  procedure  Free;  end  ;  const  CNT  =  $ 40; svar_0  :  _Beer  =  MORE; svar_1  :  Byte  =  0  ; Svar_0_addr  :  Pointer  =  (  ofs  :  Ofs  (  svar_0  )  ; Seg  :  Seg  (  svar_1  )  )  ; Svar_1_addr  :  Pointer  =  (  fulladdr  :  LongInt  (  @ Svar_1  )  )  ;  var  counter  :  _Beer; Temp0  ,  temp1  ,  temp2  :  0  ..  Byte  (  '2 '  )  ; A  :  array  [  0  ..  0  ]  of  array  [  Byte  ]  of  Byte  ; B  :  array  (  .0 ..  0  ,  Byte  .  )  of  Word  ;  (* (. = [.) =] *)  intVar  :  Word  ; Proc  :  Procedure  (  const  BITS  :  Byte  )  ; Float10  :  Extended; float4  :  Single; divZeroErrorAddr  :  LongInt  absolute  $ 0000  :  $ 0000; mode  :  LongInt  absolute  $ 0040  :  $ 0049; crtMode  :  LongInt  absolute  mode;  procedure  _New.  Create  ;  assembler  ;  asm  end  ;  procedure  _New.  Destroy  ;  assembler  ;  asm  end  ;  procedure  _New.  Free  ;  begin  end  ;  procedure  _Newest.  Create  ;  begin  inherited  Create;  end  ;  procedure  _Newest.  Free  ;  begin  inherited  Free;  end  ;  begin  end  . 


Описание процедур и функций (конструкторов и деструкторов):
procedure [parameters], [directives]
function [parameters] , [directives]

Пример:

 const  test  :  Word  =  $ 0001;  var  procCall  :  Procedure  (  var  DATA  )  ;  procedure  SwitchLowBytes  (  var  DATA  )  ;  far  ;  const  temp  :  Byte  =  0  ;  begin  temp  : =  Byte  (  Ptr  (  Seg  (  DATA  )  ,  Ofs  (  DATA  )  +  1  )  ^  )  ;  Byte  (  Ptr  (  Seg  (  DATA  )  ,  Ofs  (  DATA  )  +  1  )  ^  )  : =  Byte  (  Ptr  (  Seg  (  DATA  )  ,  Ofs  (  DATA  )  )  ^  )  ;  Byte  (  Ptr  (  Seg  (  DATA  )  ,  Ofs  (  DATA  )  )  ^  )  : =  temp;  end  ;  begin  procCall  : =  SwitchLowBytes;  WriteLn  (  test  )  ; ProcCall  (  test  )  ;  WriteLn  (  test  )  ;  end  . 

В программе должно быть как минимум два оператора - это begin и end. После каждой строки необходимо ставить ";" (это правило не касается операторов после которых размещены зарезервированное слово "end", "begin", "else", встроенного ассемблера и т.д.).

Количество зарезервированных слов "begin" и "end" в программе не обязательно должно совпадать.

Например:

 begin  asm  end  ;  end  . 


 unit  new  ;  interface  implementation  end  . 


 type  _HBrush  =  record  end  ;  begin  end  . 


Присвоение значения происходит так:
: = ;
: = ;
После последнего "end" необходимо поставить точку "."

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

Операнды:

  • "+" - Сложение;
  • "-" - Вычитание;
  • "*" - Умножение;
  • "/" - Деление;
  • "Div" - целая часть от деления (например: 7 div 2 = 3);
  • "Mod" - остаток от деления (например: 7 mod 2 = 1);
  • "=" - Равно;
  • "<> "- Не равно (≠);
  • "> "- Больше;
  • "<" - Меньше;
  • "> =" - Больше или равно (≥)
  • "<=" - Меньше или равно (≤);
  • "Shl" - побитовый сдвиг влево (например 00000110b shl 1 = 00001100b)
  • "Shr" - побитовый сдвиг вправо (например 00000111b shr 1 = 00000011b).

2.3. Типы данных

Целые типы:

Название типа Диапазон значений 10 Роль старшего бита и размер (биты)
Byte 0 .. 255 беззнаковое 8
Word 0 .. 65535 беззнаковое 16
Char # 0 .. # 255 8
Boolean FALSE .. TRUE 8
ByteBool FALSE .. TRUE 8
WordBool FALSE .. TRUE 16
LongBool FALSE .. TRUE 32
ShortInt -128 .. 127 со знаком 8
Integer -32768 .. 32767 со знаком 16
LongInt -2147483648 .. 2147483647 со знаком 32
Pointer $ 00000000 .. $ FFFFFFFF 32

Действительные типы:

Название типа Диапазон значений (с учетом "дыр") Количество значащих цифр Размер (биты)
Comp -9.2e18 .. 9.2e18 19-20 64
Single 1.5e-45 .. 3.4e38 7-8 32
Real 2.9e-39 .. 1.7e38 11-12 48
Double 5.0e-324 .. 1.7e308 15-16 64
Extended 3.4e-4932 .. 1.1e4932 19-20 80

Другие типы:

Название типа Размер (Байт)
String 1 + 1 .. 255
File 8 +40 +80
Text 128 + 128

2.4. Стандартные подпрограммы и стали

  • Abs (X) - вычисление абсолютного значения (модуля) Х.
  • ArcTan (X) - вычисление угла, тангенс которого равен Х (т.е. математический arctg (X)), значение угла представлены в радианах и может находиться в диапазоне от-π / 2 до π / 2. Для преобразования значения угла Радианное меры в градусную необходимо значение угла умножить на число 180 / π. Результат имеет вещественный тип.
  • Cos (X) - вычисление косинуса Х, параметр задает значение угла в радианах.
  • Exp (x) - вычисление значения экспоненты аргумента (ex). Результат всегда имеет вещественный тип.
  • Frac (X) - нахождение дробной части Х. Результат имеет вещественный тип.
  • Int (X) - нахождение целой части Х (дробная часть отбрасывается). Результат имеет вещественный тип.
  • Ln (x) - вычисляется натуральный логарифм аргумента. Результат имеет вещественный тип. С помощью функций Exp и Ln можно вычислить произвольную степень числа так: ab = Exp (b * Ln (a)), соответственно корень можно подать так же a1 / b (т.е. корень степень b с a) = Exp (1 / b * Ln (a)).
  • Pi - возвращает значение числа p (3.1415926).
  • Sin (X) - вычисление синуса Х. Параметр задает значение угла в радианах. Для преобразования значения угла Радианное меры в градусную необходимо значение угла умножить на число 180 / p. Результат имеет вещественный тип.
  • Sqr (X) - подъем к квадрату значения Х. Тип результата совпадает с типом параметра.
  • Sqrt (X) - вычисление квадратного корня из Х. Тип результата действителен.
  • Random - генерирует значение случайного числа из диапазона от 0 до 0.99. Тип результата действителен.
  • Random (P) - генерирует значение случайного числа из диапазона от 0 до P. Тип результата цел. Чтобы случайные числа были "более случайными", необходимо периодически менять базу генерации. Для этого используется процедура Randomize, что позволяет при каждом новом запуске программы получать различные случайные числа.

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

  • Dec (x, [dx]) - процедура уменьшает значение переменной Х на величину DX, а если параметр DX не задан - на 1.
  • Inc (x, [dx]) - процедура увеличивает значение переменной Х на величину DX, а если параметр DX не задан - на 1.
  • Pred (X) - функция, определяющая предыдущее значение для данного типа. Например, Pred (5) = 4, Pred (True) = False, Pred ('B') = 'A'.
  • Succ (X) - функция, определяющая следующее значение для данного типа. Например, Succ (5) = 6, Succ (True) = False, Succ ('A') = 'B'.
  • Odd (X) - число проверяется на нечетность. Результат равен true, если аргумент нечетный, и false - в противном случае.

3. Наследие Pascal

Вместе с популярностью языка стало известно и имя Никлауса Вирта. Работая в Швейцарском федеральном техническом институте вместе со своими учениками и последователями совершенствовал теорию языка программирования общего использования. Так в 1980 году появилась Modula (хотя когда говорят Modula, подразумевают Modula-2). Modula-2 стала завершением развития линии структурного программирования. В 1990 году - появился Oberon уже использовал принципы ООП (хотя объектно-ориентированное программирование было возможным уже в версии 5.5 одной из самых популярных реализаций языка - Turbo Pascal).

Теперь можно говорить о существовании семьи Pascal-подобных языков, к которым относятся Pascal, Modula-2, Oberon, Oberon-2, ActiveOberon, Component Pascal.

Не так давно появилась новая язык с этой большой семьи - Zonnon для . NET. Она, как и ее предшественники, была создана в Швейцарском федеральном технологическом институте в Цюрихе. Основной упор в ней сделан на простоту, ясный синтаксис и модульность. Zonnon вобрал в себя черты Active Oberon и C #. Язык Zonnon добавляет Паскалю новые особенности, включая процессы в объектах, перегрузка операторов и обработку исключительных ситуаций.


4. Образцы программ

Классический пример:

 program  Hello_World;  begin  Writeln  (  'Hello, World! "  )  ;  (* :) *)  end  . 


Рекурсивный вариант вычисления факториала :

 {$ N +, E +}  var  n  :  Byte  ;  function  Fact  (  n  :  Byte  )  :  Comp;  begin  if  n  =  0  then  Fact  : =  1  else  Fact  : =  Fact  (  n  -  1  )  *  n;  end  ;  begin  ReadLn  (  n  )  ;  WriteLn  (  n  ,  '! ='  ,  Fact  (  n  )  :  0  :  0  )  ;  end  . 


Пример работы с графическим драйвером VGA :

 {$ R-, Q-}  (* Just say: "faster"! *)  uses  crt  ,  graph;  var  left  ,  top  ,  right  ,  bottom  :  Integer  ; Dx  ,  dy  :  Integer  ; MaxX  ,  maxY  :  Integer  ;  procedure  Set640x480x4;  var  agd  ,  agm  :  Integer  ;  begin  agd  : =  VGA; agm  : =  VGAHI; InitGraph  (  agd  ,  agm  ,  '.. \ BGI'  )  ;  end  ;  procedure  WaitVRet;  assembler  ;  asm  mov dx  ,  3dah @ v0  :  in  al  ,  dx test al  ,  08h jz @ v0  {@ V1 (* for interlaced video mode *) in al, dx test al, 08h jz @ v1}  end  ;  begin  Set640x480x4; left  : =  0  ; Top  : =  0  ; Right  : =  left  +  100  ; Bottom  : =  top  +  100  ; Dx  : =  11  ; Dy  : =  -  7  ; MaxX  : =  GetMaxX; maxY  : =  GetMaxY;  while  KeyPressed  =  FALSE  do  begin  if  left <  0  then  dx  : =  -  dx  else  if  right> maxX  then  dx  : =  -  dx;  if  top <  0  then  dy  : =  -  dy  else  if  bottom> maxY  then  dy  : =  -  dy; WaitVRet; SetFillStyle  (  SOLIDFILL  ,  BLACK  )  ; Bar  (  left  ,  top  ,  right  ,  bottom  )  ; Inc  (  left  ,  dx  )  ; Inc  (  top  ,  dy  )  ; Inc  (  right  ,  dx  )  ; Inc  (  bottom  ,  dy  )  ; SetFillStyle  (  SOLIDFILL  ,  CYAN  )  ; Bar  (  left  ,  top  ,  right  ,  bottom  )  ;  end  ; ReadKey;  (* Pop last key from BIOS's 8042-buffer *)  CloseGraph;  end  . 



5. Источники информации

См.. также

Популярные реализации Pascal


код для вставки
Данный текст может содержать ошибки.

скачать

© Надо Знать
написать нам