Domanda [COMPLETO]Risolutore di equazioni di secondo grado

Stato
Discussione chiusa ad ulteriori risposte.

BlackMail

Utente Silver
16 Novembre 2008
23
4
0
63
Ultima modifica:
Salve a tutti !
Ecco una piccola creazione in c++
E' un risolutore di equazioni di secondo grado completo ovvero:

-fornisce il valore del delta specificando la natura delle soluzioni;
-applica il metodo di cartesio per riconoscere permanenze e variazioni e per determinare la positività o la negatività delle soluzioni;
-determina il valore delle soluzioni;

DOWNLOAD: Risolutore eq di secondo grado.exe
SCANSIONE: Virustotal mi da internal error 0_0 // cmq è pulito ;)

SOURCE:
Codice:
#include <iostream>
#include <math.h>
using namespace std;

int main ()
{
    cout << "Risolutore di equazioni di secondo grado del tipo ax^2+bx+c=0 by BlackMail" << "\n\n\n" << "Inserisci i valori di a,b,c;\n(scrivere 0 se il termine e' assente)\n";
    double a,b,c;
    cout << "a:";
    cin >> a ;
    cout << "b:";
    cin >> b ;
    cout << "c:";
    cin >> c ;
    double delta;
    delta = b*b - 4*a*c;
    cout << "\n\nValore del delta uguale a " << delta << "\n";
    if (delta > 0)
    {cout << "Soluzioni reali e distinte";}
    if (delta == 0)
    {cout << "Soluzioni reali ed uguali";}
    if (delta < 0) 
    {cout <<"Soluzioni complesse e coniugate";}
    if (delta >= 0)
    {
              cout << "\n\n\nE' possibile applicare cartesio!\n";
              int segno1, segno2, segno3;
              if (a>0)
              {
                    segno1 = 1;
              }
              else if (a<0)
              {
                    segno1 = 0;
              }
              if (b>0)
              {
                    segno2 = 1;
              }
              else if (b<0)
              {
                    segno2 = 0;
              }
              if (c>0)
              {
                    segno3 = 1;
              }
              else if (c<0)
              {
                    segno3 = 0;
              }
              int somma;//ora il metodo che userò sarà molto contorto ma funziona e mi evita di usare troppi if
              somma = segno1 + segno2 + segno3;
              if (somma == 0 || somma ==3)
              {cout << "Due permanenze --> soluzioni negative";}
              else if (somma == 2 && segno2 == 0 || somma == 1 && segno2 == 1)
              {cout << "Due variazioni --> soluzioni positive";}
              else 
              { cout << "Una permanenza e una variazione --> Una soluzione positiva e una negativa";} 
    }
    else if (delta < 0)
    {cout << "\n\n\nNon e' possibile applicare cartesio!";}    
    cout << "\n\n\n\n";
    cout << "CALCOLO DELLE SOLUZIONI:\n";
    if (delta >= 0)
    {double numeratore1, numeratore2, denominatore, soluzione1, soluzione2;
    numeratore1 = (-1 * b) + sqrt(delta);
    numeratore2 = (-1 * b) - sqrt(delta);
    denominatore = 2 * a;
    soluzione1 = numeratore1/denominatore;
    soluzione2 = numeratore2/denominatore;
    cout<< "x=" << soluzione1 << "\nx=" << soluzione2 <<"\n\n";}
    else
    {cout << "Le soluzioni non appartengono all'insieme dei numeri reali R\n\n";}
    system ("PAUSE");
    return 0;

}

P.S. Ho cominciato ieri con il c++
 
lol.. sono arrivato al 4° account... gli altri tre tutti permabanned xDxD

Coumunque... ho provato a farla così, ma adesso non sono molto lucido (vacanze), per cui non ti aspettare un gran che...

Codice:
#include <iostream>
#include <string>
#include <math.h>

using std::cout;
using std::string;

int valoreAssoluto(int v)
{
    if(v>=0)return v;
    return -v;
}

string Cartesio(int a, int b, int c)
{
 string segno[] = {"2 permanenze => soluzioni negative\n", 
                   "1 variazione e 1 permanenza => 1 soluzione positiva e 1 negativa\n",
                   "2 variazioni => soluzioni positive\n"};
   a/= valoreAssoluto(a); b/=valoreAssoluto(b); c/=valoreAssoluto(c);
   return segno[(a!=b) + (b!= c)];                                                             
}


void risolvi(int a,int b, int c)
{
   int delta;
   if((delta = b*b - 4*a*c) < 0) 
   {
             cout << "soluzioni irreali\n";
             return;
   }
   cout << "soluzioni reali => possiamo applicare cartesio\n";
   cout << Cartesio(a,b,c);  
   cout << "x1 = "<<(-b+ sqrt(delta))/2*a <<"\n";
   cout << "x2 = "<<(-b- sqrt(delta))/2*a <<"\n";  
}


int main()
{
 int a,b,c;
 cout << "a: "; std::cin >> a;
 cout << "b: "; std::cin >> b;
 cout << "c: "; std::cin >> c;
 risolvi(a,b,c);
 std::cin.ignore();
 std::cin.get();
}
 
Grz, per ora non sono arrivato nemmeno agli array è il 2°programma che faccio in c++
i prossimi cercherò di farli più puliti ;)
 
che sbadato xD... c'è la func del valore assoluto già pronta in math...

Codice:
#include <iostream>
#include <string>
#include <math.h>

using std::cout;  using std::cin;
using std::string;

string Cartesio(int a, int b, int c)
{
 string segno[] = {"2 permanenze => soluzioni negative\n", 
                   "1 variazione e 1 permanenza => 1 soluzione positiva e 1 negativa\n",
                   "2 variazioni => soluzioni positive\n"};
   a/= abs(a); b/=abs(b); c/=abs(c);
   return segno[(a!=b) + (b!= c)];                                                             
}


void risolvi(int a,int b, int c)
{
   int delta;
   if((delta = b*b - 4*a*c) < 0) 
   {
             cout << "soluzioni irreali\n";
             return;
   }
   cout << "soluzioni reali => possiamo applicare cartesio\n";
   cout << Cartesio(a,b,c);  
   cout << "x1 = "<<(-b+ sqrt(delta))/2*a <<"\n";
   cout << "x2 = "<<(-b- sqrt(delta))/2*a <<"\n";  
}


int main()
{
 int a,b,c;
 cout << "a: "; std::cin >> a;
 cout << "b: "; std::cin >> b;
 cout << "c: "; std::cin >> c;
 risolvi(a,b,c);
 std::cin.ignore();
 std::cin.get();
}
 
Stato
Discussione chiusa ad ulteriori risposte.