Базовые конструкции PascalABC.NET
В большинстве случаев переменные описываются в блоке begin-end и описание совмещается с инициализацией:
Это решает сразу несколько проблем:
- можно не говорить о типах в первых программах или лишь упоминать их
- невозможно забыть инициализировать переменную
- переменные описываются по мере необходимости близко к месту их использования. Это улучшает читаемость. Проблема старого Паскаля, когда груда переменных описывалась до beginа, отсутствует
При таком способе возникает одна проблема: если надо накопить сумму вещественных, то такой код приведет к ошибке типов:
Для исправления этой ошибки всё равно придётся говорить о типах и инициализировать sum одним из двух способов:
Цикл for var
Переменная — счётчик цикла for всегда должна описываться в заголовке цикла:
Это делает невозможным использование счётчика цикла вне цикла
Цикл loop
Если количество повторений цикла заранее известно, но неважен номер повторения, то используется цикл loop:
Множественное описание переменных с инициализацией
Можно инициализировать сразу несколько переменных в момент описания:
Вывод
Для вывода вместо процедуры Write предпочтительно использовать процедуру Print. В отличие от Write она разделяет элементы вывода пробелами. Например:
Для вывода нескольких значений с пояснениями рекомендуется использовать интерполированные строки:
вместо режущего глаз
Ввод принято осуществлять, используя функции вида ReadInteger, ReadReal и т.д.:
Это позволяет совмещать описание переменной с инициализацией и автовыводом типа. В качестве дополнительных бонусов: можно делать приглашение к вводу как параметр функции ввода и вводить сразу несколько переменных одного типа:
Для ввода с контролем ошибок используется функция TryRead. Она возвращает False если ввод осуществлён неверно (введено не число или число выходит за границы диапазона). Типичный пример её использования:
Тип BigInteger
Для работы с длинными целыми используется тип BigInteger. Например, чтобы вычислить 100!, достаточно написать следующий код:
Константу BigInteger можно также создать, используя суффикс bi — тогда предыдущий код изменится следующим образом:
Некоторые полезные стандартные процедуры, функции и операции
Для обмена значений двух переменных a и b используйте стандартную функцию Swap(a,b) :
Разумеется, первый раз необходимо показать, что обмен значений осуществляется через третью переменную:
Но далее следует использовать Swap.
Минимальное и максимальное среди множества значений можно вычислить, используя стандартные функции Min и Max:
Для возведения в степень используется операция ** :
Возведение в целую степень оптимизировано и работает быстрее стандартной функции Power(a,n) .
Для проверки принадлежности диапазону используется конструкция x in a..b :
Эта операция эффективна и переводится в
Диапазоны также можно использовать для вещественных значений и для символов:
Для проверки принадлежности множеству значений используется либо множество:
Мы рекомендуем второй способ — он существенно более эффективен по скорости и по памяти.
Условная операция
Если переменной необходимо присвоить значение в зависимости от условия, то вместо условного оператора иногда нагляднее использовать условную операцию:
Методы в стандартных типах
В PascalABC.NET внутри каждого типа имеется ряд полезных методов. В отличие от внешних процедур и функций, они “вшиты” в тип — переменная знает все свои методы и может вызывать их, используя точечную нотацию.
Например, чтобы вывести значение переменной базового типа, можно использовать метод Print:
Из других интересных методов для начинающих для целых типов отметим:
Например, в следующей программе вычисляется количество четных двузначных из 10 введённых:
Для вещественных значений полезными являются методы
В частности, удобно использовать цепочечную точечную нотацию:
Для всех числовых типов также определены константы MinValue и MaxValue. Чтобы обратиться к ним, следует использовать имя типа:
Кортежи
Кортежи представляют собой способ объединить несколько значений в одно целое. Значения типа Кортеж записываются в круглых скобках: (1,2,3) или (‘Иванов’,15) . с помощью кортежей можно выполнять одновременные присваивания нескольким переменным:
Возведение в степень: основы математики в программировании
Нередко мы сталкиваемся с тем, что нам необходимо возвести число в какую-либо степень. Можно воспользоваться обычным калькулятором. Но это неинтересно и очень часто не подходит под условия поставленной задачи.
Понятие степени в математике
Стоит начать с пояснения математического смысла возведения в степень. Например, нам необходимо возвести некоторое число x в степень y. В математике эта запись выглядела бы так: x y = x ^ y. Это означает, что число x нужно умножить на себя y раз. Помните: какое бы вы число ни возводили в нулевую степень, получится единица, а также при возведении в первую степень мы получим наше исходное число. При возведении в отрицательную степень мы всего лишь переворачиваем полученный результат.
Возведение в степень на паскале
С математикой всё понятно. Но как же нам сделать такую программу, которая будет производить возведение в степень? Тут всё просто. Если нам необходимо возвести x в степень 5, то наш код примет вид: res:= x * x * x * x * x. Мы умножили число x на себя 5 раз, как нам и было необходимо, но что делать, если нам не известна степень, в которую необходимо возвести число? Далее мы рассмотрим, как производить возведение в степень. Паскаль предоставляет нам не очень много возможностей для этого, но мы обязательно что-нибудь придумаем. Например, использование стандартных функций и процедур или использование различных циклов.
Возведение числа в квадрат
Начнём, пожалуй, с возведения в квадрат. Возведение в квадрат является частным случаем возведения в степень. Для этого в паскале предусмотрена стандартная процедура sqr(x). Она возведёт наше число x в квадрат, эта запись равна записи x*x.

Очень часто этого вполне достаточно, но не всегда программа может ограничиться одним лишь возведением в квадрат. Как же возводить в более высокие степени? Об этом читаем далее и просвещаемся.
Использование стандартных операторов
В паскале существует два метода для возведения числа в степень: exp(ln(x)*y) и метод power(x, y). Процедура exp() имеет ограничение: x должно быть больше 0, т.к. нельзя извлечь натуральный логарифм из неположительного числа, но эта функция считается устаревшей и неудобной для использования, поэтому дальше мы о ней говорить не будем. Функция power() принимает два значения, первое число (x) — которое нужно возвести в степень, второе число (y) — степень, в которую нужно возвести и возвращает x в степени y. Следует помнить, что числа х и у — вещественные, то есть типа real.

Но тут есть один недостаток, эта функция есть не во всех версиях паскаля. Да и вообще, иногда возведение в степень должно производиться без использования операторов. Идём дальше и разбираем следующий способ.
Возведение в степень при помощи цикла for
Как мы уже поняли, возведение числа в степень — это последовательное умножение числа на само себя несколько раз. Повторить какое-то действие несколько раз в программировании гораздо легче, чем в жизни. Воспользуемся циклом for:

Разберемся, что и как тут работает. Для начала мы вводим два числа: x и y. Затем берём за результат единицу, для чего это — ниже. Выполняем цикл до модуля нашей степени, т.к. если степень будет отрицательной, то цикл не пойдёт. В цикле мы умножаем наш результат на само число x. Так зачем мы присваивали результату 1? Во-первых, если бы мы умножали на 0, то программа всегда выдавала бы 0. Во-вторых, наша степень может быть равна 0, тогда программа должна вернуть нам 1, т.к. любое число в 0 степени это 1. Затем мы проверяем, является степень отрицательным числом или положительным: если она отрицательна, то делим единицу на наш результат. Выполнение этой задачи при помощи цикла while делается почти так же.
Использование цикла while при возведении в степень
Использование цикла while более правильно, нежели for, но для понимания проще предыдущий вариант. Вряд ли можно стоит ограничиваться одним лишь циклом for, для понимания будет лучше посмотреть несколько примеров, да и задача бывает поставлена по-разному, кому-то одним циклом, кому-то другим, именно поэтому мы разберём ещё один способ возведения в степень.

Всё почти так же, как и раньше. Вводим два числа х и у. Присваиваем нашему результату значение единицы, чтобы возводить в нулевую степень. Затем создаём счётчик i и присваиваем ему значение модуля нашей степени. Цикл идёт до тех пор, пока счётчик не равен нулю, если степень с самого начала равна нулю, то цикл не будет выполняться, результат так и останется единицей, как и должно быть, ведь любое число в нулевой степени — это единица. В самом цикле мы всё так же считаем результат, умножая уже полученный результат на наше число х, не забываем вычитать из нашего счётчика единицу, иначе мы никогда не дойдём до нуля. Ну а затем так же, как выше, преобразование, если степень была отрицательной. Ничего сложного, как оказалось. Впрочем, никто и не сомневался.
Что же, с обычными числами мы закончили, но ведь есть не только такие числа.
Понятие комплексных чисел
Нам с самого начала школьного обучения объясняют только обычные числа, но есть ведь ещё и другие, например, комплексные числа. Они довольно сложны в представлении, особенно учитывая то, что нас почти нигде не знакомят с ними. В математической записи они имеют вид z = x + yi, где x и y — это некоторые числа, а i — мысленная единица. Вы сразу подумали: да это же обычное число, стоит просто провести операцию сложения. Но нет, не всё так просто. Это не сумма, это именно число. Другими словами, если попытаться представить это всё с точки зрения геометрии, то можно заменить знак сложения точкой с запятой, и получатся как бы координаты точки, x и y. И если построить нулевой вектор до этой точки, то мы сможем визуально увидеть всё это. Кажется, текста стало слишком много, давайте немного посмотрим:

Если мы хотим показать, что наша плоскость комплексная, достаточно пометить её жирной буквой C, как тут. Затем мы можем видеть множество точек, давайте посмотрим на них и попытаемся понять, какая из них как записывается. Берём точку z1, опускаем проекцию на ось ReZ и получаем 3, затем на ось lmZ и получаем 1,75, в итоге имеем число z1=3 + 1.75i. Вроде всё понятно, давайте ещё раз, для закрепления. Точка z2, по горизонтальной оси — два, по вертикальной — четыре, в итоге имеем: z2=2 + 4i. Всё предельно понятно и просто.
С комплексными числами возможны все те же операции, что и с обычными. Сложение, вычитание, умножение, деление. Но в этой статье мы подробно остановимся на возведении комплексного числа в степень.
Возведение в степень комплексного числа
Что делать, если нужно возвести в степень комплексное число? Не паникуйте! Всё точно так же, как с обычными числами, но чуточку сложнее. Начнём с квадрата. Дано число z = 2 + 5i. Возводим в квадрат, получаем z 2 = (2 + 5i) 2 = (2 + 5i)(2 + 5i) — а это обычный двучлен, можно просто перемножить, привести подобные слагаемые и всё. Это очень просто, но что делать, когда нужно возвести в более высокую степень? Для начала следует представить наше число в тригонометрической форме, например:

Затем необходимо воспользоваться формулой возведения комплексных чисел в тригонометрической форме: z n =|z| n * (cos(nx) + i * sin(nx)). Можно заметить, что при возведении комплексных чисел даже в очень большие степени они сильно не изменяются, так что не пугайтесь, это сложно, но с практикой всё придёт.
Таким образом, теперь вы знаете, как возводить числа в степень в математике, на языке программирования паскаль, также узнали, что такое комплексные числа и как их возводить в степень. Всё оказалось куда проще, чем вы думали. Не так ли? Остаётся лишь попробовать всё на своём опыте, и всё встанет на свои места. Любая задача, связанная с возведением в степень, теперь решается очень легко для вас.
Функция Power
Функция Power в Паскале (и многих других языках программирования) выполняет возведение числа в степень.
Синтаксис для вещественных чисел:
function Power(Base: Double; Expon: Double) : Double;
Синтаксис для целых чисел:
function Power(Base: LongInt; Expon: LongInt) : LongInt;
Эта функция возводит число Base в степень Expon и возвращает результат. В реальности функция возвращает результат выражения:
- В документации сказано, что функция объявлена в модуле SYSTEM. Однако без подключения модуля MATH компилятор выдаёт ошибку. Из этого следует, что на самом деле функция объявлена в модуле MATH.
- В документации приведён синтаксис как для целых, так и для вещественных чисел. Однако на самом деле функция работает только с вещественными числами. При попытке использовать целые числа компилятор также выдаёт ошибку.
- Возможно, в более новых версиях эти проблемы уже исправлены. Но у меня было именно так (версия FPC 3.0.0).
Пример использования функции Power
Пример приведён ниже:
Здесь мы число 2 (переменная Х) возводим в степень 3 (переменная Y), то есть вычисляем следующую формулу:
Z = X Y
Обратите внимание на подключенный модуль MATH.
Эта статья входит в раздел о подпрограммах модуля SYSTEM. И по идее описания функции Power здесь не должно быть. Но, так как в документации сказано, что функция Power объявлена в модуле SYSTEM, я решил включить данную статью именно в этот раздел (я же не виноват, что в документации косяк))).
Возведение в степень в Паскале
Возведение в степень в Паскале можно выполнить и без какой-то специальной функции, используя функцию вычисления натурального логарифма и функцию вычисления экспоненты. О том, как это сделать, я рассказал здесь.
Однако, если есть специальная функция для возведения числа в степень, то почему бы ей и не воспользоваться? С одной стороны. С другой стороны — эта функция совершенно неожиданно требует подключения модуля MATH.
В документации сказано, что по сути функция Power работает по формуле возведения в степень в Паскале:
Однако, если мы будем делать именно так, эта формула будет неправильно работать с отрицательными числами, потому что в документации сказано, что функция Ln работает только с положительными числами.
Так что функция Power в реальности несколько сложнее, чем приведённая выше формула.
Поэтому для разминки мы напишем свой аналог функции Power, который будет работать правильно. Но для начала вспомним как вычисляется степень числа:

Также напомню, что любое число в нулевой степени равно 1, а ноль в любой степени равен 0 (кроме нуля в нулевой — ноль в нулевой степени не определён, но мы будем возвращать в таких случаях ноль, хотя функция Power возвращает 1).
А теперь наш аналог функции Power:
Я сознательно немного всё усложнил, чтобы вас запутать )))
Пример использования функций Power и её аналога в программе:
Здесь есть один подвох — если вы попытаетесь возвести отрицательное число в не целую степень, например, так:
то стандартная функция Power вызовет ошибку во время выполнения программы. В своём аналоге я этого избежал, но надо понимать, что результат в этом случае будет неправильным (хотя с моей точки зрения это всё-равно лучше, чем аварийное завершение программы).
Это происходит потому, что при таком раскладе результатом являются комплексные числа, а операции с комплексными числами выполняются по другим правилам.
В реальных программах подобные ситуации надо дополнительно обрабатывать (хотя бы предупреждать пользователя о том, что при отрицательном основании и не целой степени функция вернёт неправильный результат).
Ещё в моей функции используется функция Odd, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.
Урок 5. Математические операции, функции и процедуры в Pascal (Часть первая)

Так как в воскресенье на сайте открывается новая рубрика — решение задач, мы с вами должны по-быстрому изучить основную часть математических операций, функций и процедур.
Давайте разберемся, что такое функция и процедура. Это подпрограмма — часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы. В чем же разница между процедурой и функцией?
Процедуры — мини-программы.
Процедуры используются в случаях, когда в подпрограмме необходимо получить несколько результатов. Из картинки, расположенной ниже вы видите, как работает процедура. Входных данных может не быть вовсе, а может быть сто.

Например, программист хочет в своем суперкоде между блоками выходящих значений прописывать 20 амперсандов. Чтобы облегчить себе задачу, он напишет простую подпрограмму.
Функции в Паскале — мега переменные.
Функции отличается от процедуры тем, что после выполнения функции на ее месте в коде ставится одно число, буква, строка и т.д. Набор встроенных функций в языке Паскаль достаточно широк. Например, для того, чтобы подсчитать квадрат числа можно воспользоваться стандартной функцией sqr(x). Как вы, наверное, уже поняли sqr(x) требует лишь один фактический параметр — число.
Обратите внимание! Функции необходимо присваивать! Просто написав их в тексте программы, как процедуры, вы ничего не добьетесь!
Структура функции представлена на картинке ниже.

Если в программу необходимо включить новую уникальную функцию, ее надо описать также, как процедуру. Более подробно о том, как делать собственные процедуры и функции, мы поговорим через 10 уроков. Ниже вы видите таблицу основных стандартных функций и процедур в Паскаль.
Операции div и mod.
Иногда нам требуется найти частное либо же остаток от деления. В такие моменты на помощь нам приходят такие операции, как div и mod. Заметим, что эти операции выполняются только над целыми числами.
Для того, чтобы найти частное от деления, мы используем операцию div.
- 25 div 20 = 1;
- 20 div 25 = 0;
- 39 div 5 = 7;
- 158 div 3 = 52.
Для того, чтобы найти остаток от деления, мы используем операцию mod.
- 25 mod 20 = 5;
- 20 mod 25 = 0;
- 39 mod 5 = 4;
- 158 mod 3 = 2.
Чтобы окончательно понять, с чем мы имеем дело, решим следующую задачу:
Задача 1. Найти сумму цифр двухзначного числа.
Так как эта задача очень простая, мы с вами обойдемся блок-схемой и программой.
Блок-схема
Задача 2. Найти сумму цифр трехзначного числа.
Чуть усложненная версия предыдущей задачи. Самая большая сложность — вторая цифра.

Приоритет div и mod больше, чем приоритете + и -. Поэтому в данной программе можно обойтись без скобок.