learnxinyminutes-docs/ru/pascal.md
2024-12-08 23:20:53 -07:00

215 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
filename: learnpascal-ru.pas
contributors:
- ["Ganesha Danu", "http://github.com/blinfoldking"]
- ["Keith Miyake", "https://github.com/kaymmm"]
translators:
- ["Anton 'Dart' Nikolaev", "https://github.com/dartfnm"]
---
>Pascal - это процедурный язык программирования, который Никлаус Вирт разработал в 196869 годах и опубликовал в 1970 году как небольшой эффективный язык, предназначенный для поощрения хороших методов программирования с использованием структурированного программирования и структурирования данных. Он назван в честь французского математика, философа и физика Блеза Паскаля.
>
>source : [wikipedia](https://ru.wikipedia.org/wiki/Паскаль_(язык_программирования)))
Для компиляции и запуска программы на языке Паскаль вы можете использовать бесплатный компилятор 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;
// динамически расширяемые массивы требуют указания длины перед их использованием.
// дополнительные целочисленные типы данных
b : byte; // диапазон [0..255]
shi : shortint; // диапазон [-128..127]
smi : smallint; // диапазон [-32,768..32,767] (стандартный Integer)
w : word; // диапазон [0..65,535]
li : longint; // диапазон [-2,147,483,648..2,147,483,647]
lw : longword; // диапазон [0..4,294,967,295]
c : cardinal; // тоже что и longword
i64 : int64; // диапазон [-9223372036854775808..9223372036854775807]
qw : qword; // диапазон [0..18,446,744,073,709,551,615]
// дополнительные вещественные типы данных (дробные)
rr : real; // диапазон зависит от платформы (т.е. 8-бит, 16-бит и т.д.)
rs : single; // диапазон [1.5E-45..3.4E38]
rd : double; // диапазон [5.0E-324 .. 1.7E308]
re : extended; // диапазон [1.9E-4932..1.1E4932]
rc : comp; // диапазон [-2E64+1 .. 2E63-1]
Begin
int := 1; // так мы присваиваем значение переменной
r := 3.14;
ch := 'a';
str := 'apple';
bool := true;
// Паскаль не чувствителен к регистру
// арифметические операции
int := 1 + 1; // int = 2; заменяет предыдущее значение
int := int + 1; // int = 2 + 1 = 3;
int := 4 div 2; //int = 2; 'div' операция деления, с отбрасыванием дробной части
int := 3 div 2; //int = 1;
int := 1 div 2; //int = 0;
bool := true or false; // bool = true
bool := false and true; // bool = false
bool := true xor true; // bool = false
r := 3 / 2; // деления вещественных чисел с дробной частью
r := int; // вещественной переменной можно присвоить целочисленное значение, но не наоборот
my_str[0] := 'a'; // для доступа к элементу массива нужно указать его индекс в квадратных скобках ([0])
c := str[1]; // первая буква во всех Строках находится по индексу [1]
str := 'hello' + 'world'; //объединяем 2 строки в одну
SetLength(my_2d,10,10); // инициализируем динамически расширяемый массив
// задаём размер 2х-мерного массива 10×10
// первый элемент массива лежит в индексе [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", поскольку фиктивная переменная не изменяется.
End. // конец программы
```