Как сделать калькулятор через паскаль

Как сделать калькулятор через паскаль

02. Кнопочный калькулятор на PascalABC

На этом уроке мы воспользуемся знаниями о технологии ООП (Объектно-ориентированного программКак сделать калькулятор через паскальирования) создадим простой кнопочный калькулятор.

На вид наш калькулятор будет иметь примерно такой вид:

Итак начинаем

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

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

Как сделать калькулятор через паскаль

А теперь само тело программы:

Сначала создаем последовательно экзепляры всех необходимых нам объектов с нужными нам свойствами:

Как сделать калькулятор через паскаль

Обработка методов экземпляров

При возникновении события «Click» мы для каждого экземпляра вызываем свою процедуру:

Как сделать калькулятор через паскаль

Теперь осталось описать перечисленные 6 процедур в области описания процедур:

Для обработки щелчка на кнопке Bsum (суммирование):

Как сделать калькулятор через паскаль

В этой процедуре мы заносим в переменную x1 содержимое поля ввода (с одновременным переопределением типа из строкового в целочисленный), и сразу же очищаем это поле. Также переменной operation присваиваем код операции суммирования (в нашем случае это 1).

Для обработки щелчка на кнопке Braz (разность):

Как сделать калькулятор через паскаль

Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 2.

Для обработки щелчка на кнопке Bpr (произведение):

Как сделать калькулятор через паскаль

Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 3.

Для обработки щелчка на кнопке Bdel (деление):

Как сделать калькулятор через паскаль

Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 4.

Для обработки щелчка на кнопке Bres (вычисление результата):

Как сделать калькулятор через паскаль

При обработке щелчка на кнопку Bclean (очистка):

Как сделать калькулятор через паскаль

Теперь программа полностью завершена.

Вот полный код программы:

На этом будем завершать этот урок. Надеюсь, все было достаточно понятно.

Источник

Учебник по программированию.

Первые шаги. Язык программирования PascalABC.

§25. Программа «Калькулятор».

В данном параграфе предлагаю написать программу «Калькулятор». Эта программа будет похожа на калькулятор, который есть в любом Windows-е, в наборе стандартных программ. Соответственно, в ней будут кнопочки, поля, отображающие вводимые числа, и поле для вывода результата. Написав такую программу, мы получим хороший опыт реализации графического интерфейса.

В дальнейшем, если вы станете программистами, то писать кнопочки, поля и вообще весь графический интерфейс, который присущ операционной системе Windows, вам, скорее всего, не придётся, т.к. они есть уже готовые в любом современном языке программирования. Однако сейчас мы пропишем весь графический интерфейс калькулятора «от и до». А так же представим себе, что мы пишем полноценную программу, которая должна перемещаться мышкой по экрану. Всё это не только для того, что бы получить опыт, но и для того, что бы ощутить все преимущества, предоставляемые фирмами разработчиками современных языков.

И так приступим к программированию. Для начала определимся, как должен выглядеть наш калькулятор:

Как сделать калькулятор через паскаль

Думаю, что принцип работы калькулятора объяснять не надо, поясню только назначение двух кнопок « – кнопка стирает последний введённый символ при вводе числа. Т.е. если пользователь ошибся, то нажимая эту кнопку, он сможет удалять ошибочно введённые символы. Кнопка «С» – всё сбрасывает, что бы можно было снова вводить новые числа и производить над ними новое действие.

Так же сформулируем в виде тезисов элементы графического интерфейса, которые должны присутствовать в программе:

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

Рассмотрим все этапы последовательно отдельно друг от друга. Далее будут приведены рассуждения и получившийся код. Код будет приведён только тот, который относится к данному этапу и данным рассуждениям. Соответственно код, который уже написан, приводиться не будет, и будет заменён многоточиями. Настоятельно рекомендую параллельно чтению книги собирать код программы в PascalABC.NET, и тестировать его каждый раз по мере появления нового кода. В таком случае вы прочувствуете на себе весь процесс создания программы и убедитесь, что всё это не пустые слова, а результат реальной работы.

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

Поэтому создадим массив объектов управления, т.е. массив кнопок и полей ввода вывода, в котором будут содержаться координаты левого верхнего и правого нижнего углов объекта, а так же надпись на кнопке (для полей – их содержание). Это будет необходимо нам в двух случаях – тогда, когда мы будем перерисовывать калькулятор при его перемещении по экрану, и когда мы будем определять, какую кнопку нажал пользователь.

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

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

Код, написанный на первом этапе, будет следующий:

type TObyekt = record //Тип объектов управления калькулятора

x1,y1,x2,y2: integer ; //Координаты объекта

sStr: string ; end ; //Надпись на кнопке или содержание полей ввода/вывода

const RKn= 20 ; //Размер кнопок

var X0,Y0: integer ; //Координаты левого верхнего угла калькулятора

//Массив объектов управления калькулятором

Ob: array [ 1..22 ] of TObyekt;

procedure UtochneniyeKoordinatOb; //Уточнение координат объектов

for var i:= 1 to 19 do

if (i mod 4 ) = 0 then

Ob[ 19 ].x2:=Ob[ 19 ].x2+ 5 +Rkn;

for var i:= 20 to 22 do

for var i:= 20 to 22 do

//Рисуем контур калькулятора

//Уточняем координаты кнопок и полей

for var i:= 1 to 19 do

//Рисуем поля для ввода/вывода чисел

//Тело основной программы

//Инициализируем начальные параметры

SetPenColor(clBlue); //Цвет контуров калькулятора и объектов

//Заполняем строки в массиве объектов управления

Ob[ 1 ].sStr:= ‘7’ ; Ob[ 2 ].sStr:= ‘8’ ; Ob[ 3 ].sStr:= ‘9’ ; Ob[ 4 ].sStr:= ‘/’ ;

Ob[ 5 ].sStr:= ‘4’ ; Ob[ 6 ].sStr:= ‘5’ ; Ob[ 7 ].sStr:= ‘6’ ; Ob[ 8 ].sStr:= ‘*’ ;

Ob[ 9 ].sStr:= ‘1’ ; Ob[ 10 ].sStr:= ‘2’ ; Ob[ 11 ].sStr:= ‘3’ ; Ob[ 12 ].sStr:= ‘-‘ ;

Ob[ 13 ].sStr:= ‘0’ ; Ob[ 14 ].sStr:= ‘+/-‘ ; Ob[ 15 ].sStr:= ‘.’ ; Ob[ 16 ].sStr:= ‘+’ ;

Ob[ 17 ].sStr:= ‘ ; Ob[ 18 ].sStr:= ‘C’ ; Ob[ 19 ].sStr:= ‘=’ ;

Ob[ 20 ].sStr:= » ; Ob[ 21 ].sStr:= » ; Ob[ 22 ].sStr:= » ;

Как сделать калькулятор через паскаль

Этап второй, элементы графического интерфейса.

Для начала напишем функцию, определяющую порядковый номер объекта, над которым произошло событие нажатия или отпускания кнопки мыши. Если событие произошло вообще не над калькулятором, то функция должна выдавать ноль, если над калькулятором, но не над объектом, то – 23. В качестве параметров должны передаваться координаты, где произошло событие. Далее код функции:

//Определяет, над каким объектом произошло событие нажатия или отпускания

function OprOb(x,y: integer ): byte ;

Result := 0 ; //Событие произошло не над калькулятором

//Если событие произошло над кальклятором, но не над объектом

if (x>=X0) and (x 300 ) and (y>=Y0) and (y 130 ) then Result := 23 ;

//Если событие произошло над калькулятором

for var i:= 1 to 22 do

if (x>Ob[i].x1) and (y>Ob[i].y1) and

(x and (y then Result :=i;

Перетаскивание калькулятора по экрану. Создадим переменную с именем Peretaskivaniye, которая будет хранить положение стрелки мыши в момент нажатия на калькуляторе (поля dx и dy) и будет иметь поле логического типа Najatiye, которое будет переводиться в True если нажатие произошло на калькуляторе (функция OprOb выдаст 23) и переводиться в False каждый раз как будет клавиша отпускаться. При перемещении мышки по экрану, если Peretaskivaniye.Najatiye=True, то калькулятор будет перемещаться.

Далее получившийся код:

Var Peretaskivaniye: record //Переменная для реализации перетаскивания

//калькулятора по экрану

Najatie: boolean ; //Произошло ли нажатие на калькуляторе

dx,dy: integer ; end ; //Положение мышки в момент нажатия

procedure MouseDown(x,y,mb: integer );

var NajOb: byte ; //Номер нажатой клавиши

if mb= 1 then //Если нажата левая кнопка мыши

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *