logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ równanie kwadratowe. Wyświetlanie wyniku z dokładnością 5 cyfr po przecinku.

grzesiek2888 01 Lis 2008 15:15 4944 5
REKLAMA
  • #1 5690115
    grzesiek2888
    Poziom 10  
    Posty: 29
    Napisalem taki program na liczenie pierwiastkow rowania kwadratowego:

    #include <iostream>
    #include <math.h>
    using namespace std;
    
              double a, b, c ;
              double delta;
              double x1, x2;
              char koniec='t';
          
          int main ()
          
          {
            while (koniec=='t')
            {
                  
             
              cout << "\t" << endl;
              cout << "Podaj parametr a rownania kwadratowego stopnia 2:\t";
              cin >> a;
              cout << "podaj parametr b rownania kwadratowego stopnia 2:\t";
              cin >>b;
              cout << "podaj parametr c rownania kwadratowego stopnia 2:\t";
              cin >> c;
              cout << "\t\t\t\t\t\t\t\t\t\t" << endl;
              
              
              delta = b*b - 4*a*c;
              cout << "Delta wynosi:\t" << delta << endl;
              cout << "\t" << endl;
              cout << "\t" << endl;
              if (delta>0)
       
               {
                 x1 = - b - sqrt(delta)/2*a;
                 x2 = - b + sqrt (delta)/2*a;
                 cout << "Pierwszy pierwiastek wynosi:\t" << x1 << endl;
                 cout << "Drugi pierwiastek wynosi:\t" << x2 << endl;
                 cout << "\t" << endl;
               }
              else if (delta==0)
               {
                 x1 = -b/2*a;
                 cout << "Pierwiastek rownania kwadratowego wynosi:\t " << x1 << endl;
                 cout << "\t" <<endl;
               }
              else if  (delta<0)
               {
                 cerr << "Rownanie nie ma pierwiastkow rzeczywistych" << endl;
                 cout << "\t" << endl;
               }
     
               
              cout << "Aby zakonczyc prace w programie nacisnij n; aby kontynuowac obliczenia wcisnij t.\t" << endl;
              cin >> koniec;
              cout << "\t" << endl;
              
            } 
         
         
                 system ("Pause");  
         }
    


    Jak zrobić żeby wyświatlalo mi wyniki z dokladnoscia do 5 miejsc po przecinku (w C jest taka mozliwosc ale w C++ nie wiem:-(

    Kod proszę umieszczać w znacznikach code - krzychoocpp
  • REKLAMA
  • Pomocny post
    #2 5690144
    Lutek49
    Poziom 36  
    Posty: 2100
    Pomógł: 440
    Ocena: 407
    Masz błąd przy liczeniu pierwiastków:
    x1 = - b - sqrt(delta)/2*a;
    x2 = - b + sqrt (delta)/2*a;
    powinno być:
    x1 = (- b - sqrt(delta))/2*a;
    x2 = (- b + sqrt (delta))/2*a;
  • REKLAMA
  • Pomocny post
    #3 5690218
    SeLuMar
    Poziom 14  
    Posty: 46
    Pomógł: 7
    Ocena: 1
    To będzie tak:
    
    #include <iostream>
    using namespace std;
    
    int main () {
      double f = 3.14159;
      cout.setf(0,ios::floatfield); 
      cout.precision(5);
      cout << f << endl;
      cout.precision(10);
      cout << f << endl;
      cout.setf(ios::fixed,ios::floatfield);
      cout << f << endl;
      return 0;
    }
    

    W efekcie powinniśmy otrzymać:

    
    3.1416
    3.14159
    3.1415900000
    
  • REKLAMA
  • #4 5690323
    grzesiek2888
    Poziom 10  
    Posty: 29
    Dzieki!:) juz wszystko dziala jak trzeba:)
  • REKLAMA
  • #5 5690805
    Stefan_2000
    Poziom 20  
    Posty: 350
    Pomógł: 36
    Ocena: 39
    Taka drobna uwaga:
    nie należy porównywać liczb zmiennopozycyjnych ze sobą, bo się można ździwić. Prosty przykład:
    
    #include <iostream>
    
    using namespace std;
    
    int main() {
            float d = 0.0;
            d += 5.01;
            d *= 3.0;
            d -= 15.03;
            if (d == 0.0) {
                    cout << "equal" << endl;
            } else {
                    cout << "NOT equal" << endl;
            }
    }
    

    Efekt może być odmienny od tego co podpowiada matematyka :)
  • #6 5690930
    przemo_wielki
    Poziom 24  
    Posty: 583
    Pomógł: 61
    Ocena: 10
    Lutek49 napisał:

    powinno być:
    x1 = (- b - sqrt(delta))/2*a;
    x2 = (- b + sqrt (delta))/2*a;


    Mianownik też powinien być w nawiasach.
REKLAMA