PDA

Visualizza la versione completa : [C] problema array


maseeeeeee
21-08-2014, 19:31
Salve a tutti eccomi di nuovo qui .questo il mio codice

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

double prodottoScalare(double A[],double B[],double N){
double prodotto=0.0;
for(int i=0;i<N;i++){
prodotto+=(A[i] * B[i]);
}
return prodotto;
}

int main(){
const int n= 4;
double a[]={1,2,3,4};
double b[]={5,6,7,8};
printf("il loro prodotto scalare :%lf",prodottoScalare(a,b,n));
return 0;
}
La mia domanda 1);perch se quando dichiaro l'array double a[ ]={1,2,3,4}; oppure double a[4]={1,2,3,4}; tutto funziona alla perfezione e se dichiaro l'array double a[n]={1,2,3,4}; escono fuori un casino di errori????2)ma per un array double a[] gli elementi dopo la graffa non dovrebbero essere double,perch con elementi int v lo stesso??? grazie in anticipo:cool::cool::cool:

oregon
21-08-2014, 20:11
La mia domanda 1);perch se quando dichiaro l'array double a[ ]={1,2,3,4}; oppure double a[4]={1,2,3,4}; tutto funziona alla perfezione e se dichiaro l'array double a[n]={1,2,3,4}; escono fuori un casino di errori????2)ma per un array double a[] gli elementi dopo la graffa non dovrebbero essere double,perch con elementi int v lo stesso??? grazie in anticipo:cool::cool::cool:


Veramente con double a[n] ... funziona lo stesso ...

I valori 1, 2, 3, 4 sono intesi come 1.0, 2.0, 3.0, 4.0 e quindi validi come double ...

maseeeeeee
21-08-2014, 21:32
Veramente con double a[n] ... funziona lo stesso ...I valori 1, 2, 3, 4 sono intesi come 1.0, 2.0, 3.0, 4.0 e quindi validi come double ...
grazie Oregon sempre te risolvi i miei casini!!!avevo immaginato che li considerava come numeri con la virgola.Ma per quanto riguarda l'array con[n] giuro che non v.ecco gli errore:


ex5-es3.c: In function ‘main’:
ex5-es3.c:14:2: error: variable-sized object may not be initialized
ex5-es3.c:14:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:14:2: warning: (near initialization for ‘a’) [enabled by default]
ex5-es3.c:14:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:14:2: warning: (near initialization for ‘a’) [enabled by default]
ex5-es3.c:14:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:14:2: warning: (near initialization for ‘a’) [enabled by default]
ex5-es3.c:14:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:14:2: warning: (near initialization for ‘a’) [enabled by default]
ex5-es3.c:15:2: error: variable-sized object may not be initialized
ex5-es3.c:15:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:15:2: warning: (near initialization for ‘b’) [enabled by default]
ex5-es3.c:15:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:15:2: warning: (near initialization for ‘b’) [enabled by default]
ex5-es3.c:15:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:15:2: warning: (near initialization for ‘b’) [enabled by default]
ex5-es3.c:15:2: warning: excess elements in array initializer [enabled by default]
ex5-es3.c:15:2: warning: (near initialization for ‘b’) [enabled by default]

maseeeeeee
21-08-2014, 21:36
scusate ho commesso un errore e non mi f modificare il messaggio!!!

MItaly
21-08-2014, 23:52
scusate ho commesso un errore e non mi f modificare il messaggio!!!
Ho sistemato io. :ciauz:

oregon
22-08-2014, 10:25
Ma per quanto riguarda l'array con[n] giuro che non v

Ma tu hai scritto
const int n=4;

come hai scritto nel primo post o solamente

int n=4;

?

maseeeeeee
22-08-2014, 10:59
ho provato in tutti i due modi ma non v|||

oregon
22-08-2014, 12:25
ho provato in tutti i due modi ma non v|||

Con cosa stai compilando? Usi const o no? Non l'hai detto ...

Se compili in C (e non usi C++) usa

#define n 4

all'inizio ed elimina la

const int n=4;

M.A.W. 1968
22-08-2014, 14:07
Confermo quanto dice il nostro ottimo Oregon, quello stile di dichiarazione non compatibile con il linguaggio C, anche se previsto dal C'99 e supportato da alcuni compilatori (in particolare da GCC, che in effetti ha per primo introdotto codesti VLA, poi contemplati dallo standard del 1999). Meglio usare una #define con un nome espressivo (ad esempio, ASIZE) per simulare una costante manifesta, anche se trattasi di prassi non felicissima.

Inoltre la dimensione dei vettori, da passare alla funzioncina di calcolo, deve essere un size_t (unsigned int) o al limite un int, ma non certo un valore floating point! Occorre un intero senza segno, come dovunque siano coinvolti indici di array.

maseeeeeee
22-08-2014, 15:25
intanto grazie Oregon e M.A.W 1968 .allora per Oregon io ho provato sia con const int n che con int n!!!ma l'errore era uguale adesso con define v!!!!per compilare ho provato sia gcc che c99 !!!!ma non andava purtroppo le dispense del mio prof sono piene di errori!!!!lui mette const int!!!!ma un cartaceo!!!!per M.A.W 1968 grazie per la spiegazione tecnica!!!!

Loading