PDA

View Full Version : [C] Problemi su strutture


Manugal
27-06-2005, 18:21
Ciao a tutti!

Devo creare una funzione che esegue operazioni su vettori complessi (poi dovrò farlo anche per matrici). Io ho fatto così (supponendo che io passi dei valori a questi vettori dal main):

#define N 4

typedef struct{
float re;
float im;
} complex;

complex b[N],c[N];

complex addvect(complex b[], complex b[]);

complex addvect(complex b[], complex b[]){

int i
complex a[N];

for(i=0; i<N; i++){
a[i]=0.0;
for(i=0; i<N; i++){
a[i].re+=b[i].re+c[i].re;
a[i].im+=b[i].im+c[i].im;
}
}
return a;
}

A questo punto mi da errore in fase di compilazione, due messaggi sono significativi:

Subscripted value is neither array nor pointer
Incompatible types in return

Perché? :cry: Mi pare di aver seguito le regole..... Grazie.

Brazorv
27-06-2005, 19:46
nella tua funzione hai definito 2 volte lo stasso parametro b[], poi dovrebbe restituire un complex invece restituisce un complex*.
Prova così
void addvect(complex *a,complex *b, complex *c){

int i;

for(i=0; i<N; i++){
a[i].re=b[i].re+c[i].re;
a[i].im=b[i].im+c[i].im;
}

}

nel primo parametro (a) troverai il risultato della somma di b+c.

Manugal
27-06-2005, 20:02
Ok grazie. Cmq mi sono sbalgiato a scrivere complex b[] l'ho dichiarato una sola volta (lì doveva esserci c[]). Cmq se volessi ritornare un complex e non un complex * come avrei dovuto scrivere la return?

tglman
28-06-2005, 10:10
Più o meno doveva essere cosi :


complex * addvect(complex *b, complex *c){
int i;
complex a[N];
for(i=0; i<N; i++){
a[i].re=b[i].re+c[i].re;
a[i].im=b[i].im+c[i].im;
}
return a;
}


o comunque una dichiarazione del genere, adesso non mi ricordo le sintassi precise.

Manugal
28-06-2005, 21:34
Grazie mi sei stato di aiuto! Ciao! :)