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

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

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

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


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

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


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

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




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

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


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

Случайные загрузки
Панель "Случайное...
Таймер и секундомер
Паскаль и Дельфи....
DelphiX
Советы от Даниилы...
Дешифратор содерж...
DelphiXIsoDemo1
Добавление к ссы...
Шкрыль А. - Разра...
netBIOS
Ehlib
Создание фракталов
Длинный заголовок...
База данных фильм...
Разработка клиент...
Упорядоченный дин...
Искусство програм...
Защита от спама ...
Visual Basic for ...
Учебник для продв...

Топ загрузок
Приложение Клие... 100771
Delphi 7 Enterp... 97787
Converter AMR<-... 20259
GPSS World Stud... 17014
Borland C++Buil... 14186
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5968
Visual Studio 2... 5205
Microsoft SQL S... 3661
Случайные статьи
ХАЛЯВНЫЙ NET(2)
Операторы описания...
Настройки чтения
Процедуры и функци...
Положение Acompli
Моникеры и сохраня...
Разработать програ...
Навыки общения
Язык С: определени...
Процедур согласова...
Протокол MGCP
Данная книга
Инженер не может в...
Размер фотографий ...
Линии
Как играть в казин...
DECREMENT (УМЕНЬШИ...
Генерация кода в к...
Зумирование с фото...
сервера и сведения...
Хакинг приставок X...
Планирование после...
Компонент изображение
Блок try–finally
Листинг 17.2. Сайт...
Статистика



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


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