Sei sulla pagina 1di 9

Un’altra struttura di selezione: switch.

Il seguente programma calcola il costo di un biglietto ferroviario per tre diverse


possibili destinazioni:
#include <iostream.h>
switch (variabile) {
int main (){ case costante1:
int destinazione, distanza, costo; istruzioni1;
printf(“Dove devi andare?”); break;
printf(“Digita 1 per Bolzano, 2 per Roma, case costante2:
3 istruzioni2;
per Milano\n”); break;
scanf(“%d”, &destinazione); …
default:
switch (destinazione) { istruzione_di_default;
case 1: }
distanza = 60;
break;
case 2:
distanza = 650;
break;
case 3:
distanza = 290;
break;
default:
printf(“ATTENZIONE: Non conosco
questa destinazione!\n”);
}
costo=distanza*0.20;
printf(“Il biglietto costa %d Euro”,
costo);
system(“PAUSE”);
return 0; }

1. Riscrivi il programma qui sopra usando il comando più volte il comando if.
2. Un ufficio ha il seguente orario di apertura: lunedì 8-12, mercoledì 14-18, venerdì
9-12, martedì, giovedì, sabato, domenica chiuso. Scrivi un programma che stampi
a video l’orario di apertura dell’ufficio in base al giorno desiderato dall’utente. (NB:
“Quale giorno desideri? Scrivi 1 per lunedì, 2 per martedì, …”).

3. DIFFERENZA switch/if:
Scriviamo ora un programma simile a quelli utilizzati per la gestione di un numero
che fornisce informazioni, ad esempio il call center di una compagnia telefonica.
Dopo la musichetta introduttiva la voce chiede all’utente di scegliere tra varie
opzioni:
”Digiti 1 se desidera conoscere le promozioni disponibili, digiti 2 se desidera
conoscere i dettagli del suo piano tariffario, digiti 0 se desidera parlare con un
operatore.”

Nella sezione dedicata alle promozioni la voce chiede all’utente di specificare la


sua età in modo da selezionare le opzioni più adatte a lui: se l’utente ha meno di
30 anni viene proposta l’opzione “Mille e Uno messaggi gratis!” (tasto 1) e
l’opzione “Addebita la chiamata al destinatario!” (tasto 2), se l’utente ha più di
30 anni viene proposta l’opzione “Businnes!” (tasto 1) e l’opzione “Happy
family!” (tasto 2).

Inventa tu le opzioni disponibili se si desiderano conoscere i dettagli del proprio


piano tariffario. Se invece l’utente sceglie di parlare con un operatore stampa a
video la frase: “Tutti gli operatori sono al momento occupati: la preghiamo
di richiamare più tardi!!!”.
La funzione rand()

Considera l’istruzione: int i = rand();

La funzione rand() (inclusa nella libreria <stdlib.h>) genera un numero intero


compreso tra 0 e RAND_MAX (una costante simbolica definita nella libreria stdlib.h).
In questo modo alla variabile intera i viene assegnato un valore intero casuale
compreso tra tali valori.
Esempio:
#include <iostream.h>
#include <stdlib.h>
int main () {
int alpha, beta;
alpha=rand(); beta=rand();
printf(“alpha=%d beta=%d \n”, alpha, beta) ;
system(“PAUSE”);
return 0; }

1. Considera l’espressione i=rand()%7+3; Quali sono i valori possibili per i?


2. **Scrivi l’espressione adatta per fare in modo che i assuma i seguenti valori:
a. 3, 4, 5, 6 c. 2, 4, 6, 8, 10
b. –3, -2, -1 d. 3, 5, 7, 9.

Se provate a far girare il programma precedente noterete che la funzione rand()


restituisce dei numeri che non sono effettivamente random: ogni volta che si ripete il
programma la sequenza di numeri restituita da rand() si ripete. Un modo per ottenere
dei numeri realmente casuali consiste nell’utilizzare l’orologio interno del computer:
//RANDOM CON L’OROLOGIO INTERNO
#include <iostream.h>
#include<stdlib.h>
#include<time.h>

int main(){
int x;
srand( time(NULL) ) ;
x=rand();
cout << x<<endl;
system(“PAUSE”);
return 0; }
Lo scopo dei prossimi esercizi è quello di creare un “assistente di matematica” per
alunni delle scuole elementari. Per ogni esercizio dovrai disegnare il diagramma di
flusso e poi scrivere il codice corrispondente.
1. (RANDOM1) Dichiara due variabili intere e assegna loro un valore casuale
utilizzando la funzione rand(). Stampa a video una frase che chieda al bambino di
inserire da tastiera la somma dei due valori. Acquisisci il valore e confrontalo con il
risultato corretto. Stampa “Bravo!” se il risultato è corretto, “Esercitati ancora”
altrimenti.
2. (RANDOM2) Avrai notato che i numeri random restituiti dalla funzione rand()
possono essere anche molto grandi: per facilitare il compito al tuo studente
vogliamo fare in modo che gli addendi siano numeri di una sola cifra. Come fare?
Quale espressione dovrai utilizzare allora? Modifica il programma in modo che gli
addendi possano essere solo numeri di 1 cifra.
3. (RANDOM3) Il tuo alunno migliora: vogliamo fare in modo che abbia la possibilità di
scegliere tra due livelli di difficoltà diversi. Modifica il programma RANDOM2 in
modo che l’alunno possa scegliere se utilizzare numeri di 1 cifra, oppure anche
numeri di due cifre.
4. (RANDOM4) Modifica il programma RANDOM3 della lezione precedente in
modo che lo studente possa decidere se lavorare sulla somma di due
numeri oppure sulla moltiplicazione. Oltre a scegliere l’operazione dovrà,
come prima, poter scegliere anche la difficoltà dell’esercizio.
5. (RANDOM5) Recupera gli appunti sul comando while() visto lo scorso anno
e modifica il programma precedente in modo che il bambino possa provare
più volte a digitare il risultato. Ferma il ciclo nel momento in cui il numero
dato da tastiera coincide con il risultato corretto.
STRUTTURE DI ITERAZIONE
1)
#include<iostream.h>
A=0
int main() {

int A=0;
s�
A<5 A=A+2

no
system(“PAUSE”);
return 0;
END }
2)
#include<iostream.h>
A=0

int main() {
A=A+2 int A=0;

s�
A<5
system(“PAUSE”);
return 0;
no
}

END

Vogliamo ora verificare se la funzione rand() genera effettivamente dei numeri


casuali. Simuleremo prima il lancio di una moneta e poi il lancio di un dado.

1. Scrivi un programma che simuli 1000 lanci di una moneta e conti quante
volte esce testa e quante volte croce. Fatti stampare a video una C se esce
croce, una T se esce testa. Terminati i 1000 lanci, stampa a video quante
volte è uscita testa e quante volte croce. Se il lancio fosse effettivamente
casuale cosa ti aspetti di trovare? Usa la struttura while(){}.
2. Riscrivi il programma precedente usando la struttura do{}while();

3. Vogliamo ora simulare il lancio di un dado; lasciando il dado si ottiene


casualmente un valore compreso tra 1 e 6. Come possiamo simulare questo
evento? Per verificare che la funzione rand() restituisca effettivamente
valori casuali, scrivi un programma che simuli 6000 lanci di un dado. Conta
quante volte escono i possibili risultati: rand() è effettivamente random?
NB: Da consegnare entro martedì 19 ottobre.
Scrivere su un file

Nell’esempio seguente si utilizza l’operatore << per scrivere su un file di testo.

#include <fstream.h>
#include<iostream.h>

int main () {
ofstream examplefile (“example.txt”, ios::out | ios :: app);

examplefile << “Questa è una riga su file. \n”;


cout<< “Questa è una riga a schermo!”<<endl;
examplefile << “Questa è un’altra riga su file.” << endl;

examplefile.close();

system(“PAUSE”);
return 0;
}

Verifica il funzionamento del programma di scrittura su file: fallo girare più volte e
verifica ogni volta cosa succede al file example.txt. Modifica il programma che simula
il lancio di un dado facendo in modo che scriva i risultati ottenuti su un file.
C++ E PROBABILITÀ

Probabilità classica (a priori):


La probabilità P di un evento è il rapporto tra il numero m di casi favorevoli e il numero
n dei casi possibili.

Probabilità statistica (a posteriori):


Dopo aver eseguito n prove di un esperimento, se tutte avvengono nelle stesse
condizioni e se n è un numero “sufficientemente” grande, la probabilità P di un evento
E è il rapporto tra il numero k delle prove nelle quali l’evento si è verificato e il numero
n delle prove effettuate (frequenza relativa dell’evento E).

1. Immagina di lanciare due dadi contemporaneamente: quali sono gli esiti possibili a
priori? Qual è la probabilità di ognuno? Rispondi completando la prima colonna
della tabella seguente.
Simula poi con il C++ il lancio di due dadi per 1000 volte, somma ogni volta i
valori usciti e salva gli esiti ottenuti in un file di Excel. Crea con Excel l’istogramma
delle frequenze relative di uscita di tutti gli esiti possibili.

----Inserisci qui l’istogramma----

Usa poi la funzione CONTA.SE() per completare la seconda colonna della tabella:
evento probabilità probabilità
classica statistica
Somma_dadi=0
Somma_dadi=1
Somma_dadi=2
Somma_dadi=3
Somma_dadi=4
Somma_dadi=5
Somma_dadi=6
Somma_dadi=7
Somma_dadi=8
Somma_dadi=9
Somma_dadi=10
Somma_dadi=11
Somma_dadi=12
Somma_dadi=13
Somma_dadi>5
Somma_dadi<8
4<Somma_dadi<7
Somma_dadi
dispari
Somma_dadi=mult
iplo di 3

2. Immagina di lanciare contemporaneamente 3 monete. Quali sono gli esiti possibili?


Qual è la probabilità di ognuno? Rispondi completando la prima colonna della
tabella.
Simula poi con il C++ (modifica il programma precedente) il lancio contemporaneo
di 3 monete. Ripeti il lancio per 1000 volte. Stampa su un file di Excel tutti gli esiti
ottenuti e crea l’istogramma delle frequenze di uscita.

----Inserisci qui l’istogramma----

Usa poi la funzione CONTA.SE() per completare la seguente tabella.


Evento (T=testa probabili probabilità
C=croce) tà statistica
classica
TTT
TCC (in qualsiasi
ordine)
TTC (in qualsiasi
ordine)
CCC
T al primo lancio
C al secondo lancio
T al primo e secondo
lancio

3. (SOLO 2D) Piero e Gianna hanno avuto 4 figli. Qual è la probabilità che abbiano
avuto 4 femmine? Qual è la probabilità che abbiano avuto almeno due maschi?
Rispondi creando una tabella come quelle proposte negli esercizi precedenti in cui
proponi tutti i casi possibili.
Simula poi con il C++ (modifica il programma precedente) la nascita dei 4 figli (è
come simulare il lancio di quante monete?). Ripeti la simulazione per 1000 volte.
Stampa su un file di Excel tutti gli esiti ottenuti e poi usa la funzione CONTA.SE()
per completare la seconda colonna della tua tabella.
Da spedire:
file di word, file di excel con tutti i calcoli, file di C++

VETTORI

1. Dichiara un vettore di 5 celle e riempile secondo le seguenti istruzioni: la prima


cella del vettore deve contenere il numero 7, la seconda cella il numero 3, la terza
cella deve essere la somma delle prime due, la quarta il prodotto tra la prima celle
e la terza. Stampa quindi a video il contenuto di tutte le celle del vettore. Qual è il
contenuto dell’ultima cella?
2. Dichiara un vettore di 8 celle e riempile con dei numeri interi casuali compresi tra 0
e 5. Stampa a video i numeri ottenuti. Esegui entrambe le richieste con un
do{}while().
3. Dichiara un vettore di 9 celle e riempilo con valori inseriti da tastiera dall’utente.
Esegui poi le seguenti operazioni:
a. stampa il contenuto del vettore su un file di testo;
b. controlla se nel vettore è contenuto il numero 3 e se sì, quante volte
compare;
c. conta quanti numeri pari sono contenuti nella lista;
d. sostituisci i numeri pari con uno zero;
e. stampa a video il nuovo vettore.

Da spedire entro il prossimo martedì