Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 17:26   #1
Arcueid1691
Пользователь
 
Аватар для Arcueid1691
 
Регистрация: 31.05.2009
Сообщений: 97
По умолчанию Калькулятор

Задание: написать калькулятор. Все написала, только проблема с проверкой точки. когда программа доходит до строчки с проверкой разделителя, то вылетает.Собственно надо проверить стоит ли точка, если нет, то поставить, а если да то ничего не должно происходить.
Код:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>

#include "UnitFormMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCalculator *Calculator;
double dOp1, dOp2, dRes, dMem;
int iKey;

//---------------------------------------------------------------------------
__fastcall TCalculator::TCalculator(TComponent* Owner)
	: TForm(Owner)
{
   LabelOp->Width = 316;
   DecimalSeparator ='.';
}
//---------------------------------------------------------------------------
void __fastcall TCalculator::Button2Click(TObject *Sender)
{

	LabelOp->Caption = LabelOp->Caption + ((TButton*)Sender)->Caption;

}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonDelClick(TObject *Sender)
{
	if(LabelOp->Caption.Length()!=0)
	LabelOp->Caption = LabelOp->Caption.Delete(LabelOp->Caption.Length(),1);
	else  LabelOp->Caption = 0;
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonCMemoryClick(TObject *Sender)
{
	dOp1=0;
	dOp2=0;
	LabelOp->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonCAllClick(TObject *Sender)
{
	dOp1=0;
	dOp2=0;
	dMem = 0;
	LabelOp->Caption = "";
	LabelM->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonResClick(TObject *Sender)
{
	dOp2=  double(StrToFloat(LabelOp->Caption));
	LabelOp->Caption ="";
	switch(iKey)
	{

	 case 2: dRes = dOp1+dOp2;
			 LabelOp->Caption = dRes;
	 break;
	 case 3: dRes = dOp1-dOp2;
			 LabelOp->Caption = dRes;
	 break;
	 case 4: dRes = dOp1*dOp2;
			 LabelOp->Caption = dRes;
	 break;
	 case 5: dRes = dOp1/dOp2;
			 LabelOp->Caption = dRes;
	 break;
	 case 6: dRes = dOp1/dOp2;
			 LabelOp->Caption = FloatToStr(float(dRes));
	 break;
	 case 7: dRes = dOp1/dOp2;
			 LabelOp->Caption = IntToStr((int)dRes);
	 break;
	 }
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonPlusClick(TObject *Sender)
{
   try
   {
	dOp1 = double(StrToFloat(LabelOp->Caption));
   }
	catch(...)
	{
	 ShowMessage("Error");
	}

   LabelOp->Caption = "";
   iKey = ((TButton*)Sender)->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonDotClick(TObject *Sender) //вот здесь проблемы.
{
	int iOp=LabelOp->Caption.Length();
	for(int i=0; i<iOp; i++)
	{

	if(LabelOp->Caption[i]!=215)
	 {
	  LabelOp->Caption = LabelOp->Caption + ".";
	 }
	}
}
//---------------------------------------------------------------------------
	 
void __fastcall TCalculator::ButtonMRClick(TObject *Sender)
{
	 LabelOp->Caption = FloatToStr(float(dMem));
}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonMemPlusClick(TObject *Sender)
{
	dMem= dMem + double(StrToFloat(LabelOp->Caption));
	LabelM->Caption = FloatToStr(float(dMem));

}
//---------------------------------------------------------------------------

void __fastcall TCalculator::ButtonMemMinusClick(TObject *Sender)
{
	dMem = dMem - double(StrToFloat(LabelOp->Caption));
	LabelM->Caption = FloatToStr(float(dMem));
}
//---------------------------------------------------------------------------
спят подружки вредные безмятежным сном,
Снятся мышкам хлебные крошки под столом, Буратинам - досточки, кошкам - караси,
Всем собакам - косточки, программистам - Си (с)

Последний раз редактировалось Arcueid1691; 15.09.2010 в 17:46.
Arcueid1691 вне форума Ответить с цитированием
Старый 15.09.2010, 18:20   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

1. DecimalSeparator я бы не менял и оставил его значение на совести системы
2. Не уверен, что первый символ в билдеровой строке имеет индекс 0. Как бы не единица по наследству от делфей...
Как-то так, если я еще билдер не забыл за 3 года
Код:
void __fastcall TCalculator::ButtonDotClick(TObject *Sender)
{
  if (LabelOp->Caption.Pos(DecimalSeparator)) // Разделитель уже вставлен
    return;

  LabelOp->Caption += DecimalSeparator; // Разделителя нет. Добавляем в конец
}
pu4koff вне форума Ответить с цитированием
Старый 15.09.2010, 18:39   #3
Arcueid1691
Пользователь
 
Аватар для Arcueid1691
 
Регистрация: 31.05.2009
Сообщений: 97
По умолчанию

Спасибо) про Pos() я и забыла совсем. разделитель поменяла потому как в задании было указано. Еще раз спасибо)
спят подружки вредные безмятежным сном,
Снятся мышкам хлебные крошки под столом, Буратинам - досточки, кошкам - караси,
Всем собакам - косточки, программистам - Си (с)
Arcueid1691 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
калькулятор в С++ natashasuper5 Помощь студентам 3 10.04.2011 23:02
Калькулятор manick Общие вопросы Delphi 8 23.04.2010 20:42
Калькулятор на с#.... Kamil H. Помощь студентам 0 10.04.2010 15:37
Калькулятор Иринка26 Помощь студентам 11 19.02.2010 17:05
Калькулятор Sekt Фриланс 4 22.10.2009 10:34