Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Бип из системно... 65535
Пример работы с... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
21 ошибка прогр... 65535
Гостевая книга ... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Содержание сайт... 65535
Invision Power ... 65535
Имитационное мо... 65535
Программируемая... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

Пользователей: 13,319
новичок: leyir84776
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...

Приложение «Простейший калькулятор»


Создадим программу, которая представляет собой арифметический калькулятор,
производящий четыре действия над действительными числами. Проектируемый калькулятор
должен функционировать следующим образом: пользователь вводит первый операнд,
выбирает операцию, затем вводит второй операнд и нажимает «равно». При этом
происходит вычисление результата соответствующей операции и его отображение в строке
данных калькулятора. Ввод операндов и операций осуществляется путем нажатия кнопки на
самом калькуляторе.
Создание новой программы на Delphi начинается с выбора опции File/ New Application. Это
означает, что начинается работа над новым приложением для Windows.
Сохраните созданный проект в папке Калькулятор, назвав файл проекта - Calc, а файл модуля
формы - CalcUnit.
В окне инспектора объектов изменим свойства элементов формы в соответствии со
следующим описанием:
form1
Создайте поле ввода-вывода информации Edit1 и кнопки Button1- Button17 (для кнопок с цифрами,
десятичной точкой и действиями). Разместите компоненты на форме в соответствии с рисунком:
Приложение «Простейший калькулятор»
Рис. Внешний вид формы проектируемого калькулятора.
В окне инспектора объектов изменить свойства элементов формы в соответствии с таблицей:

Перед созданием обработчиков введем несколько соглашений:
1. Пусть некоторый признак (флаг f) f=1, если над двумя введенными числами произведена операция
сложения; f=2, если над двумя введенными числами произведена операция вычитания; f=3, если
над двумя введенными числами произведена операция умножения; f=4, если над двумя
введенными числами произведена операция деления и f=5, если была нажата клавиша равно.
2. Необходимо учесть, что арифметические операции вводится циклически (например, после
выполнения операции, когда на индикаторе результат). Поэтому введем переменную zifra, которая
будет отвечать за ввод следующего числа. Переменная zifra будет иметь значение false, если не
введена цифра нового числа, а true, если введена первая цифра нового числа.
3. В программе потребуется использование переменных. Опишем их в разделе var следующим
образом:

Здесь переменная a хранит первое число, b – второе число, c – результат.
4. При запуске приложения Калькулятор, входящего в состав ОС Windows, в строке ввода
данных отображается «0», реализуем такую возможность в нашем приложении, также
установим предварительное значение признака (флага), которое будет уму присвоено после
открытия формы, а также признака того, что число не вводилось. Это делается следующей
процедурой:

5. При нажатии на любой кнопке с числом (при вводе операндов), введенный символ должен
отображаться в текстовом поле edInput (исключение составляет случай, когда ноль
вводится как первый символ числа). При этом необходимо различать первая ли цифра в
числе, или нет. Также необходимо менять значение признака zifra при вводе первой цифры
числа. Это делается следующими процедурами:

6. Аналогично запишутся обработчики для компонентов bt_3, bt_4, … bt_9, bt_0.
7. Необходимо учесть, что в действительном числе может быть только одна запятая, отделяющая
целую часть от дробной, т.е. повторное нажатие на кнопку с изображением запятой игнорируется.
Запрограммируем кнопку «,» (компонент btPoint):

8. Если нажимается кнопка «Сброс», надо обнулить значение a,b и f, очистить поле edInput и
параметру zifra задать значение false. Т.о. обработчик нажатия на кнопке, т.е. на событие
Click следующий:

9. Если же нажимается кнопка для совершения действия (/, *, -, +), то флагу надо дать
соответствующее значение, чтобы после ввода второго операнда и нажатия на кнопке
равно, знать какое действие совершать между первым a и вторым b операндом. Но надо
учесть, что если перед нажатием на кнопке с операцией была нажата кнопка равно (f=5), то
предыдущие вычисления продолжаются, и полученный результат должен теперь выступать
в роли первого операнда, т.е. надо выполнить команду a:=c. Т.о. обработчики нажатий
кнопок с действиями (/, *, -, +), т.е. на событие Click следующие:

10. Если же нажимается кнопка равно, то в зависимости от значения флага f надо произвести
одно из четырех действий: 1-«+», 2-«-», 3-«*», 4-«/» и после этого флагу дать значение f=5.
Т.о. обработчик нажатия на кнопке равно, т.е. на событие Click следующий:

11. Известное Вам приложение Калькулятор, входящего в состав ОС Windows, предполагает
ввод операндов с клавиатуры. Запрограммируем это событие компонента edInput, но
учтем, что в поле можно вводить только цифры и одну запятую:

12. Запустите созданное приложение, исправьте (если они появятся) ошибки. После
тестирования откомпилируйте проект и запустите готовое приложение.

P.S. Для того что бы калькулятор считал подряд, т.е. выдавал результат при нажатие операции, необходимо дописать к обработчику кнопки каждой операции код:
SpeedButton17Click(Sender);



Полностью обработчик нажатия на кнопку:
procedure TForm1.SpeedButton11Click(Sender: TObject);
begin
SpeedButton17Click(Sender); //если была операция то вычисляем
if f=5
then a:=c
else a:=strtofloat(edit1.Text);
f:=3;
zifra:=false;
end;


Опубликовал Kest Март 16 2010 19:01:13 · 21 Комментариев · 65535 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Андрей Май 12 2010 14:55:44
Отличный урок!
Alex Май 17 2010 00:01:21
если после нажатия клавиши равно сразу без очистки ввести первый операнд потом действие потом второй операнд потом равно то считает неправильно...тоесть например вводим 5+5=10 и сразу без сброса 5+5=то уже будет равно 15...как поправить?
Kest Май 17 2010 09:11:24

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='1';
oper:=true;
end
else edit1.Text:= edit1.Text+'1';


end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='2';
oper:=true;
end
else edit1.Text:= edit1.Text+'2';
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='3';
oper:=true;
end
else edit1.Text:= edit1.Text+'3';
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='4';
oper:=true;
end
else edit1.Text:= edit1.Text+'4';
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='5';
oper:=true;
end
else edit1.Text:= edit1.Text+'5';
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='6';
oper:=true;
end
else edit1.Text:= edit1.Text+'6';
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='7';
oper:=true;
end
else edit1.Text:= edit1.Text+'7';
end;

procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='8';
oper:=true;
end
else edit1.Text:= edit1.Text+'8';
end;
procedure Delay(dwMilliseconds: Longint);
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='9';
oper:=true;
end
else edit1.Text:= edit1.Text+'9';
end;

procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
if (edit1.Text='0') or not (oper) then
begin
edit1.Text:='0';
oper:=true;
end
else edit1.Text:= edit1.Text+'0';
end;

procedure TForm1.SpeedButton18Click(Sender: TObject);
begin
if pos(',',edit1.Text)=0 then
Edit1.Text:=Edit1.Text+',';
end;

procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
if strtofloat(edit1.Text)>=0 then
edit1.Text:=floattostr(sqrt(strtofloat(edit1.Text)))
else
begin
Edit1.Text:='Извлечение корня невозможно.';
delay(1500);
SpeedButton21Click(Sender);
end
end;

procedure TForm1.SpeedButton16Click(Sender: TObject);
begin
if strtofloat(edit1.Text)=0 then
begin
Edit1.Text:='Деление на нуль невозможно.';
delay(1500);
SpeedButton21Click(Sender);
exit;
end;
if not (edit1.text='0') then
edit1.Text:=floattostr(1/(strtofloat(edit1.Text)));
end;

procedure TForm1.SpeedButton2Click2(Sender: TObject);
begin
edit1.Text:=floattostr(sin(strtofloat(edit1.Text)));
end;

procedure TForm1.SpeedButton20Click(Sender: TObject);
begin
edit1.Text:=floattostr(cos(strtofloat(edit1.Text)));
end;

procedure TForm1.SpeedButton21Click(Sender: TObject);
begin
a:=0;
b:=0;
c:=0;
cod:=0;
edit1.Text:='0';
oper:=false;
end;

procedure TForm1.Create_(Sender: TObject);
begin
a:=0;
b:=0;
c:=0;
cod:=0;
oper:=false;
end;

procedure TForm1.SpeedButton13Click(Sender: TObject);
begin

SpeedButton17Click(Sender);
{if cod=5
then a:=c
else} a:=strtofloat(edit1.Text);
cod:=1;
oper:=false;
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin


SpeedButton17Click(Sender);

{if cod=5
then a:=c
else} a:=strtofloat(edit1.Text);
cod:=2;
oper:=false;
end;

procedure TForm1.SpeedButton11Click(Sender: TObject);
begin

SpeedButton17Click(Sender);
{if cod=5
then a:=c
else} a:=strtofloat(edit1.Text);
cod:=3;
oper:=false;
end;

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin

SpeedButton17Click(Sender);
{if cod=5
then a:=c
else} a:=strtofloat(edit1.Text);
cod:=4;
oper:=false;
end;



procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
case cod of
1: begin
c:=(a+strtofloat(edit1.Text));
edit1.Text:=floattostr(c);
end;
2: begin
c:=(a-strtofloat(edit1.Text));
edit1.Text:=floattostr(c);
end;
3: begin
c:=(a*strtofloat(edit1.Text));
edit1.Text:=floattostr(c);
end;
4: begin
if strtofloat(edit1.Text)=0 then
begin
Edit1.Text:='Деление на нуль невозможно.';
delay(1500);
SpeedButton21Click(Sender);
end
else
c:=(a/strtofloat(edit1.Text));
edit1.Text:=floattostr(c);
end;
end;
cod:=5;
oper:=false;
end;

procedure TForm1.SpeedButton23Click(Sender: TObject);
begin
edit1.Text:=floattostr(cos(strtofloat(edit1.Text))/sin(strtofloat(edit1.Text)));
end;

procedure TForm1.SpeedButton22Click(Sender: TObject);
begin
edit1.Text:=floattostr(strtofloat(edit1.Text)*strtofloat(edit1.Text));
end;

procedure TForm1.Key_press(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',#8:;
'.',',':begin
if key='.' then key:=',';
end
else key:=#0
end;
end;

procedure TForm1.SpeedButton24Click(Sender: TObject);
var
otv:string;
ost,chislo:integer;
begin
chislo:=strToint(Edit1.Text);
otv:=' ' ;
repeat
ost:=chislo mod 8;
case ost of
0:otv:='0'+otv;
1:otv:='1'+otv;
2:otv:='2'+otv;
3:otv:='3'+otv;
4:otv:='4'+otv;
5:otv:='5'+otv;
6:otv:='6'+otv;
7:otv:='7'+otv;
end;
chislo:=chislo div 8;
until chislo = 0;
Edit1.Text:=otv;
f:=5;
//Zifra:=false;

end;

end.


ierecumi Июль 24 2011 02:52:28
После
begin
edit1.Text:='1';
Впиши
edit1.Clear;
Кажется так!
ierecumi Июль 24 2011 02:55:50
ой Мля не в 1 а в = писать надо
Короче:
b:=STRtofloat(Edit1.text);
Edit1.Clear;
Case s of
smiley Сорь за предыдущий ляп smiley
Андрей Октябрь 16 2011 16:13:09
Как в этом калькуляторе сделать так, чтобы знаки действий вводить с клавиатуры?smiley
Kest Октябрь 17 2011 12:58:31
Андрей, нужно обработать нажатия на клавиатуре
Андрей Октябрь 18 2011 09:58:02
Kest а по подробней, если можно. Я вообще первый сталкиваюсь с Delphi. smiley
Kest Октябрь 21 2011 00:58:40
Андрей, ты хочешь что бы калькулятор считал такие записи - 2+2*3 ??
kostya Ноябрь 27 2011 23:48:09
У меня выскакивает ошибка на первой кнопке на слове then помогите непойму что делать
Kest Ноябрь 28 2011 00:08:56
kostya, где
kostya Ноябрь 28 2011 23:52:38
procedure TfmCalc.bt1Click(Sender: TObject);
begin
If (edInput.Text='0' or not (zifra)
then ----здесь выдаёт ОШИБКУ
begin
edInput.Text:='1';
zifra:=true
end
else edInput.Text:=edInput.Text+'1'
end;
Kest Ноябрь 29 2011 23:29:15
скобки одной не хватает просто тут

(edInput.Text='0' or not (zifra)




так должно быть

(edInput.Text='0' or not (zifra))


kostya Ноябрь 29 2011 23:42:41
Поставил скобку которой не хватало!Теперь он на этой строке выдаёт ошибку
Kest Декабрь 08 2011 21:10:35
какую
deymos Декабрь 20 2011 18:55:51
все-таки что-то не выходит, ошибка после знака равно не исчезла.
deymos Декабрь 20 2011 19:13:34
вроде как в самом условии для арифметических действий сидит ошибка. вводим первое число-знак действия-второе число-равно. до сих пор нормально. далее - вводим третье число-знак-четвертое число-равно...а выполняется - присваивание результата прошлой операции первому числу а затем операция с четвертым числом...оно так и будет, так как не срабатывает почему-то индикатор нажатия первой кнопки нового числа
julija Декабрь 24 2011 18:46:07
а сложно сделать программу простого калькулятора с использованием компонентов ActionList,MainMenu,PopupMenu...выбор операций(+,-,*,/) осуществлять через Memo,результат выводить в Memo
Павел Январь 17 2012 19:51:03
Одиннадцатым Шагом Вы программируете ввод кнопок, для того, что бы их можно было вводить с клавиатуры, а где тот самый объект, к которому пишется эта процедура. Его, что надо самому прописывать?
Тогда интерпретатор его не понимает и считает как ошибку.
Гребень Ноябрь 10 2022 17:17:33
Богдан петушня smiley
Гребень Ноябрь 10 2022 17:17:36
Богдан петушня smiley
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Разработка клиент...
PBFoldder
Tetris 2002
Разработка клиент...
Панель Наша Кнопка
Strawberry Prolog...
Популярные загрузки
БД сеть компьютер...
Шифрование по алг...
ActiveX в Delphi
SysInfo [Исходник...
Самоучитель Прогр...
Паскаль и Дельфи....
Изучаем Ассемблер
Task Shedule
Delphi 7 Enterpri...
Программа рисует ...
Delphi 2005 для .NET
около 291 статьи ...
C++ Builder 6 СПР...

Топ загрузок
Приложение Клие... 100765
Delphi 7 Enterp... 97588
Converter AMR<-... 20240
GPSS World Stud... 16995
Borland C++Buil... 14165
Borland Delphi ... 10202
Turbo Pascal fo... 7360
Калькулятор [Ис... 5944
Visual Studio 2... 5196
Microsoft SQL S... 3654
Случайные статьи
9. На все участвую...
Лучшая букмекерска...
VIRTUAL expected
Туры в Осло, Норвегия
Вулкан Неон на реа...
Константные объект...
Отражайте корпорат...
Идеальная ЛВС
Иногда требуется б...
Вот что происходит...
А.4. ЗДРАВЫЙ СМЫСЛ
Этапы решения комп...
Скорость игры. Аза...
Итерационное плани...
Видео формат
Комбинирование CSS...
Файл AndroidManife...
Как провести свобо...
Отличный инструмен...
Оценка недвижимост...
Пример: простое ши...
Как перемещать кур...
отчетность через и...
Цветные «скины» дл...
Cannot Read or Wri...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?