Instrukcje warunkowe if,else oraz instrukcja wyboru switch
-
- Użytkownik
- Posty: 40
- Rejestracja: 10 mar 2010, o 17:26
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Napisz program, który dla danych współczynników a,b,c trójmianu kwadratowego wyznaczy jego pierwiastki. Rozstrzygnij wszystkie możliwe przypadki. W zadaniu wykorzystaj funkcję sqrt() z biblioteki math.h
-
- Użytkownik
- Posty: 18
- Rejestracja: 15 gru 2009, o 07:35
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
No to gdzie tutaj problem ?
1. Do zmiennej delta przypisujesz wartość b^{2} - 4ac [masz tutaj wykorzystanie funkcji sqrt, która podnosi do kwadratu [w tym przypadku b], choć w sumie trochę bez sensu marnować pamięć... Ale skoro dane jest w zadaniu...]
2. Sprawdzasz, czy delta jest:
a) większa od zera - masz dwa pierwiastki
b) równa zeru- jeden pierwiastek (podwójny)
c) mniejsza- zwraca brak rozwiązań
1. Do zmiennej delta przypisujesz wartość b^{2} - 4ac [masz tutaj wykorzystanie funkcji sqrt, która podnosi do kwadratu [w tym przypadku b], choć w sumie trochę bez sensu marnować pamięć... Ale skoro dane jest w zadaniu...]
2. Sprawdzasz, czy delta jest:
a) większa od zera - masz dwa pierwiastki
b) równa zeru- jeden pierwiastek (podwójny)
c) mniejsza- zwraca brak rozwiązań
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Funkcja sqrt() liczy pierwiastek kwadratowy z nieujemnej liczby, a nie potęguje. Zresztą żeby policzyć kwadrat stosuje się po prostu b*b, a nie korzysta z dość rozbudowanej i czasochłonnej funkcji pow(). I co ma marnowanie pamięci do wartości delty? I czy te dodatkowe 4 bajty (najprawdopodobniej) robią jakąś różnicę?
Pozdrawiam.
Pozdrawiam.
-
- Użytkownik
- Posty: 18
- Rejestracja: 15 gru 2009, o 07:35
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Oj, sorry, zmęczony byłem
Tak, robi różnicę... Bo w szkole uczy się myślenia w programowaniu. Przy małych projektach to jest epsilon różnicy, ale przy większych już się robi bałagan...
Tak, robi różnicę... Bo w szkole uczy się myślenia w programowaniu. Przy małych projektach to jest epsilon różnicy, ale przy większych już się robi bałagan...
-
- Użytkownik
- Posty: 18
- Rejestracja: 15 gru 2009, o 07:35
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Nie to miałem na myśli. Uważam, że stosowanie bibliotek w takich przypadkach po prostu mija się z celem...
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
No to jak chcesz obliczyć pierwiastek bez użycia funkcji sqrt() z math? Napisać własną funkcję do tego?
Pozdrawiam.
Pozdrawiam.
-
- Użytkownik
- Posty: 40
- Rejestracja: 10 mar 2010, o 17:26
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
A czy to jest dobrze?
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{cout<<"Podaj a:";
float a,b,c,del;
cin>>a;
cout<<"Podaj b:";
cin>>b;
cout<<"Podaj c:";
cin>>c;
cout<<"Data a:";
cin>>del;
del=b*b+(4*a*c)
if(del>0)
{float x1,x2;
x1=(-b-sqrt(del))/2*a;
x2=(-b*sqrt(del))/2*a;
cout<<"Rozwiazanie:"<<x1<<x2<<endl;
}else
if(del<0)
{cout<<"Brak rozwiazan.";
}else
if(del==0)
{float x0;
x0=-b/2*a;
cout<<"Rozwiazanie:"<<x0<<endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{cout<<"Podaj a:";
float a,b,c,del;
cin>>a;
cout<<"Podaj b:";
cin>>b;
cout<<"Podaj c:";
cin>>c;
cout<<"Data a:";
cin>>del;
del=b*b+(4*a*c)
if(del>0)
{float x1,x2;
x1=(-b-sqrt(del))/2*a;
x2=(-b*sqrt(del))/2*a;
cout<<"Rozwiazanie:"<<x1<<x2<<endl;
}else
if(del<0)
{cout<<"Brak rozwiazan.";
}else
if(del==0)
{float x0;
x0=-b/2*a;
cout<<"Rozwiazanie:"<<x0<<endl;
system("PAUSE");
return 0;
}
- miki999
- Użytkownik
- Posty: 8691
- Rejestracja: 28 lis 2007, o 18:10
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Podziękował: 36 razy
- Pomógł: 1001 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Na pewno nie jest dobrze, bo nie ma biblioteki math.h.
Wzór na deltę zły.
Poza tym wystarczy ściągnąć jakiś kompilator i sprawdzić czy działa- jeżeli nie to szukać błędów.
Pozdrawiam.
Wzór na deltę zły.
Poza tym wystarczy ściągnąć jakiś kompilator i sprawdzić czy działa- jeżeli nie to szukać błędów.
Pozdrawiam.
-
- Użytkownik
- Posty: 40
- Rejestracja: 10 mar 2010, o 17:26
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Poprawiłam to tak ale dalej nic
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{cout<<"Podaj a:";
float a,b,c,del;
cin>>a;
cout<<"Podaj b:";
cin>>b;
cout<<"Podaj c:";
cin>>c;
cout<<"Data a:";
cin>>del;
del=b*b-(4*a*c);
if(del>0)
{float x1,x2;
x1=(-b-sqrt(del))/2*a;
x2=(-b+sqrt(del))/2*a;
cout<<"Rozwiazanie:"<<x1<<x2<<endl;
}else
if(del<0)
{cout<<"Brak rozwiazan";
}else
if(del==0)
{float x0;
x0=-b/2*a;
cout<<"Rozwiazanie:"<<x0<<endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{cout<<"Podaj a:";
float a,b,c,del;
cin>>a;
cout<<"Podaj b:";
cin>>b;
cout<<"Podaj c:";
cin>>c;
cout<<"Data a:";
cin>>del;
del=b*b-(4*a*c);
if(del>0)
{float x1,x2;
x1=(-b-sqrt(del))/2*a;
x2=(-b+sqrt(del))/2*a;
cout<<"Rozwiazanie:"<<x1<<x2<<endl;
}else
if(del<0)
{cout<<"Brak rozwiazan";
}else
if(del==0)
{float x0;
x0=-b/2*a;
cout<<"Rozwiazanie:"<<x0<<endl;
system("PAUSE");
return 0;
}
- miki999
- Użytkownik
- Posty: 8691
- Rejestracja: 28 lis 2007, o 18:10
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Podziękował: 36 razy
- Pomógł: 1001 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Przecież użytkownik nie wprowadza delty, bo wynika ona ze współczynników \(\displaystyle{ a,b,c}\).Kod: Zaznacz cały
cout<<"Data a:"; cin>>del;
"2*a" z ostrożności wziąłbym w nawias.Kod: Zaznacz cały
x1=(-b-sqrt(del))/2*a;
Może jakąś spację i bądź przecinek pierdyknąć?Kod: Zaznacz cały
cout<<"Rozwiazanie:"<<x1<<x2<<endl;
Instrukcje do "else" zaznaczyłbym klamrami- nawet jeżeli nie dla sprawniejszego działania, to dla lepszej czytelności.
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Instrukcje warunkowe if,else oraz instrukcja wyboru switch
Warto jeszcze wspomnieć o dokładności obliczeń na liczbach typu float i double. Nie za bardzo działa przyrównywanie do 0, bo liczba może wynosić 1.23e-38, co jest różne od 0.0f. Tak więc poprawiony kod dla potomności:
Pozdrawiam.
Kod: Zaznacz cały
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
static const float EPSILON=0.00001f;
int main()
{
float a=0.0f;
float b=0.0f;
float c=0.0f;
cout<<"Podaj a: ";
cin>>a;
cout<<"Podaj b: ";
cin>>b;
cout<<"Podaj c: ";
cin>>c;
float det=b*b-(4*a*c);
if(det>EPSILON)
{
float x1=(-b-sqrt(det))/(2*a);
float x2=(-b+sqrt(det))/(2*a);
cout<<"Rozwiazania: "<<x1<<" "<<x2<<'\n';
}
else if(det<-EPSILON)
{
cout<<"Brak rozwiazan\n";
}
else // det==0
{
float x0=-b/(2*a);
cout<<"Rozwiazanie podwojne: "<<x0<<'\n';
}
return EXIT_SUCCESS;
}
-
- Użytkownik
- Posty: 40
- Rejestracja: 10 mar 2010, o 17:26
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy