Corsi registrati su
C, C++, Python, JavaScript
Corsi in diretta per la formazione di Front End Developer e Back End Developer
In questa breve lezione impareremo a generare dei numeri casuali senza ripetizioni in C. Abbiamo già studiato come è possibile caricare un array con numeri random, ovvero con dei numeri a caso tra un intervallo di valori, potete consultare il tutorial al link: array random in C.
Algoritmo per generare i numeri casuali senza ripetizioni in C
Supponiamo di voler inserire in un vettore 10 numeri casuali da 1 a 30 ma senza ripetizioni.
Per generare dei numeri random ricordiamo che serve innanzitutto inizializzare il generatore sull’ora attuale dell’elaboratore time(0): srand(time(0)). Questo infatti garantisce che ogni volta si ottengano valori diversi.
Dopo generiamo dei numeri casuali da 1 a 30 utilizzando la funzione rand()%30+1. Quindi con un ciclo for inizializziamo il vettore con i numeri casuali ma facciamo un controllo che questi numeri non siano già stati inseriti con un ciclo for più interno.
Ecco dunque il listato completo:
#include <stdio.h>
#include <time.h>
#define N 20
int main() {
int a[N];
int i, j;
srand(time(0)); //inizializza il generatore sull'ora attuale dell'elaboratore time(0)
for(i=0;i<N;i++) {
a[i]=rand()%30+1;
for(j=0;j<i;j++) {
if(a[i]==a[j]) {
i--;
break;
}
}
}
for(i=0;i<N;i++)
printf("%d\n", a[i]);
return 0;
}
Chiaramente questo è solo un esempio di come risolvere l’algoritmo per generare numeri casuali senza ripetizioni in C.
La soluzione migliore in questo caso è utilizzare un ciclo while, provate a trovare una soluzione e scriverla nei commenti.
Alcuni link utili
Allocazione dinamica della memoria con malloc
Esercitazione sulle struct in C
Realizzare un menù di scelta in C
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Ricerca elementi in una matrice