Newsgroup: it.comp.lang.c
Titolo: Equazioni di primo e secondo grado

Salve tutti, ragazzi, potete farmi un esempio in codice di come si fanno le
equazioni di primo e secondo grado?
GRAZIE

equazioni di primo e secondo grado?
A quante incognite? Gia' semplificate?
Se parli di equazioni a 1 incognita la soluzione e' semplice: ci
applichi la formuletta.
Considera l'equazione della forma "ax = b", per risolverla ti basta
fare: "x = b/a".
Per l'equazione di secondo grado a due incognite ("ax^2+bx+c = 0") ci
applichi la formula apposta (se non l'ho cioppata):
<CODE>
float a, b, c, r1, r2, delta;
a=4.0;
b=2.0;
c=2.0;
delta = sqrt(abs((b*b) - (4*a*c)));
delta = (b*b) - (4*a*c);
if (delta < 0)
    ERROR;
else {
    r1 = (-b + delta) / (2*a);
    r2 = (-b - delta) / (2*a);
}
</CODE>
Nota: le parentesi attorno a "2*a" non sono opzionali.
Per la formula ridotta e il calcolo della radici immaginarie ti lascio
il divertimento :P
Idem se ti interessa un modo per prendere un'equazione qualsiasi e
semplificarla.
Mox

     ERROR;
A che serve ridefinire delta? E mantenendo la seconda poi la formula non è
più giusta...
Io proporrei piuttosto - sempre escludendo radici immaginarie:
delta = (b*b) - (4*a*c);
if (delta < 0)
    ERROR;
else {
    r1 = (-b+sqrt(delta))/(2*a);
    r2 = (-b-sqrt(delta))/(2*a);
    }
Che ne dici? Spero di non aver scritto cavolate...
Un saluto
Niko

GRAZIE
//codoce OT
#include <iostream.h>
#include <math.h>
int main(void)
{
double a, b, c, d, delta;
char risposta;
for(;;)
{
 cout << "\nIo calcolo l'incognita x dell'equazione axı+bx+c=0 \n";
 cout << "\nInserire il coefficiente a: "; cin >> a;
 cout << "\nInserire il coefficiente b: "; cin >> b;
 cout << "\nInserire il coefficiente c: "; cin >> c;
 cout << "\nL'equazione e' ";
 if(a!=0) cout << a <<"xı";
 if(b!=0) cout << (b<0 ? "":"+")  <<b<<"x";
 if(c!=0) cout << (c<0 ? "":"+")  <<c;
 if(a==0 && b==0 && c==0) cout << "0";
 cout <<"=0";
 delta=((b*b)-(4*a*c));
 if(delta>0)  d=sqrt(delta);
 if(a==0 && b==0 && c==0) 
              cout << "\nTutto R e' soluzione." <<endl;
 else if(a==0 && b!=0)
     {cout << "\nLa soluzione unica e' x=";
      if(-c/b==0) cout << "0" << endl;
      else cout << -c/b <<endl;
     }
 else if(a!=0 && b==0 && c!=0)
     {cout << "\nI valori di x sono \n";
      if(-c/a<0) cout << "x1=+radice(" << -c/a << ")" << endl;
      else cout << "x1=" << sqrt(-c/a) << endl;
      if(-c/a<0) cout << "x2=-radice(" << -c/a << ")" << endl;
      else cout << "x2=-" << sqrt(-c/a) << endl;
     }
 else if ( delta>0 && a!=0) 
     {cout << "\nI valori di x sono \n";
      cout << "x1=" << (-b-d)/(2*a) << endl;
      cout << "x2=" << (-b+d)/(2*a) << endl;
     }
 else if ( delta==0 && a!=0)
     {cout << "\nLa soluzione doppia e' x=";
      cout << ( b==0 ? b : (-b)/(2*a) )<<endl;
     }
 else if(delta<0 && a!=0)
          {cout<< "\nLe due soluzioni sono complesse coniugate:\n";
           cout<<"x1=["<<-b<<"-radice("<<delta<<")]/ "<<2*a<< endl;
           cout<<"x2=["<<-b<<"+radice("<<delta<<")]/ "<<2*a<< endl;
           }
 else cout << "\nNon ho trovato soluzioni " <<endl;
 cout << "Devo continuare?(s/n) "; cin >> risposta;
 if(risposta=='n') return 0;
 }
return 0;
}
che significa 
"> Warning W8066 C:\WINDOWS\Desktop\ct\radici.cpp 51: Unreachable code
in function main()" ?

Che ne dici? Spero di non aver scritto cavolate...
Che e' quello che avrei dovuto scrivere io se non fossi impedito :)
Mox
-- 
Mox

in function main()" ?
Ipotesi mia:
Magari si e' tracciato un grafo (vedi i blocchi di codice come i nodi
e i rami if-else come archi) e si e' accorto che dalla radice non puoi
arrivare a certi nodi.
Non so se tutti i compilatori lo facciano, ma mi pare sensato come
controllo :)
Mox
-- 
Mox