Основы PascalABC.NET: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 17: Строка 17:
=Синтаксис программ=
=Синтаксис программ=
Программы в данной IDE строятся так:
Программы в данной IDE строятся так:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
program <название_программы>;
program <название_программы>;
const
const
Строка 28: Строка 28:
<главный_код>;
<главный_код>;
end.
end.
</syntaxhighlight>
</source>
<text> - произвольный текст.
<text> - произвольный текст.
===Константы===
===Константы===
В данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так:
В данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
const
const
<имя> = <значение>;</source>
<имя> = <значение>;</syntaxhighlight>
Например:
Например:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
const
const
a = 12;
a = 12;
s = 'ABC.NET';</source>
s = 'ABC.NET';</syntaxhighlight>


===Секция «var»===
===Секция «var»===
Данная секция предназначена для переменных и массивов. Переменные объявляются так:
Данная секция предназначена для переменных и массивов. Переменные объявляются так:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: <тип>;
<имя>: <тип>;
</syntaxhighlight>
</source>


===Простейшие типы===
===Простейшие типы===
====Тип строка====
====Тип строка====
Тип строка - это тип переменных, который позволяет хранить в переменной любой текст. Объявление строковой переменной:
Тип строка - это тип переменных, который позволяет хранить в переменной любой текст. Объявление строковой переменной:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: string;
<имя>: string;
</syntaxhighlight>
</source>
Строки могут быть не более 255 символов. Изначальное значение строковых переменных - это «пустая строка» - <nowiki>''</nowiki>.
Строки могут быть не более 255 символов. Изначальное значение строковых переменных - это «пустая строка» - <nowiki>''</nowiki>.
{| class="wikitable"
{| class="wikitable"
Строка 67: Строка 67:
====Тип целое число integer====
====Тип целое число integer====
Кроме типа '''string''' в PascalABC.Net есть еще тип целое число - «'''integer'''». Само число a может принимать (в PascalABC.Net) значения от -2147483648 до 2147483647. Пример объявления переменной типа integer:
Кроме типа '''string''' в PascalABC.Net есть еще тип целое число - «'''integer'''». Само число a может принимать (в PascalABC.Net) значения от -2147483648 до 2147483647. Пример объявления переменной типа integer:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: integer;
<имя>: integer;
</syntaxhighlight>
</source>
{| class="wikitable"
{| class="wikitable"
|-
|-
Строка 88: Строка 88:
====Тип вещественное число real====
====Тип вещественное число real====
Декларация переменной типа '''real''':
Декларация переменной типа '''real''':
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: real;
<имя>: real;
</syntaxhighlight>
</source>
Пример присваивания переменной данного типа:
Пример присваивания переменной данного типа:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
a := 1.0; // Не 1,0!
a := 1.0; // Не 1,0!
a := 1; // Эквивалентно 1.0.
a := 1; // Эквивалентно 1.0.
</syntaxhighlight>
</source>
{| class="wikitable"
{| class="wikitable"
|-
|-
Строка 112: Строка 112:
====Тип символ====
====Тип символ====
Тип символ или «'''char'''» используется в основном для хранения одного любого символа вне зависимости от того, является ли данный символ буквой или цифрой. Объявление переменной символьного типа:
Тип символ или «'''char'''» используется в основном для хранения одного любого символа вне зависимости от того, является ли данный символ буквой или цифрой. Объявление переменной символьного типа:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: char;
<имя>: char;
</syntaxhighlight>
</source>


===Секция «begin - end»===
===Секция «begin - end»===
Данный раздел программы содержит все команды, выполняемые при ее запуске. Данная секция программы выглядит так:
Данный раздел программы содержит все команды, выполняемые при ее запуске. Данная секция программы выглядит так:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
begin
begin
<команда_1>;
<команда_1>;
Строка 125: Строка 125:
<команда_n>;
<команда_n>;
end.
end.
</syntaxhighlight>
</source>


===Комментарии===
===Комментарии===
Комментарий - это часть кода, которую игнорирует компилятор. Он создается следующим образом:
Комментарий - это часть кода, которую игнорирует компилятор. Он создается следующим образом:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
{
{
<текст_комментария>
<текст_комментария>
}
}
</syntaxhighlight>
</source>
Или:
Или:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
// <текст_комментария>
// <текст_комментария>
</syntaxhighlight>
</source>


==Массивы==
==Массивы==
Строка 145: Строка 145:
===Статические===
===Статические===
Статические массивы имеют фиксированный размер. Общий синтаксис объявления данных массивов выглядит так:
Статические массивы имеют фиксированный размер. Общий синтаксис объявления данных массивов выглядит так:
<source lang="pascal">
<syntaxhighlight lang="pascal">
var
var
<имя>: array [0..N - 1] of <тип>;
<имя>: array [0..N - 1] of <тип>;
</syntaxhighlight>
</source>
, где N - длина массива.
, где N - длина массива.


Пример:
Пример:
<source lang="pascal">
<syntaxhighlight lang="pascal">
const
const
N = 5;
N = 5;
Строка 185: Строка 185:
WriteFormat('{0} ', A[i]);
WriteFormat('{0} ', A[i]);
end.
end.
</syntaxhighlight>
</source>
[[Книга программиста/Задачи на PascalABC.Net#Вставка_элемента|Посмотреть статью с примером.]]
[[Книга программиста/Задачи на PascalABC.Net#Вставка_элемента|Посмотреть статью с примером.]]


Строка 191: Строка 191:
====Двумерные====
====Двумерные====
Матрица - это n-мерный список значений, имеющий свой тип и ограниченный некоторыми значениями. Пока будем рассматривать только статические двухмерные и трехмерные матрицы. Перед тем, как перейти к их изучению вспомни таблицы в Excel. Каждая таблица имеет свой размер - ширину и длину. Возьмем за правило ассоциировать двухмерные матрицы с таблицами. Объявление матрицы:
Матрица - это n-мерный список значений, имеющий свой тип и ограниченный некоторыми значениями. Пока будем рассматривать только статические двухмерные и трехмерные матрицы. Перед тем, как перейти к их изучению вспомни таблицы в Excel. Каждая таблица имеет свой размер - ширину и длину. Возьмем за правило ассоциировать двухмерные матрицы с таблицами. Объявление матрицы:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: array [0..N - 1, 0..M - 1] of <тип>;
<имя>: array [0..N - 1, 0..M - 1] of <тип>;
</syntaxhighlight>
</source>
, где N, M количество строчек и столбцов соответственно.
, где N, M количество строчек и столбцов соответственно.


====Трехмерные====
====Трехмерные====
Трехмерный матрицы обладают третьим измерением:
Трехмерный матрицы обладают третьим измерением:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: arr, 0..K - 1] of <тип>;
<имя>: arr, 0..K - 1] of <тип>;
</syntaxhighlight>
</source>


====N-мерные матрицы====
====N-мерные матрицы====
Декларация N-мерной матрицы:
Декларация N-мерной матрицы:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
<имя>: array [0..A - 1, 0..B - 1, ..., 0..Z - 1] of <тип>;
<имя>: array [0..A - 1, 0..B - 1, ..., 0..Z - 1] of <тип>;
</syntaxhighlight>
</source>
, где A..Z означают количество элементов в соответствующем измерении.
, где A..Z означают количество элементов в соответствующем измерении.


Строка 218: Строка 218:
! Пример объявления массива: !! Статический !! Динамический !! Вызов SetLength (для динамического массива)
! Пример объявления массива: !! Статический !! Динамический !! Вызов SetLength (для динамического массива)
|-
|-
| Векторный || <source lang="pascal"><имя>: array [0..N - 1] of <тип></source> || <source lang="pascal"><имя>: array of <тип></source> || <source lang="pascal">SetLength(<имя>, N)</source>
| Векторный || <syntaxhighlight lang="pascal"><имя>: array [0..N - 1] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal"><имя>: array of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal">SetLength(<имя>, N)</syntaxhighlight>
|-
|-
| Двумерный || <source lang="pascal"><имя>: array [0..N - 1, 0..M - 1] of <тип></source> || <source lang="pascal"><имя>: array [,] of <тип></source> || <source lang="pascal">SetLength(<имя>, N, M)</source>
| Двумерный || <syntaxhighlight lang="pascal"><имя>: array [0..N - 1, 0..M - 1] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal"><имя>: array [,] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal">SetLength(<имя>, N, M)</syntaxhighlight>
|-
|-
| Трехмерный || <source lang="pascal"><имя>: array [0..N - 1, 0..M - 1, 0..K - 1] of <тип></source> || <source lang="pascal"><имя>: array [,,] of <тип></source> || <source lang="pascal">SetLength(<имя>, N, M, K)</source>
| Трехмерный || <syntaxhighlight lang="pascal"><имя>: array [0..N - 1, 0..M - 1, 0..K - 1] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal"><имя>: array [,,] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal">SetLength(<имя>, N, M, K)</syntaxhighlight>
|}
|}
===Понятие индекса массива===
===Понятие индекса массива===
Индекс массива - это номер элемента массива. Индекс может принимать значения [0, N - 1], где N - количество элементов некоторой размерности. Обращение к элементу одномерного массива с некоторым индексом:
Индекс массива - это номер элемента массива. Индекс может принимать значения [0, N - 1], где N - количество элементов некоторой размерности. Обращение к элементу одномерного массива с некоторым индексом:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
<имя>[<индекс>]
<имя>[<индекс>]
</syntaxhighlight>
</source>
Составим таблицу, которую следует запомнить:
Составим таблицу, которую следует запомнить:
{| class="wikitable sortable"
{| class="wikitable sortable"
Строка 234: Строка 234:
! N-мерный массив !! Общий синтаксис указания элемента массива || Пример
! N-мерный массив !! Общий синтаксис указания элемента массива || Пример
|-
|-
| Векторный || <source lang="Pascal"><имя>[i]</source> || <source lang="Pascal">A[1]</source>
| Векторный || <syntaxhighlight lang="Pascal"><имя>[i]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1]</syntaxhighlight>
|-
|-
| Двумерный || <source lang="Pascal"><имя>[i, j]</source> || <source lang="Pascal">A[1, 1]</source>
| Двумерный || <syntaxhighlight lang="Pascal"><имя>[i, j]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1, 1]</syntaxhighlight>
|-
|-
| Трехмерный || <source lang="Pascal"><имя>[i, j, k]</source> || <source lang="Pascal">A[1, 1, 1]</source>
| Трехмерный || <syntaxhighlight lang="Pascal"><имя>[i, j, k]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1, 1, 1]</syntaxhighlight>
|}
|}
Где i, j, k - индексы.
Где i, j, k - индексы.
===Индекс в виде значения элемента массива===
===Индекс в виде значения элемента массива===
Индексом может быть значение элемента массива:
Индексом может быть значение элемента массива:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
<имя>[<имя_1>[индекс]]
<имя>[<имя_1>[индекс]]
</syntaxhighlight>
</source>


==Операторы, стандартные процедуры и функции==
==Операторы, стандартные процедуры и функции==
Строка 251: Строка 251:
====Вывод текста====
====Вывод текста====
Вывести текст - это значит отобразить текст на экране. Общий синтаксис для вывода текста выглядит так:
Вывести текст - это значит отобразить текст на экране. Общий синтаксис для вывода текста выглядит так:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
Write('<текст>');
Write('<текст>');
</syntaxhighlight>
</source>
====Вывод значений переменных====
====Вывод значений переменных====
Вывод значений произвольного количества переменных:
Вывод значений произвольного количества переменных:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
Write(<имя_1>, <имя_2>, ... , <имя_n>);
Write(<имя_1>, <имя_2>, ... , <имя_n>);
</syntaxhighlight>
</source>
Например:
Например:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
A, B, C: integer;
A, B, C: integer;
Строка 270: Строка 270:
Write(A, B, C);
Write(A, B, C);
end.
end.
</syntaxhighlight>
</source>
Для перехода на новую строку после вывода последнего значения используйте Writeln вместо Write.
Для перехода на новую строку после вывода последнего значения используйте Writeln вместо Write.


===Ввод данных с клавиатуры===
===Ввод данных с клавиатуры===
Чтение с клавиатуры - это процесс ввода данных с клавиатуры и запись в соответствующий элемент программы этих данных. Элементами программы являются как переменные, так и элементы массивов. Тип данных, вводимых с клавиатуры, должен соответствовать типу элемента, в который записываются данные с клавиатуры. Использование '''Readln''' для чтения с клавиатуры и перехода на новую строку:
Чтение с клавиатуры - это процесс ввода данных с клавиатуры и запись в соответствующий элемент программы этих данных. Элементами программы являются как переменные, так и элементы массивов. Тип данных, вводимых с клавиатуры, должен соответствовать типу элемента, в который записываются данные с клавиатуры. Использование '''Readln''' для чтения с клавиатуры и перехода на новую строку:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
Readln(<имя_переменной_1>, <имя_переменной_2>, ... ,<имя_переменной_n>);
Readln(<имя_переменной_1>, <имя_переменной_2>, ... ,<имя_переменной_n>);
</syntaxhighlight>
</source>


===Условный оператор===
===Условный оператор===
Общий синтаксис условного оператора if:
Общий синтаксис условного оператора if:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
if (<условие>) then
if (<условие>) then
begin
begin
Строка 288: Строка 288:
<команда_N>;
<команда_N>;
end;
end;
</syntaxhighlight>
</source>
Команды '''<команда_1>...<команда_N>''' будут выполнены только при истинности условия.
Команды '''<команда_1>...<команда_N>''' будут выполнены только при истинности условия.
====Сравнение====
====Сравнение====
Строка 309: Строка 309:
|}
|}
Общий синтаксис сравнения двух величин:
Общий синтаксис сравнения двух величин:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
<элемент_1><знак_сравнения><элемент_2>;
<элемент_1><знак_сравнения><элемент_2>;
</syntaxhighlight>
</source>
Пример:
Пример:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
const
const
N = 10;
N = 10;
Строка 332: Строка 332:
Writeln(Max);
Writeln(Max);
end.
end.
</syntaxhighlight>
</source>
[[Задачи на PascalABC.Net#Поиск максимума|Посмотреть статью с примером.]]
[[Задачи на PascalABC.Net#Поиск максимума|Посмотреть статью с примером.]]


===Оператор case===
===Оператор case===
Оператор case используется для сопоставления значения некоторого выражения с константными значениями:
Оператор case используется для сопоставления значения некоторого выражения с константными значениями:
<source lang="pascal">
<syntaxhighlight lang="pascal">
case <выражение> of
case <выражение> of
<константное_значение_1>: begin <операторы_1>; end;
<константное_значение_1>: begin <операторы_1>; end;
Строка 344: Строка 344:
else <операторы>
else <операторы>
end;
end;
</syntaxhighlight>
</source>
Если некоторое i-тое константное выражение совпадает с значением выражения, то i-ая группа операторов будет выполнена. Группа операторов после else будет выполнена, если значение выражения не совпало ни с одной из констант. begin - end не нужны, если после двоеточия только один оператор.
Если некоторое i-тое константное выражение совпадает с значением выражения, то i-ая группа операторов будет выполнена. Группа операторов после else будет выполнена, если значение выражения не совпало ни с одной из констант. begin - end не нужны, если после двоеточия только один оператор.


Пример:
Пример:
<source lang="pascal">
<syntaxhighlight lang="pascal">
var
var
S, S2: string;
S, S2: string;
Строка 394: Строка 394:
Writeln(S2);
Writeln(S2);
end.
end.
</syntaxhighlight>
</source>
[[Задачи на PascalABC.Net#Замена слов на цифры|Посмотреть статью с примером.]]
[[Задачи на PascalABC.Net#Замена слов на цифры|Посмотреть статью с примером.]]


===Оператор цикла while===
===Оператор цикла while===
Оператор цикла позволяет выполнять группу операторов (или один) циклически пока условие является истинным.
Оператор цикла позволяет выполнять группу операторов (или один) циклически пока условие является истинным.
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
while (<условие>) do
while (<условие>) do
begin
begin
Строка 406: Строка 406:
<оператор_n>
<оператор_n>
end;
end;
</syntaxhighlight>
</source>
Пример:
Пример:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
var
var
S, S2: string;
S, S2: string;
Строка 435: Строка 435:
Writeln(S);
Writeln(S);
end.
end.
</syntaxhighlight>
</source>
[[Задачи на PascalABC.Net#Удаление лишних пробелов|Посмотреть статью с примером.]]
[[Задачи на PascalABC.Net#Удаление лишних пробелов|Посмотреть статью с примером.]]


Строка 441: Строка 441:
«Счетчик» - это оператор цикла for, выполняющий группу операторов определенное количество раз.
«Счетчик» - это оператор цикла for, выполняющий группу операторов определенное количество раз.
Общий синтаксис оператора цикла for:
Общий синтаксис оператора цикла for:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
for var <переменная_цикла> := <значение_1> to <значение_2> do
for var <переменная_цикла> := <значение_1> to <значение_2> do
begin
begin
Строка 448: Строка 448:
<оператор_n>;
<оператор_n>;
end;
end;
</syntaxhighlight>
</source>
Если второе значение меньше первого - используйте '''downto''' вместо '''to'''.
Если второе значение меньше первого - используйте '''downto''' вместо '''to'''.


Пример:
Пример:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
const
const
N = 10;
N = 10;
Строка 464: Строка 464:
Writeln(A);
Writeln(A);
end.
end.
</syntaxhighlight>
</source>
[[Задачи на PascalABC.Net#Чтение массива|Посмотреть статью с примером.]]
[[Задачи на PascalABC.Net#Чтение массива|Посмотреть статью с примером.]]


===Оператор break===
===Оператор break===
Для выхода из цикла можно использовать '''break''':
Для выхода из цикла можно использовать '''break''':
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
const
const
N = 9;
N = 9;
Строка 485: Строка 485:
end;
end;
end.
end.
</syntaxhighlight>
</source>


===Новая итерация цикла===
===Новая итерация цикла===
Строка 492: Строка 492:
==Функции==
==Функции==
Общий синтаксис описания функции:
Общий синтаксис описания функции:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
function <имя>(<описание_параметров>): <тип_возвращаемого_значения>;
function <имя>(<описание_параметров>): <тип_возвращаемого_значения>;
begin
begin
Строка 499: Строка 499:
<оператор_n>;
<оператор_n>;
end;
end;
</syntaxhighlight>
</source>
или:
или:
<source lang="pascal">
<syntaxhighlight lang="pascal">
function <имя>(<описание_параметров>) := <выражение>; // Вывод типа возвращаемого значения производится на основе типа выражения.
function <имя>(<описание_параметров>) := <выражение>; // Вывод типа возвращаемого значения производится на основе типа выражения.
</syntaxhighlight>
</source>
Можно устанавливать значение переменной '''Result''' для указания возвращаемого значения.
Можно устанавливать значение переменной '''Result''' для указания возвращаемого значения.


Пример:
Пример:
<source lang="pascal">
<syntaxhighlight lang="pascal">
function F(a, b: integer): integer;
function F(a, b: integer): integer;
begin
begin
Строка 516: Строка 516:
Writeln(F(ReadlnInteger('A:'), ReadlnInteger('B:')));
Writeln(F(ReadlnInteger('A:'), ReadlnInteger('B:')));
end.
end.
</syntaxhighlight>
</source>
[[Книга программиста/Задачи на рекурсию#Остаток от деления a на b|Посмотреть статью с примером.]]
[[Книга программиста/Задачи на рекурсию#Остаток от деления a на b|Посмотреть статью с примером.]]


==Процедуры==
==Процедуры==
Синтаксис объявления процедуры:
Синтаксис объявления процедуры:
<source lang="pascal">
<syntaxhighlight lang="pascal">
procedure <имя>(<описание_параметров>);
procedure <имя>(<описание_параметров>);
begin
begin
Строка 528: Строка 528:
<оператор_n>;
<оператор_n>;
end;
end;
</syntaxhighlight>
</source>
или:
или:
<source lang="pascal">
<syntaxhighlight lang="pascal">
procedure <имя>(<описание_параметров>) := <оператор>;
procedure <имя>(<описание_параметров>) := <оператор>;
</syntaxhighlight>
</source>
Пример:
Пример:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
uses Crt, GraphABC, ABCButtons;
uses Crt, GraphABC, ABCButtons;
var
var
Строка 545: Строка 545:
B.OnClick := P;
B.OnClick := P;
end.
end.
</syntaxhighlight>
</source>
[[Модуль ABCButtons|Посмотреть статью с примером.]]
[[Модуль ABCButtons|Посмотреть статью с примером.]]


Строка 556: Строка 556:
! Описание !! Комментарии
! Описание !! Комментарии
|-
|-
| <source lang="Pascal">Random(<максимальное_значение>)</source> || Генерирует случайное число в диапазоне [0, максимальное_значение - 1].
| <syntaxhighlight lang="Pascal">Random(<максимальное_значение>)</syntaxhighlight> || Генерирует случайное число в диапазоне [0, максимальное_значение - 1].
|-
|-
| <source lang="Pascal">Inc(<имя>)</source> || Увеличивает значение переменной на 1 (переменная типа real не может быть параметром).
| <syntaxhighlight lang="Pascal">Inc(<имя>)</syntaxhighlight> || Увеличивает значение переменной на 1 (переменная типа real не может быть параметром).
|-
|-
| <source lang="Pascal">Dec(<имя>)</source> || Уменьшает значение переменной на 1 (переменная типа real не может быть параметром).
| <syntaxhighlight lang="Pascal">Dec(<имя>)</syntaxhighlight> || Уменьшает значение переменной на 1 (переменная типа real не может быть параметром).
|-
|-
| <source lang="Pascal">Succ(<символ>)</source> || Возвращает следующий символу символ.
| <syntaxhighlight lang="Pascal">Succ(<символ>)</syntaxhighlight> || Возвращает следующий символу символ.
|-
|-
| <source lang="Pascal">Pred(<символ>)</source> || Возвращает предыдущий символу символ.
| <syntaxhighlight lang="Pascal">Pred(<символ>)</syntaxhighlight> || Возвращает предыдущий символу символ.
|}
|}


==Подключение модулей==
==Подключение модулей==
Модуль - это часть программы, вынесенная в отдельный файл. Для подключения модуля следует писать в разделе uses его имя:
Модуль - это часть программы, вынесенная в отдельный файл. Для подключения модуля следует писать в разделе uses его имя:
<source lang="Pascal">
<syntaxhighlight lang="Pascal">
uses <имя_модуля_1>, <имя_модуля_2>, ... , <имя_модуля_n>;
uses <имя_модуля_1>, <имя_модуля_2>, ... , <имя_модуля_n>;
</syntaxhighlight>
</source>


==Свои типы==
==Свои типы==
Примеры объявления своих типов:
Примеры объявления своих типов:
<source lang="pascal">
<syntaxhighlight lang="pascal">
type
type
Int = integer; // Тип числа.
Int = integer; // Тип числа.
Строка 582: Строка 582:
TArray<T> = array of T; // Тип одномерного массива с элементами типа T.
TArray<T> = array of T; // Тип одномерного массива с элементами типа T.
TMatrix<T> = array [,] of T; // Тип матрицы с элементами типа T.
TMatrix<T> = array [,] of T; // Тип матрицы с элементами типа T.
</syntaxhighlight>
</source>
Пример вывода обобщённого массива:
Пример вывода обобщённого массива:
<source lang="pascal">
<syntaxhighlight lang="pascal">
type
type
TArray<T> = array of T;
TArray<T> = array of T;
Строка 597: Строка 597:
Show(ArrRandom());
Show(ArrRandom());
end.
end.
</syntaxhighlight>
</source>


=Примеры=
=Примеры=
==Мигание текста==
==Мигание текста==
<source lang="pascal">
<syntaxhighlight lang="pascal">
uses System;
uses System;


Строка 614: Строка 614:
end;
end;
end.
end.
</syntaxhighlight>
</source>


==Класс ввода данных пользователя==
==Класс ввода данных пользователя==
<source lang="pascal">
<syntaxhighlight lang="pascal">
uses FormsABC;
uses FormsABC;
const
const
Строка 655: Строка 655:
var UserInput := new TUserData('Name', 'Password', 'Ok');
var UserInput := new TUserData('Name', 'Password', 'Ok');
end.
end.
</syntaxhighlight>
</source>


=Ссылки=
=Ссылки=

Версия от 15:49, 16 апреля 2020

  1. Основы
  2. Таблица типов
  3. Справочные примеры PascalABC
Комбинация клавиш Описание
Ctrl + S Сохранение
F1 Справка
Ctrl + Shift + F Форматирование кода

Перед чтением данной статьи Вы должны быть уверены в том, что у Вас есть какие-либо знания по программированию.

Синтаксис программ

Программы в данной IDE строятся так:

program <название_программы>;
const
  <константы>;

var
  <переменные>;

begin
  <главный_код>;
end.

<text> - произвольный текст.

Константы

В данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так:

const
  <имя> = <значение>;

Например:

const
  a = 12;
  s = 'ABC.NET';

Секция «var»

Данная секция предназначена для переменных и массивов. Переменные объявляются так:

var
  <имя>: <тип>;

Простейшие типы

Тип строка

Тип строка - это тип переменных, который позволяет хранить в переменной любой текст. Объявление строковой переменной:

var
  <имя>: string;

Строки могут быть не более 255 символов. Изначальное значение строковых переменных - это «пустая строка» - ''.

Операция Описание
s1 + s2 Объединение строк
s1*n Дублирование строки n раз

Тип целое число integer

Кроме типа string в PascalABC.Net есть еще тип целое число - «integer». Само число a может принимать (в PascalABC.Net) значения от -2147483648 до 2147483647. Пример объявления переменной типа integer:

var
  <имя>: integer;
Операция Описание
a + b Сложение чисел
a - b Разность чисел
a * b Произведение чисел
a div b Целочисленное деление
a mod b Остаток от деления

Тип вещественное число real

Декларация переменной типа real:

var
  <имя>: real;

Пример присваивания переменной данного типа:

a := 1.0; // Не 1,0!
a := 1; // Эквивалентно 1.0.
Операция Описание
a + b Сложение чисел
a - b Разность чисел
a * b Произведение чисел
a / b Частное чисел

Тип символ

Тип символ или «char» используется в основном для хранения одного любого символа вне зависимости от того, является ли данный символ буквой или цифрой. Объявление переменной символьного типа:

var
  <имя>: char;

Секция «begin - end»

Данный раздел программы содержит все команды, выполняемые при ее запуске. Данная секция программы выглядит так:

begin
 <команда_1>;
 ...
 <команда_n>;
end.

Комментарии

Комментарий - это часть кода, которую игнорирует компилятор. Он создается следующим образом:

{
<текст_комментария>
}

Или:

// <текст_комментария>

Массивы

Массивы - это именованный список элементов одного типа.

P. S. Для работы с массивами существует учебный модуль Arrays.

Статические

Статические массивы имеют фиксированный размер. Общий синтаксис объявления данных массивов выглядит так:

var
  <имя>: array [0..N - 1] of <тип>;

, где N - длина массива.

Пример:

const
  N = 5;

var
  A: array [0..N] of integer;
  K: integer;
  j: integer;
  Found: boolean;

begin
  Found := false;
  K := ReadInteger('K:');
  
  for var i := 0 to N - 1 do
  begin
    if not Found then
      Readln(A[i])
    else
      Readln(A[i + 1]);
    
    if not Found and (A[i] = K) then
    begin
      Found := true;
      j := i + 1;
    end;
  end;
  
  A[j] := A[N];
  
  for var i := 0 to N do
    WriteFormat('{0} ', A[i]);
end.

Посмотреть статью с примером.

Матрицы

Двумерные

Матрица - это n-мерный список значений, имеющий свой тип и ограниченный некоторыми значениями. Пока будем рассматривать только статические двухмерные и трехмерные матрицы. Перед тем, как перейти к их изучению вспомни таблицы в Excel. Каждая таблица имеет свой размер - ширину и длину. Возьмем за правило ассоциировать двухмерные матрицы с таблицами. Объявление матрицы:

var
  <имя>: array [0..N - 1, 0..M - 1] of <тип>;

, где N, M количество строчек и столбцов соответственно.

Трехмерные

Трехмерный матрицы обладают третьим измерением:

var
  <имя>: arr, 0..K - 1] of <тип>;

N-мерные матрицы

Декларация N-мерной матрицы:

var
  <имя>: array [0..A - 1, 0..B - 1, ..., 0..Z - 1] of <тип>;

, где A..Z означают количество элементов в соответствующем измерении.

Статические и динамические массивы

Динамические массивы позволяют управлять количеством элементом в каждом из их измерений во время выполнения программы.

Пример объявления массива: Статический Динамический Вызов SetLength (для динамического массива)
Векторный
<имя>: array [0..N - 1] of <тип>
<имя>: array of <тип>
SetLength(<имя>, N)
Двумерный
<имя>: array [0..N - 1, 0..M - 1] of <тип>
<имя>: array [,] of <тип>
SetLength(<имя>, N, M)
Трехмерный
<имя>: array [0..N - 1, 0..M - 1, 0..K - 1] of <тип>
<имя>: array [,,] of <тип>
SetLength(<имя>, N, M, K)

Понятие индекса массива

Индекс массива - это номер элемента массива. Индекс может принимать значения [0, N - 1], где N - количество элементов некоторой размерности. Обращение к элементу одномерного массива с некоторым индексом:

<имя>[<индекс>]

Составим таблицу, которую следует запомнить:

N-мерный массив Общий синтаксис указания элемента массива Пример
Векторный
<имя>[i]
A[1]
Двумерный
<имя>[i, j]
A[1, 1]
Трехмерный
<имя>[i, j, k]
A[1, 1, 1]

Где i, j, k - индексы.

Индекс в виде значения элемента массива

Индексом может быть значение элемента массива:

<имя>[<имя_1>[индекс]]

Операторы, стандартные процедуры и функции

Вывода на экран

Вывод текста

Вывести текст - это значит отобразить текст на экране. Общий синтаксис для вывода текста выглядит так:

Write('<текст>');

Вывод значений переменных

Вывод значений произвольного количества переменных:

Write(<имя_1>, <имя_2>, ... , <имя_n>);

Например:

var
  A, B, C: integer;

begin
  A := 1;
  B := 6;
  C := 2;
  Write(A, B, C);
end.

Для перехода на новую строку после вывода последнего значения используйте Writeln вместо Write.

Ввод данных с клавиатуры

Чтение с клавиатуры - это процесс ввода данных с клавиатуры и запись в соответствующий элемент программы этих данных. Элементами программы являются как переменные, так и элементы массивов. Тип данных, вводимых с клавиатуры, должен соответствовать типу элемента, в который записываются данные с клавиатуры. Использование Readln для чтения с клавиатуры и перехода на новую строку:

Readln(<имя_переменной_1>, <имя_переменной_2>, ... ,<имя_переменной_n>);

Условный оператор

Общий синтаксис условного оператора if:

if (<условие>) then
begin
  <команда_1>;
  ...
  <команда_N>;
end;

Команды <команда_1>...<команда_N> будут выполнены только при истинности условия.

Сравнение

Условные обозначения в программировании операций сравнения приведены в таблице:

Операция Эквивалент в Паскале
≤ (меньше или равно) <=
≥ (больше или равно) >=
< (меньше) <
> (больше) >
= (равно) =
≠ (не равно) <>

Общий синтаксис сравнения двух величин:

<элемент_1><знак_сравнения><элемент_2>;

Пример:

const
  N = 10;

var
  A: array of integer; 
  Max: integer;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do A[i] := Random(100); 
  
  Max := integer.MinValue; 
  for var i := 0 to N - 1 do 
    if A[i] > Max then Max := A[i];
  
  Writeln(A); 
  Writeln(Max); 
end.

Посмотреть статью с примером.

Оператор case

Оператор case используется для сопоставления значения некоторого выражения с константными значениями:

case <выражение> of
  <константное_значение_1>: begin <операторы_1>; end;
  ...
  <константное_значение_n>: begin <операторы_n>; end;
  else <операторы>
end;

Если некоторое i-тое константное выражение совпадает с значением выражения, то i-ая группа операторов будет выполнена. Группа операторов после else будет выполнена, если значение выражения не совпало ни с одной из констант. begin - end не нужны, если после двоеточия только один оператор.

Пример:

var
  S, S2: string;
  i: integer := 1;

// Выделение слова из строки:
function GetWord(s: string; var from: integer): string;
begin
  while (from <= Length(s)) and char.IsLetter(s.Chars[from]) do
  begin
    Result += s.Chars[from];
    Inc(from);
  end;
end;

begin
  Readln(S);
  
  var L := Length(S);
  while i <= L do
  begin
    while (i <= L) and not char.IsLetter(S.Chars[i]) do
    begin
      S2 += S.Chars[i];
      Inc(i);
    end;
    var w := GetWord(S, i);
    // Преобразование числа в слово:
    case LowerCase(w) of
      'ноль', 'нуль': S2 += '0';
      'один': S2 += '1';
      'два': S2 += '2';
      'три': S2 += '3';
      'четыре': S2 += '4';
      'пять': S2 += '5';
      'шесть': S2 += '6';
      'семь': S2 += '7';
      'восемь': S2 += '8';
      'девять': S2 += '9';
      else S2 += w
    end;
  end;
  S := S2;
  
  Writeln(S2);
end.

Посмотреть статью с примером.

Оператор цикла while

Оператор цикла позволяет выполнять группу операторов (или один) циклически пока условие является истинным.

while (<условие>) do
begin
  <оператор_1>;
  ...
  <оператор_n>
end;

Пример:

var
  S, S2: string;
  i: integer := 1;

begin
  Readln(S);
  // Пока не дошли до конца строки:
  while i <= Length(S) do
  begin
    if S.Chars[i] = ' ' then
    begin
      S2 += ' ';
      Inc(i);
    end;
    // Пропускаем все лишние пробелы.
    while (i <= Length(S)) and (S.Chars[i] = ' ') do Inc(i);
    // Бежим по строке до тех пор пока не встретим пробел.
    while (i <= Length(S)) and (S.Chars[i] <> ' ') do
    begin
      S2 += S.Chars[i];
      Inc(i);
    end;
  end;
  S := S2;
  Writeln(S);
end.

Посмотреть статью с примером.

Счетчик

«Счетчик» - это оператор цикла for, выполняющий группу операторов определенное количество раз. Общий синтаксис оператора цикла for:

for var <переменная_цикла> := <значение_1> to <значение_2> do
begin
  <оператор_1>;
  ...
  <оператор_n>;
end;

Если второе значение меньше первого - используйте downto вместо to.

Пример:

const
  N = 10;

var
  A: array of integer;

begin
  SetLength(A, N); 
  for var i := 0 to N - 1 do Readln(A[i]); 
  Writeln(A); 
end.

Посмотреть статью с примером.

Оператор break

Для выхода из цикла можно использовать break:

const
  N = 9;

var
  A: array [0..N - 1] of integer;


begin
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    if A[i] mod 2 = 0 then
      break;
  end;
end.

Новая итерация цикла

Для завершения текущей итерации цикла и начала другой используйте оператор continue.

Функции

Общий синтаксис описания функции:

function <имя>(<описание_параметров>): <тип_возвращаемого_значения>;
begin
  <оператор_1>;
  ...
  <оператор_n>;
end;

или:

function <имя>(<описание_параметров>) := <выражение>; // Вывод типа возвращаемого значения производится на основе типа выражения.

Можно устанавливать значение переменной Result для указания возвращаемого значения.

Пример:

function F(a, b: integer): integer;
begin
  if a < b then Result := a else Result := F(a - b, b);
end;

begin
  Writeln(F(ReadlnInteger('A:'), ReadlnInteger('B:')));
end.

Посмотреть статью с примером.

Процедуры

Синтаксис объявления процедуры:

procedure <имя>(<описание_параметров>);
begin
  <оператор_1>;
  ...
  <оператор_n>;
end;

или:

procedure <имя>(<описание_параметров>) := <оператор>;

Пример:

uses Crt, GraphABC, ABCButtons;
var
  B: ButtonABC;

procedure P() := Writeln('Привет мир!'); // Сокращённый синтаксис объявления процедур, содержащих один оператор.

begin
  B := new ButtonABC(0, 0, 100, 40, 'Button', clRed);
  B.OnClick := P;
end.

Посмотреть статью с примером.

Оператор exit

Для выхода из некоторой функции или процедуры можно использовать оператор exit.

Встроенные процедуры и функции

Описание Комментарии
Random(<максимальное_значение>)
Генерирует случайное число в диапазоне [0, максимальное_значение - 1].
Inc(<имя>)
Увеличивает значение переменной на 1 (переменная типа real не может быть параметром).
Dec(<имя>)
Уменьшает значение переменной на 1 (переменная типа real не может быть параметром).
Succ(<символ>)
Возвращает следующий символу символ.
Pred(<символ>)
Возвращает предыдущий символу символ.

Подключение модулей

Модуль - это часть программы, вынесенная в отдельный файл. Для подключения модуля следует писать в разделе uses его имя:

uses <имя_модуля_1>, <имя_модуля_2>, ... , <имя_модуля_n>;

Свои типы

Примеры объявления своих типов:

type
  Int = integer; // Тип числа.
  ShortStr = string[255]; // Тип короткой строки.
  Numbers = (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten); // Тип названия числа.
  TArray<T> = array of T; // Тип одномерного массива с элементами типа T.
  TMatrix<T> = array [,] of T; // Тип матрицы с элементами типа T.

Пример вывода обобщённого массива:

type
  TArray<T> = array of T;

procedure Show<T>(a: TArray<T>);
begin
  for var i := 0 to a.Length - 1 do
    Writeln(a[i]);
end;

begin
  Show(ArrRandom());
end.

Примеры

Мигание текста

uses System;

begin
  var rnd := new Random();
  while true do
  begin
    Console.SetCursorPosition(0, 0);
    Console.ForegroundColor := ConsoleColor(rnd.Next(15));
    Console.Write('Hello world!');
    Sleep(200);
  end;
end.

Класс ввода данных пользователя

uses FormsABC;
const
  Width = 50;

type
  TUserData = class
  private 
    _Name, _Password: Field;
    _LogIn: Button;
    _W: integer;
    
    function GetW()  := _W;
    
    procedure SetW(v: integer);
    begin
      _Name.FieldWidth := v;
      _Password.FieldWidth := v;
      _W := v;
    end;
  
  public 
    property Name: Field read _Name;
    property Password: Field read _Password;
    property LogIn: Button read _LogIn;
    property W: integer read GetW write SetW;
    
    constructor(nText, pText, logInText: string);
    begin
      _Name := new Field(nText, Width);
      _Password := new Field(pText, Width);
      _LogIn := new Button(logInText);
    end;
  end;

begin
  var UserInput := new TUserData('Name', 'Password', 'Ok');
end.

Ссылки

Теория:

Практика: