PDA

View Full Version : [C] Piccolo aiuto con la dichiarazione di una funzione con array


Hieicker
12-01-2013, 15:02
Ciao a tutti :) ! Avrei bisogno gentilmente di un piccolo chiarimento riguardo la dichiarazione di una funzione che usa un array. Non riesco a capire cosa sto sbagliando.
Vi lascio il codice del programma (poche righe). Si verifica già un primo errore alla riga int media_aritmetica(int vettore[10]);

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

int media_aritmetica(int vettore[10]);

int main()
{
int operazione; int numero; int indice; int vettore[];
float operatore1, operatore2;
printf("inserisci l'operazione che vuoi svolgere\n");
printf("1 - Addizione\n2 - Sottrazione\n3 - Media aritmetica\n");
scanf("%d",&operazione);

switch(operazione){
case 1:
somma(operatore1,operatore2);
break;
case 2:
sottrazione(operatore1, operatore2);
break;
case 3:
media_aritmetica(vettore);
break;
default:
printf("Non hai digitato correttamente un numero");
break;
}

return 0;
}

int media_aritmetica(int vettore[10]){
//codice
return 0;
}


Grazie a chiunque mi aiuterà :) !

Hieicker

Hieicker
12-01-2013, 15:24
Ciao Antonio! Grazie per l'aiuto. Nel codice avevo già messo il numero 10 come dimensione dello stesso. Ora l'ho aggiunto anche all'interno del main.


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

int media_aritmetica(int vettore[10]);

int main()
{
int operazione; int numero; int indice; int vettore[];
float operatore1, operatore2;
printf("inserisci l'operazione che vuoi svolgere\n");
printf("1 - Addizione\n2 - Sottrazione\n3 - Media aritmetica\n");
scanf("%d",&operazione);

switch(operazione){
case 1:
somma(operatore1,operatore2);
break;
case 2:
sottrazione(operatore1, operatore2);
break;
case 3:
media_aritmetica(vettore);
break;
default:
printf("Non hai digitato correttamente un numero");
break;
}

return 0;
}

int media_aritmetica(int vettore[10]){
//codice
return 0;
}


Tuttavia il codice ancora non funziona.
Alla riga " media_aritmetica(vettore[10]); " mi dice "subscripted value is neither array nor pointer nor vector".
Non lo riconosce correttamente?

Vincenzo1968
12-01-2013, 15:26
Come dice Antonio. Devi specificare la dimensione del vettore nella funzione main. Oppure puoi inizializzare l'array e calcolare la dimensione con l'operatore sizeof:


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

double media_aritmetica(int *vettore, int count);

int main()
{
int operazione;
int size;
int vettore[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

double media = 0.0;

size = sizeof(vettore)/sizeof(int);

printf("inserisci l'operazione che vuoi svolgere\n");
printf("1 - Addizione\n2 - Sottrazione\n3 - Media aritmetica\n");

scanf("%d", &operazione);

switch(operazione)
{
case 1:
/*somma(operatore1,operatore2);*/
break;
case 2:
/*sottrazione(operatore1, operatore2);*/
break;
case 3:
media = media_aritmetica(vettore, size);
printf("La media e': %lf", media);

break;
default:
printf("Non hai digitato correttamente un numero");
break;
}

return 0;
}

double media_aritmetica(int *vettore, int count)
{
//codice
int k;
double somma = 0.0, media = 0.0;

for ( k = 0; k < count; k++ )
{
somma += (double)vettore[k];
}
media = somma / count;

return media;
}

Hieicker
12-01-2013, 15:31
Grazie anche a te vincenzo! Volevo provare prima la soluzione statica. Ho quindi indicato la dimensione 10 all'interno del main. Se guardi il mio post precedente tuttavia ricevo ancora errore... Vorrei capire cosa sbaglio nella dichiarazione :).

Vincenzo1968
12-01-2013, 15:54
Grazie anche a te vincenzo! Volevo provare prima la soluzione statica. Ho quindi indicato la dimensione 10 all'interno del main. Se guardi il mio post precedente tuttavia ricevo ancora errore... Vorrei capire cosa sbaglio nella dichiarazione :).

Non lo vedo all'interno del main:

int main()
{
int operazione; int numero; int indice; int vettore[];
...


devi fare così:

int main()
{
int operazione; int numero; int indice; int vettore[10];
...

Hieicker
12-01-2013, 16:28
Vi chiedo scusa, devo aver fatto un attimo confusione. Ecco il codice aggiornato correttamente :).



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

int media_aritmetica(int vettore[10]);

int main()
{
int operazione; int numero; int indice; int vettore[10];
float operatore1, operatore2;
printf("inserisci l'operazione che vuoi svolgere\n");
printf("1 - Addizione\n2 - Sottrazione\n3 - Media aritmetica\n");
scanf("%d",&operazione);

switch(operazione){
case 1:
somma(operatore1,operatore2);
break;
case 2:
sottrazione(operatore1, operatore2);
break;
case 3:
media_aritmetica(vettore[10]);
break;
default:
printf("Non hai digitato correttamente un numero");
break;
}

return 0;
}

int media_aritmetica(int vettore[10]){
//codice
return 0;
}


Così non mi da errori e sembra funzionare correttamente grazie :). Tornerò a rompervi le scatole sicuramente perchè ora devo mettermi a lavoricchiare con i vettori e poi con le matrici :D !