Ciao a tutti, ho il seguente problema: ho un sottoprogramma che deve fornire in ritorno sia la dimensione, che un array allocato dinamicamente:
-Scrivere un sottoprogramma arrayMaggiori() che riceve come parametro un array di numeri interi e la sua dimensione. Il sottoprogramma calcola la media dei numeri e poi salva in un secondo array (da allocare dinamicamente) i numeri maggiori o uguali alla media. Infine il sottoprogramma restituisce al chiamante il nuovo array e la sua dimensione. Prestare attenzione al caso particolare in cui l'array in ingresso sia vuoto. Scrivere un programma che chiede all'utente di specificare la dimensione della serie di numeri interi da acquisire (massimo 30 numeri) e poi i dati. Il programma chiama il sottoprogramma arrayMaggiori() e visualizza il risultato su due righe (la prima riga contiene la dimensione del nuovo array, la seconda riga i suoi dati.
Detto questo, mettendo le printf nel sottoprogramma esso funziona correttamente, quindi il ciclo logico è corretto, ma venendomi chiesto di restituire "il nuovo array e la sua dimensione" non so come muovermi.
MIO CODICE
codice:
#include <stdio.h>#include <stdlib.h>
#define MAX 30
int arrayMaggiori(int big[], int *small, int n);
int main (int argc, char*argv[])
{
int big[MAX], i, n, dim, *small, z;
do{
printf("dim array: ");
scanf("%d", &n); /*dimensione array*/
}while(n>30 || n<0);
for(i=0; i<n; i++)
scanf("%d", &big[i]);
dim=arrayMaggiori(big, (int*)small, n);
printf("la dimensione del secondo array è %d\n", dim);
for(z=0; z<dim; z++)
printf("%d ", *(small+z));
return(0);
}
int arrayMaggiori(int big[], int *small, int n)
{
int acc, i, j;
float media;
for(i=0, media=0; i<n; i++)
media+=big[i];
media=(media/n);
for(i=0, acc=0; i<n; i++) {
if(big[i]>=media)
acc++;
}
small=(int*)malloc(sizeof(int)*acc);
if (small==NULL)
printf("errore di allocazione");
else{
printf("allocazione riuscita\n");
for(i=0, j=0; i<n; i++) {
if(big[i]>=media) {
*(small+j)=big[i];
j++;
}
}
}
return acc;
}
il terminale compila in questo modo:
fi-user@fiuser-VirtualBox:~/Scrivania/Esercizi$ gcc arraymaggiori.c -Wall -o arraymaggiori
arraymaggiori.c: In function ‘main’:
arraymaggiori.c:19:5: warning: ‘small’ is used uninitialized in this function [-Wuninitialized]
fi-user@fiuser-VirtualBox:~/Scrivania/Esercizi$ ./arraymaggiori
dim array: 3
7
6
2
allocazione riuscita
la dimensione del secondo array è 2
421249921 -326959104 (ovviamente sono questi i valori errati)
Grazie a tutti e buone feste