logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Visual C++: Jak obsłużyć kolejne działania w kalkulatorze?

bunius 09 Maj 2010 21:31 1544 9
REKLAMA
  • #1 8056531
    bunius
    Poziom 10  
    Posty: 6
    Witam,
    Mam problem z kalkulatorem w programie Visual Studio Express 2008. Otóż pojedyncze działania typu a+b program realizuje, ale gdy chcę z otrzymanym wynikiem coś zrobić (np z dodawania otrzymałem wynik i chcę coś jeszcze dodać) to tworzą się schody... Niespecjalnie mam pomysł jak go rozwiązać. Podaję kod i proszę o podpowiedź.
    
    private: System::Void button17_Click(System::Object^  sender, System::EventArgs^  e) {
     rownanie=true;
     a=Convert::ToDouble(txtDisplay->Tag);
     b=Convert::ToDouble(txtDisplay->Text);
    txtDisplay->Tag= dec;
    			 if(plus)
    			 {
    				 dec =a + b;
    				 txtDisplay->Text = dec.ToString();
    				 textBox1->Text= "";
    			 }
    			 if (minus)
    			 {
    				 dec= a - b;
    				 txtDisplay->Text = dec.ToString();
    				 textBox1->Text= "";
    			 }
    			 if (mnozenie)
    			 {
    			    dec=a * b;
    				 txtDisplay->Text = dec.ToString();
    				 textBox1->Text= "";
    			 }
    			 if (dzielenie)
    			 {
    				 dec=a / b;
    				 if(txtDisplay->Text=="0")
    				 {
    					 MessageBox::Show("Nie można dzielić przez 0","Ostrzeżenie");
    					 txtDisplay->Text="";
    					 textBox1->Text="";
    				 }
    				 else
    				 {
    					txtDisplay->Text = dec.ToString();
    					textBox1->Text= "";
    				 }
    			 }
    		 }
    

    Najgorsze jest to że czasem liczy dobrze, a czasem nie.
  • REKLAMA
  • REKLAMA
  • #3 8061909
    bunius
    Poziom 10  
    Posty: 6
    A co jest w nim złego? Komenda Tag, o ile dobrze pamiętam to pamięć kompilatora. Zapamiętuje wpisaną wartość, a można to rozwiązać inaczej?
  • #4 8062030
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Proszę, zgodnie z regulaminem pkt 11.1, o usunięcie słowa PROBLEM z tytułu.
  • REKLAMA
  • #5 8062155
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Oczywiście można z tego korzystać jednak w Twoim przykładzie nie widać do końca do czego jest to wykorzystywane.

    Już jedna z pierwszych lini troche wprawia mnie w zakłopotanie:

    txtDisplay->Tag= dec;


    Do czego ma służyć to przypisanie?

    Ogólnie widze to tak, że jeśli załączysz swój projekt to będzie można zobaczyć w jaki sposób zaimplementowałeś swój program. Będzie można również poszukać błędu.

    Piszesz również że raz liczy raz nie. A potrafisz odtworzyć sytuacje w której nie liczy za każdym razem?
  • #6 8062464
    utak3r
    Poziom 25  
    Posty: 741
    Pomógł: 60
    Ocena: 5
    one_eddie napisał:
    txtDisplay->Tag= dec;


    Do czego ma służyć to przypisanie?


    Już druga osoba pyta o to... Zapewne do tego, żeby w kontrolce przechowywać sobie zmienną typu integer. Jest to właściwość obecna w każdej kontrolce - i jest nieużywana przez kompilator, można jej użyć do własnych, wydumanych celów.
  • REKLAMA
  • #7 8062546
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Z Twojego opisu rozumiem iż wrzucasz do Tag wartość tylko dlatego że nie używa jej kompilator i dlatego że tak można ?? Dobrze zrozumiałem?

    Dodano po 1 [minuty]:

    Chyba nie wyraziłem się do końca. Szukasz rozwiązania problemu, wieć musisz pomóc nam zrozumieć to co wymyśliłeś. Jak pojmiemy Twój pomysł bedziemy mogli znaleźć w nim ewentualny błąd i zaproponować rozwiązanie.
  • #8 8062798
    bunius
    Poziom 10  
    Posty: 6
    Problem udało mi się rozwiązać. Na początku miałem zadeklarowane 4 zmienne, z początkową wartością false. Jeżeli działanie się wykonywało w zależności od działania zmienna przyjmowała wartość true. Wystarczyło po wszystkich istrukcjach "+","-", itd. dodać jedną linijkę plus=minus=mnozenie=dzielenie=false. Potem działania wykonują się dobrze. Program nie ma kolejności działań, ale przynjamniej nie wysypuje się po pierwszej operacji. Mam pytanie z innej beczki, jaki parametr odpowiada za to że dany element jest aktywny. Chodzi mi o to, co zrobić, aby od razu po uruchomieniu programu był aktywny textbox, bez konieczności klikania na niego.
  • #9 8062841
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Funkcja SetFocus()
  • #10 8079277
    bunius
    Poziom 10  
    Posty: 6
    Mój kod jest niestety nieskuteczny jeżeli chcę wykonać więcej działań niż jedno (np. 5+5+5). Czy ktoś mógłby mi coś napomknąć, podsunąć jakiś pomysł, jak to rozwiązać na początku koncepcyjnie? Jeżeli będzie potrzeba dosłać kod z obsługą przycisków +,- itp. proszę pisać :)

Podsumowanie tematu

✨ Użytkownik ma problem z kalkulatorem w Visual Studio Express 2008, który poprawnie wykonuje pojedyncze działania, ale nie radzi sobie z kolejnymi operacjami na wynikach. W dyskusji poruszono kwestie dotyczące użycia zmiennej Tag do przechowywania wartości oraz problem z realizacją działań matematycznych. Użytkownik rozwiązał część problemu, dodając resetowanie zmiennych po każdej operacji, co pozwoliło na poprawne działanie kalkulatora. Została również poruszona kwestia aktywacji elementu interfejsu użytkownika przy uruchomieniu programu, na co odpowiedziano, że można użyć funkcji SetFocus(). Użytkownik nadal poszukuje rozwiązania dla sytuacji, w której chce wykonać więcej niż jedno działanie matematyczne na raz.
Wygenerowane przez model językowy.
REKLAMA