>Pascal - это процедурный язык программирования, который Никлаус Вирт разработал в 1968–69 годах и опубликовал в 1970 году как небольшой эффективный язык, предназначенный для поощрения хороших методов программирования с использованием структурированного программирования и структурирования данных. Он назван в честь французского математика, философа и физика Блеза Паскаля.
Для компиляции и запуска программы на языке Паскаль вы можете использовать бесплатный компилятор FreePascal. [Скачать здесь](https://www.freepascal.org/)
Либо современный бесплатный компилятор Паскаля нового поколения под платформу .Net [PascalABC.NET](http://pascalabc.net)
```pascal
// это комментарий
{
а вот это:
- комментарий на несколько строк
}
//объявляем имя программы
program learn_pascal; //<--незабываемставитьточкусзапятой(;)
const
{
это секция в которой вы должны объявлять константы
}
type
{
здесь вы можете объявлять собственные типы данных
}
var
{
секция для объявления переменных
}
begin //начало основной программы
{
тело вашей программы
}
end. // В конце основной программы обязательно должна стоять точка "."
```
```pascal
//объявление переменных
//вы можете сделать так
var a:integer;
var b:integer;
//или так
var
a : integer;
b : integer;
//или даже так
var a,b : integer;
```
```pascal
program Learn_More;
// Познакомимся с типами данных и с их операциями
const
PI = 3.141592654;
GNU = 'GNU''s Not Unix';
// имена константам принято давать ЗАГЛАВНЫМИ_БУКВАМИ (в верхнем регистре)
// их значения фиксированны т.е никогда не меняются во время выполнения программы
// содержат любой стандартный тип данных (integer, real, boolean, char, string)
type
ch_array : array [0..255] of char;
// массивы - это составной тип данных
// мы указываем индекс первого и последнего элемента массива ([0..255])
// здесь мы объявили новый тип данных содержащий 255 символов 'char'
// (по сути, это просто строка - string[256])
md_array : array of array of integer;
// массив в массиве - по сути является двумерным массивом
// можно задать массив нулевой (0) длины, а потом динамически расширить его
// это двумерный массив целых чисел
//Объявление переменных
var
int, c, d : integer;
// три переменные, которые содержат целые числа
// Тип "integer" это 16-битное число в диапазоне [-32,768..32,767]
r : real;
// переменная типа "real" принимает вещественные (дробные) значения
// в диапазоне [3.4E-38..3.4E38]
bool : boolean;
// переменная логического типа, принимающая булевы-значения: True/False (Правда/Ложь)
ch : char;
// эта переменная содержит значение кода одного символа
// тип 'char' это 8-битное число (1 байт), так что никакого Юникода
str : string;
// это переменная составного типа, являющееся строкой
// по сути, строка это массив в 255 символов длиною, по умолчанию
s : string[50];
// эта строка может содержать максимум 50 символов
// вы можете сами указать длину строки, чтобы минимизировать использование памяти
my_str: ch_array;
// вы можете объявлять переменные собственных типов
my_2d : md_array;
// динамически расширяемые массивы требуют указания длины перед их использованием.
// первый элемент массива лежит в индексе [0], последний [длина_массива-1]
for c := 0 to 9 do
for d := 0 to 9 do // переменные для счетчиков циклов должны быть объявлены
my_2d[c,d] := c * d;
// обращаться к многомерным массивам нужно с помощью одного набора скобок
End.
```
```pascal
program Functional_Programming;
Var
i, dummy : integer;
function factorial_recursion(const a: integer) : integer;
{ Функция расчёта Факториала целочисленного параметра 'a', рекурсивно. Возвращает целое значение }
// Мы можем объявлять локальные переменные внутри своей функции:
// Var
// local_a : integer;
Begin
If a >= 1 Then
factorial_recursion := a * factorial_recursion(a-1)
// возвращаем результат, присваивая найденное значение переменной с тем же именем, как у функции
Else
factorial_recursion := 1;
End; // Для завершения функции, используется символ ";" после оператора "End;"
procedure get_integer( var i : integer; dummy : integer );
{ Эта процедура ждёт от пользователя ввода целого числа и возвращает его значение через параметр i.
Если параметр функции начинается с 'var', это означает, что его значение было передано, по ссылке, то есть, оно может использоваться не только как входное значение, но и для возвращения дополнительных результатов работы функции.
Параметры функции (без 'var'), (такие как "dummy" (пустышка)), передаются по значению, и по сути являются - локальными переменными, таким образом изменения, внесенные внутри функции/процедуры, не влияют на значение переменной за её пределами.
}
Begin // начало процедуры
write('Введите целое число: ');
readln(i); // число, введённое пользователем, сохранится в переменной i
// и её значение будет доступно вызывающей подпрограмме
dummy := 4; // значение 'dummy' не будет влиять на значения переменной вне процедуры
End; // конец процедуры
Begin // главный блок программы
dummy := 3;
get_integer(i, dummy); // вызываем процедуру получения числа от пользователя
writeln(i, '! = ', factorial_recursion(i)); // ввыводим значение факториала от i
writeln('dummy = ', dummy);
// всегда выводит "3", поскольку фиктивная переменная не изменяется.