Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.
da BourneMega87 » mar ago 07, 2012 7:44 am
Ciao a tutti, premetto che molto probabilmente è un errore stupido o di distrazione, me ci sto perdendo la testa veramente....
ho un programma che nella compilazione mi da questi due cavolo di errori e non riesco a capirne il perché... qualcuno mi può aiutare?? :S
vi posto le righe dove mi da questo errore: expected ‘;’, ‘,’ or ‘)’ before numeric constant
mi dà l'errore alla riga dove è definita la funzione trapezi
/*
definizioni librerie
*/
- Codice: Seleziona tutto
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define LS 143
#define B 20
#define fwd 5.19
#define qmax 0.0606
#define qmin 0.0602
#define N_INT 10000 /*definizioni costanti termine */
double calcolo_y(int x);
double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double LS,double f,double fwd,double ysbz,double y_z);
int main(int argc, char *argv[]){
//definizioni variabili
double bmezzi,v,ez,ez1;
double FMIN=10;
........
.......
continuazione programma
e mi da un errore, dello stesso tipo di prima expected ‘;’, ‘,’ or ‘)’ before numeric constant
e alla riga dove vado a scrivere la definizione della funzione trapezi...qualcuno saprebbe dirmi il perché??? :S
- Codice: Seleziona tutto
double calcolo_y(int x){
double y_LS=0.0;
y_LS=56*sqrt(1-((x^2)/(143^2)));
return y_LS;
}
double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double LS,double f,double fwd,double ysbz,double y_z){
double h=0.0;
double ez=0.0;
int i=0;
vi ringrazio della risposta in anticipo e dell'aiuto... spero di essere stato chiaro...grazie :( :|
-
BourneMega87
- Aficionado
-
- Messaggi: 44
- Iscritto il: sab gen 02, 2010 11:30 am
da BourneMega87 » mar ago 07, 2012 9:16 am
- Codice: Seleziona tutto
provatesi.c:14: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
provatesi.c:71: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
gli errori che mi capitano sono questi due :S help....
- Codice: Seleziona tutto
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define LS 143
#define B 20
#define fwd 5.19
#define qmax 0.0606
#define qmin 0.0602
#define N_INT 10000 /*definizioni costanti termine */
double calcolo_y(int x);
riga 14: double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double LS,double f,double fwd,double ysbz,double y_z);
int main(int argc, char *argv[]){
//definizioni variabili
double bmezzi,v,ez,ez1;
double FMIN=10;
int f,ysbz=20,ysbz1=20;
int z1=0,z=0;
double q_z=0.0;
double y_z=0.0;
double e_z=0.0;
double e_z1=0.0;
double y_z1=0.0;
f=FMIN;
while(f>=10 && f<= 143){
z1=LS;
ysbz1=B;
ysbz=B;
bmezzi=B/2;
for(z=143;z>=0;z--){
//calcolo q(z) e y(z);
q_z=(((qmax-qmin)/LS)*(LS-z))+qmin;
y_z=56*sqrt(1-((z^2)/(143^2)));
/********/
ez=trapezi(calcolo_y,N_INT,0,q_z,LS,f,fwd,ysbz,y_z);//espressione calcolo integrale ez
for(z1=143;z1>=0;z1--){
y_z1=56*sqrt(1-((z1^2)/(143^2)));
ysbz++;
//ez1=trapezi1(0,143,N_INT);//espressione calcolo integrazle ez1
v=2*(bmezzi-ez);
if(ysbz1!=v){
ysbz1=v;
}else if(ysbz1==v){
break;
}
}
}
if(ez<=bmezzi){
printf("valore eccentricita: %f\n", ez);
exit(0);
}
f=f+1;
}
return 0;
}
double calcolo_y(int x){
double y_LS=0.0;
y_LS=56*sqrt(1-((x^2)/(143^2)));
return y_LS;
}
riga 71: double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double LS,double f,double fwd,double ysbz,double y_z){
double h=0.0;
double ez=0.0;
int i=0;
h=(LS-z)/n_int;
for(i=z;i<LS;i+=h)
ez+=((q_z*(LS-i))+((q_z*(i+h))*h/2))-(((8*f*0.8*fwd)/(LS^2))*(ysbz)*(y_z-(*calcolo_y(LS))))+((((8*f*0.8*fwd)/(((LS+h/2)^2)*h/2))*(ysbz)*(y_z-(*calcolo_y(LS+h/2))*h/2)))/((((8*f*0.8*fwd)/(LS^2))*(ysbz))+(((8*f*0.8*fwd)/(((LS+h)^2)*h/2))*(ysbz)));
return ez;
}
grazie mille in anticipo.... :S
-
BourneMega87
- Aficionado
-
- Messaggi: 44
- Iscritto il: sab gen 02, 2010 11:30 am
da M@ttia » mar ago 07, 2012 11:58 am
Non ho un compilatore sottomano, ma dal messaggio d'errore, il problema è che tu hai:
- Codice: Seleziona tutto
#define LS 143
#define fwd 5.19
e poi sotto
- Codice: Seleziona tutto
double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double LS,double f,double fwd,double ysbz,double y_z);
Stai quindi dando alla funzione un parametro che è una costante: il #define dice al compilatore, in fase di compilazione, di sostituire ogni istanza di LS trovata nel codice con 143, quindi tu è come se avessi scritto
- Codice: Seleziona tutto
double trapezi(double(*calcolo_y)(int),double n_int,double z,double q_z,double 143,double f,double 5.19,double ysbz,double y_z);
che ovviamente non ha alcun senso. Se le vuoi definire all'inizio come parametri globali, poi nel codice li usi e basta senza passarli come parametri. Altrimenti li definisci in altro modo (double, ecc.) e poi li passi come parametri.
Sempre nella stessa riga: perché passi anche la funzione calcolo_y by reference per poi convertirla in double, quando essa esiste già e ritorna un double? Semplicemente non passarla del tutto come parametro e usala direttamente no?
</IE><FIREFOX>
-
M@ttia
- Moderatore
-
- Messaggi: 8363
- Iscritto il: lun giu 09, 2003 2:18 pm
- Località: Ticino - Estero
da BourneMega87 » mer ago 08, 2012 8:20 am
Giusto, hai ragione, mi era proprio sfuggito...errore da evitare ;) grazie mille comunque
Tutto risolto :D
-
BourneMega87
- Aficionado
-
- Messaggi: 44
- Iscritto il: sab gen 02, 2010 11:30 am
Torna a Programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 4 ospiti