10. Numeri casuali
Esercizio 1
Prerequisiti: printf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una sequenza di 1000 numeri compresi tra 0 e 100 (estremi inclusi);
effettua la somma dei numeri generati;
calcola la media;
stampa i valori calcolati.
────══════♦☆♦══════────
Esercizio 2
Prerequisiti: printf(), if/else, while, random(), array, operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una sequenza di 1000 numeri compresi tra 0 e 100 (estremi inclusi);
per ciascun numero compreso nell'intervallo [0;100] mantiene il conteggio di quante volte è stato generato;
determina quale numero è stato generato più volte (in caso di parità considera il numero più piccolo);
stampa i conteggi di tutti i numeri e il numero generato più volte.
────══════♦☆♦══════────
Esercizio 3
Prerequisiti: printf(), scanf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
chiede all'utente di inserire un numero intero compreso tra 0 e 100 (estremi compresi) e ne controlla la correttezza (in caso di errore la richiesta dell'input deve essere ripetuta);
genera in modo pseudocasuale una sequenza di numeri compresi tra 0 e 100 (estremi inclusi) fin quando non è generato il numero richiesto dall'utente;
stampa la sequenza numerica generata e la lunghezza della sequenza stessa.
────══════♦☆♦══════────
Esercizio 4
Prerequisiti: printf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una sequenza di numeri compresi tra 0 e 100 (estremi inclusi) fin quando non si presentano due numeri consecutivi uguali;
stampa la sequenza numerica generata e la lunghezza della sequenza stessa.
────══════♦☆♦══════────
Esercizio 5
Prerequisiti: printf(), scanf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
chiede all'utente di inserire un numero intero compreso tra 1 e 6 (estremi inclusi) e ne controlla la correttezza (in caso di errore la richiesta dell'input deve essere ripetuta);
simula il lancio di due dadi mostrando i valori ottenuti ad ogni lancio;
termina la simulazione del lancio dei dadi quando si presentano due valori entrambi uguali al numero indicato dall'utente;
stampa il numero di lanci effettuati.
────══════♦☆♦══════────
Esercizio 6
Prerequisiti: printf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una sequenza di 10000 numeri compresi tra -10 e 10 (estremi inclusi);
calcola la media di tutti i numeri generati e ne stampa il valore;
ripete l'intero procedimento per tre volte.
────══════♦☆♦══════────
Esercizio 7
Prerequisiti: printf(), if/else, while, random(), array, operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale 25 numeri compresi tra 1 e 365;
verifica se sono stati generati almeno due numeri uguali;
ripete l'intero procedimento per 10000 volte e stampa il conteggio degli esiti favorevoli (almeno due numeri uguali) e quelli sfavorevoli.
Nota:
Questo procedimento simula il "paradosso del compleanno", che consiste nel calcolare la probabilità che almeno due persone appartenenti ad un gruppo (ad esempio una classe) festeggino il compleanno nello stesso giorno.
Suggerimento:
Definire un array di 365 elementi, inizialmente posto a zero, per portare il conteggio di quante volte è generato ciascun numero. Il caso favorevole si presenta quando almeno uno dei valori, al termine del procedimento, è maggiore di 1.
────══════♦☆♦══════────
Esercizio 8
Prerequisiti: printf(), if/else, while, random(), array, operatore modulo, funzioni
Scrivere un programma che effettua le seguenti operazioni:
simulando il gioco della tombola estrae in modo pseudocasuale tutti e 90 i bussolotti contenuti in un'urna, senza reimbussolamento (i bussolotti contenuti nell'urna sono numerati da 1 a 90);
stampa la sequenza generata.
────══════♦☆♦══════────
Esercizio 9
Prerequisiti: printf(), if/else, while, random(), array, operatore modulo, funzioni
Scrivere un programma che effettua le seguenti operazioni:
considera i seguenti 20 numeri che rappresentano le maglie dei giocatori di una squadra di calcio: 1, 3, 5, 7, 8, 9, 10, 11, 15, 33, 44, 45, 50, 55, 70, 77, 88, 89, 90, 99;
estrae casualmente, tramite il numero di maglia, due giocatori differenti che dovranno partecipare alla conferenza stampa;
stampa i numeri estratti.
Suggerimento:
Utilizzare la funzione estrazione già discussa nell'esercizio 8.
────══════♦☆♦══════────
Esercizio 10
Prerequisiti: printf(), if/else, while, random(), array, operatore modulo, funzioni
Scrivere un programma che effettua le seguenti operazioni:
considera le matrici di 1200 biglietti venduti che vanno dal numero 1003 al numero 1202;
estrae casualmente i 5 biglietti dei vincitori ;
stampa i biglietti estratti.
Suggerimento:
Utilizzare la funzione estrazione già discussa nell'esercizio 8.
────══════♦☆♦══════────
Esercizio 11
Prerequisiti: printf(), scanf(), if/else, while, random(), array, operatore modulo, funzioni
Scrivere un programma che effettua le seguenti operazioni:
chiede all'utente di inserire tre numeri interi diversi compresi tra 1 e 90 (i valori devono essere controllati e in caso di errore deve essere richiesto il reinserimento di tutti e tre i numeri);
simulando le estrazioni del lotto, estrae 5 numeri da un'urna di 90 numeri compresi nell'intervallo [1; 90] (i numeri estratti devono essere stampati);
determina se i tre numeri inseriti dall'utente costituiscono un terno rispetto ai numeri estratti (cioè se tutti e tre sono inclusi tra i numeri estratti);
stampa l'esito.
────══════♦☆♦══════────
Esercizio 12
Prerequisiti: printf(), if/else, while, random(), operatore modulo, float
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale 100 numeri con parte decimale (di tipo float) nell'intervallo [0;1] e determina minimo e massimo;
stampa i numeri generati, il minimo e il massimo.
────══════♦☆♦══════────
Esercizio 13
Prerequisiti: printf(), if/else, while, random(), operatore modulo, float
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una coppia di numeri con parte decimale (di tipo float) ciascuno dei quali è compreso nell'intervallo [0;1];
interpreta la coppia di valori come una coordinata in un sistema cartesiano e determina la distanza dall'origine degli assi;
stampa la coordinata e la distanza dall'origine;
ripete il procedimento per 5 volte.
────══════♦☆♦══════────
Esercizio 14
Prerequisiti: printf(), if/else, while, random(), operatore modulo, float, funzioni
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale una coppia di numeri con parte decimale (di tipo float) ciascuno dei quali è compreso nell'intervallo [-1;1];
interpreta la coppia di valori come una coordinata in un sistema cartesiano e determina il quadrante nel quale cade la coordinata.
Note:
I quadranti sono numerati a partire da quello in alto a destra in senso antiorario pertanto in base ai segni di ascissa e ordinata risulta: (+; +) quadrante 1; (-; +) quadrante 2; (-; -) quadrante 3; (+; -) quadrante 4.
Suggerimento:
Per generare in modo pseudocasuale un numero con parte decimale nell'intervallo [-1; 1] si suggerisce di generare prima un numero intero nell'intervallo [-1; 1[ e di generare successivamente la parte decimale compresa in [0; 1] che va sommata alla parte intera.
────══════♦☆♦══════────
Esercizio 15
Prerequisiti: printf(), if/else, while, random(), operatore modulo, float, funzioni
Scrivere un programma che effettua le seguenti operazioni:
genera in modo pseudocasuale tre numeri con parte decimale (di tipo float) ciascuno dei quali è compreso nell'intervallo [-10;50];
determina se la sequenza generata è crescente, decrescente o altalenante.
Suggerimento:
Per generare un numero con parte decimale in un intervallo è possibile avvalersi della funzione frand() discussa nell'esercizio 14.
────══════♦☆♦══════────
Esercizio 16
Prerequisiti: printf(), scanf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
simula l'esito di una sequenza di 1000 partite alla roulette fatte contro il banco;
il giocatore sceglie un numero compreso tra 1 e 36 (estremi inclusi) e lo mantiene per tutte le partite;
in ogni partita il giocatore punta sempre una sola fiche;
ad ogni mano è estratto un numero compreso tra 0 e 36 (estremi inclusi);
se è estratto lo stesso numero scelto dal giocatore allora questi totalizza una vincita di 36;
dopo ogni partita il banco incassa la fiche della puntata;
al termine della sequenza delle 1000 partite determinare il punteggio totalizzato dal banco e quello totalizzato dal giocatore.
────══════♦☆♦══════────
Esercizio 17
Prerequisiti: printf(), scanf(), if/else, while, random(), operatore modulo
Scrivere un programma che effettua le seguenti operazioni:
simula l'esito di una sequenza di 1000 partite alla roulette fatte contro il banco;
il giocatore sceglie una parità (pari o dispari) e la mantiene per tutte le partite;
in ogni partita il giocatore punta sempre una sola fiche;
ad ogni mano è estratto un numero compreso tra 0 e 36 (estremi inclusi);
se è estratto un numero diverso dallo zero con la stessa parità scelta dal giocatore questi incassa 2 fiche;
dopo ogni partita il banco incassa la fiche della puntata;
al termine della sequenza delle 1000 partite determinare il punteggio totalizzato dal banco e quello totalizzato dal giocatore.
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 98. Esercizi
Paragrafo: 10. Numeri casuali
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Introduttivi - 02. Quesiti strutturati - 03. Interpretazione del codice - 04. Diagrammi di flusso - 05. Array - 06. Tipi numerici - 07. Programmazione strutturata - 08. Caratteri e stringhe - 09. File - 10. Numeri casuali - 11. Riepilogativi - 12. Progettazione guidata