poMOCY KALKULATOR!!!

dział ogólny

poMOCY KALKULATOR!!!

Nowy postprzez arekb90 » niedziela, 23 listopada 2008, 11:13

Witam mam mały problem z moim programem w c++ buldier kalkulatorem:
po pierwsze jak zrobic aby w edit wpisywało od prawej strony a nie od lewej
po drugie jak zrobić aby czyściło zaznaczony wiersz
po trzecie nie wiem jak zmienić aby wykonowało działania na zmiennych a nie na editach bo podczas działania mojego programu np jak wezmę 9/3 to wyskakuje bład.
JAK KTOŚ MOŻE NIECH MI POMOŻE,BĘDĘ WDZIĘCZNY:-)
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
arekb90
 
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez Cyfrowy Baron » niedziela, 23 listopada 2008, 14:24

Jeżeli chodzi o wyrównanie do prawej strony, to w Edit tego zrobić się nie da, możesz sobie pobrać z serwisu Cyfrowy Baron z działu download -> komponenty, komponent: REdit, który wygląda jak Edit i podobnie się zachowuje, może jednak wyrównywać tekst do prawej strony.



po drugie jak zrobić aby czyściło zaznaczony wiersz


Co rozumiesz przez "czyściło zaznaczony wiersz", obiekt Edit nie posiada wierszy, tylko pojedyncze pole tekstowe, czy chodzi Tobie o czyszczenie zawartości tego pola:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Clear();   
}
//---------------------------------------------------------------------------




po trzecie nie wiem jak zmienić aby wykonywało działania na zmiennych a nie na editach bo podczas działania mojego programu np jak wezmę 9/3 to wyskakuje bład.


Działanie na Editach!? Czy wiesz o czym piszesz! Jakich Editach? Pole testowe obiektu Edit zawiera tekst, a więc zmienną typu AnsiString, jeżeli chcesz operować na zamiennych liczbowych np. typu Integer (int), to dokonaj konwersji z typy AnsiString na typ int, ważne jest jednak by taka zmienna AnsiString zawierała tylko tekst będący liczbą.
Opisy konwersji znajdziesz w serwisie Cyfrowy Baron w działach:
   porady -> Łańcuchy znaków,
   porady -> Zmienne

Jeżeli jednak w pole Text obiektu Edit wpiszesz taka wartość: 9/3, to niby skąd program ma wiedzieć co chcesz z tym zrobić, traktuje to jako tekst i żadnego działania nie wykona, gdyż musisz najpierw stworzyć jakiś mechanizm, który będzie wykonywał zadanie zgodnie z programem.
Taki zapis trzeba rozbić na liczby i znaki i ustalić co należy zrobić, jakie działanie wykonać z konkretnym znakiem. To że w kodzie programu używasz ukośnika jako symbolu dzielenia, dla programu nic nie znaczy, o tym że tak należy postąpić wie tylko kompilator, sam program nie ma pojęcia co ma zrobić z ukośnikiem, dlatego trzeba mu to zaprogramować.

Niżej przedstawiam prosty przykład do wykonywania czterech działań (dodawanie, odejmowanie, dzielenie, mnożenie) na dwóch dowolnych liczbach całkowitych i ułamkowych:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString znak[] = {"+", "-", "/", "*"};

int op = -1;
double nLeft = 0.0, nRight = 0.0, wynik = 0.0;

String tekst =StringReplace(Edit1->Text, ".", ",", TReplaceFlags() << rfReplaceAll);

if(tekst.IsEmpty()) return;

for(__int8 x = 0; x < 4; x++)
{
  int y = tekst.Pos(znak[x]);
  if(y > 0)
  {
   op = x;
   nLeft  = tekst.SubString(1, y - 1).ToDouble();
   nRight = tekst.SubString(y + 1, tekst.Length()).ToDouble();
   break;
  }
}


switch(op)
{
   case 0: wynik = nLeft + nRight; break;
   case 1: wynik = nLeft - nRight; break;
   case 2: wynik = nLeft / nRight; break;
   case 3: wynik = nLeft * nRight; break;
}

ShowMessage("Podaję wynik: " + Edit1->Text + "=" + (String)wynik);

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


Wpisz w pole Text obiektu Edit dowolny wzór według schematu: liczba -> operator (+, -, /, *) -> liczba.



Stworzenie takiego prostego kalkulatora nie jest jak widzisz problemem, ale stworzenie kalkulatora, który będzie od razu rozwiązywał całe wprowadzone równanie, nie jest prostą sprawą i wymaga bardzo zaawansowanych algorytmów.
Zwracam uwagę na fakt, że systemowy kalkulator działa nieco inaczej, wprowadza się do niego pojedyncze liczby, a nie cały wzór, ale to już zupełnie inna historia wymagająca zupełnie innych rozwiązań, których nie będę tutaj prezentował z braku czasu, no i przecież ja tego kalkulatora za Ciebie nie napiszę.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez arekb90 » poniedziałek, 24 listopada 2008, 00:10

Nie chodzi mi aby czyściło edit1 ale pole zaznaczony w tabelce wygląd podany w załączniku,mam by czyściło całą
oto kod aby cała:
Kod: Zaznacz cały
{
{
        for (int a=0; a<5; a++) 
{
        for (int b=0; b<12; b++) 
{
sg1->Cells[a][b]="";           
}
}
j=0;
i=0;
}
}

a jak aby zanaczone pole?
Avatar użytkownika
arekb90
 
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez Cyfrowy Baron » poniedziałek, 24 listopada 2008, 09:28

Kod: Zaznacz cały
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = ""; 


Zajrzyj czasami do sewisu Cyfrowy Baron, znajdziesz tam dział porady, a co się tyczy StringGrid to też istnieje odpowiedni dział z poradami dla tegoż obiektu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez arekb90 » poniedziałek, 24 listopada 2008, 12:03

Cześć jeszcze małe pytanko:
też mi zbytnio nie o to chodzi z tym czyszczeniem chodzi mi aby cale jeden wiersz tabelki(te pola w który znajduje się całe działanie) czysciło?
jak dodać komponent: REdit do mojego programu bo chce aby tekst zawarty w nim był pokazywany z prawej strony?
Avatar użytkownika
arekb90
 
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez Cyfrowy Baron » poniedziałek, 24 listopada 2008, 12:20

Do projektu programu dodaje się tak samo jak każdy inny komponent. Pytasz chyba raczej o to jak zainstalować ten komponent w środowisku BCB 6 Personal.


Należy rozpakować archiwum do wybranego folderu, przy czym nazwa folderu i wszystkich podfolderów powinna składać się z pojedynczego wyrazu. Po wypakowaniu trzeba utworzyć paczkę dla komponentu. W menu File wybieramy New a następnie Other... W oknie, które wyskoczy wybieramy Package. Wyskoczy okno tworzenia nowej paczki. Zapisujemy paczkę pod nową nazwą (tylko znaki języka angielskiego i jednoczłonowa nazwa paczki) w katalogu z komponentem TREdit, w tym samym oknie naciskamy przycisk Add, a następnie w nowo otwartym oknie naciskamy przycisk Browse i odszukujemy plik komponentu REdit.cpp. Gdy plik komponentu zostanie dołączony do paczki, kompilujemy paczkę. Po skompilowaniu instalujemy paczkę. a następnie dla pewności zamykamy BCB i uruchamiamy ponownie. Komponent powinien znajdować się na palecie o nazwie Cool!.


Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez mckri » czwartek, 27 listopada 2008, 10:52

Co do zmiany justowania w komponencie TEdit, to zobacz w inspektorze obiektów (z reguły po lewej stronie) właściwość BiDiMode i ustaw ja na bdRightToLeft
Nie wiem jakiego uzywasz srodowiska, ale w wersji 11 Buildera ów bajer jest :)
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    NieznanyNieznana

Re: poMOCY KALKULATOR!!!

Nowy postprzez Cyfrowy Baron » czwartek, 27 listopada 2008, 14:18

Właściwość BiDiMode została przewidziana dla wersji Windows, w których tekst jest pisany od prawej do lewej strony, czyli odwrotnie niż w krajach cywilizowanych, w których pisze się od lewej do prawej, ale rzeczywiście zmiana tej właściwości powoduje zmianę wyrównania, zaznaczam jednak, że nie jest to równoznaczne z wyrównywaniem tekstu w edytorze.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 21 gości

cron