Informa(ca. Appun( dal laboratorio 5

Documenti analoghi
Informatica! Appunti dal laboratorio 1!

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1

Informatica! Appunti dal laboratorio 1!

Qualsiasi programma in C++ segue lo schema:

Informatica! Appunti della lezione 8!

Informa(ca. Appun( della lezione 4

Le strutture di controllo in C++

Tipi strutturati - struct

Esercitazione 2. Espressioni booleane Il comando if-else

Concetto di stream. c i a o \0. c i a o \0. c i a o \0

INTRODUZIONE ALLA PROGRAMMAZIONE

Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1

Informatica. Appunti della lezione 9

Informa(ca Appun% dal laboratorio 4

Indice. I costrutti decisionali I cicli

Inf matica C.I. Metodologia Scientifica & Linguistica Mario&Pavone& &

L AMBIENTE CODE BLOCKS E L IO

Corso di Fondamenti di Informatica Classi di istruzioni 2

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

a.a Codice corso: 21012

Indovina la lettera...

Algoritmo di ordinamento per sostituzione. Esempio : dato l array :

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

CL 3 - Es_01.cpp. #include <iostream> using namespace std;

Esercitazioni di Informatica B A.A. 2010/2011 Pseudocodice. Nicola Vitucci

Codifica: dal diagramma a blocchi al linguaggio C++

eccezioni Alberto Ferrari Alberto Ferrari Programmazione di applicazioni SW

IL COSTRUTTO SEQUENZA

Ingegneria del software

Qualsiasi programma in C++ segue lo schema:

Informatica A aa Seconda prova in itinere. Esempi di esercizi possibili

Fondamenti di Informatica Ing. Biomedica

L AMBIENTE CODE BLOCKS E L IO

Per implementare l Algoritmo si devono usare 2 coppie di indici :

Nel seguito, istruzione1 e istruzione2 possono essere un blocco di codice { }, cioè più istruzioni

Lezione 6 Introduzione al C++ Mauro Piccolo

Classe Squadra. #include <iostream> using namespace std;

Inf matica C.I. Metodologia Scientifica & Linguistica Mario&Pavone& &

Il C nel C++ Struttura di un linguaggio. regole per la definizione i simboli. regole per la composizione dei simboli

Struttura di un linguaggio

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Istruzioni di controllo

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Informa(ca Appun% dal laboratorio 1

Strutture di Controllo IF-ELSE

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Costrutti iterativi. Utilizzo dei costrutti iterativi

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

STRUTTURE DI CONTROLLO DEL C++

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Descrizione di un algoritmo

Prova Scritta del 20/09/10

Inf matica C.I. Metodologia Scientifica & Linguistica Mario&Pavone& &

Generazione di numeri pseudo-casuali

Ricerca binaria (o dicotomica) di un elemento in un vettore

Laboratorio di Programmazione e Calcolo

Appunti di informatica. Lezione 8 anno accademico Mario Verdicchio

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

Università degli Studi di Ferrara

Indice. costrutti decisionali I cicli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Le strutture di controllo

Silvia Rossi. Algoritmi di Ricerca. Informatica. Lezione n. Parole chiave: Ricerca Lineare Ricerca Binaria. Corso di Laurea:

PROGRAMMAZIONE IN C E C++ Prof. Enrico Terrone A. S: 2014/15

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

Passaggio di parametri per valore

Corso di Fondamenti di Informatica Tipi strutturati: Stringhe

Istruzioni Condizionali

Università degli Studi di Ferrara

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

PROGRAMMAZIONE IN C E C++

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

#include <iostream.h> #include <stdlib.h> int main(){ return 0;

For e do. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

INTRODUZIONE AL C++ CLASSIFICAZIONE

4. Accesso diretto per gli archivi con record a lunghezza costante

Linguaggio C. Condizioni composte (operatori logici)

FUNZIONI. Ivan Lanese

Elementi di Informatica A. A. 2016/2017

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 08/02/2017/ Foglio delle domande / VERSIONE 1

Informa.ca. Algebra binaria e logica. Appun. della lezione 3

Ing. Lorenzo Vismara

Ricerca in una sequenza ordinata

INTRODUZIONE ALLA PROGRAMMAZIONE IN C++ PRIMA LEZIONE

Ricerca sequenziale di un elemento in un vettore

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

Come scrivere bene codice? (1 di 1)

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Laboratorio di programmazione

Transcript:

Informa(ca Appun( dal laboratorio 5

Esercizio 1 Scrivere un programma in cui l utente ha 3 tenta(vi per indovinare un numero compreso tra 1 e 10 scelto a caso.

SoAoproblemi L esercizio comprende almeno due soaoproblemi da risolvere: casualità dei numeri numeri compresi tra 1 e 10 3 tenta(vi Affron(amoli uno per volta

Casualità Il conceao di casualità (randomness in inglese) è piuaosto controverso. Anche un estrazione apparentemente casuale, come quella con i bussolol del SuperenaloAo, può in realtà essere analizzata e i suoi risulta( possono essere previs( con precisione, purché si conoscano le condizioni iniziali e si tenga conto delle leggi della fisica che regolano il movimento di tul gli oggel fisici coinvol(.

Casualità come imprevedibilità Di faao, i calcoli per fare tali previsioni sono talmente complessi da essere al di fuori della portata di qualunque sistema esistente. Perciò, visto che nessuno riesce a prevederne l esito, l estrazione del SuperenaloAo viene considerata casuale. La casualità, quindi, più che il risultato di un non meglio definito caso (la cui esistenza, messa in dubbio dalle leggi della fisica classica, viene riproposta dalla meccanica quan(s(ca pur rimanendo sempre piuaosto vaga e controversa), può essere meglio vista come la caraaeris(ca di fenomeni che non riusciamo a prevedere.

Pseudo- casualità Per oaenere imprevedibilità su un calcolatore, si usa una funzione matema(ca rand molto complessa, che prende in input i numeri naturali in sequenza (0,1,2, ) e res(tuisce come risultato dei numeri (rand(0), rand(1), rand(2), ) che hanno valori sparsi e senza un legame evidente (dato in realtà dalla stessa funzione rand ). I risulta( che escono dalla funzione rand appaiono ai nostri occhi come del tuao casuali, anche se in realtà sono l output di una funzione ben definita. Questa casualità apparente prende il nome di pseudo- casualità.

Molto pseudo, poco caso Il faao che rand sia solo una funzione matema(ca implementata in una libreria del C++ e non abbia nulla a che fare con il conceao di caso si rende evidente nel momento in cui la usiamo su 2 computer diversi con questa istruzione: cout << rand(); Su entrambi gli schermi compare 41. Un caso? Eseguita su 100 computer diversi, questa istruzione stamperà 41 sui 100 schermi. Chiaramente non si traaa del caso.

Aumentare l illusione del caso La cosa non deve stupire: la stessa funzione, proveniente dalla stessa libreria, usata su computer che funzionano tul allo stesso modo deve necessariamente portare allo stesso risultato. Per mescolare le carte e oaenere risulta( diversi che diano l illusione di casualità, facciamo dipendere la funzione rand dall istante in cui il programma viene lanciato in esecuzione. A meno che le persone non si coordinino apposta, le varie esecuzioni sono lanciate in istan( di tempo diversi, e quindi le diverse esecuzioni della rand daranno risulta( diversi, apparentemente casuali. Per oaenere ciò, il programma deve contenere all inizio l istruzione srand((me(null));

Numeri tra 1 e 10 La funzione rand res(tuisce un numero intero qualsiasi: cout << rand(); //numero intero stampato su schermo int x = rand(); //numero intero salvato in una variabile Come facciamo ad assicurare che il numero intero sia compreso tra 1 e 10? Usiamo la funzione modulo (%), che res(tuisce il resto della divisione intera per un numero dato: x = rand()%10; In questo modo x è compreso tra 0 e 9, ossia è un possibile resto di una divisione intera per 10. Per avere l intervallo tra 1 e 10 dobbiamo semplicemente aggiungere 1: x = rand()%10 + 1;

Tre tenta(vi Ci vuole, come già visto in una soluzione di un laboratorio precedente, una variabile che funga da contatore L input del tenta(vo da parte dell utente deve essere inserito in un ciclo che dipende da due condizioni: il numero non è stato indovinato ci sono ancora tenta(vi Quando una delle condizioni viene meno, il ciclo si conclude A seconda della condizione che viene meno, l utente avrà vinto oppure perso

Codice della soluzione #include <iostream> using namespace std; int main(){ srand((me(null)); int x; int y = rand()%10 + 1; //il valore di y è scelto pseudo- casualmente ed è compreso //tra 1 e 10 int tent = 3; do{ cout << indovina ; cin >> x; tent- - ; }while(x!=y and tent>0); if (x == y) cout << hai vinto!\n ; else cout << hai perso!\n ; } system( PAUSE ); return 0; 11

Esercizio 2 Scrivere un programma che visualizzi una sequenza di terne numerate di numeri estral a caso compresi tra 0 e 100 che si conclude con la prima terna in cui tul e tre i numeri sono uguali tra loro. Es.: 1) 23 100 35 2) 44 1 57 3) 89 94 43 4) 38 38 38

Numeri tra 0 e 100 In questo caso l intervallo dei numeri che ci interessano è quello dei res( delle divisioni per 101 (da 0 se la divisione non ha resto, fino a 100), quindi i numeri pseudo- casuali saranno estral eseguendo la seguente istruzione: rand()%101

TuL e tre i numeri uguali Dal momento che il programma deve con(nuare a visualizzare delle terne, naturalmente l istruzione di estrazione dei numeri sarà inserita in un ciclo, ma qual è la condizione da cui tale ciclo dipende? Una nuova estrazione deve avvenire se i numeri non sono tul uguali, ossia basta che vi siano 2 numeri tra quelli estral diversi tra loro, quindi la condizione sarà: x!=y or y!=z or x!=z La parte soaolineata della condizione in realtà non serve perché non influisce sul valore di verità della condizione: se x!=y è vera oppure y!=z è vera, la condizione è comunque vera indipendentemente da x!=z; se x!=y e y!=z sono entrambe false, vuol dire che x e y sono uguali e y e z sono uguali, allora anche x e z sono uguali e quindi x!=z è sicuramente falsa.

Codice della soluzione #include <iostream> using namespace std; int main(){ srand((me(null)); int x, y, z, c; c = 1; do{ x = rand()%101; y = rand()%101; z = rand()%101; //non sono 3 numeri uguali: ci sono 3 estrazioni cout << c << ) << x << << y << << z << \n ; c++; }while(x!=y or y!=z); system( PAUSE ); return 0; } 15

Esercizio 3 Scrivere un programma che visualizzi una sequenza di terne numerate di numeri estratti a caso compresi tra 0 e 100 E IN ORDINE CRESCENTE che si conclude con la prima terna in cui tutti e tre i numeri sono uguali tra loro. Es.: 1) 23 35 100 2) 1 44 57 3) 43 89 94 4) 38 38 38

Ordine crescente Questo esercizio è molto simile al precedente ma c è un ulteriore problema da risolvere: i 3 numeri estratti non possono essere visualizzati nell ordine con cui sono stati estratti, ma i loro valori devono essere confrontati Aggiungiamo i confronti prima delle operazioni di output Naturalmente gli output dipendono dal risultato di tali confronti, quindi useremo dei costrutti IF e IF ELSE Aiutiamoci con un diagramma di flusso

Cerchiamo il più piccolo e lo stampiamo, dopo di che confrontiamo gli altri due e li stampiamo in ordine. Se né x né y sono il più piccolo, lo è z. x, y, z sì y x y<=z? sì z no sì x y x<=z? x <= y and x <= z? sì z no no y <= x and y <= z? sì no x z x<=y? y no z y z x y x

Codice della soluzione #include <iostream> using namespace std; int main(){ srand(time(null)); int x, y, z, c; c = 1; do{ x = rand()%101; y = rand()%101; z = rand()%101; cout << c << ) ; if (x<=y and x<=z){ //x è il più piccolo cout << x << ; if (y<=z) //y è più piccolo di z cout << y << << z << \n ; else //y NON è più piccolo di z cout << z << << y << \n ; } else {//x NON è il più piccolo if (y<=x and y<=z) { //y è il più piccolo cout << y << ; if (x<=z) //x è più piccolo di z cout << x << << z << \n ; else //x NON è più piccolo di z cout << z << << x << \n ; }else{//y NON è il più piccolo, quindi z lo è cout << z << ; if (x<=y) //x è più piccolo di y cout << x << << y << \n ; else //x NON è più piccolo di y cout << y << << x << \n ; } } c++; }while(x!=y or y!=z); system( PAUSE ); return 0; } 19

Soluzione alternativa Naturalmente è possibile utilizzare la selection sort o la bubble sort per ordinare i tre numeri estratti E da considerarsi l opportunità di inserire i tre numeri in un array 20