Основы PascalABC.NET: различия между версиями
DannyS712 (обсуждение | вклад) м <source> -> <syntaxhighlight> (phab:T237267) |
|||
Строка 17: | Строка 17: | ||
=Синтаксис программ= |
=Синтаксис программ= |
||
Программы в данной IDE строятся так: |
Программы в данной IDE строятся так: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
program <название_программы>; |
program <название_программы>; |
||
const |
const |
||
Строка 28: | Строка 28: | ||
<главный_код>; |
<главный_код>; |
||
end. |
end. |
||
</syntaxhighlight> |
|||
</source> |
|||
<text> - произвольный текст. |
<text> - произвольный текст. |
||
===Константы=== |
===Константы=== |
||
В данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так: |
В данной секции располагаются определенные пользователем константы. Синтаксис объявления констант выглядит так: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
const |
const |
||
<имя> = <значение>;</ |
<имя> = <значение>;</syntaxhighlight> |
||
Например: |
Например: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
const |
const |
||
a = 12; |
a = 12; |
||
s = 'ABC.NET';</ |
s = 'ABC.NET';</syntaxhighlight> |
||
===Секция «var»=== |
===Секция «var»=== |
||
Данная секция предназначена для переменных и массивов. Переменные объявляются так: |
Данная секция предназначена для переменных и массивов. Переменные объявляются так: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
var |
var |
||
<имя>: <тип>; |
<имя>: <тип>; |
||
</syntaxhighlight> |
|||
</source> |
|||
===Простейшие типы=== |
===Простейшие типы=== |
||
====Тип строка==== |
====Тип строка==== |
||
Тип строка - это тип переменных, который позволяет хранить в переменной любой текст. Объявление строковой переменной: |
Тип строка - это тип переменных, который позволяет хранить в переменной любой текст. Объявление строковой переменной: |
||
< |
<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: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
var |
var |
||
<имя>: integer; |
<имя>: integer; |
||
</syntaxhighlight> |
|||
</source> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
|- |
|- |
||
Строка 88: | Строка 88: | ||
====Тип вещественное число real==== |
====Тип вещественное число real==== |
||
Декларация переменной типа '''real''': |
Декларация переменной типа '''real''': |
||
< |
<syntaxhighlight lang="Pascal"> |
||
var |
var |
||
<имя>: real; |
<имя>: real; |
||
</syntaxhighlight> |
|||
</source> |
|||
Пример присваивания переменной данного типа: |
Пример присваивания переменной данного типа: |
||
< |
<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'''» используется в основном для хранения одного любого символа вне зависимости от того, является ли данный символ буквой или цифрой. Объявление переменной символьного типа: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
var |
var |
||
<имя>: char; |
<имя>: char; |
||
</syntaxhighlight> |
|||
</source> |
|||
===Секция «begin - end»=== |
===Секция «begin - end»=== |
||
Данный раздел программы содержит все команды, выполняемые при ее запуске. Данная секция программы выглядит так: |
Данный раздел программы содержит все команды, выполняемые при ее запуске. Данная секция программы выглядит так: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
begin |
begin |
||
<команда_1>; |
<команда_1>; |
||
Строка 125: | Строка 125: | ||
<команда_n>; |
<команда_n>; |
||
end. |
end. |
||
</syntaxhighlight> |
|||
</source> |
|||
===Комментарии=== |
===Комментарии=== |
||
Комментарий - это часть кода, которую игнорирует компилятор. Он создается следующим образом: |
Комментарий - это часть кода, которую игнорирует компилятор. Он создается следующим образом: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
{ |
{ |
||
<текст_комментария> |
<текст_комментария> |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
Или: |
Или: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
// <текст_комментария> |
// <текст_комментария> |
||
</syntaxhighlight> |
|||
</source> |
|||
==Массивы== |
==Массивы== |
||
Строка 145: | Строка 145: | ||
===Статические=== |
===Статические=== |
||
Статические массивы имеют фиксированный размер. Общий синтаксис объявления данных массивов выглядит так: |
Статические массивы имеют фиксированный размер. Общий синтаксис объявления данных массивов выглядит так: |
||
< |
<syntaxhighlight lang="pascal"> |
||
var |
var |
||
<имя>: array [0..N - 1] of <тип>; |
<имя>: array [0..N - 1] of <тип>; |
||
</syntaxhighlight> |
|||
</source> |
|||
, где N - длина массива. |
, где N - длина массива. |
||
Пример: |
Пример: |
||
< |
<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. Каждая таблица имеет свой размер - ширину и длину. Возьмем за правило ассоциировать двухмерные матрицы с таблицами. Объявление матрицы: |
||
< |
<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 количество строчек и столбцов соответственно. |
||
====Трехмерные==== |
====Трехмерные==== |
||
Трехмерный матрицы обладают третьим измерением: |
Трехмерный матрицы обладают третьим измерением: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
var |
var |
||
<имя>: arr, 0..K - 1] of <тип>; |
<имя>: arr, 0..K - 1] of <тип>; |
||
</syntaxhighlight> |
|||
</source> |
|||
====N-мерные матрицы==== |
====N-мерные матрицы==== |
||
Декларация N-мерной матрицы: |
Декларация N-мерной матрицы: |
||
< |
<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 (для динамического массива) |
||
|- |
|- |
||
| Векторный || < |
| Векторный || <syntaxhighlight lang="pascal"><имя>: array [0..N - 1] of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal"><имя>: array of <тип></syntaxhighlight> || <syntaxhighlight lang="pascal">SetLength(<имя>, N)</syntaxhighlight> |
||
|- |
|- |
||
| Двумерный || < |
| Двумерный || <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> |
||
|- |
|- |
||
| Трехмерный || < |
| Трехмерный || <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 - количество элементов некоторой размерности. Обращение к элементу одномерного массива с некоторым индексом: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
<имя>[<индекс>] |
<имя>[<индекс>] |
||
</syntaxhighlight> |
|||
</source> |
|||
Составим таблицу, которую следует запомнить: |
Составим таблицу, которую следует запомнить: |
||
{| class="wikitable sortable" |
{| class="wikitable sortable" |
||
Строка 234: | Строка 234: | ||
! N-мерный массив !! Общий синтаксис указания элемента массива || Пример |
! N-мерный массив !! Общий синтаксис указания элемента массива || Пример |
||
|- |
|- |
||
| Векторный || < |
| Векторный || <syntaxhighlight lang="Pascal"><имя>[i]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1]</syntaxhighlight> |
||
|- |
|- |
||
| Двумерный || < |
| Двумерный || <syntaxhighlight lang="Pascal"><имя>[i, j]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1, 1]</syntaxhighlight> |
||
|- |
|- |
||
| Трехмерный || < |
| Трехмерный || <syntaxhighlight lang="Pascal"><имя>[i, j, k]</syntaxhighlight> || <syntaxhighlight lang="Pascal">A[1, 1, 1]</syntaxhighlight> |
||
|} |
|} |
||
Где i, j, k - индексы. |
Где i, j, k - индексы. |
||
===Индекс в виде значения элемента массива=== |
===Индекс в виде значения элемента массива=== |
||
Индексом может быть значение элемента массива: |
Индексом может быть значение элемента массива: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
<имя>[<имя_1>[индекс]] |
<имя>[<имя_1>[индекс]] |
||
</syntaxhighlight> |
|||
</source> |
|||
==Операторы, стандартные процедуры и функции== |
==Операторы, стандартные процедуры и функции== |
||
Строка 251: | Строка 251: | ||
====Вывод текста==== |
====Вывод текста==== |
||
Вывести текст - это значит отобразить текст на экране. Общий синтаксис для вывода текста выглядит так: |
Вывести текст - это значит отобразить текст на экране. Общий синтаксис для вывода текста выглядит так: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
Write('<текст>'); |
Write('<текст>'); |
||
</syntaxhighlight> |
|||
</source> |
|||
====Вывод значений переменных==== |
====Вывод значений переменных==== |
||
Вывод значений произвольного количества переменных: |
Вывод значений произвольного количества переменных: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
Write(<имя_1>, <имя_2>, ... , <имя_n>); |
Write(<имя_1>, <имя_2>, ... , <имя_n>); |
||
</syntaxhighlight> |
|||
</source> |
|||
Например: |
Например: |
||
< |
<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''' для чтения с клавиатуры и перехода на новую строку: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
Readln(<имя_переменной_1>, <имя_переменной_2>, ... ,<имя_переменной_n>); |
Readln(<имя_переменной_1>, <имя_переменной_2>, ... ,<имя_переменной_n>); |
||
</syntaxhighlight> |
|||
</source> |
|||
===Условный оператор=== |
===Условный оператор=== |
||
Общий синтаксис условного оператора if: |
Общий синтаксис условного оператора if: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
if (<условие>) then |
if (<условие>) then |
||
begin |
begin |
||
Строка 288: | Строка 288: | ||
<команда_N>; |
<команда_N>; |
||
end; |
end; |
||
</syntaxhighlight> |
|||
</source> |
|||
Команды '''<команда_1>...<команда_N>''' будут выполнены только при истинности условия. |
Команды '''<команда_1>...<команда_N>''' будут выполнены только при истинности условия. |
||
====Сравнение==== |
====Сравнение==== |
||
Строка 309: | Строка 309: | ||
|} |
|} |
||
Общий синтаксис сравнения двух величин: |
Общий синтаксис сравнения двух величин: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
<элемент_1><знак_сравнения><элемент_2>; |
<элемент_1><знак_сравнения><элемент_2>; |
||
</syntaxhighlight> |
|||
</source> |
|||
Пример: |
Пример: |
||
< |
<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 используется для сопоставления значения некоторого выражения с константными значениями: |
||
< |
<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 не нужны, если после двоеточия только один оператор. |
||
Пример: |
Пример: |
||
< |
<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=== |
||
Оператор цикла позволяет выполнять группу операторов (или один) циклически пока условие является истинным. |
Оператор цикла позволяет выполнять группу операторов (или один) циклически пока условие является истинным. |
||
< |
<syntaxhighlight lang="Pascal"> |
||
while (<условие>) do |
while (<условие>) do |
||
begin |
begin |
||
Строка 406: | Строка 406: | ||
<оператор_n> |
<оператор_n> |
||
end; |
end; |
||
</syntaxhighlight> |
|||
</source> |
|||
Пример: |
Пример: |
||
< |
<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: |
||
< |
<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'''. |
||
Пример: |
Пример: |
||
< |
<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''': |
||
< |
<syntaxhighlight lang="Pascal"> |
||
const |
const |
||
N = 9; |
N = 9; |
||
Строка 485: | Строка 485: | ||
end; |
end; |
||
end. |
end. |
||
</syntaxhighlight> |
|||
</source> |
|||
===Новая итерация цикла=== |
===Новая итерация цикла=== |
||
Строка 492: | Строка 492: | ||
==Функции== |
==Функции== |
||
Общий синтаксис описания функции: |
Общий синтаксис описания функции: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
function <имя>(<описание_параметров>): <тип_возвращаемого_значения>; |
function <имя>(<описание_параметров>): <тип_возвращаемого_значения>; |
||
begin |
begin |
||
Строка 499: | Строка 499: | ||
<оператор_n>; |
<оператор_n>; |
||
end; |
end; |
||
</syntaxhighlight> |
|||
</source> |
|||
или: |
или: |
||
< |
<syntaxhighlight lang="pascal"> |
||
function <имя>(<описание_параметров>) := <выражение>; // Вывод типа возвращаемого значения производится на основе типа выражения. |
function <имя>(<описание_параметров>) := <выражение>; // Вывод типа возвращаемого значения производится на основе типа выражения. |
||
</syntaxhighlight> |
|||
</source> |
|||
Можно устанавливать значение переменной '''Result''' для указания возвращаемого значения. |
Можно устанавливать значение переменной '''Result''' для указания возвращаемого значения. |
||
Пример: |
Пример: |
||
< |
<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|Посмотреть статью с примером.]] |
||
==Процедуры== |
==Процедуры== |
||
Синтаксис объявления процедуры: |
Синтаксис объявления процедуры: |
||
< |
<syntaxhighlight lang="pascal"> |
||
procedure <имя>(<описание_параметров>); |
procedure <имя>(<описание_параметров>); |
||
begin |
begin |
||
Строка 528: | Строка 528: | ||
<оператор_n>; |
<оператор_n>; |
||
end; |
end; |
||
</syntaxhighlight> |
|||
</source> |
|||
или: |
или: |
||
< |
<syntaxhighlight lang="pascal"> |
||
procedure <имя>(<описание_параметров>) := <оператор>; |
procedure <имя>(<описание_параметров>) := <оператор>; |
||
</syntaxhighlight> |
|||
</source> |
|||
Пример: |
Пример: |
||
< |
<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: | ||
! Описание !! Комментарии |
! Описание !! Комментарии |
||
|- |
|- |
||
| < |
| <syntaxhighlight lang="Pascal">Random(<максимальное_значение>)</syntaxhighlight> || Генерирует случайное число в диапазоне [0, максимальное_значение - 1]. |
||
|- |
|- |
||
| < |
| <syntaxhighlight lang="Pascal">Inc(<имя>)</syntaxhighlight> || Увеличивает значение переменной на 1 (переменная типа real не может быть параметром). |
||
|- |
|- |
||
| < |
| <syntaxhighlight lang="Pascal">Dec(<имя>)</syntaxhighlight> || Уменьшает значение переменной на 1 (переменная типа real не может быть параметром). |
||
|- |
|- |
||
| < |
| <syntaxhighlight lang="Pascal">Succ(<символ>)</syntaxhighlight> || Возвращает следующий символу символ. |
||
|- |
|- |
||
| < |
| <syntaxhighlight lang="Pascal">Pred(<символ>)</syntaxhighlight> || Возвращает предыдущий символу символ. |
||
|} |
|} |
||
==Подключение модулей== |
==Подключение модулей== |
||
Модуль - это часть программы, вынесенная в отдельный файл. Для подключения модуля следует писать в разделе uses его имя: |
Модуль - это часть программы, вынесенная в отдельный файл. Для подключения модуля следует писать в разделе uses его имя: |
||
< |
<syntaxhighlight lang="Pascal"> |
||
uses <имя_модуля_1>, <имя_модуля_2>, ... , <имя_модуля_n>; |
uses <имя_модуля_1>, <имя_модуля_2>, ... , <имя_модуля_n>; |
||
</syntaxhighlight> |
|||
</source> |
|||
==Свои типы== |
==Свои типы== |
||
Примеры объявления своих типов: |
Примеры объявления своих типов: |
||
< |
<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> |
|||
Пример вывода обобщённого массива: |
Пример вывода обобщённого массива: |
||
< |
<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> |
|||
=Примеры= |
=Примеры= |
||
==Мигание текста== |
==Мигание текста== |
||
< |
<syntaxhighlight lang="pascal"> |
||
uses System; |
uses System; |
||
Строка 614: | Строка 614: | ||
end; |
end; |
||
end. |
end. |
||
</syntaxhighlight> |
|||
</source> |
|||
==Класс ввода данных пользователя== |
==Класс ввода данных пользователя== |
||
< |
<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
Комбинация клавиш | Описание |
---|---|
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.
Ссылки
Теория:
- Введение в модуль GraphABC
- Введение в FormsABC
- Проектирование программ в PascalABC.Net
- Динамические структуры данных
- Классы типов [Тестирование]
Практика: