Основы PascalABC.NET
Внимание! В настоящее время рекомендуется использовать технологию .NET 5 для создания кроссплатформенных приложений на .NET-языках. Однако, она не поддерживаются в PascalABC.NET. Для использования .NET 5 рекомендуется применять такие среды разработки, как Visual Studio и Rider. |
Синтаксис программ
правитьМинимальная структура программы:
begin
{main code here}
end.
Пример:
begin
writeln('Hello world');
end.
Константы
правитьВ данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так:
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) значения от -32768 до 32767. Пример объявления переменной типа 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
<имя>: array [0..N - 1, 0..M - 1, 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.
var x, y: real; begin
writeln('введите введите x'); readln(x); if x>0 then y:=sqrt(x) else y:=sqr(x); writeln(y); writeln('введите x'); readln(x); if x=0 then y:=0 else y:=0; writeln(y); writeln('введите x'); readln(x); if x<0 then y:=x+x else y:=x+x; writeln(y); end.