View Full Version : [C]problemi con radice e loop for
peppozzolo
06-02-2010, 09:18
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float a,b,c,delta,x0,x1,x2,x;
main()
{
printf("inserire i tre coefficienti\n");
for(;;)
{
scanf("%f%f%f",&a,&b,&c);
delta=(b*b)-(4*a*c);
printf("%.2f\n",delta);
system("PAUSE");
if(delta<0)
printf("nessuna soluzione reale il delta e' %.2f\n\n",delta);
else
{
if(delta=0)
{
x0= -b/2*a;
printf("un unica soluzione %.2f",x0);
}
else
{
x1= (-b-delta)/2*a;
x2= (-b+delta)/2*a;
printf("ha due soluzioni %.2f e %.2f",x1,x2);
}
}
scanf("%d",x);
if(x==0)break;
}
}
questo e il mio programmino per calcolare la soluzioni di un equazione di secondo grado
i problemi sono prevalentemente due
1) non so come si fa la radice quadrata in c sapevo si dovesse implemetare math.h ma poi con sqrt non mi da i risultati sperati
2)per il programma dopo avermi dato le soluzioni non ritorno al punto di partenza col loop for
grazie a chi mi sara di aiuto e scusate lo scempio ma e il mio terzo programma (fra 5 giorni ho un esame aiutooooooo)
blackgin
06-02-2010, 10:53
C'erano un bel pó di errori.. Qua c'é una correzione:
Per la libreria matematica non so su windows, ma su unix si aggiunge -lm da riga di comando in compilazione.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float a,b,c,delta,x0,x1,x2;
int x;
main(){
for(;;){
printf("inserire i tre coefficienti\n");
scanf("%f%f%f",&a,&b,&c);
delta=sqrt((b*b)-(4*a*c));
printf("%.2f\n",delta);
//system("PAUSE"); Non va su unix.
if(delta<0)
printf("nessuna soluzione reale il delta e' %.2f\n\n",delta);
else if(delta==0){
x0 = -b/2*a;
printf("un unica soluzione %.2f",x0);
}
else{
x1= (-b-delta)/(2*a);
x2= (-b+delta)/(2*a);
printf("ha due soluzioni %.2f e %.2f",x1,x2);
}
printf("\n0 per terminare");
scanf("%d",&x);
if(x==0)break;
}
}
PS Usa i tag quote per il codice.
peppozzolo
06-02-2010, 11:19
ah okkei allora per la radice basta fare sqrt mi potresti indicare gli altri errori scusami ma sono alle prime armi
ps se la faccio gia dal delta non mi da problemi in caso di delta negativo ah e come si mette in tag code?
blackgin
06-02-2010, 12:58
l'if col break mi pare che fosse fuori dal ciclo.
Poi c'era un errore di parentesi. Deve essere (-b+sqrt(delta))/(2*a) e non /2*a.
Poi non c'é bisogno di mettere un if dentro un if per valutare il delta. Basta mettere if.. else if.. else..
Poi non ricordo sinceramente.
Il tag CODE lo inserisci mettendo il testo dentro [*CODE]il testo va qui[/CODE] (senza *), oppure premendo l'apposito simbolo # nella barra degli strumenti del messaggio.
peppozzolo
06-02-2010, 13:17
grazie mille illuminate direi mi rimane solo un piccolissimo dubbio non ho ben capito la differenza nell' else if come l'hai usato tu e come avevo fatto io mi sebra che l'unica differenza e che io uso quache parentesi graffa in piu o mi sfugge qualkosa
ps grazie mille per il tempo dedicatomi
Se non sbaglio anche per delta==0 devi mettere x0=-b/(2*a)
blackgin
06-02-2010, 20:07
grazie mille illuminate direi mi rimane solo un piccolissimo dubbio non ho ben capito la differenza nell' else if come l'hai usato tu e come avevo fatto io mi sebra che l'unica differenza e che io uso quache parentesi graffa in piu o mi sfugge qualkosa
ps grazie mille per il tempo dedicatomi
Beh parliamo sostanzialmente di pulizia di codice. Iniziare a incapsulare if dentro if non é molto pulito. Come codice dovrebbe pure essere piú lento..
Ah e quello che dice Ale88 é vero. Va corretto anche lá..
peppozzolo
07-02-2010, 10:22
beh sono agli inizi e poi avro sbagliato la sintassi non saro pulitissimo ma in generale mi apre che non si possa fare diversamente o sbaglio?
blackgin
07-02-2010, 12:23
beh sono agli inizi e poi avro sbagliato la sintassi non saro pulitissimo ma in generale mi apre che non si possa fare diversamente o sbaglio?
Cosa esattamente?
peppozzolo
07-02-2010, 18:33
tu dici if annidato scusa c'e un altro modo per faro lo stesso programma senza annidare?
blackgin
08-02-2010, 09:38
tu dici if annidato scusa c'e un altro modo per faro lo stesso programma senza annidare?
Te l'ho detto, con gli else if.. Come del resto ho fatto nella versione che ti ho postato
peppozzolo
08-02-2010, 18:46
saro scemo io o forse non ci capiamo mma o scrivo else if o else{if istruzioni } non e uguale? e si tratta sempre di annidamento?
blackgin
08-02-2010, 20:52
se scrivi else { if } l'if é annidato
invece nella sintassi
if(..){
..
}
else if(..){
..
}
else(..){
..
}
non c'é annidamento. Sono 3 condizioni possibili nello stesso if.
Invece in
if(..){
..
}
else(..){
if(..){
..
}
}
Hai 2 if. Il principale e quello dentro else
peppozzolo
10-02-2010, 16:36
grazie mille adesso ho capito scusami per il disturbo e grazie ancora
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.