Навигация
Главная
Поиск
Форум
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
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Invision Power ... 65291
Организация зап... 63944
Модуль Forms 60856
Создание отчето... 60723
ТЕХНОЛОГИИ ДОСТ... 57044
Создание потоко... 56394
Пример работы с... 54284
Имитационное мо... 52493
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

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

Расчет мер близости на отношениях на Delphi + Пояснительная записка
Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
База данных междугородних телефонных разговоров на Delphi

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Приложение «Простейший калькулятор»


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

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


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

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




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

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


kostya November 29 2011 22:42:41
Поставил скобку которой не хватало!Теперь он на этой строке выдаёт ошибку
Kest December 08 2011 20:10:35
какую
deymos December 20 2011 17:55:51
все-таки что-то не выходит, ошибка после знака равно не исчезла.
deymos December 20 2011 18:13:34
вроде как в самом условии для арифметических действий сидит ошибка. вводим первое число-знак действия-второе число-равно. до сих пор нормально. далее - вводим третье число-знак-четвертое число-равно...а выполняется - присваивание результата прошлой операции первому числу а затем операция с четвертым числом...оно так и будет, так как не срабатывает почему-то индикатор нажатия первой кнопки нового числа
julija December 24 2011 17:46:07
а сложно сделать программу простого калькулятора с использованием компонентов ActionList,MainMenu,PopupMenu...выбор операций(+,-,*,/) осуществлять через Memo,результат выводить в Memo
Павел January 17 2012 18: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...
Шаблон для новост...

Случайные загрузки
Файловый менеджер
Учебник для продв...
С. Г. Горнаков - ...
FreeNet
Dbgridpack
IIIDTrans
База каталогов ( ...
Игра змейка
HTMLredaktor
Основы Delphi. Пр...
Открытие Cd-ROM'a...
C++ для начинающих
Assistant
Размещение элемен...
Упорядоченный дин...
Prolog Interprete...
Crypt32
mmmJlabel
Моделирование дви...
Исправление проц...

Топ загрузок
Приложение Клие... 100376
Delphi 7 Enterp... 83096
Converter AMR<-... 20046
Borland C++Buil... 11180
GPSS World Stud... 10915
Borland Delphi ... 8128
Turbo Pascal fo... 6973
Visual Studio 2... 4963
Калькулятор [Ис... 4360
FreeSMS v1.3.1 3510
Случайные статьи
Когда использовать...
Натяжные потолки
4. Как гарантирова...
Формат отображения...
Вы можете проверит...
Motorola Moto X XT...
Создание атрибутов
Проверка грамматик...
Сроки службы серти...
Центробежный насос
Функция GraphResul...
А сколько человек ...
универсальной груп...
Межмодульные перем...
Этот пример иллюст...
Преимущества контр...
Решения к главе 10
Если 1IS требует к...
Проектирование мод...
Популярность исход...
Чтобы лучше исполь...
Интерфейс и его де...
ХАЛЯВНЫЙ NET(2)
Создание проекта ...
3.4. ДОПУСТИМЫЕ СП...
Статистика



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


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