I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI

Slides:



Advertisements
Presentazioni simili
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Advertisements

Sottoprogrammi: funzioni e procedure
Dati, istruzione e pseudocodice
Scomposizione funzionale
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Linguaggi algoritmici
Iterazione while – do while - for.
Linguaggio C++ Selezione.
Struttura di un programma
Selezione A. Ferrari.
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Dal problema al programma
I linguaggi di programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F3 Iterazione.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Algoritmi e Programmazione
Le funzioni.
Fondamenti di Informatica
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Il computer ragiona? Problemi e algoritmi.
1 Le competenze di base dell'asse matematico Utilizzare le tecniche e le procedure del calcolo aritmetico ed algebrico, rappresentandole anche sotto forma.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione l
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Unità Didattica 1 Algoritmi
Primi Elementi di Programmazione in C++
Strutture di controllo in C -- Flow Chart --
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Gli algoritmi.
Algoritmi e diagrammi di flusso
Elementi di Informatica
Elementi di Informatica
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Dall’algoritmo al programma.
ELEMENTI DI PROGRAMMAZIONE
Algoritmi e Programmazione strutturata
L' ARCHITETTURA DI VON NEUMANN
PROGRAMMAZIONE: linguaggi
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Linguaggio C++ Fondamenti Un primo semplice esempio:
ECDL Patente europea del computer
1 Nuovo Obbligo Scolastico: Gli Assi Culturali. 2 Asse dei Linguaggi Asse Matematico Asse Scientifico-Tecnologico Asse Storico Sociale.
Linguaggi per COMUNICARE
Programma di Informatica Classi Prime
IO E LA MATEMATICA PROCEDURALE
DIVERTIRSI CON SCRATCH
Dal problema all’ algoritmo
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Che cos’è un algoritmo? La vita di tutti i giorni è scandita da sequenze di azioni che compiamo automaticamente nell’ ordine esatto.
Scrivere e compilare programmi
Algoritmi.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Problemi, algoritmi e programmazione
ALGORITMI Dal problema al programma Definizione di algoritmo
Il computer ragiona? Problemi e algoritmi. Paola Pianegonda2 Cos’è un problema?  Problema è qualsiasi situazione della quale non conosciamo la soluzione.
Programmazione dei Calcolatori Elettronici
Dal problema al programma
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Istruzioni e algoritmi. Istruzioni Operative I passi elementari che compongono l’algoritmo sono le istruzioni. Distinguiamo: Istruzioni di input Istruzioni.
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Dal PROBLEMA all’ALGORITMO
Transcript della presentazione:

I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI L’ALGORITMO I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI FINE

L’ALGORITMO Informalmente, un algoritmo è una procedura ben definita che serve per risolvere un dato problema E’ una sequenza di passi che prende dei valori come input e produce altri valori come output Più precisamente, un algoritmo è un procedimento di calcolo , descrivibile con un numero finito di operazioni che conducono al risultato ALGORITMO

Diffusione degli algoritmi Le tecniche di progettazione di algoritmi e di analisi di correttezza e di efficienza si sono evolute nella seconda metà del XX secolo grazie alla diffusione dei calcolatori elettronici Ovunque si impieghi un calcolatore occorrono algoritmi corretti e efficienti che ne utilizzino al massimo le possibilità Esempi di algoritmi efficienti: controllo dei voli aerei regolazione reattori nucleari reperimento d’informazioni da archivi smistamento di comunicazioni telefoniche gioco degli scacchi controllo della produzione di una catena di montaggio ALGORITMO

IL PROGRAMMA Gli algoritmi sono astratti e per controllarne il funzionamento devono essere realizzati con un qualche strumento concreto Ad esempio la descrizione di una ricetta di cucina è un algoritmo ma la preparazione della pietanza è la realizzazione della ricetta. E’ solo allora che si vede se la ricetta “funziona” Altro esempio può essere rappresentato da una qualsiasi formula matematica, che rappresenta, nel linguaggio matematico un procedimento. Ma la bontà di tale regola può essere verificata solo con dei veri e propri calcoli, sostituendo alle variabili dei veri numeri. In ambito informatico, un algoritmo viene descritto tramite un programma, ossia un testo scritto in uno specifico linguaggio detto linguaggio di programmazione per essere eseguito da calcolatori elettronici

L’algoritmo e il programma Ogni linguaggio di programmazione ha una sua sintassi ed una propria rappresentazioni dei dati, e utilizza le proprie operazioni di manipolazione dei dati Invece: Le proprietà degli algoritmi sono talmente fondamentali, generali e robuste, da essere indipendenti dalle caratteristiche di specifici linguaggi di programmazione o di particolari calcolatori elettronici Quindi: PER RISOLVERE UN PROBLEMA E’ ASSOLUTAMENTE NECESSARIO TROVARE UN PROCEDIMENTO RISOLUTIVO DESCRIVIBILE CON UN ALGORITMO, E SOLO DOPO SI PUO’ PASSARE A SCRIVERE IL PROGRAMMA

PROGRAMMA = ISTRUZIONI + DATI Un programma può essere visto come un manipolatore di dati: a fronte di dati in ingresso che descrivono il problema producono dati in uscita come risultato del problema INPUT (dati) OUTPUT(dati) PROCESSO (istruzioni) Le operazioni sui dati sono le istruzioni. I dati sono gli oggetti su cui vengono eseguite le istruzioni. Tutti i linguaggi di programmazione prevedono un insieme di dati e istruzioni che il programmatore può utilizzare nella realizzazione dei propri programmi.

I DATI I dati possono essere distinti in base a : INPUT OUTPUT LAVORO Utilizzo all’interno del processo INTERO DECIMALE NUMERICO ALFANUMERICO Formato VARIABILE COSTANTE Valore assunto durante il processo Questi aspetti dei dati devono essere definiti già nell’algoritmo, in modo da poterli poi “tradurre” con la sintassi propria del linguaggio di programmazione

LE ISTRUZIONI Anche le istruzioni devono essere scritte rispettando la sintassi propria del linguaggio di programmazione Ogni linguaggio di programmazione ha le proprie istruzioni, ma tutti i linguaggi devono possedere alcune istruzioni per compiere le azioni fondamentali ·  Acquisire i dati su cui attivare il processo di elaborazione input  Comunicare all’esterno i risultati ottenuti output Azioni di tipo aritmetico assegnazione - assegnare un valore ad una variabile - utilizzare gli operatori aritmetici (+, -, /, *, %) Azioni di tipo logico confronto -  Utilizzare gli operatori di relazione( =, <, >, <=, >=, <>) per confrontare il contenuto di due variabili - Utilizzare gli operatori logici (and, or, not)

Scrivi “ciao! Sono il computer” ISTRUZIONI DI OUTPUT Sono le istruzioni che visualizzano dati e messaggi a video Esempio: scrivere un programma che manda un messaggio a video INIZIO FINE Scrivi “ciao! Sono il computer” #include <iostream> using namespace std; int main( ) { cout<<"\nciao! Sono il computer”; system("PAUSE"); } Nell’algoritmo il comando di output è scrivi seguito dal messaggio o dal dato che si deve far vedere a video In linguaggio C++ l’istruzione è cout<< Il messaggio deve essere inserito tra virgolette ESERCIZIO : messaggio Codifica un programma che manda a video il seguente messaggio: “Ciao! Io sono il Computer! Benvenuto nel mio mondo!” soluzione

ISTRUZIONI DI INPUT Sono le istruzioni che acquisiscono dati digitati da tastiera Esempio: scrivere un programma che legge un numero e le riscrive a video Leggi numero #include <iostream> using namespace std; int main() { int numero; cout<<"\nindica un numero"<<endl; cin>>numero; cout<<"\nil numero indicato vale :“; cout<<numero<<endl; system("PAUSE"); } INIZIO FINE scrivi “il numero indicato vale” scrivi numero scrivi “indica un numero” Nell’algoritmo il comando di input è leggi seguito dal dato che si deve acquisire In linguaggio C++ l’istruzione è cin>> Il dato deve essere stato definito prima dell’acquisizione

Esempio di esecuzione di input e di output #include <iostream> using namespace std; int main() { int numero; cout<<"\nindica un numero"<<endl; cin>>numero; cout<<"\nil numero indicato vale :“; cout<<numero<<endl; system("PAUSE"); } ram 1 numero 2 7 3 4 5 Programma caricato in memoria per essere eseguito 1 Allocazione della variabile numero 7 video 2 Output a video di un messaggio tastiera indica un numero 3 Acquisizione del valore digitato da tastiera con echo a video 7 4 Output a video di un messaggio Il numero indicato 7 5 Output del valore della variabile numero

OUTPUT DI DATI Nell’esempio precedente abbiamo visto l’output di un dato numerico: cout<<numero<<endl; A differenza dell’output dei messaggi, il dato non deve essere inserito tra virgolette A video viene mostrato il valore del dato, e non il nome INIZIO FINE scrivi “adesso il computer sa che sei alto “ scrivi altezza scrivi “quanto sei alto?” leggi altezza Tabella dei dati nome I/O V/C N/A descrizione altezza V N intero Altezza della persona ESERCIZIO : ALTEZZA Codifica il programma indicato nell’algoritmo soluzione

ISTRUZIONI DI ASSEGNAZIONE L’istruzione di assegnazione è quella che assegna un valore ad un dato Esempio: definire una variabile detta lato ed assegnare a tale variabile il valore 9 int lato; lato = 9; L’assegnazione del valore può essere fatto anche contestualmente alla definizione Trattandosi di variabili, il valore può essere modificato, ma senza ridefinire la variabile int lato=9; float prezzo= 0; ….. ….. prezzo = 10.3; Nel caso di valori costanti, l’assegnazione avviene necessariamente nel momento della definizione e ovviamente non può essere modificato #define costante 9; oppure const int costante=9;

ASSEGNAZIONE TRAMITE OPERAZIONI DI CALCOLO Il valore di una variabile può essere il risultato di un calcolo aritmetico Gli operatori aritmetici binari (cioè che richiedono due dati su cui operare) del linguaggio C++ sono: + Addizione risultato = numero1 + numero2 - Sottrazione risultato = numero1 – numero2 * Moltiplicazione risultato = numero1 * numero2 / Divisione risultato = numero1 / numero2 % Resto della divisione tra interi risultato = numero1 % numero2

Esempio di operazioni di calcolo INIZIO Acquisire due numeri e mostrare il risultato della loro somma #include <iostream> sing namespace std; int main() { int N1, N2, totale ; cout<<"\nindica il primo valore "<<endl; cin>>N1; cout<<"\nindica il secondo valore "<<endl; cin>>N2; totale= N1 +N2; cout<<"\nla somma è : " <<totale<<endl; system("PAUSE"); } scrivi “indica il primo valore” leggi N1 scrivi “indica il secondo valore” leggi N2 totale N1 + N2 scrivi “la somma è : “ totale FINE nome I/O V/C N/A descrizione N1 I V N intero Primo addendo N2 Secondo addendo totale O Numero ottenuto dalla somma dei due addendi

Output concatenato Dall’esempio precedente abbiamo visto che è possibile concatenare più output con una stessa istruzione cout<<"\nla somma è : " <<totale<<endl; messaggio di testo dato carattere per andata a capo Abbiamo visto anche che è possibile definire più variabili dello stesso tipo con una stessa istruzione int N1, N2, totale ; ESERCIZIO : OPERAZIONI Acquisire due numeri e mostrare il risultato delle quattro operazioni soluzione

Operatore modulo L’operatore modulo calcola il resto della divisione tra interi Ad esempio: 7 % 3 = 1 6 % 4 = 2 6 % 3 = 0 Può essere utilizzato per verificare se un numero è pari o dispari. Se un numero è pari, il resto della divisione per 2 è 0 6%2=0 Se un numero è dispari, il resto della divisione per 2 è 1 7%2=1

Esempio di utilizzo di operatore modulo Dati due numeri interi, calcolare quoziente e resto scrivi “il quoziente è “ quoziente “ il resto è “ resto INIZIO FINE scrivi “indica il primo valore” leggi N1 scrivi “indica il secondo valore” leggi N2 quoziente N1 / N2 resto N1 % N2 nome I/O V/C N/A descrizione N1 I V N intero dividendo N2 divisore quoziente O Numero ottenuto dalla divisione di N1 e N2 resto Resto ottenuto dalla divisione di N1 e N2 ESERCIZIO : QUOZIENTE E RESTO codificare l’algoritmo scritto per calcolare quoziente e resto di due numeri interi soluzione

ASSEGNAZIONE TRAMITE OPERATORI UNARI Gli operatori aritmetici unari sono quelli che richiedono un solo operando. Nel linguaggio C++ sono: ++ Per incrementare di una unità l’operando - - Per decrementare di una unità l’operando l’istruzione numero++ equivale all’istruzione numero = numero + 1 l’istruzione numero- - equivale all’istruzione numero = numero - 1

Esempio di assegnazione con operatori unari Acquisire un numero e mostrare il successivo #include <iostream> using namespace std; int main() { int numero; cout<<"\nindica un numero :"; cin>>numero; numero++; cout<<"\nil valore successivo e':"<<numero<<endl; system("PAUSE"); } INIZIO scrivi “indica un numero” leggi numero numero++ scrivi “il valore successivo è : “ numero FINE ESERCIZIO : ETA’ DEI FIGLI Una mamma ha tre figli, nati in anni consecutivi. Data in input l’età del terzo figlio, comunicare l’età degli altri due soluzione

ORGANIZZAZIONE DELLE ISTRUZIONI Abbiamo visto le principali istruzioni che intervengono in un algoritmo, e quindi in un programma. La scrittura dell’algoritmo è una fase molto delicata e quindi si ha bisogno di regole per una corretta organizzazione del lavoro Tali regole sono alla base della programmazione strutturata Secondo la programmazione strutturata, le istruzioni di un algoritmo devono essere organizzate secondo strutture ben definite, non devono cioè essere scritte senza uno schema ben preciso ALGORITMO

PROGRAMMAZIONE STRUTTURATA Teorema di Jacopini Böhm (1966) Qualunque algoritmo può essere implementato utilizzando le tre sole strutture di controllo: sequenza selezione iterazione Tutti i linguaggi imperativi implementano le strutture di controllo fondamentali con opportune istruzioni Naturalmente la forma sintattica può a volte variare leggermente, ma il funzionamento rimane identico

STRUTTURE DI CONTROLLO SEQUENZA SELEZIONE (o scelta logica) ITERAZIONE con il controllo in coda PRIMITIVE necessarie e sufficienti per risolvere qualsiasi algoritmo (teorema di Bohm-Jacopini) ITERAZIONE con controllo in testa ITERAZIONE ENUMERATIVA SCELTA (o selezione) MULTIPLA NON PRIMITIVE derivate da quelle primitive ALGORITMO

LA SEQUENZA E’ un insieme di azioni da svolgere secondo un ordine prefissato. L’ordine di esecuzione è dalla prima all’ultima istruzione seguendo un percorso unico. Flow chart pseudocodifica ……….. istruzione-1 istruzione-2 istruzione-3 …………… In C++ si utilizza { per indicare l’inizio della sequenza di istruzioni } per indicare la fine della sequenza

Esempio di istruzioni in sequenza PROBLEMA: dato il prezzo di un prodotto e lo sconto effettuato, calcolare e comunicare il prezzo scontato INIZIO FINE C  PREZZO - SCONTO Scrivi “il prezzo è “ C Leggi PREZZO Scrivi “indica lo sconto” Scrivi “indica il prezzo” Si propone l’algoritmo disegnato con la tecnica del flow-chart e con la tecnica della pseudocodifca. inizio { scrivi “indica il prezzo" leggi PREZZO scrivi “indica lo sconto" leggi SCONTO c  PREZZO – SCONTO scrivi “il prezzo scontato è “ c } fine nome I/O V/C N/A descrizione PREZZO I V N decimale Prezzo del prodotto SCONTO Sconto effettuato C O Prezzo scontato ESERCIZIO: PREZZO codifica il programma descritto nell’algoritmo soluzione

Alcune osservazioni sulle tecniche per descrivere l’algoritmo INIZIO FINE C  PREZZO - SCONTO Scrivi “il prezzo è “ C Leggi PREZZO Scrivi “indica lo sconto” Scrivi “indica il prezzo” La descrizione di un algoritmo può essere fatta sia con la tecnica del flow-chart che con la tecnica della pseudocodifca. Sono equivalenti, quindi nel seguito ne verrà proposta solo una. Laddove è sufficientemente chiaro, non verranno indicate le istruzioni di output che servono per chiedere all’utente di indicare i dati . Ad esempio: Leggi PREZZO Scrivi “indica il prezzo” verrà sostituita dalla sola istruzione Leggi PREZZO La tabella dei dati deve essere sempre descritta

Esercizi proposti sulla sequenza Fornito un valore in input, calcolarne il doppio del quadrato del successivo. Dato un numero in input, calcolare la somma tra il suo doppio e la sua metà. Si devono comprare 3 kg mele e 2 kg di pere; dato in input il prezzo al kg di ciascun prodotto , calcolare la spesa finale Date le coordinate di un punto in un piano cartesiano, calcolare la sua distanza dal centro

LA SELEZIONE (scelta logica ) Con questa struttura si seleziona in modo esclusivo una determinata sequenza/blocco di istruzioni da eseguire sulla base di una <condizione> rappresentata da una espressione booleana , che può essere vera o falsa pseudocodifica Flow chart Nel diagramma a blocchi compaiono due possibili percorsi in base al verificarsi o meno di una condizione. Se la condizione è vera si segue il ramo del SI, se è falsa, il ramo del NO. Nella pseudocodifica, se la condizione è vera si esegue il primo blocco di istruzioni , se è falsa, si esegue il secondo blocco di istruzioni se (condizione) { blocco_istruzioni_1 } altrimenti { blocco_istruzioni_2 } COND NO SI

Esempio di struttura di selezione Data l’equazione di 2° grado: Ax2 + Bx + C = 0 Per trovare le soluzioni reali è necessario calcolare il valore del discriminante D: D = B2 - 4 AC Calcolo di D NO SI D0 Non ci sono radici reali Calcolo due radici reali Se D0 calcolo delle due radici reali dell’equazione altrimenti l’equazione non ha radici reali.

AZIONI DI TIPO LOGICO Si dice enunciato una proposizione che può essere soltanto vera o falsa Un enunciato può essere vero o falso, ma non entrambe le cose La verità o la falsità di un enunciato sono dette valori di verità e tali valori corrispondono agli unici due valori dell’algebra booleana Vero Falso rappresentati anche con 1 0; ROMA è composta da 4 lettere  vero 7 > 3  vero 7 > 12  falso A > B dipende dal valore assunto dalle variabili A e B ESEMPI DI ENUNCIATI: NON E’ UN ENUNCIATO forse pioverà  non è né vero né falso Dato un enunciato, possiamo esaminare la sua condizione ossia l’essere vero o falso e in base a tale valutazione possiamo prendere delle decisioni.

AZIONI DI TIPO LOGICO COMPOSTE Gli enunciati possono essere composti ossia formati da sottoenunciati collegati tra loro da connettivi Siano p e q due enunciati; esaminiamo le tavole di verità dei connettivi AND, OR, NOT Connettivo AND (prodotto logico) Connettivo OR (somma logica) p q p AND q V F p q p OR q V F Connettivo NOT (negazione) p NOT p V F

Sintassi della struttura di Selezione if (condizione) istruzione1; else istruzione2 ; In C++ la struttura di selezione si codifica così Se sono presenti più istruzioni in ciascun ramo if (condizione) { istruzione1; istruzione2; …. } else { istruzione...; … RICORDA: Le istruzioni che fanno parte della sequenza sono racchiuse tra le parentesi graffe.

Esempio Istruzione di Selezione a due vie PROBLEMA: dato un numero si comunichi se il numero è pari o dispari istruzione precedente #include <iostream> using namespace std; int main() { int a; cin >> a; // leggi numero da terminale if ((a % 2) = = 0) { cout << “il numero e’ pari”; } else { cout << “il numero e’ dispari”; system("PAUSE"); INIZIO FINE Scrivi “il numero è dispari” Leggi a a %2=0 V F Scrivi “il numero è pari” istruzione if-else istruzione successiva ESERCIZIO: NUMERO POSITIVO acquisire un numero e comunicare se è positivo o negativo soluzione

LA SELEZIONE A UNA VIA Sinora abbiamo esaminato casi in cui in base alla condizione si potevano eseguire due diverse azioni alternativamente. In alcuni casi invece è possibile scegliere di compiere o non compiere un’azione; in tal caso l’azione da eseguire deve essere posta sul ramo del SI. COND SI NO In questo caso la codifica in C++ è: if (condizione) istruzione1; o nel caso di più istruzioni: if (condizione) { istruzione1; istruzione2; ………….; } La clausola else (altrimenti) in queste situazioni non viene codificata

Esempio Istruzione di Selezione a una via PROBLEMA: dato un numero intero si comunichi il valore della radice quadrata del suo valore assoluto istruzione precedente INIZIO #include <iostream> using namespace std; int main() { int a; float b; cin >> a; // leggi numero da terminale if (a < 0 ) { a = abs(a); // calcola valore assoluto di a } b = sqrt(a); cout << “Radice quadrata: “ << b; system("PAUSE"); istruzione if istruzioni successive Leggi a F V a >0 a = abs(a); b = abs(a); Scrivi b ESERCIZIO: VOTI acquisire 3 voti, calcolare e comunicare la media; se la media è insufficiente, comunicare “devi fare i corsi di recupero” FINE soluzione

Strutture di Controllo if-else Nidificati A volte si possono usare istruzioni di selezione ( a una o a due vie) nidificate , ossia le istruzioni da eseguire al verificarsi della condizione sono a loro volta istruzioni condizionali Il processo può essere ripetuto a molti livelli Istruzione Successiva Condizione I1 Vera Falsa Istruzione Precedente I2 I3 I4 Occorre porre molta attenzione nell’utilizzare una tale struttura, poiché facilmente “ci si perde” nell’esaminare le varie condizioni ESERCIZIO: NUMERO POSITIVO O NULLO Acquisire un numero e comunicare se è positivo, negativo o nullo soluzione

Esercizi proposti sulla selezione Dati 2 voti, calcolare la media ; se la media è sufficiente , comunicare “alunno promosso” altrimenti comunicare “alunno rimandato” Volendo fare la spesa , si ha a disposizione una certa cifra iniziale. Conoscendo l’importo da spendere, verificare se la spesa è possibile Dati tre numeri, stabilire se possono essere le misure dei lati di un triangolo rettangolo. Viene fornito in input il punteggio di un candidato ad un concorso. Se tale punteggio è compreso tra 0 e 27, visualizzare RESPINTO, tra 28 e 40 visualizzare AMMESSO, in tutti gli altri casi ERRORE.

ITERAZIONE CON CONTROLLO IN CODA ( do…while ) Per iterazione si intende la ripetizione di una o più azioni sotto il controllo di una condizione. Il gruppo di azioni da ripetere è detto corpo del ciclo Nell’iterazione con il controllo in coda, la condizione da verificare si trova dopo il corpo del ciclo Il corpo del ciclo verrà eseguito almeno una volta. Condizione Istruzione Precedente Corpo Istruzione Successiva Vera Falsa In C++, il ciclo che si ripete mentre la condizione è vera; quando la condizione è falsa il ciclo si interrompe, quindi è necessario che all’interno del corpo vi sia una istruzione che modifichi il valore della condizione, altrimenti il ciclo “va in loop”

Esecuzione di un ciclo do..while Questa struttura può essere utilizzata per il “controllo dei dati in input” ESERCIZIO: Leggi ripetutamente un numero finchè il numero letto è > 0 Memoria RAM n -30 12 -20 xxx int n; do {cout << “Dammi un numero.“; cin >> n; if (n<=0) cout<<“numero non positivo- ripetere”; } //chiusura del corpo del ciclo while (n<=0); cout << “Fine”; schermo Dammi un numero - 20 Numero non positivo-ripetere Dammi un numero - 30 Numero non positivo-ripetere Dammi un numero 12 La struttura do..while, consente di eseguire ripetutamente il corpo del ciclo anche per un numero di volte indeterminato Fine

Esempio di iterazione con controllo in coda ESERCIZIO: Visualizzazione dei primi 10 multipli di 5 num=5 Codifica in C++: num=5; cont=1; do { ris=num*cont; cout<<ris; cont++; } while (cont<=10); cont=1 Inizio ciclo ris=num*cont Istruzioni interne al ciclo ripetute mentre la variabile cont è minore o uguale a 10 scrivi ris cont=cont+1 s Condizione di fine ciclo (quando cont supera 10) cont10 N

RICORDA: Quando si fa riferimento ad una condizione (sia nella scelta che nell’iterazione) si intende che è possibile utilizzare anche condizioni composte. In C++ AND prodotto logico && OR somma logica | | NOT negazione ! Si ottengono condizioni composte legando due o più condizioni con gli operatori logici: Esempi in C++: OR nella selezione if ((a>0) || (b>0)) …..; AND nella ripetizione do { ….. ….. } while ((a>0) && (b>0)); ESERCIZIO: BENVENUTO Acquisire il nome di una persona e il sesso (tramite lettera ‘m’ o ‘f’) e scrivere come messaggio: “Buongiorno, signor … “ oppure “Buongiorno signora ….. “ seguito da nome soluzione

Esercizi proposti sulla iterazione con controllo in coda Dato in input un numero positivo (NUM>0), visualizzarne l’inverso (INV=1/NUM), il doppio (DOP=2*NUM), il quadrato (QUAD=NUM*NUM). Visualizzare i primi N numeri pari, con N intero positivo fornito in input. Visualizzare la somma dei primi N interi, con N>3 fornito in input. Oss: l’iterazione è sul controllo dell’input

STRUTTURE NON PRIMITIVE Si tratta di strutture che derivano da quelle primitive di selezione e iterazione con controllo in coda Pur non essendo teoricamente indispensabili rendono più semplice ed efficace l’attività di programmazione ITERAZIONE CON CONTROLLO IN TESTA ITERAZIONE ENUMERATIVA SCELTA (O SELEZIONE) MULTIPLA

ITERAZIONE CON CONTROLLO IN TESTA ( while …) Codifica in C++ while (cond) { istruzione1; istruzione2; } s COND N istruzione1 istruzione2 La caratteristica di questa iterazione è che la condizione da verificare si trova prima delle azioni da eseguire (corpo). Il while verifica la condizione all’inizio del ciclo per cui se inizialmente la condizione risulta falsa il corpo del ciclo non viene mai eseguito Affinchè il ciclo while, nel caso la condizione sia stata inizialmente trovata vera, abbia la possibilità di terminare è necessario che all’interno del corpo vi sia una istruzione che modifichi il valore della condizione

Esecuzione di un ciclo while ESERCIZIO: Leggi ripetutamente un numero in ingresso e calcolane la radice quadrata fino a quando il numero letto è > 0 Memoria RAM i int i; cout << “Dammi il primo num.”; cin >> i; while ( i > 0 ) { cout << sqrt(i) << endl; cout << “Dammi un altro num.“; } //corpo del ciclo cout << “Fine”; xxx 9 25 schermo Dammi il primo num. 25 5 Dammi un altro num. 9 3 Dammi un altro num. Fine Anche la struttura while…, consente di eseguire ripetutamente il corpo del ciclo anche per un numero di volte indeterminato

Esempio di iterazione con controllo in testa ESERCIZIO: Visualizzazione dei primi 10 multipli di 5 num=5 Codifica in C++: num=5; cont=1; while (cont<=10) { ris=num*cont; cout<<ris; cont++; } cont=1 fine ciclo Condizione di inizio ciclo (mentre cont10) N cont10 s ris=num*cont Istruzioni ripetute all’interno del ciclo scrivi ris cont=cont+1

ITERAZIONE ENUMERATIVA (for) Ha questo nome poiché si tratta di un’iterazione in cui si conosce quante volte il ciclo viene ripetuto. L’iterazione enumerativa è derivata dalla iterazione con controllo in testa, perciò la sua rappresentazione con il flow-chart sarà simile a quella dell’iterazione con controllo in testa. E’ però presente una variabile intera di controllo del numero ripetizioni del corpo del ciclo. Tale variabile viene inizializzata fuori ciclo, incrementata nel ciclo e controllata nella condizione di uscita dal ciclo (ciclo contatore). Indicata nella gestione degli array monodimensionali (vettori) o bidimensionali (matrici) poiché in queste strutture è obbligatorio dichiarare di quanti elementi sono formate.

Esempio di iterazione enumerativa ESERCIZIO: Visualizzazione dei primi 10 multipli di di 5 (contatore sulla variabile cont) num=5 Codifica in C++: num=5; for (cont=1;cont<=10;cont++) { ris=num*cont; cout<<ris; } inizializzazione cont=1 cont10 controllo s ris=num*cont scrivi ris incremento cont=cont+1

Codifica in C++ dell’ iterazione enumerativa for ( espressione1; espressione2 ; espressione3 ) istruzione; L’istruzione for è composta da tre espressioni separate dal ‘;’ la prima è di inizializzazione, la seconda di controllo, la terza di incremento. L’ordine di esecuzione è il seguente: 1) esecuzione dell’espressione1 (una sola volta) 2) controllo dell’espressione2 (ripetuta dopo ogni incremento) 3) esecuzione dell’istruzione (se espressione2 è vera, altrimenti si esce dal ciclo) 4) esecuzione dell’espressione3 (incremento e ritorno al punto 2)

Quando si equivalgono while / for Esempio di equivalenza strutture iterative while e for per iterazioni controllate da contatore in C++: float lato, area; int i; i=0; while (i<3) { cout << “Lato ? ” << endl; cin >> lato; area=lato*lato; cout << “Area: “ << area i++; } cout << “Fine”; float lato, area; int i; for (i=0; i<3; i++) { cout << “Lato ? ” << endl; cin >> lato; area=lato*lato; cout << “Area: “ << area << endl; } cout << “Fine”;

Esercizi proposti sulla iterazione enumerativa Letto da tastiera un numero N positivo , acquisire N numeri e calcolarne la media Letto da tastiera un numero N positivo, acquisire N numeri e calcolare la somma e la media dei positivi e la somma e la media dei negativi

SCELTA MULTIPLA Nella scelta logica si sceglie di compiere o non compiere un’azione si sceglie di compiere, in modo esclusivo, una tra due azioni Nella realtà capita di dover compiere, in modo esclusivo, una tra più azioni La scelta multipla è derivata dalla scelta logica (selezione) ma consente di scegliere tra più azioni

Esempio di scelta multipla Esempio tipico di scelta multipla è quello di un programma che permette all’utente, attraverso un menù iniziale, di scegliere tra le funzioni offerte. Tale situazione è risolvibile mediante una serie di scelte logiche Molti linguaggi di programmazione, tra cui il C++, agevolano il programmatore mettendo a disposizione la scelta multipla ALGORITMO

Rappresentazione della scelta multipla nel diagramma a blocchi X: variabile di cui va analizzato il contenuto default 1 Default racchiude tutti i valori diversi da quelli previsti X 2 3 4 Valori che si prevede possa assumere X (1, 2, 3, 4) istr1 istr2 istr3 istr4 istrd istr1, istr2,… rappresentano le istruzioni da eseguire. Se nella variabile X c’è il valore 1 viene eseguito il gruppo di istruzioni istr1, se in X c’è il valore 2 le istruzioni istr2 e così via.

Sintassi della selezione multipla in C++ in C++ la Selezione Multipla è rappresentata dalla istruzione switch-case  switch (variabile){                     case <costante1>: <sequenza di istruzioni1>;     break;                     case <costante2>: <sequenza di istruzioni2>;    break;                                 ....                     case <costanten>: <sequenza di istruzionin>;    break;                     default   : <sequenza di istruzioni>;                   break;                             } le espressioni costanti costante1, costante2, ..., costanten devono essere di tipo intero In C++ i caratteri sono assimilati agli interi (ne viene considerata la codifica interna in ASCII) l’istruzione break serve per terminare lo switch dopo aver eseguito solo la sequenza associata ad una particolare scelta (case) e proseguire con l’istruzione successiva allo switch-case; nel costrutto può comparire la clausola default per individuare la sequenza di operazioni da compiere quando il valore esaminato non coincide con alcuno di quelli specificati

Semplice esempio di switch-case in C++ ESERCIZIO: dato un numero intero, visualizza il nome del giorno della settimana corrispondente main() { int num; cout <<"Dammi un giorno (numero): "; cin >> num ; switch (num) case 1: cout<<“ Lunedi” ; break; case 2: cout<<“ Martedi” ; break; case 3: cout<<“Mercoledi“ ; break; case 4: cout<<“Giovedi“ ; break; case 5: cout<<“Venerdi“ ; break; case 6: cout<<“Sabato“ ; break; case 7: cout<<“Domenica“ ; break; default : cout<<“Giorno Inesistente“ ; break; }

Esercizio sulla selezione multipla SEMPICE CALCOLATRICE Scrivere un programma che, acquisiti due interi positivi, visualizzi un menù che consenta di scegliere quale operazione aritmetica eseguire. ANALISI Si acquisiscono due interi , con il controllo che siano positivi Si ripetono le seguenti istruzioni, finchè l’utente non indica espressamente che vuole terminare si presenta a video un menu di scelta tra le 4 operazioni: 1- addizione, 2-sottrazione, 3-moltiplicazione, 4-divisione. Con la scelta 5 si esce dall’iterazione Si acquisisce la scelta e si esegue l’operazione richiesta mostrando a video il risultato. In caso di scelta diversa da 1,2,3,4, 5 si manda un messaggio d’errore.

Esercizio : semplice calcolatrice #include <iostream.h> #include <conio.h> void main( ) { // campo per la scelta dell’operazione char scelta; // primo, secondo operando e risultato int num1,num2,ris; do cout<<“\nInserisci primo numero “; cin>>num1; } while (num1<=0); { cout<<“\nInserisci secondo numero “; cin>>num2; } while (num2<=0); // Visualizzazione del menù di scelta do { clrscr(); cout<<“\nMENU’ DI SCELTA\n\n”; cout<<“\n1: Addizione”; cout<<“\n2: Sottrazione”; cout<<“\n3: Moltiplicazione”; cout<<“\n4: Divisione”; cout<<“\n5: Fine lavoro”; cout<<“\nInserisci scelta “; // Acquisizione del campo scelta cin>> scelta;

Esercizio : semplice calcolatrice (prosegue soluzione) // Utilizzo della scelta multipla switch (scelta) { case ‘1’: {ris=num1+num2; cout<<“\nIl risultato è “<<ris; break; } case ‘2’: {ris=num1-num2; cout<<“\nIl risultato è “<<ris; break; } case ‘3’: {ris=num1*num2; cout<<“\nIl risultato è “<<ris; break; } case ‘4’: {ris=num1/num2; cout<<“\nIl risultato è “<<ris; break; } case ‘5’: break; default : cout<<“\nScelta errata”; } cout<<“\nIl risultato è “<<ris; } while (scelta !=‘5’); cout<<“\nCiao!”;

Esercizi proposti sulla selezione multipla Prevedere un programma che visualizzi un menù con tutte le materie scolastiche. Scelta una particolare materia, dovrà comparire il nome dell’insegnante. Assegnazione dei premi ad un’estrazione. Viene generato un intero casuale compreso tra 1 e 4 con i seguenti abbinamenti: 1 vincita di un Personal Computer 2 vincita di una telecamera 3 vincita di un videoregistratore 4 vincita di una macchina fotografica Dato un numero compreso tra 1 e 12, indicare il nome del mese corrispondente

Soluzione esercizi Messaggio Altezza Operazioni Quoziente e resto Età dei figli Prezzo Numero positivo Voti Numero positivo o nullo benvenuto

Esercizio : Messaggio ESERCIZIO : messaggio Codifica un programma che manda a video il seguente messaggio: “Ciao! Io sono il Computer! Benvenuto nel mio mondo!” #include <iostream> using namespace std; int main( ) { cout<<"\nCiao! Sono il computer!Benvenuto nel mio mondo!”; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: altezza ESERCIZIO : ALTEZZA Leggere l’altezza di una persona e poi mostrarla a video #include <iostream> using namespace std; int main() { int altezza; cout<<"\nquanto sei alto?"; cin>>altezza; cout<<"\nadesso il computer sa che sei alto "<<altezza<<endl; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: Operazioni Acquisire due numeri e mostrare il risultato delle quattro operazioni #include <iostream> using namespace std; int main() { float n1, n2, ris; cout<<"\nindica il primo operando :"; cin>>n1; cout<<"\nindica il secondo operando :"; cin>>n2; ris=n1+n2; cout<<"\nla loro somma vale : "<<ris; ris=n1-n2; cout<<"\nla loro differenza vale : "<<ris; ris=n1*n2; cout<<"\nil loro prodotto vale : "<<ris; ris=n1/n2; cout<<"\nil loro rapporto vale : "<<ris<<endl; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: quoziente e resto #include <iostream> using namespace std; int main() { int n1, n2; float quoziente, resto; cout<<"\nindica il primo valore :"; cin>>n1; cout<<"\nindica il secondo valore :"; cin>>n2; quoziente = n1/n2; resto = n1% n2; cout<<"\nil quoziente e': "<<quoziente <<" e il resto e' "<<resto; system("PAUSE"); } ESERCIZIO : QUOZIENTE E RESTO codificare l’algoritmo scritto per calcolare quoziente e resto di due numeri interi Teoria Elenco esercizi

Esercizio: età dei figli ESERCIZIO : ETA’ DEI FIGLI Una mamma ha tre figli, nati in anni consecutivi. Data in input l’età del terzo figlio, comunicare l’età degli altri due #include <iostream> using namespace std; int main() { int eta; cout<<"\nindica l'eta' del terzo figlio :"; cin>>eta; eta++; cout<<"\nil secondo figlio ha "<<eta<<" anni "<<endl; eta++; cout<<"\nil primo figlio ha "<<eta<<" anni "<<endl; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: prezzo PROBLEMA: dato il prezzo di un prodotto e lo sconto effettuato, calcolare e comunicare il prezzo scontato #include <iostream> using namespace std; int main() { float prezzo, sconto, c; cout<<"\nindica il prezzo : "; cin>>prezzo; cout<<"\nindica lo sconto : "; cin>>sconto; c = prezzo - sconto; cout<<"\nil prtezzo scontato e' : "<<c<<endl; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: numero positivo #include <iostream> using namespace std; int main() { int numero; cout<<"\nindica un numero : "; cin>>numero; if(numero >0) cout<<"\nil numero "<<numero<<" e' positvo"<<endl; else cout<<"\nil numero "<<numero<<" e' negativo o nullo"<<endl; system("PAUSE"); } ESERCIZIO: NUMERO POSITIVO acquisire un numero e comunicare se è positivo o negativo Teoria Elenco esercizi

Esercizio: voti #include <iostream> using namespace std; int main() { int voto1, voto2, voto3, somma; float media; cout<<"\nindica il primo voto : "; cin>>voto1; cout<<"\nindica il secondo voto : "; cin>>voto2; cout<<"\nindica il terzo voto : "; cin>>voto3; somma = voto1+voto2+voto3; media = (float) somma / 3; cout<<"\nla media dei voti e' "<<media<<endl; if(media <6) cout<<"\ndevi fare i corsi di recupero"<<endl; system("PAUSE"); } ESERCIZIO: VOTI acquisire 3 voti, calcolare e comunicare la media; se la media è insufficiente, comunicare “devi fare i corsi di recupero” Teoria Elenco esercizi

Esercizio: numero positivo o nullo ESERCIZIO: NUMERO POSITIVO O NULLO acquisire un numero e comunicare se è positivo ,negativo o nullo #include <iostream> using namespace std; int main() { int numero; cout<<"\nindica un numero : "; cin>>numero; if(numero >0) cout<<"\nil numero "<<numero<<" e' positvo"<<endl; else if(numero <0) cout<<"\nil numero "<<numero<<" e' negativo "<<endl; else cout<<"\nil numero "<<numero<<" e' nullo "<<endl; system("PAUSE"); } Teoria Elenco esercizi

Esercizio: benvenuto #include <iostream> using namespace std; int main() { string nome; char sesso; cout<<"\nindica il nome : "; cin>>nome; do { cout<<"\nindica il sesso : "; cin>>sesso; if (sesso != 'm' and sesso != 'f') cout<<"\nvalore errato: indicare 's' o 'm'"<<endl; } while (sesso != 'm' and sesso != 'f'); if (sesso =='m') cout<<"\nBuongiorno, signor "<<nome<<endl; else cout<<"\nBuongiorno, signora "<<nome<<endl; system("PAUSE"); } ESERCIZIO: BENVENUTO Acquisire il nome di una persona e il sesso (tramite lettera ‘m’ o ‘f’) e scrivere come messaggio: “Buongiorno, signor … “ oppure “Buongiorno signora ….. “ seguito da nome Teoria Elenco esercizi