Pascal - базовые конструкции и переменные Что для одного ошибка, для другого - исходные данные. Раздел описаний и раздел реализации В программе существует чёткое разграничение места, отведённого для написания кода: раздел описаний и раздел реализации. В разделе описаний мы должны указать всё то, с чем собираемся работать - это могут переменные, константы, функции и т.д. Раздел реализации - это то место, где мы непосредственно напишем код, который будет выполнять какие-то действия с использованием тех переменных, констант и всего остального, что мы указали в разделе описаний. Конструкция begin .. end Раздел реализации всегда располагается между ключевыми словами begin и end. Этот блок также называется телом (в данном случае - телом программы). begin указывает на то, что дальше идёт какой-то программный код, а end говорит о том, что блок кода закончился. Каждому begin должен быть поставлен в соответствие определённый end! Как известно, для любого правила есть исключения... Так и здесь - есть конструкции, синтаксис которых это правило нарушает. Но об этом позже. На данном этапе данное правило будем считать применимым ко всем случаем. Команды Любые команды, т.е. строки кода должны как-то отделяться друг от друга, чтобы компьютер понял, что именно мы хотим запрограммировать. Практически во всех языках знаком разделения команд является точка с запятой (" ; "). Однако последняя команда в программе всегда должна заканчиваться точкой (" . "). Последней командой может быть только end, поэтому любая программа заканчивается на "end.", причём ставить эту точку обязательно. Некоторые команды не требуют, что после них ставился разделитель ";". Пример такой команды - begin. Ставить точку с запятой после begin'а не нужно, хотя если поставить, то никакой ошибки это не вызовет. Как правило, каждая команда пишется на отдельной строке. Однако никто не запрещает писать на одной строке несколько команд. Просто такой код гораздо проще прочитать. Промежуточный итог Итак, общая конструкция программы получается такой: {раздел описаний} begin {раздел реализации} end. На том, что следует до раздела описаний, пока что останавливаться не будем, ибо там различны вариантов. Это - общая конструкция программы, но программа может состоять и из нескольких блоков, каждый из которых выполняет какие-то функции и по смыслу не связан с остальными. Любой такой блок ограничивается всё той же конструкцией begin .. end. Это означает, что такие конструкции могут быть вложены друг в друга. Понятно, что end, встречающийся где-то в середине, заканчивается точкой с запятой, а не точкой. {раздел описаний} begin {начало раздела реализации} begin {блок 1} end; begin {блок 2} end; begin {блок 3} end end. {конец раздела реализации и конец программы} Обратите внимание, что если несколько end'ов следуют подряд, то ставить между ними разделитель не нужно. Объявление переменных Итак, наконец-то мы знаем всё об общей структуре программного кода. Теперь перейдём к работе с переменными. Итак, как уже было сказано выше, любая переменная для использования в программе должна быть описана и делается это в разделе описаний. Для описания (объявления) переменных существует ключевое слово VAR. Произошло оно от слова variable (переменная). Каждая переменная описывается следующим образом: сначала пишется её имя (идентификатор), затем ставится двоеточие и дальше указывается тип данных этой переменной. var A: Integer; В данном примере мы объявили переменную с именем A и задали для неё тип данных Integer. Типов данных существует очень много, а программистом могут быть созданы и свои собственные типы. Для начала нам потребуются простые типы: Integer - целое число; Real - вещественное (дробное число); Boolean - логическое значение. Теперь мы знаем, что объявленная нами переменная A может содержать какое-либо целое число. Для вещественных чисел в языке разделителем целой и дробной части всегда служит точка (" . "). Однако речь идёт только о языке, т.е. в коде это должна быть точка. Когда числа будет вводить пользователь, то может возникнуть ситуация, когда разделителем будет не точка, а запятая. Что делать в данной ситуации, мы узнаем позже. Наконец, логическое значение - это значение либо "истина" (True), либо "ложь" (False). С этими значениями мы уже сталкивались, когда изучали свойства объектов (например, свойство Visible отвечает за видимость объекта и принимает логическое значение - либо True, либо False). Теперь разберёмся, как объявлять не одну переменную, а несколько. Итак: • Слово VAR достатоно написать один раз, независимо от количества объявляемых переменных. • Переменные одного типа могут быть объявлены в одной строке путём перечисления их имён через запятую. Вот простой пример. Допустим, нам нужны 3 переменные, в которых мы планируем хранить длины сторон треугольника. Длины сторон не всегда являются целыми числами, поэтому типом данных будет Real. Можно объявить эти переменные так: var A: Real; var B: Real; var C: Real; Естественно, это будет работать, но такая запись громоздка и крайне неудобна. Применив первое правило, запись несколько сократится: var A: Real; B: Real; C: Real; Но всё равно немного странно, ведь переменные одного типа! Окончательная запись: var A, B, C: Real; Отлично! Коротко и ясно. Именно так и следует объявлять переменные одного типа. Напомню, что всё это пишется в разделе описаний, т.е. выше слова begin. Операции Теперь рассмотрим операции, которые применимы к переменным, выражениям и т.п. Самая главная операция - операция присваивания. Эта операция позволяет указать для переменной её значение. В разных языках присваивание делается немного по-разному. В Pascal присваивание осуществляется знаком "двоеточие, равно" ( := ). Слева указывается то, чему присваивается значение, а справа - само значение. Примеры: A:=10; K:=0.5; F:=True; В первом случае переменная A принимает значение 10, во втором - переменная K значение 0.5, а третьем - переменная F значение "истина". Вообще, в языках программирования прижились два способа присваивания - через знак равенства (A = 10) и через :=, как в Pascal. В QBasic, например, дополнительно нужно указывать слово LET (LET A = 10). Теперь коротко о математических операциях. Они стандартны: сложение - "+", вычитание - "-", умножение - "*", деление - "/". Обратите внимание, что деление во всех языках программирования записывается именно через косую черту. Никакого двоеточия! Объявление констант Константы объявляются аналогично переменным, но с небольшими отличиями: • Вместо ключевого слова VAR следует слово CONST (аналогично variable - var, сокращение от constant); • Тип данных указывать необязательно - компилятор автоматически распознаёт его (например, это может быть число, текст и т.д.); • Значение константы указывается после знака равенства. Пример: const g = 9.8; Первая программа Ну что ж, пришло время написать первую программу! В качестве примера, пусть это будет программа для нахождения среднего арифметического двух чисел. Поскольку с вводом данных мы ещё не знакомы, занесём данные в программу заранее. Нам важен программный код и результат. Итак, нам будет достаточно одной кнопки на форме (TButton). Дважды щёлкните по кнопке - появится редактор кода. А вот и наша заготовка для данного события (OnClick). Кстати, заготовки событий нужно создавать следующим образом: выделяем нужный объект, переходим в Инспектор Объектов и переключаемся на вкладку Events (события) и напротив названия нужного события делаем двойной щелчок. Открывается редактор кода с заготовкой обработчика события. При двойном щелчке по объекту создаётся обработчик для того события, которое назначено по умолчанию (как правило, это OnClick). Обратите внимание на полученную заготовку: procedure TForm1.Button1Click(Sender: TObject); begin end; Этот блок уже является частью программы. Именно здесь мы должны написать наш код, который будет выполняться при нажатии на кнопку. Для начала разберёмся, куда что писать. Раздел реализации виден невооружённым глазом - он между begin и end, которые у нас уже есть (удалять их ни в коем случае не нужно!). Ну а раздел описаний, как и положено, располагается до begin, но тем не менее после первой строки заготовки (procedure ...). Мы не должны уходить за пределы данного блока, ведь именно он связан с событием OnClick. Ну а теперь за дело! Нам понадобятся 3 переменные: 2 исходных числа и переменная для среднего арифметического. Среднее арифметическое точно может быть дробным числом, а вот будут ли исходные числа целыми или вещественными - решать Вам. Предположим, что они будут целыми. Пишем в разделе описаний: var A, B: Integer; S: Real; Теперь раздел реализации. Так как мы условились, что исходные данные пока что "жёстко" зададим в коде, то сначала присваиваем нашим переменным значения: A:=10; B:=20; Ну а дальше само вычисление: S:=(A+B) / 2; Как видите, ничего сложного. Всё очень похоже на то, как это можно сделать на бумаге. Чтобы проверить результат, нам нужно полученное значение как-то отобразить на экране. С приёмами вывода данных мы пока что тоже не знакомы, поэтому придётся немного залезть вперёд. Итак, после строки вычисления значения S добавим следующую строку: ShowMessage( FloatToStr(S) ); Что здесь происходит мы узнаем позже, когда будем знакомиться с приёмами ввода и вывода данных. Ну а пока что сверим весь получившийся код. Должно получиться так: procedure TForm1.Button1Click(Sender: TObject); var A, B: Integer; S: Real; begin A:=10; B:=20; S:=(A+B) / 2; ShowMessage(FloatToStr(S)); end; Всё, запускаем программу (F9 для тех, кто подзабыл) и нажимаем на кнопку. Если всё верно, то мы увидим число 15, которое является средним арифметическим для чисел 10 и 20: Результат работы программы Заключение Итак, сегодня мы написали свою первую программу, предварительно познакомившись с некоторыми конструкциями языка Pascal, способами объявления переменных и констант и операциями над ними. Домашнее задание Составить программу, которая вычисляет площадь круга заданного радиуса.