Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual C++ działania arytmetyczne

bunius 09 Maj 2010 21:31 1298 9
  • #1 09 Maj 2010 21:31
    bunius
    Poziom 8  

    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ź.

    Code:

    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.

    0 9
  • #2 11 Maj 2010 01:35
    one_eddie
    Poziom 25  

    Czy ten fragment

    Code:
    a=Convert::ToDouble(txtDisplay->Tag); // <--
    
     b=Convert::ToDouble(txtDisplay->Text);


    ...jest na pewno dobry?

    0
  • #3 11 Maj 2010 10:32
    bunius
    Poziom 8  

    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?

    0
  • #4 11 Maj 2010 11:11
    arnoldziq
    Moderator Programowanie

    Proszę, zgodnie z regulaminem pkt 11.1, o usunięcie słowa PROBLEM z tytułu.

    0
  • #5 11 Maj 2010 12:05
    one_eddie
    Poziom 25  

    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:

    Code:
    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?

    0
  • #6 11 Maj 2010 13:59
    utak3r
    Poziom 25  

    one_eddie napisał:
    Code:
    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.

    0
  • #7 11 Maj 2010 14:29
    one_eddie
    Poziom 25  

    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.

    0
  • #8 11 Maj 2010 15:39
    bunius
    Poziom 8  

    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.

    0
  • #9 11 Maj 2010 15:53
    one_eddie
    Poziom 25  

    Funkcja SetFocus()

    0
  • #10 15 Maj 2010 19:33
    bunius
    Poziom 8  

    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ć :)

    0