Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 59714
Invision Power ... 58173
Организация зап... 58077
Модуль Forms 56812
Приложение «Про... 55887
Создание отчето... 55619
Оператор выбора... 55382
Подключение Mic... 55287
ТЕХНОЛОГИИ ДОСТ... 51737
Программируемая... 48688
Пример работы с... 47569
Имитационное мо... 47360
21 ошибка прогр... 42349
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

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

База данных - словарь терминов на Delphi + Пояснительная записка
Моделирование процесса поступления заявок в систему, состоящую из трёх Э...
Программа тестирования (тест) - вступительные экзамены (математика, физи...

Реклама

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


Создадим программу, которая представляет собой арифметический калькулятор,
производящий четыре действия над действительными числами. Проектируемый калькулятор
должен функционировать следующим образом: пользователь вводит первый операнд,
выбирает операцию, затем вводит второй операнд и нажимает «равно». При этом
происходит вычисление результата соответствующей операции и его отображение в строке
данных калькулятора. Ввод операндов и операций осуществляется путем нажатия кнопки на
самом калькуляторе.
Создание новой программы на 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 March 16 2010 19:01:13 · 19 Комментариев · 55887 Прочтений · Для печати

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


Комментарии
Андрей May 12 2010 14:55:44
Отличный урок!
Alex May 17 2010 00:01:21
если после нажатия клавиши равно сразу без очистки ввести первый операнд потом действие потом второй операнд потом равно то считает неправильно...тоесть например вводим 5+5=10 и сразу без сброса 5+5=то уже будет равно 15...как поправить?
Kest May 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 July 24 2011 02:52:28
После
begin
edit1.Text:='1';
Впиши
edit1.Clear;
Кажется так!
ierecumi July 24 2011 02:55:50
ой Мля не в 1 а в = писать надо
Короче:
b:=STRtofloat(Edit1.text);
Edit1.Clear;
Case s of
smiley Сорь за предыдущий ляп smiley
Андрей October 16 2011 16:13:09
Как в этом калькуляторе сделать так, чтобы знаки действий вводить с клавиатуры?smiley
Kest October 17 2011 12:58:31
Андрей, нужно обработать нажатия на клавиатуре
Андрей October 18 2011 09:58:02
Kest а по подробней, если можно. Я вообще первый сталкиваюсь с Delphi. smiley
Kest October 21 2011 00:58:40
Андрей, ты хочешь что бы калькулятор считал такие записи - 2+2*3 ??
kostya November 27 2011 23:48:09
У меня выскакивает ошибка на первой кнопке на слове then помогите непойму что делать
Kest November 28 2011 00:08:56
kostya, где
kostya November 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 November 29 2011 23:29:15
скобки одной не хватает просто тут

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




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

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Task Shedule
Генетический алго...
Фундаментальные а...
BSButton
Задача о 8ми ладьях
Visual Studio 200...
Основы программир...
Разработка клиент...
Пример работы с б...
Философия C++. Пр...
CS:Source - монит...
Время загрузки ...
Х. М. Дейтел, П. ...
Dealer
Правила программи...
DelphiXIsoDemo1
CoolControls v3.0...
Фильтры изображений
Векторный редакто...
Java в примерах -...

Топ загрузок
Приложение Клие... 100289
Delphi 7 Enterp... 76592
Converter AMR<-... 20017
Borland C++Buil... 10582
GPSS World Stud... 9037
Borland Delphi ... 7571
Turbo Pascal fo... 6874
Visual Studio 2... 4885
Калькулятор [Ис... 3912
FreeSMS v1.3.1 3482
Случайные статьи
3.1. Принципы
Анализ статистики ...
Безызбыточное коди...
совместимый со ста...
Компьютерная арифм...
Счетчик ссылок vnode
Процедуры и функци...
Коллективное владение
Построение кодека ...
"," expected
Способы и механизм...
Спец. команды
Управление маркерами
Глава 8 посвящена ...
1. Вы мэр небольшо...
Основная особеннос...
Microsoft Internet...
10. Эдисон наполни...
Too many condition...
Резюме: куда включ...
Image::Magick или ...
Выбирайте правильн...
Бесконечная систем...
повлиять на развер...
Блок MARK
Статистика



Друзья сайта
Программы, игры
Оперативная фрезеровка материалов - фрезеровка чпу.

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