mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
215 lines
12 KiB
Markdown
215 lines
12 KiB
Markdown
|
---
|
|||
|
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 - это процедурный язык программирования, который Никлаус Вирт разработал в 1968–69 годах и опубликовал в 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. // конец программы
|
|||
|
```
|
|||
|
|