Risolto esercizio C++ per programma con random

Davide27

Utente Bronze
4 Marzo 2022
40
19
1
25
salve a tutti dovrei creare un programma per estrarre gli interrogati in una classe (in teoria servono usare dei vettori, giusto?). Il programma deve:
1. acquisisce il numero degli studenti
2. se digito * ne estrae uno casualmente
3. fino a che inserisco di nuovo * ne estrae un altro (però tra i numeri da estrarre non devono essere più presenti i valori già estratti prima)

Per caso qualcuno sa risolverlo e spiegarmelo perché non riesco a capirlo.
Grazie a tutti!
 
Ultima modifica:
salve a tutti dovrei creare un programma per estrarre gli interrogati in una classe (in teoria servono usare dei vettori, giusto?). Il programma deve:
1. acquisisce il numero degli studenti
2. se digito * ne estrae uno casualmente
3. fino a che inserisco di nuovo * ne estrae un altro (però tra i numeri da estrarre non devono essere più presenti i valori già estratti prima)

Per caso qualcuno sa risolverlo e spiegarmelo perché non riesco a capirlo.
Grazie a tutti!
Per la generazione di numeri pseudo-random puoi usare la seguente sintassi:
C++:
#include <ctime> //Importo la libreria per la generazione random
int seme = time(NULL); //Utilizzo l'orologio del processore (che misura in millisecondi) per essere sicuro di generare numeri sempre diversi anche in istanti di tempo vicini
srand(seme); //Inizializzo l'algoritmo di generazione random a partire dalla variabile seme
rand()//Da utilizzare quando voglio generare effettivamente un numero
rand() % N + 1; //Da utilizzare quando voglio generare numeri casuali in un intervallo che va da 1 a N
Messaggio unito automaticamente:

Farlo in python è molto più comodo comunque:
Python:
import random

lista = []

print("Inserire numero studenti")
studenti = int(input())

for i in range (studenti):
  lista.append(i+1)
 
while (True):
  print("Selezionare \'*' per generare un' estrazione o un altro carattere per uscire")
  azione = input()
  if (azione == '*'):
    numero = random.choice(lista)
    print(numero)
    lista.remove(numero)
  else:
    break
Se provi ad eseguire il codice che ho scritto (python) funziona. Il problema, secondo me, risiede nel come vuoi strutturare il programma. Infatti se utilizzi un ciclo "aperto" per generare estrazioni all'interno di un intervallo chiuso, prima o poi otterrai obbligatoriamente numeri già estratti. Secondo me dovresti fare un programma che chiede quante estrazioni fare e successivamente generare numeri che non si ripetono all'interno di un intervallo chiuso. Comunque, se dovesse servirti, sei libero di usare il codice che ho scritto. ;)
 
  • Grazie
Reazioni: Davide27
Per la generazione di numeri pseudo-random puoi usare la seguente sintassi:
C++:
#include <ctime> //Importo la libreria per la generazione random
int seme = time(NULL); //Utilizzo l'orologio del processore (che misura in millisecondi) per essere sicuro di generare numeri sempre diversi anche in istanti di tempo vicini
srand(seme); //Inizializzo l'algoritmo di generazione random a partire dalla variabile seme
rand()//Da utilizzare quando voglio generare effettivamente un numero
rand() % N + 1; //Da utilizzare quando voglio generare numeri casuali in un intervallo che va da 1 a N
Messaggio unito automaticamente:

Farlo in python è molto più comodo comunque:
Python:
import random

lista = []

print("Inserire numero studenti")
studenti = int(input())

for i in range (studenti):
  lista.append(i+1)
 
while (True):
  print("Selezionare \'*' per generare un' estrazione o 0 per uscire")
  azione = input()
  if (azione == '*'):
    numero = random.choice(lista)
    print(numero)
    lista.remove(numero)
  else:
    break
Se provi ad eseguire il codice che ho scritto (python) funziona. Il problema, secondo me, risiede nel come vuoi strutturare il programma. Infatti se utilizzi un ciclo "aperto" per generare estrazioni all'interno di un intervallo chiuso, prima o poi otterrai obbligatoriamente numeri già estratti. Secondo me dovresti fare un programma che chiede quante estrazioni fare e successivamente generare numeri che non si ripetono all'interno di un intervallo chiuso. Comunque, se dovesse servirti, sei libero di usare il codice che ho scritto. ;)
grazie mille!