Problem z działąniami matematycznymi w biblotece wxwidge C++


(system) #1

Witam

Mam problem muszę napisać program w wxwidgets. Program ma obliczać równania kwadratowe, maja być tam trzy pola do wpisania danych, a on oblicza deltę, pierwiastek z delty, (if) x1,x2 albo (else if) x0 albo (else) wyświetla, że pzdelty jest liczba ujemna i nie można obliczyć, wszystko może być wyświetlone w okienku (wxMessageBox).

Zrobiłem button i pola do wpisania tekstu, mam też, że tekst jest przechwycony, ale nie wiem jak zrobić, że oblicza pierwiastek z delty i później ma instrukcje warunkową, która wykonuje, no i przy każdym razie kliknięcia buttona oblicz zostaje stary wynik a nowy wyświetla nad nim.

Dodano po 27 [minuty]:

Jakby ktoś mógł mi pomóc to jest kod:

void MyFrame::Wynik(wxCommandEvent& event)

{

  double numer1,numer2,numer3;


  wxString a2 = a->GetLineText(0);

  wxString b2 = b->GetLineText(0);

  wxString c2 = c->GetLineText(0);


  a2.ToDouble(&numer1);

  b2.ToDouble(&numer2);

  c2.ToDouble(&numer3);


  wxString delta;

  delta.Printf(wxT("%0.2f"),(numer2*numer2)-(4*numer1*numer3));

  tekst.Append("delta wynosi: ");

  tekst.Append(delta);

  tekst.Append("\n");


  wxString pzdelty;

  pzdelty.Printf(wxT("%0.2f"), (delta)); // pzdelty=sqrt(delta);

  tekst.Append("pierwiastek z delta wynosi: ");

  tekst.Append(pzdelta);

  tekst.Append("\n");



if(pzdelta > 0){


  wxString x1,x2;

  x1.Printf(wxT("%f"), (-numer2-numer2)/(2*numer1)); // x1=(-b-pzdelty) / (2*a);

  tekst.Append("x1 wynosi: ");

  tekst.Append(x1);

  tekst.Append("\n");


  x2.Printf(wxT("%f"), (-numer2+numer2)/(2*numer1)); // x2=(-b+pzdelty) / (2*a);

  tekst.Append("x2 wynosi: ");

  tekst.Append(x2);

  tekst.Append("\n");


}else if(pzdelta == 1){ // delta > 0


  wxString x0;

  x0.Printf(wxT("%f"), (-numer2)/(2*numer1)); // x0=(-b) / (2*a)

  tekst.Append("x0 wynosi: ");

  tekst.Append(x0);

  tekst.Append("\n");


}else if(pzdelta < 0){ // delta < 0

  tekst.Append("delata jest liczbą ujemną");

}

    wxMessageBox(tekst, wxT("WYNIK"), wxOK | wxICON_INFORMATION, this);


}

(Airborn) #2

kamil-szkola , proszę poprawić tytuł tematu na konkretny, mówiący o problemie. W przeciwnym razie temat ozstanie usunięty do kosza


([alex]) #3

Kiedyś musisz ten tekst czyścic.

Może na początku obliczeń.


(=VND=) #4

dodaj na początku:

tekst.Clear();

(system) #5

dzięki :slight_smile: =VND= to pierwsza odpowiedz na ten temat na wszystkich forach na których pisałem na temat wxwidge.

A co z działaniami jak zrobić by dobrze liczyły

pzdelty.Printf(wxT("%0.2f"), (delta)); // pzdelty=sqrt(delta);

pierwiastek z delty nie weim jak zrobić by liczył pierwiastek normalnie w c++ jest #include i pzdelty=sqrt(delta); a w wxwidge to nie działa

}else if(pzdelta == 0){

wywala mi błąd


([alex]) #6

include


(system) #7

dobra wstawiłem #include ale jak wykonać obliczenie

zapis pzdelty=sqrt(delta) wywala błąd

cannot convert wxString' todouble' for argument 1' todouble sqrt(double)'


(Fiołek) #8

Sparsuj "delta" do double za pomocą ToDouble(najprostsze), wstringstream lub wscanf, czyli to będzie tak(chyba, nie znam wxWidgets):

doble deltaJakoDouble = 0;

delta.ToDouble(&deltaJakoDouble );

double pierwiastek = sqrt(deltaJakoDouble);

(system) #9

dzięki wielkie wszystko dzierży jak należy :smiley:

-- Dodane 24.11.2009 (Wt) 17:24 --

a to taki mały problem jeszcze żeby pierwiastek był wyświetlony że jest on wyprowadzony

tekst.Append("pierwiastek z delty wynosi: ");

  tekst.Append(pierwiastek);

  tekst.Append("\n");

no i wyskakuje błąd [Warning] passing double' for converting 1 ofwxString& wxString::Append(wxChar, size_t)' a i jeszce zapis z warunku

}else(pierwiastek < 0){ 

  tekst.Append("delata jest liczbą ujemną");

}

błąd

expected `;' before '{' token


([alex]) #10

double delta=(numer2*numer2)-(4*numer1*numer3);