summaryrefslogtreecommitdiffhomepage
path: root/ru-ru/pascal-ru.html.markdown
blob: 5ea856bc46ca5d8ab524f92dd9984303d2be58cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
---
language: Pascal
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"]
lang: ru-ru
---


>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. // конец программы

```