Код
#статьи

Pascal — что это за язык, чем он хорош и почему его до сих пор преподают в школах

Изучаем язык предков и пишем первый проект — консольную игру.

Иллюстрация: Оля Ежак для Skillbox Media

Если вы не пропускали школьные уроки информатики, слово Pascal наверняка вызывает у вас лёгкий трепет. Пускай на этом языке давно уже не пишут серьёзный софт, зато он идеален для первых шагов в программировании.

В этой статье разберёмся, что такое Pascal, как он появился, из чего сделан, и за что его так любят преподаватели. А бонусом пробуем написать на Pascal первое приложение — консольную игру «Камень, ножницы, бумага».

Содержание

Что такое Pascal

Pascal — это процедурный язык программирования, названный в честь французского математика и физика Блеза Паскаля. Изначально язык создавался для обучения студентов структурному программированию — но оказался так хорош, что в конце XX века стал одним из самых популярных в мире.

Язык создал Никлаус Вирт, всемирно известный программист и информатик. Идея разработать Pascal ему пришла во время работы над Algol-60, другим популярным языком того времени. Вирт вместе с коллегами занимался улучшением Algol — пытался сделать его проще, лаконичнее и функциональнее. Так появился диалект Algol W, который впоследствии и лёг в основу Pascal. Подробнее о том, как создавался язык, читайте в нашей статье про Никлауса Вирта.

Одной из целей разработки Pascal было обучение студентов программированию, поэтому из сложного синтаксиса Algol убрали всё лишнее, что помогло значительно снизить порог входа.

Вот основные фишки языка:

  • Простой синтаксис. Из Алгола убрали неочевидные правила оформления кода, а конструкции операторов for, if и while стали занимать меньше строк.
  • Строгая типизация. В Алголе была мощная система работы с типами данных, но новичку с ней было сложно разобраться. Поэтому для Pascal Вирт выбрал строгую типизацию, когда все переменные, функции и параметры надо объявлять с явным указанием типа.
  • Строгая структура управления. На данных, полученных в процессе выполнения кода, программы могли создавать новые функции. Из Pascal эту фичу убрали, чтобы упростить логику.
  • Множества. Вирт добавил в Pascal поддержку множеств — коллекций уникальных символов, которое можно объединять между собой и искать пересечения. Сейчас множества встречаются во многих языках программирования, но в 1970 году это был новаторский инструмент.
  • Ограниченная вложенность. В Algol можно было использовать глубоко вложенные друг в друга блоки кода. Это удобно для разработки больших и сложных проектов, но в скриптах для обучения фича практически бесполезная. Поэтому её тоже не включили в Pascal.
  • Структуры данных. В Pascal появилась возможность объединять разные типы данных в одну структуру. Для их обозначения Вирт ввёл ключевое слово record. Позже эту концепцию адаптировали для C/C++.

Всего за 20 лет Pascal стал одним из самых популярных алгоритмических языков программирования. Крупные технологические компании того времени начали выпускать собственные версии компиляторов и даже реализаций Pascal, добавляя в язык то, что не было предусмотрено в оригинальной версии. Так на свет появились Object Pascal, Turbo Pascal, Free Pascal, PascalABC.NET и Delphi.

Для чего нужен язык Pascal

Pascal задумывался Виртом как язык для обучения студентов азам структурного программирования — и до сих пор широко используется в этом качестве. Язык преподают в школах и вузах по всему миру, на нём же пишутся примеры кода и задачи для госэкзаменов. Например, в России на ОГЭ школьникам предлагают ответить, что делает код программы, написанный на Pascal.

Сейчас Pascal не используют для разработки сервисов и приложений, которыми каждый день пользуются миллионы человек. Инженеры отдают предпочтение более быстрым и универсальным языкам программирования, например Java, Python или JavaScript.

Однако в прошлом Pascal выбирали и крупные компании. Например, на нём написали код операционной системы для компьютера Apple Lisa. Для этого в 1980-е инженеры Apple разработали Object Pascal — объектно-ориентированную версию языка программирования, которую использовали практически во всех своих проектах до середины 1990-х годов.

Персональный компьютер Apple Lisa
Фото: Maximilian Schönherr / Wikimedia Commons

Если вы считаете себя продвинутым пользователем Windows, то наверняка хотя бы раз пользовались файловым менеджером Total Commander. Многие его компоненты до сих пор написаны на Pascal.

Pascal для основы системы вёрстки TeX выбрал информатик Дональд Кнут. Одна из реализаций этой системы, LaTeX, до сих пор активно используется. Например, для представления математических формул в статьях на «Википедии» или для вёрстки текстов научных работ.

Ещё больше софта написано на языке программирования Delphi, который основан на базе объектно-ориентированной версии языка, — Object Pascal. Например, его использовали для Skype, ранних версий игрового движка Unreal Engine, архиватора WinRAR, цифровой музыкальной станции FL Studio и некоторых модулей macOS.

Реализации Pascal

Детище Вирта понравилось не только студентам, но и сообществу. Поэтому компании начали создавать собственные реализации Pascal, добавляя в него необходимые функции. Посмотрим на популярные диалекты и языки программирования, разработанные на базе Pascal.

Object Pascal

В 1986 году группа инженеров под руководством Ларри Теслера разработала для Apple объектно-ориентированную версию языка Pascal — Object Pascal. В языке программирования появились классы, объекты и наследование, а разработчикам открылись новые возможности. Например, стало возможно переиспользовать код, чтобы не приходилось каждый раз переписывать фичи.

Благодаря этому язык стал пригодным для использования в больших проектах. Позже его ещё много раз дорабатывали разные компании. Например, инженеры Borland добавили в него динамическую типизацию — это когда одна и та же переменная может иметь разные типы в разных участках программы.

Turbo Pascal

Turbo Pascal — среда разработки и диалект языка Pascal, который использовался для работы в ней. Приставку Turbo он получил из-за высокой скорости компиляции кода. Обычно компиляторы проходили по коду несколько раз, создавая сначала промежуточные файлы, а потом связывая их. Turbo Pascal было достаточно всего один раз пройтись по коду проекта, чтобы сразу скомпилировать исполняемый файл. А ещё диалект создавали для систем с ограниченными ресурсами, поэтому компилятор не нагружал память и процессор компьютера.

Разработкой реализации занимались инженеры компании Borland, а за основу они взяли UCSD Pascal, который использовался на компьютерах Apple II.

Free Pascal

В 1997 году появился Free Pascal — реализация с открытым исходным кодом, которая взяла в себя простоту классической версии Pascal и возможности ООП. Для сообщества открытость была важной фишкой языка, так как появилась возможность переносить Pascal на любые платформы и операционные системы. Сейчас реализация Free Pascal поддерживает более 30 платформ, включая Windows, Linux, macOS, Android, MS-DOS, FreeBSD, Game Boy Advance и Nintendo DS.

Delphi

Delphi — язык программирования от компании Borland, который вырос из Object Pascal. Его создали для того, чтобы было удобнее разрабатывать полноценные программы для ПК — например, добавили библиотеку для разработки графических интерфейсов и инструменты для работы с базами данных.

В отличие от Pascal Delphi умеет компилироваться в кросс-платформенные приложения — для Windows, macOS, Linux, Android и iOS. Также язык поддерживает куда больше библиотек — например, для работы с сетью и графикой.

PascalABC.NET

В 2007 году Южный федеральный университет (ЮФУ) в Ростове-на-Дону выпустил PascalABC.NET — собственную реализацию, которая вобрала в себя возможности Delphi, получила собственные модули и поддержку платформы .NET.

Почему Pascal до сих пор используют для обучения школьников

С релиза Pascal прошло больше 50 лет, и язык воспитал не одно поколение разработчиков. Несмотря на появление более современных языков программирования, Pascal продолжают использовать в школах и на младших курсах вузов. На это есть несколько причин:

Простой синтаксис. Код на Pascal легко писать и читать, поэтому начинающие разработчики могут сфокусироваться на решении задачи, а не бороться со сложностями языка.

Структурированность. Программы на Pascal состоят из блоков кода, поэтому школьники привыкают придерживаться строгой структуры. В следующем примере программа состоит из двух блоков кода: основной программы и процедуры PrintNumbers.

program StructuredProgram;  { Объявление программы с именем StructuredProgram }
var
  i: integer;  { Объявление переменной i типа integer }

procedure PrintNumbers;  { Объявление процедуры PrintNumbers }
begin
  for i := 1 to 10 do  { Цикл от 1 до 10 }
    writeln(i);  { Вывод значения i на экран }
end;

begin
  PrintNumbers;  { Вызов процедуры PrintNumbers }
end.

Безопасность. Строгая типизация Pascal исключает появление ошибок в процессе работы программы. Если типы переменных не будут соответствовать заданным значениям, компилятор заметит ошибку и не позволит разработчику «выстрелить себе в ногу».

program TypeSafety;
var
  a: integer;
  b: real;
begin
  a := 10;
  b := 5.5;
  { Следующая строка вызовет ошибку компиляции, так как типы переменных не совпадают }
  { a := b; }
end.

Лёгкий переход. В Pascal есть всё, что используется в современных языках программирования, поэтому разработчики могут без проблем перейти на Python, Java или C++. Для перехода надо будет ознакомиться только с особенностями нового языка, но при этом не придётся снова погружаться в базовые концепции.

Вот, например, как выглядит простая программа для вывода чисел на экран, написанная на Pascal и Java. Сразу видно, что синтаксис языков различается — однако основные принципы остаются теми же: переменные, циклы, вывод на экран и сама модель построения программы.

Pascal

Java

{ Pascal }
program PascalExample;
var
  i: integer;
begin
  for i := 1 to 5 do
    writeln('Pascal: ', i);
end.
# Java
public class JavaExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Java: " + i);
        }
    }
}

Традиции. В образовательных системах многих стран мира Pascal десятилетиями использовался для обучения программированию. За это время скопилось множество учебников и пособий, а также появились преподаватели с опытом в Pascal. Поэтому учебные заведения продолжают использовать накопившийся опыт и параллельно разрабатывают программы обучения на основе других языков программирования, например Python.

Синтаксис Pascal

Теперь давайте разберём синтаксис Pascal более подробно. Чтобы экспериментировать с примерами из статьи, можно использовать онлайн-компиляторы, например GDB и JDoodle.

Структура программы

Код любой программы на Pascal должен соответствовать чёткой структуре. Если ей пренебречь, то код просто не запустится. Так в общем виде выглядит шаблон программы:

program ProgramName;
const
  ConstantName = value;
var
  VariableName: type;

procedure ProcedureName;
begin

end;

function FunctionName: returnType;
begin

end;

begin

end.

Построчно разберём её:

  • program MyFirstProgram — заголовок программы, в котором указывается название. Этот блок необязательный и может совпадать с именем файла.
  • const — блок с объявлением постоянных значений (констант), которые не изменяются по ходу выполнения программы.
const
  Pi = 3.14;
  • var — блок с объявлением переменных. На этом этапе им не надо передавать значения, достаточно просто указать тип.
var
  x, y: integer;
  count: integer;
  name: string;
  • procedure ProcedureName; — блок объявления процедур. Важно, чтобы код самой процедуры находился между ключевыми словами begin и end.
  • function FunctionName: returnType; — блок объявления функций. Тут всё то же самое, что и с процедурами, только надо указать тип значения, которое возвращает функция.

Важно!

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

  • Основной код программы — код, который идёт в самом конце после объявления всего, что в нём будет использоваться. Также должен находиться строго между ключевыми словами begin и end. В конце программы надо поставить точку.

Из примеров выше можно заметить, что в качестве разделителя в конце строки надо ставить точку с запятой (;). Это правило верно для всех случаев, кроме операторов else и until. Перед их объявлением точку с запятой ставить не нужно.

Переменные и типы данных

Pascal — язык со строгой типизацией. Это значит, что мы должны явно указывать тип данных для каждой переменной. Разработчики могут использовать следующие простые типы данных:

ТипСлужебное словоПример
Целые числаinteger345
Числа с плавающей точкойreal3,14
Логический типbooleantrue (истина) или false (ложь)
Символыchar'F'

Помимо простых типов, в Pascal используются структурные, которые объединяют несколько элементов в более сложную структуру:

  • Массив — это структура данных, которая хранит в себе несколько элементов одного типа. При объявлении надо обязательно указать имя, размер массива и используемый тип данных. В коде программы к элементам массива можно обращаться по индексу.
var
  numbers: array[1..5] of integer;
begin
  numbers[1] := 5;
  numbers[2] := 10;
end.
  • Множество — структурный тип данных, который хранит в себе коллекцию уникальных элементов одного и того же типа. С множествами можно производить операции, например объединение, пересечение и проверку принадлежности элемента к множеству.
var
  numbers: set of 1..10;
  vowels: set of char;
begin
  numbers := [1, 2, 3, 4, 5];
  vowels := ['a', 'e', 'i', 'o', 'u'];
end.

Операторы

Операторы — это небольшие команды, которые говорят компьютеру, что надо делать с переменными. Например, мы уже встречали оператор присвоения — :=. Он сообщает, что значение справа нужно записать в переменную слева. Давайте посмотрим на другие операторы в Pascal.

Чаще всего разработчики пользуются арифметическими операторами. Они выглядят и работают так же, как в математике, но есть и исключения:

ОператорЗначениеПример
+Сложениеa + b
-Вычитаниеa - b
*Умножениеa * b
/Делениеa / b
divЦелочисленное делениеa div b
modОстаток от деленияa mod b

После идут операции сравнения. Они сравнивают значение слева со значением справа и возвращают true (истина) или false (ложь):

ОператорЗначениеПример
=Равноa = b
<>Не равноa <> b
>Большеa > b
<Меньшеa < b
>=Больше или равноa >= b
<=Меньше или равноa <= b

Логические операторы выполняют операции над логическими значениями:

  • and — логическое И;
  • or — логическое ИЛИ;
  • not — логическое НЕ.

Также свои операторы есть у множеств. Они нужны для удобной работы со структурой данных, чтобы разработчику не надо было реализовывать всё с нуля:

  • + — объединение множеств;
  • * — пересечение множеств;
  • - — разность множеств;
  • in — проверка принадлежности элемента множеству.

Например, вот так можно объединить множество [1, 2, 3] с множеством [3, 4, 5] и получить множество [1, 2, 3, 4, 5]:

var
  set1, set2, set3: set of 1..10;
begin
  set1 := [1, 2, 3];
  set2 := [3, 4, 5];
  set3 := set1 + set2; 
end.

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

С помощью условных операторов можно выполнять определённые действия только в том случае, если выполняются поставленные условия. Чаще всего используется конструкция if … then … else. В общем виде он выглядит так:

if условие then
  код
else
  код

Ключевое слово else нужно для описания операций, которые программа должна выполнить, если окажется, что поставленное условие ложно. Это необязательное ключевое слово, поэтому от него можно отказаться, если оно не нужно в программе.

Напишем код, который проверяет, чтобы содержимое переменной x было больше 3. Если условие соблюдается, то в консоли пользователь увидит сообщение x > 3, иначе появится сообщение x <= 3. Используем функцию writeln() для вывода текста в консоль:

var
  x: integer;
begin
  x := 2;
  if x > 3 then
    writeln('x > 3')
  else
    writeln('x <= 3');
end.

Если нужно выбрать одно действие из нескольких заготовленных, то лучше воспользоваться оператором case … of. В общем виде он выглядит так:

case выражение of
  значение1: оператор1;
  значение2: оператор2;
  ...
  else оператор3;
end;

В коде выше:

  • Выражение — переменная или выражение, результат которого Pascal будет проверять на соответствие значениям.
  • Значения — возможные значения выражения.
  • Оператор — действие, которое надо выполнить, если выражение равно соответствующему значению.
  • else обрабатывает случай, если ни одно из значений не подошло.

Напишем программу, которая будет выводить название дня недели, исходя из его порядкового номера:

var
  day: integer;
begin
  day := 4;
  case day of
    1: writeln('Понедельник');
    2: writeln('Вторник');
    3: writeln('Среда');
    4: writeln('Четверг');
    5: writeln('Пятница');
    else writeln('Сегодня выходной');
  end;
end.

Переменная day равна 4, поэтому код выше выведет в консоль Четверг.

Циклы

С помощью циклов можно многократно выполнять блок кода, пока истинно указанное условие. В Pascal есть три вида циклов:

  • for … to … do используется, когда заранее известно количество итераций, а значение управляющей переменной увеличивается или уменьшается на каждом шаге.
var
  i: integer;
begin
  for i := 1 to 5 do
    writeln('Итерация: ', i);
end.
  • while … do выполняется до тех пор, пока условие цикла истинно. Количество итераций заранее не известно.
var
  x: integer;
begin
  x := 1;
  while x <= 5 do
  begin
    writeln('Итерация: ', x);
    x := x + 1;
  end;
end.
  • repeat … until также выполняется до тех пор, пока истинно поставленное условие.
var
  x: integer;
begin
  x := 1;
  repeat
    writeln('Итерация: ', x);
    x := x + 1;
  until x > 5;
end.

Комментарии

Для комментирования кода в Pascal есть два оператора: { … } и (* … *). С их помощью можно выделить код и текст, который проигнорирует компилятор. Например, чтобы добавить пояснения для сложной функции или объяснить работу алгоритма программисту, который будет работать после вас. Операторы различаются только синтаксисом, поэтому можно использовать любой, но важно помнить, что нельзя начать комментарий одним оператором, а закончить другим:
{ … *).

Комментарии могут быть однострочными и многострочными:

begin
  { Это однострочный комментарий }

  {
    Это многострочный комментарий.
    Компилятор проигнорирует текст в скобках.
  }
end.

Привет, Pascal: пишем игру «Камень, ножницы, бумага»

Мы уже достаточно знаем для того, чтобы запрограммировать настоящую игру, которая будет работать в терминале. Напишем код для «Камень, ножницы, бумага» — простой детской игры. Для этого ещё познакомимся с модулем crt, который нужен для работы с консолью, и генератором случайных чисел.

Настраиваем окружение

Для разработки на Pascal нужен компилятор, совместимый с вашей операционной системой. Рассмотрим установку всего необходимого на примере реализации PascalABC.NET для Windows:

Скриншот: PascalABC.NET / Skillbox Media
  • Выберите необходимую сборку (с задачником или без него) и нажмите кнопку Скачать.
Скриншот: PascalABC.NET / Skillbox Media
  • В загрузках найдите файл PascalABCNETSetup.exe, запустите его и выполните шаги установки.
  • Найдите приложение PascalABC.NET в меню Пуск и запустите его.
  • В этой среде разработки можно писать код на Pascal и выполнять его.
Скриншот: PascalABC.NET / Skillbox Media

Пишем код

Сперва зададим название программы, импортируем модуль crt и объявим переменные. Сторонние модули в Pascal импортируются с помощью ключевого слова uses. В коде игры будем использовать всего три переменные:

  • playerChoice, computerChoice — для хранения ходов пользователя и компьютера.
  • playAgain — для взаимодействия с меню.
program RockPaperScissors;

uses crt;  { Импортируем модуль для работы с консолью }

{ Объявляем переменные}
var
  playerChoice, computerChoice: integer;
  playAgain: char;

Теперь напишем процедуру, которая будет выводить в консоль меню выбора хода. Назовём её ShowChoices и с помощью нескольких вызовов функции writeln() покажем пользователю возможные ходы:

{ Процедура для вывода в консоль меню}
procedure ShowChoices;
begin
  writeln('Выберите:');
  writeln('1 - Камень');
  writeln('2 - Ножницы');
  writeln('3 - Бумага');
end;

Ещё нам нужна процедура, которая будет выбирать победителя, исходя из выбора пользователя и компьютера. Назовём её DetermineWinner и в скобках обязательно укажем параметры, которые ей нужны для работы. Для правильного определения победителя помним, что ножницы разрезают бумагу, бумага обезвреживает камень, а камень ломает ножницы:

procedure DetermineWinner(player, computer: integer);
begin
  { Выводим ход пользователя и компьютера }
  writeln('Вы выбрали: ', playerChoice);
  writeln('Компьютер выбрал: ', computerChoice);

  { Если выбор равен, то ничья }
  if player = computer then
    writeln('Ничья!')
  { Определяем победителя и выводим сообщение в консоль }
  else if ((player = 1) and (computer = 2)) or
          ((player = 2) and (computer = 3)) or
          ((player = 3) and (computer = 1)) then
    writeln('Вы победили!')
  else
    writeln('Компьютер победил!');
end;

Всё готово для того, чтобы приступить к разработке главного цикла игры. Он будет повторяться до тех пор, пока пользователь не закроет игру, введя в консоль символ n или N. Общая логика игры выглядит так:

  • Инициализируем генератор случайных чисел.
  • Очищаем экран с помощью функции clrscr из модуля crt, который мы экспортировали ранее, и выводим меню с помощью процедуры ShowChoices.
  • Получаем ход пользователя и проверяем, чтобы он ввёл только значения, которые есть в меню (числа от 1 до 3). Если ввёл что-то другое, то просим сделать выбор ещё раз.
  • Генерируем случайный ход компьютера с помощью функции random () и выбираем победителя с помощью процедуры DetermineWinner.
  • Спрашиваем пользователя, хочет ли он сыграть ещё раз.

Код главного цикла игры выглядит так:

{ Основной код игры }
begin
  { Инициализируем генератор случайных чисел }
  randomize;

  repeat
    { Очищаем экран для нового раунда }
    clrscr;

    { Выводим меню }
    ShowChoices;
    
    { Получаем ход пользователя }
    write('Ваш ход (1-3): ');
    readln(playerChoice);

    { Проверяем, чтобы ввод пользователя соответствовал условию }
    if (playerChoice < 1) or (playerChoice > 3) then
    begin
      writeln('Неверный выбор. Попробуйте снова.');
      continue;  { Возвращаемся в начало цикла }
    end;

    { Генерируем случайный ход компьютера: 1 — камень, 2 — ножницы, 3 — бумага}
    computerChoice := random(3) + 1;
    
    { Определяем победителя}
    DetermineWinner(playerChoice, computerChoice);

    { Спрашиваем, хочет ли пользователь сыграть ещё раз}
    writeln;
    write('Хотите сыграть ещё раз? (y/n): ');
    readln(playAgain);

  { Цикл игры повторяется до тех пор, пока пользователь не введёт n или N }    
  until (playAgain = 'n') or (playAgain = 'N');

  { Благодарим пользователя и завершаем игру }
  writeln('Спасибо за игру!');
end.

А так игра работает в консоли:

Интерфейс игры в консоли
Скриншот: PascalABC.NET / Skillbox Media

Полностью код игры выглядит так:

program RockPaperScissors;

uses crt;  { Импортируем модуль для работы с консолью }

{ Объявляем переменные}
var
  playerChoice, computerChoice: integer;
  playAgain: char;

{ Процедура для вывода в консоль меню}
procedure ShowChoices;
begin
  writeln('Выберите:');
  writeln('1 - Камень');
  writeln('2 - Ножницы');
  writeln('3 - Бумага');
end;

procedure DetermineWinner(player, computer: integer);
begin
  { Выводим ход пользователя и компьютера }
  writeln('Вы выбрали: ', playerChoice);
  writeln('Компьютер выбрал: ', computerChoice);

  { Если выбор равен, то ничья }
  if player = computer then
    writeln('Ничья!')
  { Определяем победителя и выводим сообщение в консоль }
  else if ((player = 1) and (computer = 2)) or
          ((player = 2) and (computer = 3)) or
          ((player = 3) and (computer = 1)) then
    writeln('Вы победили!')
  else
    writeln('Компьютер победил!');
end;

{ Основной код игры }
begin
  { Инициализируем генератор случайных чисел }
  randomize;

  repeat
    { Очищаем экран для нового раунда }
    clrscr;

    { Выводим меню }
    ShowChoices;
    
    { Получаем ход пользователя }
    write('Ваш ход (1-3): ');
    readln(playerChoice);

    { Проверяем, чтобы ввод пользователя соответствовал условию }
    if (playerChoice < 1) or (playerChoice > 3) then
    begin
      writeln('Неверный выбор. Попробуйте снова.');
      continue;  { Возвращаемся в начало цикла }
    end;

    { Генерируем случайный ход компьютера: 1 — камень, 2 — ножницы, 3 — бумага}
    computerChoice := random(3) + 1;
    
    { Определяем победителя}
    DetermineWinner(playerChoice, computerChoice);

    { Спрашиваем, хочет ли пользователь сыграть ещё раз}
    writeln;
    write('Хотите сыграть ещё раз? (y/n): ');
    readln(playAgain);

  { Цикл игры повторяется до тех пор, пока пользователь не введёт n или N }    
  until (playAgain = 'n') or (playAgain = 'N');

  { Благодарим пользователя и завершаем игру }
  writeln('Спасибо за игру!');
end.

Что дальше

В этой статье мы изучили только основы языка, если хотите погрузиться глубже в Pascal, то вот список полезных материалов:

  • Курсы по PascalABC.NET на Stepik — коллекция бесплатных курсов как для школьников, так и для взрослых. Есть отдельные курсы для подготовки к программированию на ЕГЭ.
  • Книги по PascalABC.NET — книги Александра Осипова и Валерия Рубанцева подойдут для школьников и студентов первых курсов, а двухтомник Михаила Абрамяна — официальное руководство от Южного федерального университета по работе со структурами данных.
  • LearnPascal — сайт с уроками по Pascal и решением задач.
  • Rosetta Code — сборник решений задач, в том числе на Pascal.
  • Codewars — сервис для практики решения алгоритмических задач. В списке языков программирования можно выбрать Pascal.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Освойте топовые нейросети за один день. Бесплатно
Знакомимся с ChatGPT-4, DALLE-3, Midjourney, Stable Diffusion, Gen-2 и нейросетями для создания музыки. Практика в реальном времени. Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована