PDA

Visualizza la versione completa : [c++]problema con dimensione array


ojalà
14-04-2015, 19:25
Ciao,

ho fatto una funzione che prende in ingresso un array T e ne estrae i numeri pari. Questi numeri dispari li metto dentro un altro array che passo sempre alla funzione come parametro.
Alla fine ciclo l'array p che contiene solo i numeri pari e lo voglio stampare.
Il mio problema è: quanto grande devo fare l'array di partenza visto che all'inizo non so quanto è grande? Perchè alla fine quando ciclo su quell'array ho dei risultati strani a video.
Io ora l'ho definito int p[10];
Ecco il codice:

void pari_dispari(int X[], int n , int p[]){
int i,j;
for(i=0;i<n;i++){
if(X[i]%2==0){
p[i]=X[i];
}
}
}


int main(int argc, char** argv) {

int i,T[10]={17,26,12,18,39,22,14,20,21,29};

int p[10];
pari_dispari(T,10,p);

for(i=0;i < 10;i++){
cout << p[i]; //stampo a video
}

oregon
14-04-2015, 20:18
Nella funzione devi usare un altro contatore ad esempio j, che userai per il vettore p da incrementare solo se assegni un valore a p.
Questo contatore lo devi restituire ( funzione int e non void) in modo che nel main la fir sia limitata da questo contatore.

ojalà
14-04-2015, 22:26
OK ho capito..ma non c e modo di risolvere con una funzione void?

oregon
14-04-2015, 22:39
OK ho capito..ma non c e modo di risolvere con una funzione void?

Puoi sempre utilizzare un quarto argomento, un puntatore a intero, attraverso il quale restituisci il contatore j

ojalà
15-04-2015, 09:44
riesci a mostrarmi come fare? perchè ho provato ma non mi funziona..ecco il codice:
void pari_dispari(int X[], int n , int p[], int *K){
int i,j;
*k=0;
for(i=0;i<n;i++){
if(X[i]%2==0){
p[i]=X[i];
k++;
}
}
}


int main(int argc, char** argv) {

int i,T[10]={17,26,12,18,39,22,14,20,21,29};

int p[10];
int k;
pari_dispari(T,10,p, &k);

for(i=0;i < k;i++){
cout << p[i]; //stampo a video
}

oregon
15-04-2015, 10:10
Ma non hai ancora modificato la funzione utilizzando il secondo indice come ti avevo detto prima.

Andiamo... ragionaci un po'

ojalà
15-04-2015, 12:46
l'ho fatto aggiungendo k che passo alla funxione come indirizzo:

void pari_dispari(int X[], int n , int p[], int *K){
int i,j;
*k=0;
for(i=0;i<n;i++){
if(X[i]%2==0){
p[i]=X[i];
*k++;
}
}
}


int main(int argc, char** argv) {

int i,T[10]={17,26,12,18,39,22,14,20,21,29};

int p[10];
int k;
pari_dispari(T,10,p, &k);

for(i=0;i < *k;i++){
cout << p[i]; //stampo a video
}

oregon
15-04-2015, 15:21
1) allora a cosa serve j nella funzione?

2) e dove utilizzi k come indice nella funzione? In quale vettore?

Loading