PDA

View Full Version : [C] ciclo while e sqrt()


Lamba
29-03-2012, 21:04
Sera :)
avrei svariati problemi con questo programmino che ho creato. quello che mi pare più strano è quello del ciclo while! attraverso il ciclo vorrei reiterare tutto il codice centrale, fino a quando l'utente non cambia il valore della variabile a fine ciclo!

un altro problema è la radice quadrata! non riesco ad usarla a dovere.

sapreste aiutarmi? vi posto il codice!
ps: è un semplice programmino che attraverso svariati if else calcola i risultati di una equazione di primo o secondo grado!


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

//variabile di controllo while
int i=0;

// variabili equazioni
float a;
float b;
float c;
float x;


while (i!=1){
system("cls");
printf("########################\n");
printf("# Risolvi equazioni v1 #\n");
printf("########################\n");
printf("# By Lamberto Basti #\n");
printf("########################\n\n");

printf("Inserisci i valori di a, b e c:\n");
printf("\na="); scanf("%f", &a);
printf("b="); scanf("%f", &b);
printf("c="); scanf("%f", &c);

printf("\n");

//a=0 Equazione di 1° grado
if (a==0&&b!=0&&c!=0){
x=-c/b;
printf("\n L'equazione ha una sola soluzione: x=%f", x);
}

//b=0 Equazione pura
else if (a!=0&&b==0&&c!=0){
x=-c/a;

if (x<0){
float y=-x;
y = sqrtf(x);
printf("\nLequazione ha una soluzione complessa\n\n x=%0.1fi", y);}
else {
float y=sqrtf(x);
printf("L'equazione ha due soluzione reali:\n x=%f\nx=%f", y, -y);}}

//c=0 equazione spuria
else if (a!=0&&b!=0&&c==0){
float x2=-b/a;
printf("L'equazione ha due soluzioni\n\n x=0\nx=%0.1f", x2);}

//a=0 b=0 equazione
else if (a==0&&b==0&&c!=0){
if (c=0){
printf("\nLequazione è sempre verificata per ogni valore di x");}
else{printf("\nL'equazione non è mai verificata");}}

//Equazione normale
else if (a!=0&&b!=0&&c!=0){

float delta=b*b-4*a*c;
//delta<0
if (delta<=0){
float delta1=-delta;
printf("L'equazione ha 2 soluzione complesse:\n\n");
printf("(%0.1f-&0.1fi)/(2%0.1f)", -b, sqrtf(delta1), a);
printf("(%0.1f+&0.1fi)/(2%0.1f)", -b, sqrtf(delta1), a);}
else if (delta==0){
printf("L'equazione ha 2 soluzioni reali coincidenti\n\n");
printf("x=%0.1f", -b/(2*a));}
else {
printf("L'equazione ha 2 soluzioni reali\n\n");
printf("x=%0.1f\n", (-b+sqrtf(delta))/(2*a));
printf("x=%0.1f", (-b-sqrtf(delta))/(2*a));}}

//a=0 c=0 b=0
else if(a==0&&b==0&&c==0){
printf("L'equazione e' verificata per ogni x");}

//a=0 c=0 | b=0 c=0
else {
printf("L'equazione ha una soluzione\n\nx=0");}
printf("\n\n");
printf("> Esci 1\n");
printf("> Indietro 2\n\n");
printf(">"); scanf("&d", &i);

}
return 0;
}

biowep
29-03-2012, 21:24
Il problema sta nell'acquisizione del dato
tu hai scritto
scanf("&d", &i);
mentre la sintassi corretta è
scanf("%d", &i);
il descrittore di formato per interi è "%d" non "&d"

non ho capito che problema hai con la radice quadrata

Lamba
30-03-2012, 16:01
che errore stupido xP grazie mille!
la radice ora mi ridà :) avevo sbagliato a scrivere la moltiplicazione! 2a invece che 2*a!