Основы PascalABC.Net

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

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

Содержание

Важное для пишущих программы в PascalABC.Net[править]

Из-за низкой стабильности среды использовать ее для проектов средней и более сложности настоятельно не рекомендуется. (См. GitHub PascalABC.Net).

  1. Баги компилятора PascalABC.Net
  2. Баги IDE PascalABC.Net

Синтаксис программ[править]

Программы в данной 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 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 Crt;
begin
  while true do
  begin
    TextColor(Random(1, 15));
    Writeln('Hello world!');
    Sleep(200);
    ClrScr();
  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.

Ссылки[править]

Теория:

Практика: