Как сделать приложение калькулятор в паскале
Если тебе нужен такой калькулятор, как стандартный виндосовский, то тебе нужен Delphi.
Там просто ставишь кнопки, один Edit (окно ввода и вывода) . И создаешь функции для каждой кнопки.
А если ты хочешь именно на Pascal'е сделать (Turbo,Free,ABC), то считываешь строку, проходишься по ней, разделяешь все на числа и знаки, а потом считаешь.
В Коплекте Borland Pascal 7.0 есть исходник калькулятор. смотри учись разбирайся<Паскаль директория>/EXAMPLES/WIN
Самый простейший калькулятор на +, -*, /. (Запускать через Shift+F9)
program name
uses crt;
var a,b,c:integer;
d:string;
begin
write('Введите первое число: ');
readln(a);
write('Введите символ операции:');
readln(d);
write('Введите второе число: ');
readln(c);
if d=('-') then b:= a-b;
if d=('+') then b:= a+b;
if d=('/') then b:= a div b;
if d=('*') then b:= a*b;
writeln('Ответ: ', b);
readln;
end.
name можешь на своё поменять
Наверное, уже не нужно, но вот программа калькулятора со степенью:
var
a, b, c: double;
d: char;
i: integer;
writeln('Калькулятор');
writeln();
writeln('Введите первое число:');
readln(a);
writeln('Введите знак:');
readln(d);
writeln('Введите второе число:');
readln(b);
writeln();
case d of
('+'): writeln(a, '+', b, ' = ', a + b);
('-'): writeln(a, '-', b, ' = ', a - b);
('*'): writeln(a, '*', b, ' = ', a * b);
(':'): writeln(a, ':', b, ' = ', a / b);
('/'): writeln(a, '/', b, ' = ', a / b);
('^'):
begin
if b = 0 then
writeln(a, '^0 = 1')
else
if b = 0.5 then
writeln('koren iz ', a, ' = ', sqrt(a))
else
if b = 1 then
writeln(a, '^1 = ', a)
else
if b <= -1 then
begin
c := a;
i := -1;
while i <> b do
begin
c := c * a;
i := i - 1;
end;
c := 1 / c;
writeln(a, '^(', b, ') = ', c);
end
else
if b >= 1 then
begin
c := a;
i := 1;
while i <> b do
begin
c := c * a;
i := i + 1;
end;
writeln(a, '^', b, ' = ', c);
end
Здравствуйте, начинающие программисты! Из данной статьи вы узнаете как создать программу на Pascal ABC, например, простейший калькулятор.
Заходим в программу Pascal ABC, перед нами открывается чистый лист с названием Program1.pas - это файл программных модулей для написания кода. В дальнейшем его можно компилировать в .exe - исполняемый файл, который будет открывать созданную нами программу.
Для начала назовём нашу программу, к примеру, «Решебник», в коде пишем:
Program reshebnik;
Не забывайте в конце каждой строчки обязательно ставить точку с запятой. Так как мы создаём простейший калькулятор, наш «Решебник» будет вычислять буквально одно действие - сложение двух переменных, то есть a+b=c. Во второй строчке кода объявляем переменные a, b, c и добавляем integer (с англ. - «целое») - уточнение, что a, b, c - целые числа:
Var a, b, c: integer;
Теперь создадим блок команд (операторов), который начинается со слова begin и заканчивается словом end. Пишем:
begin
WriteLN ('Введите число A:');
Пятой строчкой выполним ввод пользователя с помощью команды read (с англ. - «читать»):
ReadLN (a);
То же самое проделаем со вторым числом b:
WriteLN ('Введите число B:.');
ReadLN (b);
Выполняем подсчёт введённых переменных. Знак «:=» означает присваивание, присваиваем числу c значение a+b:
Выводим ответ и завершаем блок операторов:
WriteLN ('Ответ', c);
end.
Итак, наш «Решебник» готов к использованию. Проверим, как он работает. В Верхнем меню программы Pascal ABC выбираем Программа -> Выполнить.
Program reshebnik;
Var a, b, c: integer;
begin
WriteLN ('Введите число A:');
ReadLN (a);
WriteLN ('Введите число B:');
ReadLN (b);
c := a+b;
WriteLN ('Ответ', c);
end.
Вот и все. Надеюсь, всё понятно. Желаю удачи и хороших результатов!
В данном параграфе предлагаю написать программу «Калькулятор». Эта программа будет похожа на калькулятор, который есть в любом Windows-е, в наборе стандартных программ. Соответственно, в ней будут кнопочки, поля, отображающие вводимые числа, и поле для вывода результата. Написав такую программу, мы получим хороший опыт реализации графического интерфейса.
В дальнейшем, если вы станете программистами, то писать кнопочки, поля и вообще весь графический интерфейс, который присущ операционной системе Windows, вам, скорее всего, не придётся, т.к. они есть уже готовые в любом современном языке программирования. Однако сейчас мы пропишем весь графический интерфейс калькулятора «от и до». А так же представим себе, что мы пишем полноценную программу, которая должна перемещаться мышкой по экрану. Всё это не только для того, что бы получить опыт, но и для того, что бы ощутить все преимущества, предоставляемые фирмами разработчиками современных языков.
И так приступим к программированию. Для начала определимся, как должен выглядеть наш калькулятор:
Так же сформулируем в виде тезисов элементы графического интерфейса, которые должны присутствовать в программе:
- Калькулятор должен перемещаться по экрану с помощью мыши при нажатой левой кнопки. Для этого необходимо нажать в пустом месте калькулятора, не занятом кнопкой или полем ввода/вывода.
- При нажатии на кнопку калькулятора она должна подсветиться другим цветом символизируя то, что она нажата.
- Поле, в которое вводится число, должно быть выделено другим цветом.
Весь процесс программирования данной программы разделим на четыре этапа. Для начала напишем программу, которая будет просто выводить на экран наш калькулятор, и не будет выполнять ни каких действий. Другими словами выведем графическую оболочку калькулятора на экран. Затем будем добавлять в неё различные процедуры и функции, реализующие графический интерфейс, а после этого добавим процедуры реализующие назначение калькулятора. Последним этапом будет тестирование программы. На этом этапе могут проявиться какие либо ошибки и «глюки», которые необходимо будет устранить.
Этап первый, рисуем графическую оболочку калькулятора. Выполнить данный этап необходимо с учётом того, что далее нам необходимо будет реализовать графический интерфейс.
Т.к. калькулятор будет перемещаться по экрану, то все координаты должны быть относительными, и каждый раз при перемещении они должны уточняться. Для этого создадим ещё две переменные содержащие координаты левого верхнего угла калькулятора.
Так же создадим процедуру заполнения координатами массива объектов, процедуры рисования и стирания калькулятора, а так же отдельную процедуру прорисовки полей ввода вывода. Поля ввода вывода надо будет перерисовывать при их заполнении, каждый раз при вводе нового символа. Поэтому эту процедуру необходимо прописать отдельно.
Код, написанный на первом этапе, будет следующий:
type TObyekt = record //Тип объектов управления калькулятора
x1,y1,x2,y2: integer ; //Координаты объекта
sStr: string ; end ; //Надпись на кнопке или содержание полей ввода/вывода
const RKn= 20 ; //Размер кнопок
var X0,Y0: integer ; //Координаты левого верхнего угла калькулятора
//Массив объектов управления калькулятором
Ob: array [ 1..22 ] of TObyekt;
//1..19 - кнопки; 20..22 - поля ввода вывода
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
Ob[i].x1:=X0+ 140 ; Ob[i].y1:=Y0+ 5 +Round((i- 19 )* 120 / 3 - 120 / 3 + 5 );
Ob[i].x2:=X0+ 295 ; Ob[i].y2:=Y0+ 5 +Round((i- 19 )* 120 / 3 - 5 );
for var i:= 20 to 22 do
//Рисуем контур калькулятора
Rectangle(X0,Y0,X0+ 300 ,Y0+ 130 );
Line(X0+ 105 ,Y0,X0+ 105 ,Y0+ 130 );
//Уточняем координаты кнопок и полей
for var i:= 1 to 19 do
TextWidth(Ob[i].sStr)/ 2 ),Ob[i].y1+ 2 ,Ob[i].sStr);
//Рисуем поля для ввода/вывода чисел
FillRectangle(X0,Y0,X0+ 300 ,Y0+ 130 );
//Тело основной программы
//Инициализируем начальные параметры
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:= '' ;
Этап второй, элементы графического интерфейса.
//Определяет, над каким объектом произошло событие нажатия или отпускания
function OprOb(x,y: integer ): byte ;
Result := 0 ; //Событие произошло не над калькулятором
//Если событие произошло над кальклятором, но не над объектом
if (x>=X0) and (x<=X0+ 300 ) and (y>=Y0) and (y<=Y0+ 130 ) then Result := 23 ;
Запустить бесконечный цикл.
Pascal
простой калькулятор на паскаль
Язык Си
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат "%*c".
Python
простой калькулятор на python(питон)
КуМир
Basic-256
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк "Деление на ноль", когда его не должно быть.
простой калькулятор на паскаль
var
x,y,z: real;
sign: char;
begin
while True do begin
write('sign: '); readln(sign);
if sign = '0' then break;
if sign in ['+','-','*','/'] then begin
write('x='); readln(x);
write('y='); readln(y);
case sign of
'+': begin z := x + y; writeln(z:5:2) end;
'-': begin z := x - y; writeln(z:5:2); end;
'*': begin z := x * y; writeln(z:5:2); end;
'/': if y 0 then begin
z := x / y;
writeln(z:5:2)
end
else
writeln('Division by zero!');
end;
end
else writeln('Bad sign!')
end;
end.
sign: 8
Bad sign!
sign: 4
Bad sign!
sign: -
x=5
y=6
-1.00
sign: +
x=4.45
y=10.66
15.11
sign: *
x=-3.4
y=-67
227.80
sign: /
x=-78
y=123
-0.63
sign: /
x=9
y=0
Division by zero!
sign: i
Bad sign!
sign: 0
main() float x,y;
char sign='+';
while (sign != '0') printf("Знак: ");
scanf("%c%*c", &sign);
if (sign == '0') < break; >
if (sign == '+' || sign == '-' || sign == '*' || sign == '/') printf("x %f%*c", &x);
printf("y %f%*c", &y);
switch (sign) case '+':
printf("%.2f\n", x+y);
break;
case '-':
printf("%.2f\n", x-y);
break;
case '*':
printf("%.2f\n", x*y);
break;
case '/':
if (y != 0) printf("%.2f\n", x/y);
else printf("Деление на ноль!\n");
>
>
else printf("Неверно указан знак операции\n");
>
>
Знак: 7
Неверно указан знак операции
Знак: 3
Неверно указан знак операции
Знак: +
x=4
y=5
9.00
Знак: /
x=0
y=0
Деление на ноль!
Знак: -
x=-34.4
y=-2
-32.40
Знак: 0
При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат "%*c".
простой калькулятор на python(питон)
print("Ноль в качестве знака операции завершит работу программы")
while True:
s = input("Знак (+,-,*,/): ")
if s == '0': break
if s in ('+','-','*','/'):
x = float(input("x y %.2f" % (x+y))
elif s == '-':
print("%.2f" % (x-y))
elif s == '*':
print("%.2f" % (x*y))
elif s == '/':
if y != 0:
print("%.2f" % (x/y))
else:
print("Деление на ноль!")
else:
print("Неверный знак операции!")
Ноль в качестве знака операции завершит работу программы
Знак (+,-,*,/): h
Неверный знак операции!
Знак (+,-,*,/): +
x=78.456
y=23.567
102.02
Знак (+,-,*,/): -
x=3.44
y=10.25
-6.81
Знак (+,-,*,/): *
x=0.012
y=-2.15
-0.03
Знак (+,-,*,/): /
x=5
y=0
Деление на ноль!
Знак (+,-,*,/): /
x=-2.3
y=5
-0.46
Знак (+,-,*,/): 0
алг простейший калькулятор
нач
вещ x,y
сим s
нц пока да
вывод "Знак: "
ввод s
если s='0' то выход все
если s='+' или s='-' или s='*' или s='/' то
вывод "x y Деление на ноль!", нс
иначе вывод x/y, нс
все
все
иначе
вывод "Неверный знак операции", нс
все
кц
кон
Знак: +
x=5.67
y=-4
1.67
Знак: /
x=5
y=0
Деление на ноль!
Знак: )
Неверный знак операции
Знак: /
x=3
y=10
0.3
Знак: 0
a = 1
while a=1
input "знак: ", s$
if s$ = "0" then
a=0
else
if s$ = "+" or s$ = "-" or s$ = "*" or s$ = "/" then
input "x: ", x
input "y: ", y
if s$ = "+" then print x+y
if s$ = "-" then print x-y
if s$ = "*" then print x*y
if s$ = "/" and y 0 then
print x/y
else
print "Деление на ноль"
endif
else
print "Знак может быть +, -, *, /"
endif
endif
endwhile
знак: /
x: 9
y: 0
Деление на ноль
знак: -
x: 9
y: -8
17
Деление на ноль
знак: /
x: 9
y: -8
-1.125
знак: 0
Нет оператора break, оператора выбора case.
Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.
Обнаруживается какой-то глюк "Деление на ноль", когда его не должно быть.
02. Кнопочный калькулятор на PascalABC
На этом уроке мы воспользуемся знаниями о технологии ООП (Объектно-ориентированного программирования) создадим простой кнопочный калькулятор.
На вид наш калькулятор будет иметь примерно такой вид:
Итак начинаем
Как я уже отметил в преамбуле, нам понадобится ООП - подход, а значит будем использовать классы и их экземпляры.
В данном случае мы подключим модуль VCL , который отвечает за создание всевозможных форм и их элементов: кнопок, полей ввода, переключателей, текстовых полей.
Для каждого из вышеперечисленных элементов форм в модуле VCL уже имеются готовые классы, поэтому в отличие от предыдущей статьи (об основах ООП), мы сами классы уже создавать не будем, а будем создавать только экземпляры классов.
В блоке описания переменных мы должны перечислить имена всех этих будущих экземпляров:
Что здесь имеем: MainForm - это экземпляр класса Form, т.е. сама форма - сам "ящик" будущей формы,
Bsum - экземпляр класса Button , т.е. кнопки. Это будет кнопка суммирования,
Braz - экземпляр кнопки Разность
Bpr - экземпляр кнопки Произведение
Bdel - экземпляр кнопки Деление
Bres - экземпляр кнопки Результат
Bclean - экземпляр кнопки Очистить
Т1 - экземпляр поля ввода данных
Также нам потребуется переменная " operation " - она будет содержать в себе номер операции (станет ясно ниже), переменная rint - будет хранить целочисленный результат, переменная rr - будет хранить вещественный результат операции, x1, x2 - это операнды, которые над которыми будут производиться арифметические действия.
А теперь само тело программы:
Сначала создаем последовательно экзепляры всех необходимых нам объектов с нужными нам свойствами:
В скобках у экземпляра формы указыны 4 цифры: (отступ x, отступ y, ширина, высота), где отступ x и отступ y - это отступ левого верхнего угла формы от левого верхнего угла экрана.
Для поля ввода, и экземпляров кнопок отступ х и отступ у - это уже отступ от левого верхнего угла самой формы.
Для экземпляров кнопок сразу задаем свойство "Caption" - заголовок, для каждой кнопки задаем свою надпись.
Обработка методов экземпляров
В этой программе мы будем использовать для экземпляров кнопок методы щелчка мышки - " onClick " - дословно переводится при клике.
При возникновении события "Click" мы для каждого экземпляра вызываем свою процедуру:
Теперь осталось описать перечисленные 6 процедур в области описания процедур:
Для обработки щелчка на кнопке Bsum (суммирование):
В этой процедуре мы заносим в переменную x1 содержимое поля ввода (с одновременным переопределением типа из строкового в целочисленный), и сразу же очищаем это поле. Также переменной operation присваиваем код операции суммирования (в нашем случае это 1).
Для обработки щелчка на кнопке Braz (разность):
Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 2.
Для обработки щелчка на кнопке Bpr (произведение):
Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 3.
Для обработки щелчка на кнопке Bdel (деление):
Аналогично заносим значение поля ввода в переменную х1, очищаем поле и даем код операции: 4.
Для обработки щелчка на кнопке Bres (вычисление результата):
При щелчке на кнопке "=" в переменную x2 заносим содержимое поля ввода. К этому времени в переменной х1 уже хранится первое введенное число, поэтому далее производим вычисление заданного действия. Если код операции был равен 1, то делаем суммирование, если 2, то вычитание, если 3, то умножение, если 4, то деление. При этом результат операции будет находиться в вещественной переменной rr .
Но есть одна проблема: в текстовом поле может быть только строковая переменная. А как преобразовать число в строку. Есть в паскале такая функция: inttostr(x) - она превращает целочисленный тип в строковый. Но у нас результат вещественный (т.к. после операции деления результат всегда бывает только вещественным). Поэтому, нам приходится делать промежуточный перевод вещественной переменной в целую:
rint:=round(rr); - мы в данном случае для этого воспользовались функцией округления. При этом, конечно мы жертвуем результатом деления, отсекая его дробную часть. В этом состоит серъезный недостаток данной программы, который мы будем устранять на следующем уроке.
Читайте также: