C++ coś nie kompiluje:/

arnie123
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 3 lut 2007, o 16:36
Płeć: Mężczyzna
Lokalizacja: Bełchatów
Podziękował: 5 razy

C++ coś nie kompiluje:/

Post autor: arnie123 »

Witam
Zna sie ktoś na programowaniu wizualnym (okienkowym) w C++Builder?, bo mam mały problem. Mianowicie pisze prosty programik podajacy pierwiastki rownania kwadratowego aX^2+bX+c. Program sklada sie z 3 okienek Edit (w ktore wprowadza sie z klawiatury liczby- parametry a,b,c), dwóch okienek Edit w których maja byc wyswietlane rozwiazania i z przycisku Button.
Przedstawiam poniżej mój kod, Jest w nim jednak jakis blad bo sie nie kompiluje. Prosze o pomoc

Kod: Zaznacz cały

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a,b,c, delta;


   a=StrToInt(Edit1->Text);
   b=StrToInt(Edit2->Text);
   c=StrToInt(Edit3->Text);

   delta=b*b-4*a*c ;

   {
    if (delta>0)

   Edit4->Text=(-b+sqrt(delta))/(2*a) ;
   Edit5->Text=(-b-sqrt(delta))/(2*a);

   if (delta==0)
   Edit4->Text=((-b)/(2*a));
   Edit5->Text=("jedno miejsce zerowe");

   else
   Edit4->Text=("Nie ma rozwiązań");
   Edit5->Text=("Nie ma rozwiązań");
}   }

//---------------------------------------------------------------------------
Z góry dziekuje;)
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

C++ coś nie kompiluje:/

Post autor: smiechowiec »

Wklej informacje kompilatora o błędzie, wtedy łatwiej będzie wywnioskować o co może chodzić.
arnie123
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 3 lut 2007, o 16:36
Płeć: Mężczyzna
Lokalizacja: Bełchatów
Podziękował: 5 razy

C++ coś nie kompiluje:/

Post autor: arnie123 »

Jakoś sobie poradziłem. Juz mi wszystko kompiluje. Ale mam kolejny problem. Jak zrobić zeby program podawal tylko jedno rozwiązanie przy a=0 (rozwiązanie w oknie Edit4 a w Edit5 np "Nie ma rozwiazan") oraz przy a=0 i b=0 Podawał komunikat "nie ma rozwiązan" w obu wymienionych okienkach.

Próbowalem to zrobic za pomoca:

Kod: Zaznacz cały

if (a==0, b<0, b>0)
Edit4->Text=(-c/b)
else
 {Edit4->Text=("Nie ma rozwiązań");
 Edit5->Text=("Nie ma rozwiązań")};
if (a==0, b==0)
 {Edit4->Text=("Nie ma rozwiązań");
 Edit5->Text=("Nie ma rozwiązań")};
ale nie za bardzo to dziala, wywala mi program i wskazuje linijke: "Edit4->Text=(-b+sqrt(delta))/(2*a)" znaczy to ze nie mozna dzielic przez zero (co jest przecież rzeczą oczywista)

Oto mój dotychczasowy kod

Kod: Zaznacz cały

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a,b,c, delta;


   a=StrToInt(Edit1->Text);
   b=StrToInt(Edit2->Text);
   c=StrToInt(Edit3->Text);

   delta=b*b-4*a*c ;


  if (delta>0)

   {
   Edit4->Text=(-b+sqrt(delta))/(2*a);
   Edit5->Text=(-b-sqrt(delta))/(2*a);
   }
   else
   {
   Edit4->Text=("Nie ma rozwiązań");
   Edit5->Text=("Nie ma rozwiązań");
   if (delta==0)
   {
   Edit4->Text=((-b)/(2*a));
   Edit5->Text=("jedno miejsce zerowe");
   }
   else
   {
   Edit4->Text=("Nie ma rozwiązań");
   Edit5->Text=("Nie ma rozwiązań");

}}}
Z góry dziekuję za pomoc[/code]
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

C++ coś nie kompiluje:/

Post autor: smiechowiec »

Jeśli można zaproponować pewne uproszczenie warunków to proponowałbym

Kod: Zaznacz cały

  if (a > 0.0) {
    if (delta > 0.0) {
      // dwa rozwiązania
    }
    else
      if (delta == 0.0) {
        // jedno rozwiązanie
      }
      else {
        // brak rozwiązań
      }
  }
  else {
    if (b > 0.0) {
      //jedno rozwiązanie
    }
    else 
      if (c != 0.0) {
        //brak rozwiązań
      }
      else {
        //nieskończenie wiele rozwiązań
      }
  }
arnie123
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 3 lut 2007, o 16:36
Płeć: Mężczyzna
Lokalizacja: Bełchatów
Podziękował: 5 razy

C++ coś nie kompiluje:/

Post autor: arnie123 »

Wielkie dzięki. Bardzo mnie to naprowadziło:)
ODPOWIEDZ