Voglio realizzare una funzione che prende in ingresso un vettore, composto di 0 e 1, e inserisce o toglie numero fino ad arrivare a un certo numero di uni. Es:
numero uni: 3
input: 0 0 1 0 output: 1 0 1 1
dove mettere o togliere gli uni si può fare in maniera casuale.
Ho realizzato una funzione ma non gira, mi si blocca in uno strano punto:
Vi scrivo anche le due funzioni che utilizzo in essa, una che conta il numero di occorrenze di un numero in un vettore di interi:codice:void bilancia(int *v, int costante_uni, int dim) { int i,j, num_uni, differenza; int *zeri, *uni, *da_cambiare; num_uni = conta_n(v, dim, 1); /*se ci sono troppi uno*/ if(num_uni>costante_uni) { printf("troppi uni\n"); /*metto gli indici degli uni in un vettore*/ uni = (int *)malloc(sizeof(int) * num_uni); for(i=0, j=0;i<dim;i++) { /*scrivo gli indici degli uni in un altro vettore*/ if(v[i] == 1) { uni[j] = i; j++; } } differenza = num_uni - costante_uni; /*alloco il vettore che conterrà gli indici dei numeri da cambiare*/ da_cambiare = (int *)malloc(sizeof(int) * differenza); genera_indici(num_uni, differenza,uni, da_cambiare); /*ora faccio le modifiche*/ for(i=0;i<differenza;i++) { v[uni[da_cambiare[i]]] = 0; } } else if(num_uni < costante_uni)/*ci sono troppi zeri*/ { printf("Troppi zeri\n"); /*metto gli indici degli zeri in un vettore*/ zeri = (int *)malloc(sizeof(int) * num_uni); for(i=0, j=0;i<dim;i++) { /*scrivo gli indici degli zeri in un altro vettore*/ if(v[i] == 0) { zeri[j] = i; j++; } } differenza = costante_uni - num_uni; /*alloco il vettore che conterrà gli indici dei numeri da cambiare*/ da_cambiare = (int *)malloc(sizeof(int) * differenza); genera_indici(num_uni, differenza, zeri, da_cambiare); /*ora faccio le modifiche*/ for(i=0;i<differenza;i++) { individuo[zeri[da_cambiare[i]]] = 1; } } }
E una funzione che genera casualmente due indici di un vettore passatogli:codice:/*funzione che conta il numero di occorrenze del numero passato in un vettore*/ int conta_n(int *v, int dim, int n) { int contatore=0, i; for(i=0;i<dim;i++) { if(v[i] == n) { contatore++; } } return(contatore); }
Aiuto!codice:void genera_indici(int dim, int k, int *v, int *r) { int i, x,j, doppioni; for(i=0;i<k;i++) { doppioni = 0; r[i] = RANDOM(dim); for(j=0;j<k;j++) { if(r[i] ==r[j]) { doppioni++; } } if(doppioni>1) { /*voglio un altro numero che sostituisca quello corrente*/ i--; } } }

Rispondi quotando