Aiuto programma

yoghi871
Salve a tutti sono nuovo e questa è la prima domanda che vi porgo, io devo creare un programma che acquisisca un polinomio di grado 2 e ne calcola la radice. vorrei qualche dritta sul calcolo delle radici di un polinomio di grado 2. Grazie per l'aiuto

Risposte
yoghi871
salve sono Tornato, ho scritto il programma ma nel compilarlo c'è una serie di errori (che già sapevo di fare) :lol: vi chiedo se gli potete dare un'occhiata:

#include
#include

/******************************************/
/* definizione delle constanti simboliche */
/******************************************/

#define DELTA b*b-4*a*c; /* valore del discriminante */

/********************************/
/* dichiarazioni delle funzioni */
/********************************/

void immetti_coefficienti();
double polinomio_1(double coefficienti);
void polinomio_2(double coefficienti,double radici);

/******************************/
/* definizione delle funzioni */
/******************************/

/*****************************************************/
/* dichiarzione delle variabili locali alla funzione */
/*****************************************************/

double a = 0; /* input primo coefficiente */
double b = 0; /* input secondo coefficiente */
double c = 0; /* input terzo coefficiente */
double DELTA = 0; /* input discriminate */
double r = 0; /* output la parte reale delle soluzioni complesse */
double x1 = 0; /* output prima soluzione reale */
double x2 = 0; /* output seconda soluzione reale */
double i1 = 0; /* output parte immaginaria della prima soluzione complessa */
double i2 = 0; /* output parte immaginaria della seconda soluzione complessa */

/**********************************************************/
/* definizione della funzione per immetere i coefficienti */
/**********************************************************/

void immetti_coefficienti()
{
printf("Digita polinomio in forma ridotta: ")
scanf("%f%c+%f%c+%f",
ax2+bx+c)
}

/*********************************************************************/
/* definizione della funzione per calcolare polinomio di primo grado */
/*********************************************************************/

double polinomio_1()
{
if (b==0 && c==0)
printf("Equazione indeterminata")
else if (b==0 && c!=0)
printf("Equazione impossibile")
else if (b!=0)
printf("Soluzione: %fx\n";
-c/b)
}

/***********************************************************************/
/* definizione della funzione per calcolare polinomio di secondo grado */
/***********************************************************************/

void polinomio_2()
{
x1 = (-b+sqrt(DELTA))/2;
x2 = (-b-sqrt(DELTA))/2;
r = -b/2a;
i1 = sqrt(DELTA)/2a;
i2 = -sqrt(DELTA)/2a;

if (DELTA>0)
printf("Le due soluzioni sono: %lgx1, %lgx2\n"
x1 x2)
else if(DELTA==0)
printf("La soluzione coincidente è: %lgx\n"
x1==x2)
else if(DELTA<0)
printf("Le soluzioni complesse sono: %+lf%+lfi,%+lf%+lfi\n",
r+i1, r-i2)

/* definizione funzione main */

int main (void)
{

/* immetti coefficienti */
if (a==0) {
printf("Equazione di 1° grado: %+lfx%+lf=0\n",
b, c)
polinomio_1();
} else {
printf("Equzazione di 2° grado: %+lfx^2%+lfx%+lf=0\n",
a, b, c);
polinomio_2();
}
return 0;
}

E QUESTI SONO GLI ERRORI:

Polinomio.c:37: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
Polinomio.c:37: error: expected identifier or ‘(’ before ‘=’ token
Polinomio.c: In function ‘immetti_coefficienti’:
Polinomio.c:51: error: expected ‘;’ before ‘scanf’
Polinomio.c: In function ‘polinomio_1’:
Polinomio.c:60: error: number of arguments doesn’t match prototype
Polinomio.c:23: error: prototype declaration
Polinomio.c:63: error: expected ‘;’ before ‘else’
Polinomio.c: In function ‘polinomio_2’:
Polinomio.c:75: error: number of arguments doesn’t match prototype
Polinomio.c:24: error: prototype declaration
Polinomio.c:76: error: expected ‘)’ before ‘;’ token
Polinomio.c:77: error: expected ‘)’ before ‘;’ token
Polinomio.c:78:10: error: invalid suffix "a" on integer constant
Polinomio.c:79: error: expected ‘)’ before ‘;’ token
Polinomio.c:79:20: error: invalid suffix "a" on integer constant
Polinomio.c:80: error: expected ‘)’ before ‘;’ token
Polinomio.c:80:21: error: invalid suffix "a" on integer constant
Polinomio.c:82: error: expected ‘)’ before ‘;’ token
Polinomio.c:84: error: expected ‘)’ before ‘x1’
Polinomio.c:84: warning: too few arguments for format
Polinomio.c:85: error: expected ‘;’ before ‘else’
Polinomio.c:108: error: expected declaration or statement at end of input

ALLORA CHE NE DITE NE HO FATTI ABBASTANZA..... :-D

david_e1
Tanto per cominciare le definizioni e le dichiarazioni delle funzioni non coincidono.

Ad esempio nella definizione delle funzione per il polinomio di primo grado:

double polinomio_1()


deve diventare:

double polinomio_1(double coefficienti)


poi quelle che hai chiamato variabili locali alla funzione le hai messe globali, tra l'altro inizializzate a zero (cosa che non credo si possa fare fuori dal main o dalle funzioni)...

yoghi871
Dipende ;-)
La scelta fondamentale è: variabili globali oppure locali?

ma aveva detto che si poteva scegliere tra locali o globali!
comunque ho fatto coincidere le definizioni con le dichiarazioni delle funzioni e infatti mi sono calati gli errori, ora?

david_e1
"Sergio":
[quote="david_e"]le hai messe globali, tra l'altro inizializzate a zero (cosa che non credo si possa fare fuori dal main o dalle funzioni)...

Globali perché più semplici da gestire.....
E si possono inizializzare anche fuori delle funzioni. Provare per credere ;-)[/quote]
No no no... quanto a gusti/stile di programmazione non andiamo affatto d'accordo! :-D

yoghi871
"Sergio":
[quote="yoghi87"]
Riga 51) Manca il punto e virgola alla fine dell'istruzione precedente. Aggiungo che:
a) riterrei molto più chiaro, anche per l'utente, l'input dei coefficienti su righe diverse, con tre chiamate di scanf();

[/quote]

questo non l'ho capito! :(

TomSawyer1
"Sergio":
al punto che in altra sezione non ho cercato di spiegarti che emacs è molto meglio di vim

Sono curioso io :D.

yoghi871
non ho capito questo punto:
a) riterrei molto più chiaro, anche per l'utente, l'input dei coefficienti su righe diverse, con tre chiamate di scanf();

david_e1
"Sergio":
[quote="david_e"]No no no... quanto a gusti/stile di programmazione non andiamo affatto d'accordo! :-D

Non credo proprio ;-)
Credo tu sia d'accordo con me che inizializzare sempre le variabili sia un'ottima abitudine, soprattuto se si usano linguaggi, come il C, che danno al programmatore tanta corda per impiccarsi da solo.
Quanto alle variabili globali, le evito quanto più possibile, ma io programmo da oltre vent'anni!
Credo che per un principiante sia meglio prima aiutarlo a scrivere un programma che funzioni, poi aiutarlo a migliorarlo eliminando le variabili globali.[/quote]
Beh ovviamente scherzavo. Ovviamente sono d'accordissimo sulla necessità di inizializzare le variabili, ma certamente usare una variabile globale che non sia const, per me non esiste... Per il resto, personalmente, credo sia meglio fare un "Hello World" scritto usando le variabili locali e strutturato bene che un super-programma tirato su stile copia-incolla di qui e di li, appiccicandolo con qualche hack! :-D Soprattutto se si tratta di persone alle prime armi è meglio che siano ben indottrinate sulla pulizia del codice, tanto poi, di tempo per mettersi a fare "porcate" per "far prima" (che poi alla fin fine uno ci perde sempre), c'è n'è fin troppo.

In definitiva direi che il nostro disaccordo è più sul lato didattico che di codice.... ah no e poi c'è la questione del vim vs. emacs! :-D

Approposito. Mi sono sempre chiesto se, quando i computer avranno 1000 Ghz di clock e 10 Tb di RAM, finalmente emacs caricherà in un tempo decente! :twisted:

Io consiglierei a yoghi87 di realizzare prima qualche codice più semplice e poi ritornare su questo problema, con calma, in un secondo momento... bisognerebbe fare le cose con più gradualità, altrimenti non si capisce nulla...

david_e1
"Sergio":
[quote="david_e"]Io consiglierei a yoghi87 di realizzare prima qualche codice più semplice e poi ritornare su questo problema, con calma, in un secondo momento... bisognerebbe fare le cose con più gradualità, altrimenti non si capisce nulla...

Glielo avevo detto anch'io, ma ha risposto che si tratta di un compito che gli è stato assegnato dal prof.[/quote]
Hai ragione. Mi ricordavo la cosa, volevo solo ribadirla anche io: come primo programma è veramente difficile da realizzare...

yoghi871
"Sergio":


coefficiente del termine di 2^ grado (a - se zero, si avra' un polinonio di 1° grado): 3
coefficiente del termine di 1^ grado (b): 1
coefficiente del termine noto (c): 4
equazione di 2^ grado: +3.000000x^2+1.000000x+4.000000=0

Oppure:

coefficiente del termine di 2^ grado (a - se zero, si avra' un polinonio di 1° grado): 0
coefficiente del termine di 1^ grado (b): 1
coefficiente del termine noto (c): 4
equazione di 1^ grado: +1.000000x+4.000000=0

Quindi tre coppie printf(), scanf().


ma queste coppie di print scanf le inserisco nella main oppure nella prima funzione?

yoghi871
ecco ho fatto cosi:

#include
#include

/*********************************/
/* dichiarazione delle variabili */
/*********************************/

double a = 0; /* input primo coefficiente */
double b = 0; /* input secondo coefficiente */
double c = 0; /* input terzo coefficiente */

/********************************/
/* dichiarazioni delle funzioni */
/********************************/

void immetti_coefficienti();

/******************************/
/* definizione delle funzioni */
/******************************/

void immetti_coefficienti()
{
printf("digita coefficiente del termine di 2° grado: ");
scanf("%lf",
&a);
printf("digita coefficiente del termine di 1° grado: ");
scanf("%lf",
&b);
printf("digita coefficiente del termine noto: ");
scanf("%lf",
&c);
}

/* definizione funzione main */

int main (void)
{
immetti_coefficienti();
if (a==0) {
printf("Equazione di 1° grado: %+lfx%+lf=0\n", b, c);
} else {
printf("Equzazione di 2° grado: %+lfx^2%+lfx%+lf=0\n", a, b, c);
}
return (0);
}

E MI DÀ QUESTO UNICO ERRORE:
:1:4: error: missing '(' after predicate
COS'È?
COMUNQUE RIBADISCO IL MIO GRAZIE PER L'AIUTO CHE MI STATE DANDO!

yoghi871
io uso ubuntu 7.10, il prof me lo fà compilare usando gcc e dando il comando gcc -Ansi -Wall -O prog.c -o prog;
avevo compilato altri programmi fatti dal prof e andava tutto bene usando questo comando....

yoghi871
è vero funziona... Grazie, ora come procedo?

yoghi871
sono andato avanti ed è venuto fuori questo:

#include
#include

/*********************************/
/* dichiarazione delle variabili */
/*********************************/

double a = 0; /* input primo coefficiente */
double b = 0; /* input secondo coefficiente */
double c = 0; /* input terzo coefficiente */

/********************************/
/* dichiarazioni delle funzioni */
/********************************/

void immetti_coefficienti();
void polinomio_1();

/******************************/
/* definizione delle funzioni */
/******************************/


/**********************************************************/
/* definizione della funzione per immetere i coefficienti */
/**********************************************************/

void immetti_coefficienti ()
{
printf("digita coefficiente del termine di 2° grado: ");
scanf("%lf",
&a);
printf("digita coefficiente del termine di 1° grado: ");
scanf("%lf",
&b);
printf("digita coefficiente del termine noto: ");
scanf("%lf",
&c);
}

/*********************************************************************/
/* definizione della funzione per calcolare polinomio di primo grado */
/*********************************************************************/

void polinomio_1 ()
{

if (b==0 && c==0)
printf("Equazione indeterminata");
else if (b==0 && c!=0)
printf("Equazione impossibile");
else if (b!=0)
printf("Soluzione: %fx\n", -c/b);

}

/* definizione funzione main */

int main (void)
{
immetti_coefficienti();
if (a==0) {
printf("Equazione di 1° grado: %+lfx%+lf=0\n", b, c);
polinomio_1;
} else {
printf("Equzazione di 2° grado: %+lfx^2%+lfx%+lf=0\n", a, b, c);
}
return (0);
}

CON QUESTO ERRORE : polinomi2.c: In function ‘main’:
polinomi2.c:64: warning: statement with no effect
CHE SIGNIFICA? :?

yoghi871
fantastico! :D
una cosa perchè me lo scrive cosi equazione indeterminata?:
digita coefficiente del termine di 2° grado: 0
digita coefficiente del termine di 1° grado: 0
digita coefficiente del termine noto: 0
Equazione di 1° grado: +0.000000x+0.000000=0
Equazione indeterminatamatteo@matteo-desktop:~/Desktop$

:?

yoghi871
bene bene ora?

yoghi871
e qui inizia ad essere più complicato perchè compilandolo cosi:

void immetti_coefficienti();
void polinomio_1();
void polinomio_2();

/******************************/
/* definizione delle funzioni */
/******************************/


/**********************************************************/
/* definizione della funzione per immetere i coefficienti */
/**********************************************************/

void immetti_coefficienti ()
{
printf("Digita coefficiente del termine di 2° grado: ");
scanf("%lf",
&a);
printf("Digita coefficiente del termine di 1° grado: ");
scanf("%lf",
&b);
printf("Digita coefficiente del termine noto: ");
scanf("%lf",
&c);
}

/*********************************************************************/
/* definizione della funzione per calcolare polinomio di primo grado */
/*********************************************************************/

void polinomio_1 ()
{

if (b==0 && c==0)
printf("Equazione indeterminata\n");
else if (b==0 && c!=0)
printf("Equazione impossibile\n");
else if (b!=0)
printf("Soluzione: %f\n", -c/b);

}

/***********************************************************************/
/* definizione della funzione per calcolare polinomio di secondo grado */
/***********************************************************************/

void polinomio_2()
{
delta = b*b-4*a*c;
x1 = (-b+sqrt(delta))/2;
x2 = (-b-sqrt(delta))/2;
r = -b/(2*a);
i1 = sqrt(delta)/(2*a);
i2 = -sqrt(delta)/(2*a);

if (delta>0)
printf("Le due soluzioni sono: %lgx1, %lgx2\n", x1, x2);
else if(delta==0)
printf("La soluzione coincidente è: %lgx\n", r);
else if(delta<0)
printf("Le soluzioni complesse sono: %+lf%,%+lf%\n", r+i1, r-i2);
}

/* definizione funzione main */

int main (void)
{
immetti_coefficienti();
if (a==0) {
printf("Equazione di 1° grado: %+lfx%+lf=0\n", b, c);
polinomio_1();
} else {
printf("Equzazione di 2° grado: %+lfx^2%+lfx%+lf=0\n", a, b, c);
polinomio_2();
}
return (0);
}

MI DÀ I SEGUENTI ERRORI:

polinomi3.c: In function ‘polinomio_2’:
polinomi3.c:82: warning: unknown conversion type character ‘,’ in format
polinomi3.c:82: warning: unknown conversion type character 0xa in format
/tmp/ccq5jlO6.o: In function ‘polinomio_2:
polinomi3c:(.text+0x41): undefined reference to sqrt'
polinomi3c:(.text+0x81): undefined reference to sqrt'
polinomi3c:(.text+0xd1): undefined reference to sqrt'
polinomi3c:(.text+0x106): undefined reference to sqrt'
collect2: ld returned 1 exit status

luca260786
Caro Sergio ho bisogno di aiuto in questo: Allora mi avete quotato il codice in variabili globali, ora in questa parte
 

void immetti_coefficienti() 
{
  
}

void eq_1_grado() 
{
    
}

void eq_2_grado() 
{
    
}


Cosa devo fare?????? Cioè dentro alle varie parti ci devo mettere le formule???? Nn riesco a venirne fuori e il primo appello si avvicina e mi sono scervellato!!!!!!!!!!! Grazie 1000 in anticipo!!!!!!!!!!!!

luca260786
Grazie 1000 Sergio ho visto e sto facendo un codice simile ma nello stesso modo per esercitarmi poi cambierò qualcosa!!!!!!!!!!!!!!!! Grazie ancora a tutti per i vostri aiuti!!!!!!!!!!!!!!!!!!

yoghi871
Fantastico l'ho finito e mi si è compilato però non mi convincono i risultati che mi dà? cioè le radici a mano mi vengono diverse :(
poi per le soluzioni complesse mi scrive cosi:
Equzazione di 2° grado: +4.000000x^2+4.000000x+4.000000=0
Le due soluzioni complesse sono: -0.5+nani,-0.5+nani
NANI? :shock:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.