Concetti:
Algoritmi basati sull'utilizzo di vettori (array)
Testo:
Realizzare un programma che:
DIM_VETT
pari a 20.A titolo esemplificativo, dato il seguente vettore:
int v[DIM_VETT] = {2, 2, 3, 3, 3, 4, 2, 2, 4, 3, 3, 3, 3, 5, 5, 6, 1, 2, 3, 3};
il programma dovrà fornire il seguente output:
Valore 2 ripetuto 2 volte a partire da 0 Valore 3 ripetuto 3 volte a partire da 2 Valore 2 ripetuto 2 volte a partire da 6 Valore 3 ripetuto 4 volte a partire da 9 Valore 5 ripetuto 2 volte a partire da 13 Valore 3 ripetuto 2 volte a partire da 18
Soluzione:
/******************************************* Dato un vettore, ad esempio: v: 2 2 3 3 3 4 2 2 4 3 3 3 3 5 5 6 1 2 3 3 i cui elementi sono i rispettivamente in posizione POS : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 individuare i valori adiacenti ripetuti piu' di una volta nel vettore, indicandone la posizione del primo elemento della ripetizione e di quanti elementi e' composta la ripetizione. Nel caso del vettore qui riportato, l'output del programma dovra' essere: Valore 2 ripetuto 2 volte a partire da 0 Valore 3 ripetuto 3 volte a partire da 2 Valore 2 ripetuto 2 volte a partire da 6 Valore 3 ripetuto 4 volte a partire da 9 Valore 5 ripetuto 2 volte a partire da 13 Valore 3 ripetuto 2 volte a partire da 18 *******************************************/ #include <stdio.h> #define DIM_VETT 20 int main(){ int v[DIM_VETT] = {2, 2, 3, 3, 3, 4, 2, 2, 4, 3, 3, 3, 3, 5, 5, 6, 1, 2, 3, 3}; int i, j, n_rip, pos; /* Stampa vettore */ printf("VETT: "); for(i=0; i<DIM_VETT; i++) printf("%3d ", v[i]); printf("\n"); /* Stampa posizione elementi in vettore */ printf("POS : "); for(i=0; i<DIM_VETT; i++) printf("%3d ", i); printf("\n"); /* Prima soluzione */ printf("\nSOLUZIONE 1\n"); i = 0; pos = 0; n_rip = 1; for(i=0; i<DIM_VETT-1; i++){ if(v[i]==v[i+1]){ n_rip++; }else{ if(n_rip>1){ printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos); } n_rip = 1; pos = i+1; } } if(n_rip>1){ printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos); } /* Seconda soluzione */ printf("\nSOLUZIONE 2\n"); i=0; while(i<DIM_VETT-1){ pos = i; n_rip = 1; j = i+1; while(v[i]==v[j] && j < DIM_VETT){ n_rip++; j++; } if(n_rip>1){ printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos); i = j; }else{ i++; } } }