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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 01:16   #1
angelada
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 11
По умолчанию Помогите пожалуста с Программой на С++

я пишу свой первый калькулятор!! В С++ новичек так что не все знаю! Помогите пожалуста с одной проблемкой!
Мне надо:
1)чтобы в начале в Edit1 нельзя было писать первой цифрой 0 а вернее если написана 0 то далее только (,) и ничего больше!
2) Чтобы нельзя было писать (,) много раз в поле Edit1 а то они могут ставиться до бесконечности!
3) не срабатывает мое сообщение о том что на 0 делить нельзя!! выдает просто системное сообщение на англ языке! типа так делать не надо=))
Вот листинг программы:


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float i,r,p;
int mode;

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"1";
}


void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"2";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"3";
}

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"4";
}

void __fastcall TForm1::Button5Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"5";
}

void __fastcall TForm1::Button6Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"6";
}

void __fastcall TForm1::Button7Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"7";
}

void __fastcall TForm1::Button8Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"8";
}

void __fastcall TForm1::Button9Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"9";
}

void __fastcall TForm1::Button10Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+"0";
}

void __fastcall TForm1::Button11Click(TObject *Sender)
{
i=StrToFloat(Edit1->Text);
mode=2;
Edit1->Text="";
Edit1->SetFocus();
}

void __fastcall TForm1::Button12Click(TObject *Sender)
{
i=StrToFloat(Edit1->Text);
mode=3;
Edit1->Text="";
Edit1->SetFocus();
}

void __fastcall TForm1::Button13Click(TObject *Sender)
{
i=StrToFloat(Edit1->Text);
mode=4;
Edit1->Text="";
Edit1->SetFocus();
}

void __fastcall TForm1::Button14Click(TObject *Sender)
{
i=StrToFloat(Edit1->Text);
mode=5;
Edit1->Text="";
Edit1->SetFocus();
}

void __fastcall TForm1::Button15Click(TObject *Sender)
{
switch (mode)
{
case 2:
p=StrToFloat(Edit1->Text);
r=i+p;
Edit1->Text=FloatToStrF(r,ffGeneral,7,2 );
break;
case 3:
p=StrToFloat(Edit1->Text);
r=i-p;
Edit1->Text=FloatToStrF(r,ffGeneral,7,2 );
break;
case 4:
p=StrToFloat(Edit1->Text);
r=i*p;
Edit1->Text=FloatToStrF(r,ffGeneral,7,2 );
break;
case 5:
p=StrToFloat(Edit1->Text);
r=i/p;
Edit1->Text=FloatToStrF(r,ffGeneral,7,2 );
break;
}
i=StrToFloat(Edit1->Text);
p=StrToFloat(Edit1->Text);
try
{
r=i/p;
}
catch (EZeroDivide &e)
{
ShowMessage("На 0 делить нельзя!!!");
Edit1->SetFocus();
return;
}
Edit1->SetFocus();
}

void __fastcall TForm1::Button17Click(TObject *Sender)
{
Edit1-> Text="";
Edit1->SetFocus();
}

void __fastcall TForm1::Button16Click(TObject *Sender)
{
Form1->Close();
}


void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ( (Key>= '0') && (Key <= '9'))
return;
if (Key==DecimalSeparator)
{
if ( (Edit1->Text).Pos(DecimalSeparator)!=0)
Key=0;
return;
}
if (Key==VK_BACK)
return;
Key=0;
}




void __fastcall TForm1::Button18Click(TObject *Sender)
{
Edit1->Text= Edit1->Text+",";
Edit1->SetFocus();
}
angelada вне форума Ответить с цитированием
Старый 17.04.2009, 01:48   #2
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Для вычисления нуля с запятой - просто сравнивай текст со строкой "0", если строка равна нулю то разреши запятую и больше ни чего кроме неё.
ДЛя подсчёта числа запятых ищи запятую в поле ввода, если она есть то не разрешай больше этого символа
А насчёт деления на ноль, просто проверяй в своём пятом режиме перед делением равенство переменной нулю
case 5:
p=StrToFloat(Edit1->Text);
if (p==0).......................
r=i/p;
Edit1->Text=FloatToStrF(r,ffGeneral,7,2 );
break;
}

Последний раз редактировалось Виталий Серов; 17.04.2009 в 01:52.
Виталий Серов вне форума Ответить с цитированием
Старый 17.04.2009, 13:11   #3
angelada
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 11
По умолчанию

Спасибо с выводом сообщения разобрался! не пойму правда почему у меня тогда не выводило вроде правильно же!
Но в том то и проблемка я не знаю как проверить строчку на наличие 0 и если он там есть то запретить символы кроме (,). Думаю так же будет и с проверкой запятой как встретится то запретить ее! но как это сделать я не знаю! помогите пожалуста! Заранее огромное спасибо
angelada вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите,пожалуста! Регина Помощь студентам 5 30.05.2007 23:02
Помогите пожалуста!!! juden Общие вопросы Delphi 2 23.05.2007 14:37