Delta, funkcje, cpp

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

Delta, funkcje, cpp

Post autor: JarTSW » 21 wrz 2007, o 22:16

Mam pewien problem z takim programikiem:

Kod: Zaznacz cały

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

float delta(float a, float b, float c)
{
return b*b-4*a*c;    
}

float x1(float delta, float b, float a)
{
return -b-sqrt(delta)/2*a;
}

float x2(float delta, float b, float a)
{
return -b+sqrt(delta)/2*a;
}

float x0(float b, float a)
{
return -b/2*a;
}

int main()
{
int a,b,c;
cout<<"Podaj a";
cin>>a;
cout<<"Podaj b";
cin>>b;
cout<<"Podaj c";
cin>>c;

cout<<delta(a,b,c);
if (delta>=0) 
{
             cout<<"Sa dwa rozwizania"<<endl;
}
if (delta>=0) 
{
             cout<<"Jest jedno rozwiazanie"<<endl;
}
else cout<<"Brak rozwiazan"<<endl;
system ("PAUSE");
}
A moje pytanki brzmi, gdzie robię blad?
Rekrutacja Instytut Matematyczny, Uniwersytet Wrocławski (gif)

Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Delta, funkcje, cpp

Post autor: Rafal88K » 21 wrz 2007, o 22:30

Nie sprawdzałem całego kodu, więc nie wiem w czym jest problem, ale if-y masz źle, powinno być tak:

Kod: Zaznacz cały

float delta1 = delta(a,b,c);

cout<< delta1 << " ";

if (delta1>0)
{
             cout<<"Sa dwa rozwizania"<<endl;
}
else if (delta1==0)
{
             cout<<"Jest jedno podwojne rozwiazanie"<<endl;
} 
No i jeszcze jedno:

Kod: Zaznacz cały

float x1(float delta, float b, float a)
{
	return (-b-sqrt(delta))/2*a;
}

float x2(float delta, float b, float a)
{
	return (-b+sqrt(delta))/2*a;
}
Ostatnio zmieniony 21 wrz 2007, o 22:42 przez Rafal88K, łącznie zmieniany 2 razy.

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

Delta, funkcje, cpp

Post autor: JarTSW » 21 wrz 2007, o 22:35

No wlasnie w tych ifach tkwi caly blad. Nawet jak podstawie Twoj kod, to tez jest źle.

Kod: Zaznacz cały

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

float delta(float a, float b, float c)
{
return b*b-4*a*c;    
}

float x1(float delta, float b, float a)
{
return -b-sqrt(delta)/2*a;
}

float x2(float delta, float b, float a)
{
return -b+sqrt(delta)/2*a;
}

float x0(float b, float a)
{
return -b/2*a;
}

int main()
{
int a,b,c;
cout<<"Podaj a";
cin>>a;
cout<<"Podaj b";
cin>>b;
cout<<"Podaj c";
cin>>c;
cout<<delta(a,b,c);
if (delta>0)
{
             cout<<"Sa dwa rozwizania"<<endl;
}
else if (delta==0)
{
             cout<<"Jest jedno rozwiazanie podwojne rozwiazanie"<<endl;
} 
system ("PAUSE");
}

Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Delta, funkcje, cpp

Post autor: Rafal88K » 21 wrz 2007, o 22:37

Były błędy w if-ach, przy funkcjach oraz nie tworzyłeś zmiennej do przechowywania wartości delty tylko porównywałeś nazwę funkcji, czyli jej adres

Ten kod powinien działać:

Kod: Zaznacz cały

#include<iostream>
#include<cmath>
using namespace std;

float delta(float a, float b, float c)
{
	return b*b-4*a*c;   
}

float x1(float delta, float b, float a)
{
	return (-b-sqrt(delta))/2*a;
}

float x2(float delta, float b, float a)
{
	return (-b+sqrt(delta))/2*a;
}

float x0(float b, float a)
{
return -b/2*a;
}

int main()
{
int a,b,c;
cout<<"Podaj a";
cin>>a;
cout<<"Podaj b";
cin>>b;
cout<<"Podaj c";
cin>>c;

float delta1 = delta(a,b,c);

cout<< delta1 << " ";
if (delta1>0)
{
             cout<<"Sa dwa rozwizania"<<endl;
}
else if (delta1==0)
{
             cout<<"Jest jedno rozwiazanie"<<endl;
}
else cout<<"Brak rozwiazan"<<endl;
system ("PAUSE");
}
Ostatnio zmieniony 26 wrz 2007, o 20:40 przez Rafal88K, łącznie zmieniany 2 razy.

soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1822 razy

Delta, funkcje, cpp

Post autor: soku11 » 21 wrz 2007, o 22:38

No ale napisz moze dokladnie co jest zle?? ZLe wyswietla delte czy jak?? POZDRO

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

Delta, funkcje, cpp

Post autor: JarTSW » 21 wrz 2007, o 22:41

soku11, źle zrobione byly warunki. Ale juz teraz dziala! Rafal88K, + dla Ciebie. Mozna zamknac.

Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Delta, funkcje, cpp

Post autor: Rafal88K » 21 wrz 2007, o 22:41

soku11 błąd był przy porównywaniu:

Kod: Zaznacz cały

if (delta>0)
{
             cout<<"Sa dwa rozwizania"<<endl;
}
else if (delta==0)
{
             cout<<"Jest jedno rozwiazanie podwojne rozwiazanie"<<endl;
} 
W ten sposób do if-ów przekazywał adres funkcji, a nie jej wartość.

soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1822 razy

Delta, funkcje, cpp

Post autor: soku11 » 21 wrz 2007, o 22:48

Wiem wiem juz Myslalem, ze to taki dlugi post autora. Nie zauwazylem twojej odpowiedzi POZDRO

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

Delta, funkcje, cpp

Post autor: JarTSW » 25 wrz 2007, o 21:51

Stworzylem cos takiego:

Kod: Zaznacz cały

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

float delta (float a,float b,float c)
{
    return b*b-4*a*c;
}

float x1 (float a,float b,float delta)
{
    return (-b-sqrt(delta))/2*a;
}

float x2 (float a,float b,float delta)
{
    return (-b+sqrt(delta))/2*a;
}


float x0 (float a,float b)
{
    return -b/2*a;
}

int main ()
{
    char odp,t;
    do
    {
    float a,b,c,delta1,x1_,x2_,x0_;
    cout<<"DELTA"<<endl;
    cout<<"Podaj a"<<endl;
    cin>>a;
    cout<<"Podaj b"<<endl;
    cin>>b;
    cout<<"Podaj c"<<endl;
    cin>>c;
    delta1=delta(a,b,c);
    x1_=x1(a,b,delta1);
    x2_=x2(a,b,delta1);
    x0_=x0(a,b);
    cout<<"Delta wynosi "<<delta1<<endl;
    if (delta1>0) 
    {
    cout<<"Sa dwa rozwizania "<<endl;
    cout<<x1_<<endl;
    cout<<x2_<<endl;
    cout<<"Powtorzyc? (t/n)";
    cin>>odp;
    }
    else if (delta1==0)
    {
    cout<<"Jest jedno rozwiazanie ";
    cout<<x0_<<endl;
    cout<<"Powtorzyc? (t/n)";
    cin>>odp;
    }
    else if (delta1<0) cout<<"Brak"<<endl;
    cout<<"Powtorzyc? (t/n)";
    cin>>odp;
    }
    while (odp=='t');
    system("PAUSE");
}
Wszelkie uwagi mile widziane.

Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

Delta, funkcje, cpp

Post autor: Xfly » 25 wrz 2007, o 22:08

1. Formatuj kod, bo jak będziesz pisał dłuższe programy to będzie kompletnie się go źle czytało.

2. Nie radze korzystać z pętli do-while, zwłaszcza kiedy jeszcze nie masz doświadczenia, kiedy ją się powinno stosować, a kiedy jej unikać.

3. Dlaczego dołączasz - jeśli go nie używasz, zresztą nie poleca się łączenia a .

4. Przydał by się jakiś prosty mechanizm obsługi wyjątków, bo uwierz, mi, że użytkownicy potrafią bardzo szybko popsuć program podczas jego działania.

Tyle na początek

Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Delta, funkcje, cpp

Post autor: Rafal88K » 25 wrz 2007, o 23:57

Uwagi jak wyżej napisał Xfly. Ale najważniejsze stosuj wcięcia bo kod w sposób jaki piszesz jest całkowicie nieczytelny. Obsługę wyjątków możesz zrobić na wzór tego co napisałem w Twoim drugim temacie.

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

Delta, funkcje, cpp

Post autor: JarTSW » 26 wrz 2007, o 18:49

Wciecia stosuje oczywiscie, ale jakos w tym kodzie mi sie przesunelo...

ODPOWIEDZ