Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор, Проблема с умножением и делением дробных 
:(
    Опции темы
JIuTEoH
  Дата 10.4.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Люди добрые,помогите с калькулятором,он не хочет делить и умножать дробные числа,я не понимаю,что не так,укажите на ошибку,вот код:
Код

#include <vcl.h>
#pragma hdrstop

#include "Calculator.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
double accum;
int op;
double f;
TForm1 *Form1;
//Form---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{ f=0;
  op=0;
  StaticText1->Caption=0;
}
//Button 0---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{ if(f!=0)
  StaticText1->Caption=StaticText1->Caption+'0';

}
//Button1
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{ if(f==0)
  { StaticText1->Caption='1';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'1';
}
//Button2
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{ if(f==0)
  {
  StaticText1->Caption='2';
  f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'2';
}
//Button3
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='3';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'3';
}
//Button4
void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='4';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'4';
}
//Button5
void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='5';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'5';
}
//Button6
void __fastcall TForm1::BitBtn7Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='6';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'6';
}
//Button7
void __fastcall TForm1::BitBtn8Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='7';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'7';
}
//Button8
void __fastcall TForm1::BitBtn9Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='8';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'8';
}
//Button9
void __fastcall TForm1::BitBtn10Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption='9';
    f=1;
  }
  else StaticText1->Caption=StaticText1->Caption+'9';
}
//Point
void __fastcall TForm1::BitBtn11Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption="0.";
    f=1;
  }
  else
  { if(StaticText1->Caption.Pos(".")==0)
      StaticText1->Caption=StaticText1->Caption+'.';
  }
}
//Sbros(C)
void __fastcall TForm1::BitBtn12Click(TObject *Sender)
{ StaticText1->Caption='0';
  accum=0;
  op=0;
  f=0;
}
//Operation
void __fastcall TForm1::DoOp(void)
{ float op2=StrToFloat(StaticText1->Caption);
  switch(op)
  { case 0 : accum = op2; break ;
    case 1 : accum += op2; break;
    case 2 : accum -= op2; break;
    case 3 : accum *= op2; break;
    case 4 : accum /= op2; break;
  }
  StaticText1->Caption = FloatToStrF(accum,ffGeneral,10,3);
}
//Button(+)
void __fastcall TForm1::BitBtn13Click(TObject *Sender)
{ if(f!=0)
  { DoOp();
    f=0;
  }
  op=1;
}
//Button(-)
void __fastcall TForm1::BitBtn14Click(TObject *Sender)
{ if(f!=0)
  { DoOp();
    f=0;
  }
  op=2;
}
//Ravno
void __fastcall TForm1::BitBtn15Click(TObject *Sender)
{ if(f!=0)
  { DoOp();
    f=0;
  }
  op=0;
}
//Button(*)

void __fastcall TForm1::BitBtn16Click(TObject *Sender)
{ if(f!=0)
  { DoOp();
    f=0;
  }
  op=3;
}
//Button(/)
void __fastcall TForm1::BitBtn17Click(TObject *Sender)
{ if(f!=0)
  { DoOp();
    f=0;
  }
  op=4;
}



Да и еще,подскажите,как сделать так,чтобы цифры отображались в правой стороне statictext`a.

Заранее сем огромное спасибо

Это сообщение отредактировал(а) JIuTEoH - 10.4.2009, 07:32
PM MAIL   Вверх
Usper
Дата 10.4.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



А в чём проблема? У меня вроде умножает....
По поводу выравнивания:  
Код

StaticText->AutoSize=false;
StaticText->Alignment=taRightJustify;



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
JIuTEoH
Дата 10.4.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Так,за выравнивание спасибо),а вот проблема с умножением и делением осталось,заметил кстати,что не делит и не умножает только тогда,когда и с самого начала ввожу дробное число,а вот если перед операцией(*,/) была операция,при которой ответ получился дробноым,то все отлично получается...что такое,ума не приложу
PM MAIL   Вверх
Usper
Дата 10.4.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Что значит не умножает и не делит? Неправильный результат? Возникает исключение?
Напишите при каких условиях возникает проблема. У меня Ваш код работает.

Это сообщение отредактировал(а) Usper - 10.4.2009, 09:51


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
JIuTEoH
Дата 10.4.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



После того как я ввел дробное число,например 53.6,я нажимаю на кнопку деления или умножения и у меня выскакивает сразу же ошибка
user posted image

Это сообщение отредактировал(а) JIuTEoH - 10.4.2009, 10:40
PM MAIL   Вверх
Artemon
Дата 10.4.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



JIuTEoH, у вас в региональных настройках в качетстве разделителя стоит запятая, поменяй ее на точку и ошибка уйдет.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
JIuTEoH
Дата 10.4.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Извините за нубский вопрос,но где это,региональные настройки?)
PM MAIL   Вверх
Artemon
Дата 10.4.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Пуск->Панель Управления -> Региональные стандарты


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Usper
Дата 10.4.2009, 14:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Лучше поменять код, заменив точки на запятые:
Код

void __fastcall TForm1::BitBtn11Click(TObject *Sender)
{ if(f==0)
  {
    StaticText1->Caption="0,";
    f=1;
  }
  else
  { if(StaticText1->Caption.Pos(",")==0)
      StaticText1->Caption=StaticText1->Caption+',';
  }
}


А ещё лучше вместо точек и запятых воткнуть DecimalSeparator. Например: 
Код

StaticText1->Caption=StaticText1->Caption+DecimalSeparator;





--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Artemon
Дата 10.4.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Если делать по-нормальному, то необходимо вместо разделителя использовать DecimalSeparator.
Т.к. могут быть не только точка и запятая в разделителях.

Это сообщение отредактировал(а) Artemon - 10.4.2009, 15:09


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Anikmar
Дата 10.4.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Usper @  10.4.2009,  14:10 Найти цитируемый пост)
А ещё лучше вместо точек и запятых воткнуть DecimalSeparator.

Самый лучший вариант, на мой взгляд. Я так тоже делаю - повышает дуракоустойчивость.
PM MAIL ICQ   Вверх
JIuTEoH
Дата 13.4.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Всем огромное спасибо,все исправил,все работает,но есть еще одна загвоздка,деление на ноль,не получается реализовать,чтобы при деление на 0 выдовало сообщение о том что так делать нехорошо)Хоть намекните через что
PM MAIL   Вверх
artsb
Дата 13.4.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Перед делением проверяете делитель на наличие в нём нуля и, если он обнаружен, выкидываете:
Код

ShowMessage("На ноль делить нельзя!");


Это сообщение отредактировал(а) artsb - 13.4.2009, 22:34


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
JIuTEoH
Дата 14.4.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Дак вот я как раз и не знаю,как сделать эту гребаную проверку
PM MAIL   Вверх
JIuTEoH
Дата 14.4.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Помогите пожалуйста,сегодня сдавать,а я то что знаю перепробывал уже и нихрена ни че не получилось
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.