Pascal
- Русское название:
- Паскаль
- Дата создания:
- 1970
- Создан под влиянием:
- Повлиял на:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .pas
- Диалекты:
- Реализации и версии (свернуть все | развернуть все):
-
- Borland Pascal
- Free Pascal
- GNU Pascal Compiler
- HP Pascal
- HiSoft Pascal
- IP Pascal
- Irie Pascal
-
Pascal ABC
- Pascal ABC 1.7
- Pascal ABC 1.8
- Pascal ABC 1.9
- Pascal ABC 2.0
- Pascal ABC 2.1
- Pascal ABC 2.2
- Pascal ABC 2.3
- Pascal ABC 2.4
- Pascal ABC 2.5
- Pascal ABC 2.5.3
- Pascal ABC 2.6
- Pascal ABC 2.6.2
- Pascal ABC 2.6.3
- Pascal ABC 2.6.4
- Pascal ABC 2.6.5
- Pascal ABC 2.7
- Pascal ABC 2.7.2
- Pascal ABC 2.7.3
- Pascal ABC 2.7.4
- Pascal ABC 3.0
- Pascal-XT
- PascalABC.NET
- Prospero Extended Pascal
- Turbo Pascal
- UCSD Pascal
- Virtual Pascal
Pascal — это императивный язык программирования, разработанный Никлаусом Виртом в 1970 в качестве языка обучения структурному программированию. Название языку дано в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля. Первоначально язык компилировался в байт-код, подобно языку Java.
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис интуитивно понятен даже при первом знакомстве с языком.
Тем не менее, первоначально язык обладал множеством недостатков: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п.
Диалект Object Pascal поддерживает парадигму объектно-ориентированного программирования.
Элементы синтаксиса:
| Комментарий до конца строки | нет |
|---|---|
| Комментарии, которые могут быть вложенными | (*...*) или {...} или (*...} или {...*) |
| Регистрозависимость | нет |
| Регулярное выражение идентификатора переменной | [A-Za-z_][A-Za-z0-9_]* |
| Регулярное выражение идентификатора функции | [A-Za-z_][A-Za-z0-9_]* |
| Присваивание значения переменной | varname := value |
| Объявление переменной | varname: type |
| Объявление переменной с присваиванием значения | varname: type = value |
| Группировка выражений | ( ... ) |
| Блок | begin ... end |
| Тождественное равенство | = |
| Тождественное неравенство | <> |
| Сравнение | < > <= >= |
| Определение функции | function f(p1: type1; p2: type2; ...): returntype; |
| Вызов функции | f(a, b, ...) |
| Вызов функции без параметров | f |
| Последовательность | ; |
| Если - то | if condition then trueBlock |
| Если - то - иначе | if condition then trueBlock else falseBlock |
| Бесконечный цикл | while true do loopBody |
| Цикл с предусловием | while condition do loopBody |
| Цикл с постусловием | repeat loopBody until condition |
| Цикл for - next для диапазона целых чисел с инкрементом на 1 | for i := first to last do loopBody |
| Цикл for - next для диапазона целых чисел с декрементом на 1 | for i := last downto first do loopBody |
IDE/Редакторы:
Примеры:
Факториал:
Пример для версий Free Pascal 1.0.6, Free Pascal 2.0.4, Free Pascal 2.2.0, Free Pascal 2.2.4, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0Используется рекурсивное определение факториала.
Этот пример работает как в Turbo Pascal, так и в Free Pascal, но с несколько разным результатом. В обеих реализациях возникает арифметическое переполнение при вычислении факториалов 13-16, но Free Pascal сообщает об ошибке:
13! = Runtime error 215 at $004013C7
$004013C7
$00401449
$004063E0
в то время как Turbo Pascal не обнаруживает ошибку и просто выводит неправильные значения:
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184
Следует отметить, что в версиях Turbo Pascal 3.0 и младше этот пример не работает из-за отсутствия типа данных longint.
program factorial;
function fact(n: integer): longint;
begin
if (n = 0) then
fact := 1
else
fact := n * fact(n - 1);
end;
var
n: integer;
begin
for n := 0 to 16 do
writeln(n, '! = ', fact(n));
end.
Числа Фибоначчи:
Пример для версий Free Pascal 2.2.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0Этот пример использует рекурсивное определение чисел Фибоначчи.
program fibonacci;
function fib(n:integer): integer;
begin
if (n <= 2) then
fib := 1
else
fib := fib(n-1) + fib(n-2);
end;
var
i:integer;
begin
for i := 1 to 16 do
write(fib(i), ', ');
writeln('...');
end.
Hello, World!:
Пример для версий Free Pascal 2.2.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0program helloworld;
begin
writeln('Hello, World!');
end.
Факториал:
Пример для версий Free Pascal 2.0.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0Этот пример работает точно так же, как основной рекурсивный пример для Pascal, но использует тип real для хранения значений факториала. Команда writeln(f:-1:0) выводит дробное число f с 0 цифр после десятичной запятой и выравнивает его по левому краю.
program factorial;
function fact(n: integer): real;
begin
if (n = 0) then
fact := 1
else
fact := n * fact(n - 1);
end;
var
n: integer;
begin
for n := 0 to 16 do
writeln(n, '! = ', fact(n):-1:0);
end.
Комментарии
]]>blog comments powered by Disqus
]]>