Pascalabc.net для учителей и преподавателей

Введение

PascalABC.NET активно используется в школах и университетах России.

Данный текст предназначен преимущественно для школьных учителей и преподавателей дополнительного образования, но в равной степени может использоваться всеми для введения в новые возможности языка PascalABC.NET.
Здесь содержится также описание стиля программирования, который мы рекомендуем использовать при обучении. Кроме того, объясняются методические причины использования тех или иных конструкций.

Совместимость с Borland Pascal, Free Pascal

PascalABC.NET имеет высокую совместимость с Borland Pascal, Free Pascal и позволяет писать программы “в старом стиле”. Однако старый стиль не рекомендуется к использованию, поскольку основное предназначение PascalABC.NET в образовании — обучение современному программированию.

Целесообразность обучения новым конструкциям

Для нас очевидно, что обучение программированию с опорой только на “базовый Паскаль” лишено будущего.
“Старый Паскаль” опирается на конструкции и стиль как минимум 30-летней давности и устарел. Это создаёт неприятные ситуации при обучении на этом языке: многие учениики видят в сети современные примеры программирования на других языках, и это отталкивает от обучения программированию на “базовом Паскале”. Здесь мы полностью согласны с часто высказываемым мнением “старый Паскаль умер”.

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

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

Какой язык использовать для обучения программированию

Бытует мнение что лучше учить сразу языкам, используемым в промышленных проектах: Python, C++, Java, C#. Здесь каждый преподаватель принимает решение сам — всё зависит от его искусства. Однако отметим, что ученика, который мечтает стать лётчиком, в школе никто не учит летать на промышленных самолётах 🙂

PascalABC.NET обеспечивает учителя и ученика простой и мощной оболочкой с подробной справочной системой, сообщениями об ошибках на русском языке, а также с системой подсказок по коду (почти отсутствующей у Python-оболочек).

PascalABC.NET даже в простейших программах использует такие важные конструкции и концепции как автовывод типов и кортежи, а использование лямбда-выражений и последовательностей многократно упрощает решение стандартных задач. По существу все эти конструкции являются новыми примитивами программирования, необходимыми современному школьнику.

Кроме того, в PascalABC.NET имеются мощные библиотеки “на все случаи жизни”, а также собственные модули упрощённой графики для визуализаций, простых анимаций и простых интерактивных приложений.

Ни одна из известных нам систем программирования не располагает подобным сочетанием средств, необходимых в первую очередь для обучения.

Дополнения и изменения в стандартных библиотеках

Модуль Controls

Модуль Controls полностью переработан, включает набор основных элементов управления WPF и может сочетаться с модулями GraphWPF, WPFObjects и Graph3D

В папке PABCWork.NET/Samples/Graph/Controls — более 20 новых примеров.

Пример программы с Controls:

Стандартные функции SeekEof SeekEoln Eoln

Добавлены стандартные функции и для совместимости с Delphi

Исправлено поведение стандартной — теперь на конце файла она возвращает True

Стандартные функции и операции для матриц и одномерных массивов

Для массивов и матриц добавлены новые операции и методы

Изменено поведение методов и — теперь они возвращают массив массивов

Это позволяет просто решать задачи с матрицами, где надо выполнить какие-то операции со строками-столбцами.
Для этого мы вначале расщепляем матрицу на строки (столбцы), делаем с ними нужные преобразования и потом снова собираем матрицу.

Пример. Упорядочить все столбцы матрицы по сумме столбца

Стандартные функции DictStr и DictStrInt

и генерируют Dictionary<string,string> и Dictionary<string,integer> соответственно. Могут вызываться с пустым списком параметров

Изменения в GraphWPF

При вызове теперь рисуется сетка, оси, заголовок и значения на осях (автоматически)

Имя типа заменено на

и могут вызываться с дополнительным параметром

Методы , , , возвращают изменённый шрифт

Добавлен класс и операции над ним и точкой, а также создающая функция

Метод можно вызывать в виде

Метод

Функции и , возвращающие случайную точку и набор случайных точек

Генераторы массивов с лямбда-функциями

Для генерации массивов с элементами, заполненными по некоторому правилу, используется функция ArrGen. У неё — две основные модификации.

Генерация по формуле a = f(i)

var a := ArrGen(10,i->f(i));

Здесь первый параметр — количество элементов массива, второй — лямбда функция, переводящая индекс элемента в значение. Нумерация i начинается с нуля.

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

Генерация по рекуррентной формуле, в которой следующий элемент определяется по предыдущему.

var a := ArrGen(10,1,x->x+2);

Здесь генерируется массив из 10 элементов, первый равен 1, а каждый последующий больше предыдущего на 2

Здесь генерируется массив из 10 элементов, первый равен 1, а каждый последующий больше предыдущего в 2 раза

Новые конструкции в языке

Unicode-символ →

Вместо лексемы в лямбда-выражениях можно использовать Unicode-символ

Чтобы его набрать в редакторе, следует нажать Alt и набрать 26 на дополнительной клавиатуре.

Программы с лямбда-выражениями благодаря этому становятся более читабельными:

Массивы-значения

Для формирования массива из значений используется конструкция

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

Распаковка в переменные из последовательности

Можно распаковвывать значения в переменные из последовательности так, как это сейчас осуществляется для кортежей. Несовпадение размеров при этом проверяется на этапе выполнения, а не на этапе компиляции.

Запись программ без внешнего begin-end

Для записи программ без внешнего begin-end используется префикс ##

При этом способе записи невозможно использовать описание констант, типов (в т.ч. классов), процедур и функций

Область использования данного способа записи — короткие программы, состоящие из нескольких команд:

При использовании префикса ### дополнительно подключается модуль SF:

Два важных отличия от стандартного Паскаля.

Если вы внимательно смотрели на скриншот, то должны увидеть, что в PascalABC.NET операции умножения, деления, сложения и вычитания можно производить более удобным и коротким способом, но только если эта операция изменяет указанную переменную. Поясню на примере :

// Начало программы.
var i: integer;
i := 3;
i += 1; { i = 4 }
i *= 2; { i = 8 }
// Конец программы.

И вот еще одна особенность: переменные могут объявляться в теле программы. Зачем это делать? Представьте, вы написали длинный код и тут понимаете, что забыли указать какую-либо переменную. Конечно, вы можете вернуться в начало и дописать ее в разделе объявления переменных, но зачем? Гораздо удобнее написать ее тут же.

Решим задачу на обмен значениями, пользуясь полученными знаниями.

Program Obmen;

var x, y: real;

begin
  write('Введите x, y: ');
  readln(x, y);
  var tmp: real := x; //вводим новую переменную и сразу вводим ее значение.
  x := y;
  y := tmp;
  writeln(x,' ', y);
end.

И последняя особенность на сегодня — автоматическое определение типов. Пример:

Program Example;
 var
   n := 2; // Переменная целого типа
   x := 3.14; // Переменная вещественного типа
begin
   var c := 'q'; // Переменная символьного типа
   var s := 'Pascal'; // Переменная строкового типа
   var b := True; // Переменная логического типа
   var r := x; // Переменная того же типа, что и переменная x
end.

Официальный веб-сайт

Главный ресурс программного обеспечения не привязан к русскоязычным странам, имея возможность в любой момент переключиться на международный английский язык. О том, что Pascal ABC — это перспективно, говорят в первую очередь обновления. Они в свою очередь свидетельствуют о том, что язык программирования пользуется большим спросом. Официальный веб-сайт языка программирования является хорошим способом узнать про Pascal ABC все от А до Я. Несмотря на наличие на сайте множества разделов и подразделов, основная доля информации приходится на обучение. Был создан даже специальный раздел «Уроки PascalABC.NET», где новички смогут ознакомиться с примера из области графики и анимации, а также с простейшими событиями и другими примерами. Отечественные разработчики — это знак того, что информация написана на понятном человеческом языке, не требующем к себе каких-либо высших знаний.

Интерфейс и основные инструменты

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

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

С помощью использования подпункта «файл», можно создать новый проект, открыть существующий, сохранить работу, либо поместить сохраненный файл в выбранную папку. Альтернативным способом выполнить все действия с файлами является использование клавиатурных комбинаций. Так, Ctrl+O отвечает за открытие файла с проектом программ, Ctrl+N создает новый проект, Ctrl+Shift+S позволит сохранить работу в выбранную папку, а Ctrl+S просто сохраняет изменения, сделанные в файле.

С помощью подпункта «Правка», выполняют ряд действий с кодом. Через меню можно выбрать копирование, вырезку, удаление выделенного участка кода, или отмена действий. Как и в предыдущем случае, эти операции можно выполнить с помощью соответствующих клавиатурных сокращений: Ctrl+C – копировать выделенный участок кода, Ctrl+V – вставить выделенный участок кода, Ctrl+X – вырезать выделенный участок кода, Ctrl+Z – отменить действие.

В подпункте меню «Вид», есть возможность включить или отключить отображение некоторых элементов на рабочей области.

В разделе «Программа» помещены инструменты для управления компиляцией написанного программного продукта.

В «сервисе» пользователь может выполнить основные настройки приложения для программирования.

Раздел «Модули» содержит основные программные модули, задачи, а также примеры кода приложений, которые можно создать в Паскаль АБС.

С помощью раздела «Помощь», пользователь может узнать о том, как пользоваться программой.

Первоначальная настройка PascalABC.NET.

Уже целый месяц вы программируете в этой СП (Системе программирования), но, наверняка, вы ни разу не залезли в настройки и ничего там не меняли. А надо. Это значительно облегчит нашу работу.

Сначала зайдем в Сервис -> Настройки.

Выскочит вот такое окошко.

Откройте вкладку «Редактор».

Проставляем галочки и выбираем шрифт.

Хотя, как видно на скриншоте, в настройках стоит шрифт Times New Roman, но потом я все-таки поменял его обратно на Courier New. Наверное, уже привык.

Переходи в «Опции компилятора».

Уберите галочку напротив «Удалять EXE файл.».

Зачем мы оставляем EXE-файл? Это файл консольного приложения, с помощью которого вы или ваш друг сможете запустить программу без открытия СР.

Открываем Intellisense.

Проставьте галочки, как показано на скриншоте.

Теперь, давайте, протестируем результат. Основная функция, которую мы будем использовать на данном этапе обучения — это Intellisense.

Когда мы начинаем вводить оператор или что-нибудь другое, высвечивается подсказка. Стрелочками можно прокручивать список. Mission Complete!

Для того чтобы облегчить набор программы в PascalABC.NET предусмотрены шаблоны текста (snippets). Для вызова шаблона набираем несколько специальных символов и нажимаем клавиши Shift + Пробел.

Вот список шаблонов, которой уже может пригодиться нам.

| означает позицию курсора после вставки шаблона

1) b

begin
|
end;

2) be

begin
|
end.

3) i

integer

4) prog

program <filename>;

begin
|
end.

Еще одна новая способность! Теперь вы не забудете тип переменной.

Небольшое предисловие

Язык программирования «Pascal» подходит многим пользователям компьютера и одобрен Министерством Образования Российской Федерации. Большинство начинающих программистов и разработчиков консольных программ считают его эталоном при изучении языка программирования начального уровня. На нашем скромном сайте нет споров по этому поводу.

Во многих школах России ученики работают на старом Turbo Pascal, который был выпущен 1980 году. Его оболочка создана под дисковую операционную систему DOS. Работа в древней версии Pascal на компьютерах нового поколения — это просто смешно.

Сделав выводы, я подобрал для этого сайта российскую систему программирования PascalABC.NET. Эта среда разработки работает на бесплатной основе, оснащена собственным редактором кода, позволяет «создавать» приложения разных типов.

В PascalABC.NET вы «пишете» приложения консольного типа, то есть без графической оболочки и интерфейса и графические программы, которые запускаются в OS Windows. Главная особенность этой версии языка «Pascal» — это его простота и функциональность платформы . NET. Перейдите на сайт pascalabc.net, чтобы установить  PascalABC.NET.

Здоровье кода PascalABC.NET

Здоровье кода PascalABC.NET — важнейший показатель кода, характеризующий то, используются ли в программе устаревшие конструкции базового Паскаля, или напротив новые конструкции PascalABC.NET, рекомендованные практически для любой программы.

PascalABC.NET создан для того чтобы обучать современному программированию, позволяющему писать лёгкие, компактные и понятные программы.

Для начинающих подобных средств языка не так много. Это прежде всего описания переменных по мере того как они становятся нужны в коде (внутриблочные описания),
совмещение описания с инициализацией, автовывод типа при инициализации, описание переменной цикла for в заголовке цикла, а также использование функций ReadInteger и ReadReal вместо процедуры Read для ввода данных и процедуры Print вместо процедуры Write для вывода данных, а также расширенных операторов присваивания += и *=. На более высоком уровне обучения это — использование динамических массивов вместо статических, поскольку именно динамические массивы содержат огромное количество стандартных методов, улучшающих понятность программы.

Пример “плохой” программы в стиле устаревшего базового Паскаля:

Здоровье кода такой программы оценивается в 54%, то есть “не очень” 🙂

Пример программы, написанной средствами PascalABC.NET:

Здоровье кода такой программы оценивается в 125%, что означает, что в ней не только нет устаревших конструкций, но и используются новые.

Базовые конструкции

Описания переменных внутри блока и автовывод типов

В большинстве случаев переменные описываются в блоке begin-end и описание совмещается с инициализацией:

Это решает сразу несколько проблем:

  • можно не говорить о типах в первых программах или лишь упоминать их
  • невозможно забыть инициализировать переменную
  • переменные описываются по мере необходимости близко к месту их использования. Это улучшает читаемость. Проблема старого Паскаля, когда груда переменных описывалась до beginа, отсутствует

При таком способе возникает одна проблема: если надо накопить сумму вещественных, то такой код приведет к ошибке типов:

Для исправления этой ошибки всё равно придётся говорить о типах и инициализировать sum одним из двух способов:

или

Цикл for var

Переменная — счётчик цикла for всегда должна описываться в заголовке цикла:

Это делает невозможным использование счётчика цикла вне цикла

Вывод

Для вывода вместо процедуры Write предпочтительно использовать процедуру Print. В отличие от Write она разделяет элементы вывода пробелами. Например:

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

вместо режущего глаз

Ввод

Ввод принято осуществлять, используя функции вида ReadInteger, ReadReal и т.д.:

Это позволяет совмещать описание переменной с инициализацией и автовыводом типа. В качестве дополнительных бонусов: можно делать приглашение к вводу как параметр функции ввода и вводить сразу несколько переменных одного типа:

Для ввода с контролем ошибок используется функция TryRead. Она возвращает False если ввод осуществлён неверно (введено не число или число выходит за границы диапазона). Типичный пример её использования:

Тип BigInteger

Для работы с длинными целыми используется тип BigInteger. Например, чтобы вычислить 100!, достаточно написать следующий код:

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

Для обмена значений двух переменных и используйте стандартную функцию :

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

Но далее следует использовать Swap.

Минимальное и максимальное среди множества значений можно вычислить, используя стандартные функции Min и Max:

Для возведения в степень используется операция :

Возведение в целую степень оптимизировано и работает быстрее стандартной функции .

Для проверки принадлежности диапазону используется конструкция :

Эта операция эффективна и переводится в

Диапазоны также можно использовать для вещественных значений и для символов:

Для проверки принадлежности множеству значений используется либо множество:

либо массив:

Мы рекомендуем второй способ — он существенно более эффективен по скорости и по памяти.

Условная операция

Если переменной необходимо присвоить значение в зависимости от условия, то вместо условного оператора иногда нагляднее использовать условную операцию:

Методы в стандартных типах

В PascalABC.NET внутри каждого типа имеется ряд полезных методов. В отличие от внешних процедур и функций, они “вшиты” в тип — переменная знает все свои методы и может вызывать их, используя точечную нотацию.

Например, чтобы вывести значение переменной базового типа, можно
использовать метод Print:

Из других интересных методов для начинающих для целых типов отметим:

Например, в следующей программе вычисляется количество четных двузначных из 10 введённых:

Для вещественных значений полезными являются методы

В частности, удобно использовать цепочечную точечную нотацию:

Для всех числовых типов также определены константы MinValue и MaxValue. Чтобы обратиться к ним, следует использовать имя типа:

Кортежи

Кортежи представляют собой способ объединить несколько значений в одно целое. Значения типа Кортеж записываются в круглых скобках: или . с помощью кортежей можно выполнять одновременные присваивания нескольким переменным:

Присваивание позволяет поменять значения двух переменных.

Использование кортежей даже в начальных задачах крайне многообразно.

Пример 1. Нахождение наибольшего общего делителя

Пример 2. Числа Фибоначчи

ЗАДАЧА №760 Транспорт

(Время: 1 сек. Память: 16 Мб Сложность: 24%)

Все автовладельцы рано или поздно встречаются с инспекторами ГИБДД. Ваша задача состоит в том, чтобы рассчитать минимальное время прохождения автомобилем прямого участка дороги, на котором стоят инспекторы. Известно, что на данном участке инспекторы останавливают все проезжающие мимо автомобили. Примем следующие допущения: автомобили являются материальными точками, которые могут мгновенно останавливаться или набирать максимальную скорость. Автомобиль начинает свой путь в точке 0 и заканчивает его в точке L.

Входные данные

Первая строка входного файла INPUT.TXT содержит три числа: N – количество инспекторов (0 ≤ N ≤ 30), V – максимальная скорость автомобиля (км/ч) и L – длина участка дороги (км) (1 ≤ V, L ≤ 200). Вторая строка содержит N пар чисел xi – расстояние от точки 0 до инспектора (0 ≤ xi ≤ L) и ti – время (мин), на которое он останавливает машину (1 ≤ ti ≤ 10). Все инспектора стоят в разных точках. Все числа во входных данных целые.

Выходные данные

В выходной файл OUTPUT.TXT выведите время преодоления участка дороги автомобилем в минутах с точностью до двух знаков после запятой (вещественное число с ровно двумя цифрами после запятой).

И в этой задаче без подвоха не обошлось. Конечно, можно разбить путь на отрезки, зная координаты инспекторов, но зачем? Задана длина пути и постоянная скорость. Мгновенные остановки и разгоны, а также прямой участок дороги позволяют считать движение условно равномерным и прямолинейным на всем протяжении. Следовательно, суммарное время преодоленния всех участков может быть найдено как отношение пройденного пути к скорости движения. Для перевода времени в минуты нужно будет умножить его на 60. Остается учесть потери времени на остановки. Они равны сумме времени остановки на каждом участке. Находим эту сумму и прибавляем ее к времени движения. Переменная p в программе служит для считывания координат инспекторов, которые в расчете не участвуют. Поэтому предупреждающее сообщение компилятора о том, что переменная р получает значение, которое затем не используется нужно игнорировать. С диапазоном представления данных проблем нет, используем обычные и .

Установка программы состоит из таких этапов:

Сначала нужно скачать PascalABC.NET + Microsoft .NET Framework v4.7 для OS Windows. Закачка инсталлятора доступна бесплатно. Вы можете загрузить язык программирования и дополнительные утилиты через торрент.

После скачивания установочного пакета, запустите файл «PascalABCNETWithDotNetSetup» или исполнительный файл с подобным названием. В появившемся окне, выберите тип установки и нажмите «Далее».

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

  1. В следующем окне, укажите каталог установки Паскальабс и нажмите «Далее». Если вы не выберите другой источник, войдя в «Обзор», то файлы установятся по стандартному пути C:\Program Files (x86)\PascalABC.NET.

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

Стандартно все данные хранятся на «Рабочем столе». Нажмите «Создать папку» и «Ок» или выберите другое место и создайте отдельный каталог для хранения информации, например, на диске С или D. После этого, щёлкните «Установить».

  1. Подождите, пока установится все компоненты. В процессе инсталляции вы можете просмотреть историю копирования файлов, щелкнув кнопку «Детали».

  1. В конце инсталляции, когда появится надпись «Установка завершена», нажмите «Закрыть».

Запускайте «разработчик приложений» через ярлык на «Рабочем столе». «Рабочая папка» (Samples), находится там же, если вы не изменили место при установке. Альтернативный способ запуска: Меню Пуск – Программы – PascalABC.NET. В папке Samples находятся готовые модули.

Эта версия вам подойдет если вы еще не устанавливали Паскаль абс. Содержит все необходимые программы для запуска:

Содержит:

  • Система программирования PascalABC.NET
  • Задачник PT4
  • Платформа Microsoft .NET Framework v4.7.1
  • Russian Language Pack for .NET v4.0 (русификация сообщений о ошибках времени выполнения)
  • Framework Class Library Help (документация для всплывающей подсказки)

Интерфейс и основные инструменты

В этой программе, ориентированной также на обучение, предусмотрены модули GraphWPF (растровой графики), ABCObjects (векторной графики), Graph3D (3-D графика), есть также модули Чертежник и Робот.

В этом примере используется процедура рисования (procedure Draw), есть две переменные (x, y), их значения постоянны (integer), используется конструктор Create.

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

В качестве элементов массивов – переменные любых типов. Как элементы массивов выступают значения любых типов. Это может быть матрица (один двумерный массив) или несколько массивов.

В этом языке программирования не ограничена размерность массива или число индексов в определении. Элемент массива – переменная. Используя операторы присваивания можно присваивать значения.

KMSAuto Net 2015 1.4.4 Portable [2015, Активатор]

Год выпуска: 2015Жанр: АктиваторРазработчик: RatiborusСайт разработчика: http://forum.ru-board.com/topic.cgi?bm=1&forum=2&topic=5328Язык интерфейса: РусскийТип сборки: PortableРазрядность: 32/64-bitОперационная система: Windows Vista, 7, 8, 8.1, 10, Server 2008, 2008 R2, 2012, 2012 R2Системные требования: Для работы программы требуется .NET Framework 4.5Описание: KMSAuto Net — автоматический KMS-активатор для операционных систем Windows VL редакций: Vista, 7, 8, 8.1, 10, Server 2008, 2008 R2, 2012, 2012 R2 а также Office 2010, 2013, 2016. Работа с программой Изменения — Несколько м …

Программы / Системные приложения / Разное (Виртуальные машины, WPI и др.)
Подробнее  

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

Вывода на экранправить

Вывод текстаправить

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

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 :=  to N - 1 do Ai := Random(100); 
  
  Max := integer.MinValue; 
  for var i :=  to N - 1 do 
    if Ai > Max then Max := Ai;
  
  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.Charsfrom]) do
  begin
    Result += s.Charsfrom;
    Inc(from);
  end;
end;

begin
  Readln(S);
  
  var L := Length(S);
  while i <= L do
  begin
    while (i <= L) and not char.IsLetter(S.Charsi]) do
    begin
      S2 += S.Charsi;
      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.Charsi = ' ' then
    begin
      S2 += ' ';
      Inc(i);
    end;
    // Пропускаем все лишние пробелы.
    while (i <= Length(S)) and (S.Charsi = ' ') do Inc(i);
    // Бежим по строке до тех пор пока не встретим пробел.
    while (i <= Length(S)) and (S.Charsi <> ' ') do
    begin
      S2 += S.Charsi;
      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 :=  to N - 1 do Readln(Ai]); 
  Writeln(A); 
end.

Оператор breakправить

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

const
  N = 9;

var
  A array ..N - 1 of integer;


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

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

Лямбда-выражения

Лямбда-выражения — базовый примитив программирования на PascalABC.NET. При обучении начинающих они возникают как параметры стандартных подпрограмм и методов.

Учителю психологически трудно перейти на использование лямбда-выражений по нескольким причинам:

  • лямбда-выражения кажутся сложными
  • лямбда-выражения кажутся относящимися лишь к профессиональному программированию
  • нигде в доступной учебной литературе не используются лямбда-выражения

Мы попытаемся развеять эти мифы.

Итак: лямбда-выражения — это просто.

Лямбда-выражение — это функция. Функция отображает параметр на значение. Например, квадратичная функция в школе записывается как

Её можно записать также в виде:

что означает, что функция с именем f сопоставляет каждому значение .

Запись и называется в PascalABC.NET лямбда-выражением или лямбда-функцией. Заметим, что в отличие от предыдущей записи лямбда-функция не имеет имени. Именно поэтому часто лямбда-функция называется безымянной функцией.

Другие примеры лямбда-функций:

Линейная функция:

Функция, проверяющая, чётно ли x, и возвращающая True если чётно и False в противном случае:

Чаще всего лямбда-функции встречаются как параметры других функций. Далее будет рассмотрено множество подобных примеров.

Примеры программ

Пример 1. Поменять местами первую и вторую половины массива

begin
  var a := ArrGen(10, i->2*i+1);
  a.Println;
  Assert(a.Length mod 2 = );
  var n := a.Length div 2;
  a := an + an;
  a.Println; 
end.

Пример 5. Частотный словарь слов в файле

begin
  var D := new Dictionary<string, integer>;
  foreach var s in ReadLines('words.txt') do
    foreach var word in s.ToWords() do
      Dword := D.Get(word) + 1;
  D.PrintLines;
end.

Пример 5а. Частотный словарь слов в файле. Решение в функциональном стиле

begin
  ReadLines('words.txt').SelectMany(s -> s.ToWords).GroupBy(v -> v).ToDictionary(x -> x.Key, x -> x.Count).PrintLines;
end.

Пример 7. Параллельное умножение матриц с использованием директив OpenMP

 1 procedure Mult(a, b, c array , of real; n integer);
 2 begin
 3   {$omp parallel for}
 4   for var i :=  to n - 1 do
 5     for var j :=  to n - 1 do
 6     begin  
 7        var cc := 0.0;
 8        for var l :=  to n - 1 do
 9           cc += ai, l * bl, j;
10        ci, j := cc;   
11     end;
12 end;
13  
14 const N = 1000;
15  
16 begin
17   var A := MatrRandomReal(N, N, 1, 1.1);
18   var B := MatrRandomReal(N, N, 1, 1.1);
19   var C := new realN, N;
20   Mult(A, B, C, N);
21   Writeln(MillisecondsDelta()  1000);
22 end.

Плюсы и минусы

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

  • PascalABC содержит полноценную версию языка программирования с дополнениями .NET;
  • огромное количество готовых программных решений и примеров;
  • наличие обучающего модуля;
  • web-среда для разработки софта;
  • простой процесс установки;
  • бесплатное распространение;
  • русифицированная версия.

Кроме того, компилятор PascalABC совместим со многими операционными системами, например, MacOS или Linux. Как уже было сказано, устаревание приложения отразилось и на недостатках, заметных в условиях нынешней разработки ПО.

  • ввод текста программы вручную;
  • сложный интерфейс;
  • ограниченный доступ к функционалу в бесплатной версии.

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий