Pascal — алгоритмічна мова програмування універсального призначення. Існують діалекти мови з підтримкою об'єктно-орієнтованого програмування. В 1990 році було затверджено стандарт ISO 7185:1990, «Pascal», та ISO 10206:1990 «Extended Pascal».
Pascal (Паскаль) | |
---|---|
Парадигма | імперативна, структурна |
Дата появи | 1970 |
Творці | Ніклаус Вірт |
Розробник | Ніклаус Вірт |
Система типізації | статична, жорстка, безпечна |
Основні реалізації | , , PDP-11, PDP-10, (IBM System/370), HP, [en] |
Діалекти | UCSD, Borland, Turbo |
Під впливом від | ALGOL |
Вплинула на | Oberon, , Ada, Delphi, VHDL, SCAR |
Звичайні розширення файлів | .pp , .p [1] або .pas [1] |
|
Історія виникнення і особливості мови
Першим компілятором мови Pascal став ETH Pascal, створений у 1970-му. Назва ETH походить від назви німецької назви технічного університету Цюриха (нім. Eidgenössische Technische Hochschule Zürich), де компілятор було розроблено. Творцем мови став Ніклаус Вірт. Наприкінці того ж року Вірт оприлюднив перший офіційний опис мови, синтаксису та семантики. Нова версія мови побачила світ у 1972 році. Тоді ж Вірт та його англійський колега Чарльз Ентоні Гоар випустили аксіоматичний опис мови Pascal.
У 1969 році Вірт доручив розробку компілятора одному зі своїх студентів (Е. Марм'є). На той час Марм'є володів лише Фортраном і писав компілятор виключно цією мовою. Після написання компілятора його переписали на самому Паскалі. Як згадував потім Вірт, вибір Фортрана був серйозною помилкою, бо у ньому не можна адекватно представляти складні структури даних компілятора Pascal, що лише заплутувало програму.
Наступна спроба створення компілятора (1970 року) почалася з чіткого формулювання опису на самому Паскалі. Синтаксичний аналіз нового однопрохідного компілятора реалізовувався за допомогою рекурсії. Команду розробників склали: У. Амман, Е. Марм'є, Р. Шилд. Після того як компілятор було написано на ще нереалізованій мові, Шилд поїхав додому, де протягом двох тижнів уручну транслював програму в допоміжну низькорівневу мову. У середині 1970 року компілятор ETH Pascal був готовий.
ETH Pascal був цікавий насамперед тим, що став він однією з перших реалізацій мов високого рівня, написаних на самій собі, на два роки випередивши компілятор Сі. У 1973 році була створена абстрактна Pascal-машина (P-машина), яка виконувала спеціальний P-код. Щоб вирішити проблему сумісності компілятора, Вірт вирішив скористатися перевіреними часом методами інтерпретації. Найвідомішими з рішенень, які передували P-коду, можна назвати реалізацію мови Snobol-4 (Р. Грісволд, у 1967 році), де як код абстрактної машини використовувалася мова SIL ().
Початкова мета розробки мови диктувалася потребою інструмента «для навчання програмуванню як систематичній дисципліні». Pascal належить до Algol-подібних мов програмування, оскільки використовує семантику Алгола. Однак Pascal мав суттєве удосконалення — жорстку типізацію. Це означало, що присвоювання можна було виконувати лише для змінних, що належать до одного типу (одночасно вказувались правила, за якими типи вважались однаковими). Це удосконалення суттєво покращило стиль програмування, оскільки значну частину помилок вдавалось виявити ще на етапі компіляції — що збільшувало надійність програм.
Однак мова розроблялась як дослідницький проект і первісний Pascal був мало придатний для написання великих проектів, оскільки програму не можна було скласти з кількох програмних частин — просто не було передбачено такої можливості. Але ця мова програмування швидко завоювала популярність у навчальних закладах при вивченні програмування. А коли з'явились діалекти мови, де можливим було окреме компілювання програмних частин — Pascal став засобом написання великих програмних систем.
Існує ряд об'єктивних причин, які обумовили видатний успіх мови Pascal. Серед них у першу чергу потрібно вказати такі:
- Мова в природній і елегантній формі відбила найважливіші сучасні концепції технології розробки програм.
- Завдяки своїй компактності, концептуальній цілісності й ортогональності понять, а також вдалому оригінальному опису, запропонованому автором мови, Pascal виявився дуже легким для вивчення й освоєння.
- Незважаючи на відносну простоту мови, вона виявилась придатною для дуже широкого спектра застосунків, у тому числі для розробки дуже великих і складних програм, наприклад, операційних систем.
- Pascal дуже технологічний для реалізації практично усіх, у тому числі і нетрадиційних, машинних архітектур. Стверджується, що розробка Pascal-транслятора «майже» не перевищує за трудомісткістю гарної дипломної роботи випускника вишу.
- Мова Pascal стандартизована в багатьох країнах, а у 1983 році було прийнято міжнародний стандарт (ISO 7185:1983).
Turbo Pascal та Borland Pascal
Загальні відомості
Однію з найпоширеніших реалізацій мови Pascal став створений компанією Borland Turbo Pascal (пізніше — Borland Pascal, а потім — Delphi). Turbo Pascal — розширення американського стандарту (ANSI Pascal), яке враховує архітектурні особливості MS-DOS та MS Windows і постачалося зі значними за обсягом і різноманітності пакетами стандартних процедур. Такі принципові нововведення, як апарат модулів і об'єктно-орієнтовані засоби полегшували конструювання великих програмних систем на основі технології модульного програмування.
Компілятор Turbo Pascal працював за однопрохідною схемою, реалізував функції редагування зв'язків, формував на виході готовий до виконання код. Компілятор здійснював широкий набір локальних оптимізацій (згортання констант, виключення невикористовуваного коду і зайвих даних, оптимізація операцій і т. п.), що сприяло високій ефективності кінцевих програм.
Система Turbo Pascal була інтегрованим середовищем (IDE), яке містило низку компонентів, що в сукупності підтримували роботу зі створення програм. Система містила універсальний текстовий редактор, компілятор вхідної мови, редактор зв'язків і вбудований символьний зневаджувач. Багатовіконний інтерфейс із розвиненою системою меню і досконалою довідковою системою забезпечував високу продуктивність праці програміста[].
Borland Pascal 7 компілював програми для DOS та ОС Windows 1.0, Windows 2.0, Windows 3.x, а також містив низку додаткових утиліт та компіляторів на кшталт: (TPW), (BPW), редактор ресурсів (іконок, графічних файлів, курсорів тощо) та інші.
Компілятори Turbo Pascal 7.0 та Borland Pascal 7.x
Інтерфейс користувача набув іншого вигляду. Програма компілюється в машинні команди для процесорів 8086, 8088, 80186, 80188, 80286, 80386 (BP 7.0/7.01) та сумісних із ними. Обробку чисел із рухомою комою можливо компілювати як в інструкції співпроцесорів (8087, 80187, 80287 чи сумісних з ними), так і в команди емуляції.
Алфавіт мови
Ідентифікатори у мові Pascal формуються з латинських літер A-Z, a-z, цифр 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 не викликає помилки, але унеможливлює їх подальше застосування.
Структура програми
Враховуючи те, що для імен можна застосовувати тільки латинські літери, всі назви параметрів подані англійською.
Умовні позначення:
- <>— обов'язковий параметр;
- []— необов'язковий параметр.
Опис директив (макросів):
{$<directive><switch>, <directive><switch>,..}
Місце опису директив (макросів) є довільним. Деякі директиви мають більш, ніж одне значення. Наприклад:
- $I <filename.pas> та $I<switch>;
- $L<switch> $L<filename.obj>.
Більшість директив має однакову форму запису, але є й винятки, на кшталт:
- $M <value>, <value>, <value>;
- $IFDEF <name>; $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 <name>[(input, output)];
Приклад:
{$X+} program t80c187; function New: ByteBool; begin end; begin t80c187.New; New; end.
- Створення відкомпільованих модулів
unit new; interface implementation end.
- Підключення відкомпільованих модулів
uses <unitNam0>, <unitNam1>,.. ;
Порядок підключення оверлейних модулів інший, та здійснюється за допомогою директиви $O.
Приклад:
uses crt, dos, vbe30; var screen: Text; begin Crt.AssignCrt(screen); AssignCrt(screen); end.
- Опис міток
Мітка— ціле число від 0 до 9999.
label <number0>, <number1>,..;
Приклад:
label 0, 9999; begin 0: goto 9999; 9999: goto 0; end.
- Опис констант
const <name0>=<value>; <name1>=<value>,.. ;
- Опис статичних змінних
const <name3>:<type>=<value>; <name4>:<type>=<value>,.. ;
Якщо статична змінна описана в процедурі або функції, то після виклику останньої стек для змінної не резервується (місце вже є в самому коді), що дозволяє заощадити час.
- Опис нових типів (в тому числі процедурних і функційних), структур та об'єктів
type
<name_0>= record
end;
<name_1>= <type or range>;
<name_2>= object[(father's name)]
[private]
<variables or methods>
[public]
<variables or methods>
end;
- Опис змінних
var <name0>, <name1>,.. : <type or range>;
var <name3>, <name4>,.. : Byte absolute <segment: offset>;
Приклади:
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 <identifier> [parameters]; [directives]
function <identifier> [parameters]: <type>; [directives]
Приклад:
const test: Word= $0001; var procCall: Procedure (var DATA); temp: Byte; procedure SwitchLowBytes(var DATA); far; 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; procedure switch_low_bytes(var data); type _bytes: array [0..1] of Byte; begin temp:= _bytes(data)[0]; _bytes(data)[0]:= _bytes(data)[1]; _bytes(data)[1]:= temp; end; begin procCall:= SwitchLowBytes; WriteLn(test); procCall(test); WriteLn(test); switch_low_bytes(test); WriteLn(test); end.
У програмі має бути щонайменше два зарезервованих слова — begin та end. Роздільником між послідовними операторами є «;» (крапка з комою).
Кількість зарезервованих слів «begin» та «end» у програмі не обов'язково має збігатися.
Наприклад:
begin asm end; end.
unit new; interface implementation end.
type _HBrush= record end; begin end.
Присвоєння значення відбувається так:
<typed address>:= <typed address>;
<typed address>:= <value>;
Після останнього «end» необхідно поставити крапку «.»
- Математичні операції
- «+»— додавання;
- «-»— віднімання;
- «*»— множення;
- «/»— ділення;
- «div»— ціла частина від ділення (наприклад: 7 div 2= 3);
- «mod»— остача від ділення (наприклад: 7 mod 2= 1);
- "="— дорівнює;
- «<>»— не дорівнює (≠);
- «>»— більше;
- «<»— менше;
- ">="— більше або рівне (≥);
- "<="— менше або рівне (≤);
- «shl»— побітовий зсув вліво (наприклад: 00000110b shl 1= 00001100b);
- «shr»— побітовий зсув вправо (наприклад: 00000111b shr 1= 00000011b).
Типи даних
- Цілі типи
Назва типу | Діапазон значень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 |
Стандартні підпрограми й сталі
- 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 — в протилежному випадку.
Спадщина Pascal
Разом із популярністю мови стало відомим і ім'я Ніклауса Вірта. Працюючи у Швейцарському федеральному технічному інституті разом із своїми учнями і послідовниками удосконалював теорію мови програмування загального використання. Так у 1980 році з'явилась Modula (хоча коли говорять "Modula", мають на увазі ). стала завершенням розвитку лінії структурного програмування. У 1990 році — з'явився Oberon що вже використовував принципи ООП (хоча об'єктно-орієнтоване програмування було можливим вже у версії 5.5 однієї з найпопулярніших реалізацій мови — Turbo Pascal).
Тепер можна говорити про існування родини Pascal-подібних мов, до яких належать Pascal, , Oberon, , Active Oberon, .
Мова програмування Zonnon для платформи .NET, як і її попередники, була створена у Швейцарському федеральному технологічному інституті у Цюриху. Основний наголос у ній зроблено на простоту, ясний синтаксис та модульність. Zonnon увібрав у себе риси Active Oberon та C#. Мова Zonnon додала Паскалю нові особливості, включаючи процеси в об'єктах, перевантаження операторів та обробку винятків.
Поширені реалізації
Приклади програм
Класичний приклад:
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.
Примітки
- https://salsa.debian.org/debian/mime-support/blob/debian/3.61/mime.types
- (PDF). Архів оригіналу (PDF) за 16 липня 2011. Процитовано 4 грудня 2007.
- (PDF). Архів оригіналу (PDF) за 28 липня 2011. Процитовано 4 грудня 2007.
Див. також
Посилання
- Обговорення мови на українському форумі програмістів [ 20 вересня 2015 у Wayback Machine.]
- Тексти програм на Pascal [ 3 жовтня 2010 у Wayback Machine.] (рос.)
- Офіційний сайт TMT Pascal [ 8 лютого 2011 у Wayback Machine.] (англ.)
- Неофіційний сайт TMT Pascal [ 11 жовтня 2010 у Wayback Machine.] (рос.)
- Версії компілятору Borland Pascal [ 17 листопада 2010 у Wayback Machine.] (англ.)
- Опис версій компілятору Turbo Pascal [ 31 січня 2010 у Wayback Machine.] (англ.)
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Paskal Pascal algoritmichna mova programuvannya universalnogo priznachennya Isnuyut dialekti movi z pidtrimkoyu ob yektno oriyentovanogo programuvannya V 1990 roci bulo zatverdzheno standart ISO 7185 1990 Pascal ta ISO 10206 1990 Extended Pascal Pascal Paskal Paradigmaimperativna strukturnaData poyavi1970TvorciNiklaus VirtRozrobnikNiklaus VirtSistema tipizaciyistatichna zhorstka bezpechnaOsnovni realizaciyi PDP 11 PDP 10 IBM System 370 HP en DialektiUCSD Borland TurboPid vplivom vidALGOLVplinula naOberon Ada Delphi VHDL SCARZvichajni rozshirennya fajliv pp p 1 abo pas 1 Instrukciyi u Vikipidruchniku Mediafajli u VikishovishiIstoriya viniknennya i osoblivosti moviPershim kompilyatorom movi Pascal stav ETH Pascal stvorenij u 1970 mu Nazva ETH pohodit vid nazvi nimeckoyi nazvi tehnichnogo universitetu Cyuriha nim Eidgenossische Technische Hochschule Zurich de kompilyator bulo rozrobleno Tvorcem movi stav Niklaus Virt Naprikinci togo zh roku Virt oprilyudniv pershij oficijnij opis movi sintaksisu ta semantiki Nova versiya movi pobachila svit u 1972 roci Todi zh Virt ta jogo anglijskij kolega Charlz Entoni Goar vipustili aksiomatichnij opis movi Pascal U 1969 roci Virt doruchiv rozrobku kompilyatora odnomu zi svoyih studentiv E Marm ye Na toj chas Marm ye volodiv lishe Fortranom i pisav kompilyator viklyuchno ciyeyu movoyu Pislya napisannya kompilyatora jogo perepisali na samomu Paskali Yak zgaduvav potim Virt vibir Fortrana buv serjoznoyu pomilkoyu bo u nomu ne mozhna adekvatno predstavlyati skladni strukturi danih kompilyatora Pascal sho lishe zaplutuvalo programu Nastupna sproba stvorennya kompilyatora 1970 roku pochalasya z chitkogo formulyuvannya opisu na samomu Paskali Sintaksichnij analiz novogo odnoprohidnogo kompilyatora realizovuvavsya za dopomogoyu rekursiyi Komandu rozrobnikiv sklali U Amman E Marm ye R Shild Pislya togo yak kompilyator bulo napisano na she nerealizovanij movi Shild poyihav dodomu de protyagom dvoh tizhniv uruchnu translyuvav programu v dopomizhnu nizkorivnevu movu U seredini 1970 roku kompilyator ETH Pascal buv gotovij ETH Pascal buv cikavij nasampered tim sho stav vin odniyeyu z pershih realizacij mov visokogo rivnya napisanih na samij sobi na dva roki viperedivshi kompilyator Si U 1973 roci bula stvorena abstraktna Pascal mashina P mashina yaka vikonuvala specialnij P kod Shob virishiti problemu sumisnosti kompilyatora Virt virishiv skoristatisya perevirenimi chasom metodami interpretaciyi Najvidomishimi z rishenen yaki pereduvali P kodu mozhna nazvati realizaciyu movi Snobol 4 R Grisvold u 1967 roci de yak kod abstraktnoyi mashini vikoristovuvalasya mova SIL Pochatkova meta rozrobki movi diktuvalasya potreboyu instrumenta dlya navchannya programuvannyu yak sistematichnij disciplini Pascal nalezhit do Algol podibnih mov programuvannya oskilki vikoristovuye semantiku Algola Odnak Pascal mav suttyeve udoskonalennya zhorstku tipizaciyu Ce oznachalo sho prisvoyuvannya mozhna bulo vikonuvati lishe dlya zminnih sho nalezhat do odnogo tipu odnochasno vkazuvalis pravila za yakimi tipi vvazhalis odnakovimi Ce udoskonalennya suttyevo pokrashilo stil programuvannya oskilki znachnu chastinu pomilok vdavalos viyaviti she na etapi kompilyaciyi sho zbilshuvalo nadijnist program Odnak mova rozroblyalas yak doslidnickij proekt i pervisnij Pascal buv malo pridatnij dlya napisannya velikih proektiv oskilki programu ne mozhna bulo sklasti z kilkoh programnih chastin prosto ne bulo peredbacheno takoyi mozhlivosti Ale cya mova programuvannya shvidko zavoyuvala populyarnist u navchalnih zakladah pri vivchenni programuvannya A koli z yavilis dialekti movi de mozhlivim bulo okreme kompilyuvannya programnih chastin Pascal stav zasobom napisannya velikih programnih sistem Isnuye ryad ob yektivnih prichin yaki obumovili vidatnij uspih movi Pascal Sered nih u pershu chergu potribno vkazati taki Mova v prirodnij i elegantnij formi vidbila najvazhlivishi suchasni koncepciyi tehnologiyi rozrobki program Zavdyaki svoyij kompaktnosti konceptualnij cilisnosti j ortogonalnosti ponyat a takozh vdalomu originalnomu opisu zaproponovanomu avtorom movi Pascal viyavivsya duzhe legkim dlya vivchennya j osvoyennya Nezvazhayuchi na vidnosnu prostotu movi vona viyavilas pridatnoyu dlya duzhe shirokogo spektra zastosunkiv u tomu chisli dlya rozrobki duzhe velikih i skladnih program napriklad operacijnih sistem Pascal duzhe tehnologichnij dlya realizaciyi praktichno usih u tomu chisli i netradicijnih mashinnih arhitektur Stverdzhuyetsya sho rozrobka Pascal translyatora majzhe ne perevishuye za trudomistkistyu garnoyi diplomnoyi roboti vipusknika vishu Mova Pascal standartizovana v bagatoh krayinah a u 1983 roci bulo prijnyato mizhnarodnij standart ISO 7185 1983 Turbo Pascal ta Borland PascalDokladnishe Turbo Pascal ta Delphi Zagalni vidomosti Turbo Pascal 1 0 IDE 1983 rik Borland Pascal 7 0 IDE 1992 rik Odniyu z najposhirenishih realizacij movi Pascal stav stvorenij kompaniyeyu Borland Turbo Pascal piznishe Borland Pascal a potim Delphi Turbo Pascal rozshirennya amerikanskogo standartu ANSI Pascal yake vrahovuye arhitekturni osoblivosti MS DOS ta MS Windows i postachalosya zi znachnimi za obsyagom i riznomanitnosti paketami standartnih procedur Taki principovi novovvedennya yak aparat moduliv i ob yektno oriyentovani zasobi polegshuvali konstruyuvannya velikih programnih sistem na osnovi tehnologiyi modulnogo programuvannya Kompilyator Turbo Pascal pracyuvav za odnoprohidnoyu shemoyu realizuvav funkciyi redaguvannya zv yazkiv formuvav na vihodi gotovij do vikonannya kod Kompilyator zdijsnyuvav shirokij nabir lokalnih optimizacij zgortannya konstant viklyuchennya nevikoristovuvanogo kodu i zajvih danih optimizaciya operacij i t p sho spriyalo visokij efektivnosti kincevih program Sistema Turbo Pascal bula integrovanim seredovishem IDE yake mistilo nizku komponentiv sho v sukupnosti pidtrimuvali robotu zi stvorennya program Sistema mistila universalnij tekstovij redaktor kompilyator vhidnoyi movi redaktor zv yazkiv i vbudovanij simvolnij znevadzhuvach Bagatovikonnij interfejs iz rozvinenoyu sistemoyu menyu i doskonaloyu dovidkovoyu sistemoyu zabezpechuvav visoku produktivnist praci programista nenejtralno Borland Pascal 7 kompilyuvav programi dlya DOS ta OS Windows 1 0 Windows 2 0 Windows 3 x a takozh mistiv nizku dodatkovih utilit ta kompilyatoriv na kshtalt TPW BPW redaktor resursiv ikonok grafichnih fajliv kursoriv tosho ta inshi Kompilyatori Turbo Pascal 7 0 ta Borland Pascal 7 x Interfejs koristuvacha nabuv inshogo viglyadu Programa kompilyuyetsya v mashinni komandi dlya procesoriv 8086 8088 80186 80188 80286 80386 BP 7 0 7 01 ta sumisnih iz nimi Obrobku chisel iz ruhomoyu komoyu mozhlivo kompilyuvati yak v instrukciyi spivprocesoriv 8087 80187 80287 chi sumisnih z nimi tak i v komandi emulyaciyi Alfavit movi Identifikatori u movi Pascal formuyutsya z latinskih liter A Z a z cifr 0 9 ta znaku pidkreslennya Takozh vikoristovuyutsya specialni simvoli lt gt Bud yakij identifikator maye pochinatisya z latinskoyi literi abo simvolu pidkreslennya angl underscore viklyuchennya stanovlyat lishe mitki Na vidminu vid Si v Paskali ne vrahovuyetsya registr liter Sluzhbovi slova Sluzhbove slovo yavlyaye soboyu nepodilne utvorennya zmist yakogo fiksovanij movoyu Sluzhbovi slova ne mozhna vikoristovuvati yak identifikatori Komentari v kodi programi oformlyuyutsya figurnimi duzhkami komentar abo zh spoluchennyam zvichajnih duzhok iz zirochkoyu komentar Zarezervovani slova 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 Vikoristannya imen psevdomasiviv Port PortW Mem MemW MemL ne viklikaye pomilki ale unemozhlivlyuye yih podalshe zastosuvannya Struktura programi Vrahovuyuchi te sho dlya imen mozhna zastosovuvati tilki latinski literi vsi nazvi parametriv podani anglijskoyu Umovni poznachennya lt gt obov yazkovij parametr neobov yazkovij parametr Opis direktiv makrosiv lt directive gt lt switch gt lt directive gt lt switch gt Misce opisu direktiv makrosiv ye dovilnim Deyaki direktivi mayut bilsh nizh odne znachennya Napriklad I lt filename pas gt ta I lt switch gt L lt switch gt L lt filename obj gt Bilshist direktiv maye odnakovu formu zapisu ale ye j vinyatki na kshtalt M lt value gt lt value gt lt value gt IFDEF lt name gt ELSE INC Priklad 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 lt gt 0 then Rewrite f 200 end Nazva programi im ya golovnogo modulya program lt name gt input output Priklad X program t80c187 function New ByteBool begin end begin t80c187 New New end Stvorennya vidkompilovanih moduliv unit new interface implementation end Pidklyuchennya vidkompilovanih moduliv uses lt unitNam0 gt lt unitNam1 gt Poryadok pidklyuchennya overlejnih moduliv inshij ta zdijsnyuyetsya za dopomogoyu direktivi O Priklad uses crt dos vbe30 var screen Text begin Crt AssignCrt screen AssignCrt screen end Opis mitok Mitka cile chislo vid 0 do 9999 label lt number0 gt lt number1 gt Priklad label 0 9999 begin 0 goto 9999 9999 goto 0 end Opis konstant const lt name0 gt lt value gt lt name1 gt lt value gt Opis statichnih zminnih const lt name3 gt lt type gt lt value gt lt name4 gt lt type gt lt value gt Yaksho statichna zminna opisana v proceduri abo funkciyi to pislya vikliku ostannoyi stek dlya zminnoyi ne rezervuyetsya misce vzhe ye v samomu kodi sho dozvolyaye zaoshaditi chas Opis novih tipiv v tomu chisli procedurnih i funkcijnih struktur ta ob yektiv type lt name 0 gt record end lt name 1 gt lt type or range gt lt name 2 gt object father s name private lt variables or methods gt public lt variables or methods gt end Opis zminnih var lt name0 gt lt name1 gt lt type or range gt var lt name3 gt lt name4 gt Byte absolute lt segment offset gt Prikladi 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 Opis procedur ta funkcij konstruktoriv ta destruktoriv procedure lt identifier gt parameters directives function lt identifier gt parameters lt type gt directives Priklad const test Word 0001 var procCall Procedure var DATA temp Byte procedure SwitchLowBytes var DATA far 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 procedure switch low bytes var data type bytes array 0 1 of Byte begin temp bytes data 0 bytes data 0 bytes data 1 bytes data 1 temp end begin procCall SwitchLowBytes WriteLn test procCall test WriteLn test switch low bytes test WriteLn test end U programi maye buti shonajmenshe dva zarezervovanih slova begin ta end Rozdilnikom mizh poslidovnimi operatorami ye krapka z komoyu Kilkist zarezervovanih sliv begin ta end u programi ne obov yazkovo maye zbigatisya Napriklad begin asm end end unit new interface implementation end type HBrush record end begin end Prisvoyennya znachennya vidbuvayetsya tak lt typed address gt lt typed address gt lt typed address gt lt value gt Pislya ostannogo end neobhidno postaviti krapku Matematichni operaciyi dodavannya vidnimannya mnozhennya dilennya div cila chastina vid dilennya napriklad 7 div 2 3 mod ostacha vid dilennya napriklad 7 mod 2 1 dorivnyuye lt gt ne dorivnyuye gt bilshe lt menshe gt bilshe abo rivne lt menshe abo rivne shl pobitovij zsuv vlivo napriklad 00000110b shl 1 00001100b shr pobitovij zsuv vpravo napriklad 00000111b shr 1 00000011b Tipi danih Cili tipi Nazva tipu Diapazon znachen10 Rol starshogo bitu ta rozmir biti Byte 0 255 bezznakovij 8 Word 0 65535 bezznakovij 16 Char 0 255 8 Boolean FALSE TRUE 8 ByteBool FALSE TRUE 8 WordBool FALSE TRUE 16 LongBool FALSE TRUE 32 ShortInt 128 127 zi znakom 8 Integer 32768 32767 zi znakom 16 Longint 2147483648 2147483647 zi znakom 32 Pointer 00000000 FFFFFFFF 32 Dijsni tipi Nazva tipu Diapazon znachen z urahuvannyam dirok Kilkist znachushih cifr Rozmir biti 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 Inshi tipi Nazva tipu Rozmir Bajt String 1 1 255 File 8 40 80 Text 128 128 Standartni pidprogrami j stali Abs X obchislennya absolyutnogo znachennya modulyu H ArcTan X obchislennya kuta tangens yakogo dorivnyuye H tobto matematichnij arctg X znachennya kuta podano v radianah i mozhe znahoditisya v diapazoni vid p 2 do p 2 Dlya peretvorennya znachennya kuta z radiannoyi miri v gradusnu neobhidno znachennya kuta pomnozhiti na chislo 180 p Rezultat maye dijsnij tip Cos X obchislennya kosinusa H parametr zadaye znachennya kuta v radianah Exp x obchislennya znachennya eksponenti argumentu ex Rezultat zavzhdi maye dijsnij tip Frac X znahodzhennya drobovoyi chastini H Rezultat maye dijsnij tip Int X znahodzhennya ciloyi chastini H drobova chastina vidkidayetsya Rezultat maye dijsnij tip Ln x obchislyuyetsya naturalnij logarifm argumentu Rezultat maye dijsnij tip Za dopomogoyu funkcij Exp ta Ln mozhna obchisliti dovilnu stepin chisla tak ab Exp b Ln a vidpovidno korin mozhna podati tak samo a1 b tobto korin stepenya b z a Exp 1 b Ln a Pi povertaye znachennya chisla p 3 1415926 Sin X obchislennya sinusa H Parametr zadaye znachennya kuta v radianah Dlya peretvorennya znachennya kuta z radiannoyi miri v gradusnu neobhidno znachennya kuta pomnozhiti na chislo 180 p Rezultat maye dijsnij tip Sqr X pidnesennya do kvadrata znachennya H Tip rezultatu zbigayetsya z tipom parametra Sqrt X obchislennya kvadratnogo korenya z H Tip rezultatu dijsnij Random generuye znachennya vipadkovogo chisla z diapazonu vid 0 do 0 99 Tip rezultatu dijsnij Random P generuye znachennya vipadkovogo chisla z diapazonu vid 0 do P Tip rezultatu cilij Shob vipadkovi chisla buli bilsh vipadkovimi neobhidno periodichno zminyuvati bazu generaciyi Dlya cogo vikoristovuyetsya procedura Randomize sho dozvolyaye pri kozhnomu novomu zapusku programi otrimuvati rizni vipadkovi chisla Dlya velichin perelichuvalnih tipiv vsi cili liternij ta bulevij isnuyut dekilka standartnih funkcij ta procedur Dec x dx procedura zmenshuye znachennya zminnoyi H na velichinu DX a yaksho parametr DX ne zadanij na 1 Inc x dx procedura zbilshuye znachennya zminnoyi H na velichinu DX a yaksho parametr DX ne zadanij na 1 Pred X funkciya sho viznachaye poperednye znachennya dlya danogo tipu Napriklad Pred 5 4 Pred True False Pred B A Succ X funkciya sho viznachaye nastupne znachennya dlya danogo tipu Napriklad Succ 5 6 Succ True False Succ A B Odd X chislo pereviryayetsya na neparnist Rezultat dorivnyuye true yaksho argument neparnij i false v protilezhnomu vipadku Spadshina PascalRazom iz populyarnistyu movi stalo vidomim i im ya Niklausa Virta Pracyuyuchi u Shvejcarskomu federalnomu tehnichnomu instituti razom iz svoyimi uchnyami i poslidovnikami udoskonalyuvav teoriyu movi programuvannya zagalnogo vikoristannya Tak u 1980 roci z yavilas Modula hocha koli govoryat Modula mayut na uvazi stala zavershennyam rozvitku liniyi strukturnogo programuvannya U 1990 roci z yavivsya Oberon sho vzhe vikoristovuvav principi OOP hocha ob yektno oriyentovane programuvannya bulo mozhlivim vzhe u versiyi 5 5 odniyeyi z najpopulyarnishih realizacij movi Turbo Pascal Teper mozhna govoriti pro isnuvannya rodini Pascal podibnih mov do yakih nalezhat Pascal Oberon Active Oberon Mova programuvannya Zonnon dlya platformi NET yak i yiyi poperedniki bula stvorena u Shvejcarskomu federalnomu tehnologichnomu instituti u Cyurihu Osnovnij nagolos u nij zrobleno na prostotu yasnij sintaksis ta modulnist Zonnon uvibrav u sebe risi Active Oberon ta C Mova Zonnon dodala Paskalyu novi osoblivosti vklyuchayuchi procesi v ob yektah perevantazhennya operatoriv ta obrobku vinyatkiv Poshireni realizaciyi Turbo Pascal Free PascalPrikladi programKlasichnij priklad program Hello World begin Writeln Hello World end Rekursivnij variant obchislennya faktorialu 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 Primitkihttps salsa debian org debian mime support blob debian 3 61 mime types PDF Arhiv originalu PDF za 16 lipnya 2011 Procitovano 4 grudnya 2007 PDF Arhiv originalu PDF za 28 lipnya 2011 Procitovano 4 grudnya 2007 Div takozhBorland Delphi CrtPosilannyaPascal u sestrinskih Vikiproyektah Portal Programuvannya Teksti u Vikipidruchniku Fajli u Vikishovishi Obgovorennya movi na ukrayinskomu forumi programistiv 20 veresnya 2015 u Wayback Machine Teksti program na Pascal 3 zhovtnya 2010 u Wayback Machine ros Oficijnij sajt TMT Pascal 8 lyutogo 2011 u Wayback Machine angl Neoficijnij sajt TMT Pascal 11 zhovtnya 2010 u Wayback Machine ros Versiyi kompilyatoru Borland Pascal 17 listopada 2010 u Wayback Machine angl Opis versij kompilyatoru Turbo Pascal 31 sichnya 2010 u Wayback Machine angl Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi