1) La PROGRAMMAZIONE di un calcolatore elettronico Definizione di “Programma”: insieme di istruzioni eseguite in sequenza, che elaborano dei dati in ingresso per ottenere dei risultati in uscita, in modo da risolvere una certa CLASSE di problemi. Problema risolto con un elaboratore elettronico un problema può essere risolto con un elaboratore elettronico opportunamente programmato. Occorre cioè un programma che dica all’elaboratore come manipolare i dati forniti in ingresso per calcolare la soluzione del problema. Vengono quindi prodotti dei risultati che devono essere visualizzati o stampati in uscita, per essere visibili all’utente. 1 2) Come passare da un PROBLEMA ad un PROGRAMMA Data la traccia di un problema, per realizzare il relativo programma occorre manipolare il problema in 3 fasi: 1. ANALISI DEL PROBLEMA 1. Individuare i dati in ingresso (in questo caso i 3 voti S,O,P); 2. Definire i valori ammessi per i dati in ingresso (in questo caso, essendo dei voti, S,O,P sono valori compresi tra 0 e 10. Per esempio S=13 è errato! 3. Individuare i dati in uscita (in questo caso M) 4. Stabilire le relazioni tra ingressi e uscite (in questo caso M=(S+O+P)/3 2. SVILUPPO DELL’ALGORITMO (vedi definizione alla pagina successiva) 1. Inizio 2. Lettura dati in ingresso 3. Controllo dati inseriti (se rispettano i valori ammessi); 4. Calcolo dei risultati; 5. Stampa dei risultati in uscita (a video o su carta); 6. Fine; 3. CREAZIONE DEL DIAGRAMMA DI FLUSSO; 1. Rappresentazione grafica dell’algoritmo, vedi pagina successiva 2 3) Algoritmo e diagramma di flusso Definizione di “ALGORITMO”: è una serie di passi che, eseguiti in sequenza, elaborano dei dati in ingresso per ottenere dei risultati in uscita, in modo da risolvere una certa CLASSE di problemi. Tale definizione è molto simile a quella di “PROGRAMMA”, la differenza consiste nel fatto che un PROGRAMMA viene scritto in un determinato linguaggio di programmazione (es. Pascal, Basic, C++, ecc. ecc.), mentre un algoritmo è una serie di passi scritti in italiano; Definizione di “DIAGRAMMA DI FLUSSO”:è una rappresentazione grafica di un algoritmo, Formato da simboli la cui forma dipende dal tipo di azione descritta. I simboli sono uniti tra loro da frecce che rappresentano l’ordine di esecuzione delle istruzioni dell’allgoritmo. SIMBOLI USATI NEI DIAGRAMMI DI FLUSSO: INIZIO/FINE DEL DIAGRAMMA INGRESSO DATI / USCITA DATI AZIONE (OPERAZIONE MATEMATICA O ALTRO) V F CONDIZIONE (CONTROLLA SE UNA CONDIZIONE è VERA o FALSA, il programma prosegue lungo la relativa direzione ) 3 4) Esempio di passaggio da PROBLEMA a PROGRAMMA Es.1 ) Problema: calcolare la media M di tre voti S, O, P (scritto, orale e pratico) Realizzare un programma che consenta di risolvere il problema usando un elaboratore elettronico. 1. ANALISI DEL PROBLEMA 1. Dati in ingresso : S,O,P 2. Valori ammessi per i dati in ingresso: essendo dei voti, S,O,P devono essere compresi tra 0 e 10. Per esempio S=13 è errato ed il programma deve accorgersene; 3. Dati in uscita : M (avendo già controllato i dati in ingresso, non occorre il controllo anche su quelli di uscita); 4. Relazioni tra ingressi e uscite : M=(S+O+P)/3; Una volta analizzato il problema, possiamo passare alla seconda fase, la creazione dell’algoritmo risolutore, formato da una serie di passi scritti linguaggio comune (es. in italiano); se il problema è molto complesso il numero di passi di un algoritmo diventa molto grande ed è difficoltoso da comprendere. Il diagramma di flusso è una descrizione grafica che risulta più facile da comprendere anche in caso di algoritmi molto complessi; 4 5) Seconda fase: ALGORITMO RISOLUTORE 2. ALGORITMO RISOLUTORE 1. Inizio; 2. Inserire voto scritto S; 3. Se S<0 oppure S>10 ritorna al punto 2; 4. Inserire voto orale O; 5. Se O<0 oppure O>10 ritorna al punto 4; 6. Inserire voto pratico P; 7. Se P<0 oppure P>10 ritorna al punto 6; 8. SOMMA=S+O+P; 9. M=SOMMA/3; 10. Stampa sullo schermo il risultato M; 11. Fine; Gli algoritmi cominciano sempre con la istruzione di INIZIO e terminano con FINE. È un modo per indicare al computer che sta cominciando e finendo un programma. Ogni volta che si avvia un programma, il calcolatore prepara la memoria RAM riservando alle variabili S O e P degli spazi dove memorizzare i valori numerici inseriti dall’utente 5 6) terza fase: Diagramma di flusso 3. Diagramma di flusso Viene ricavato dall’algoritmo, ed offre una visione grafica delle operazioni svolte dal calcolatore per risolvere il problema. Si nota, ad esempio, che le istruzioni 2 e 3 leggono il voto S, lo controllano e se i valore è minore di 0 o maggiore di 10, si ha un errore che riporta il programma al punto 2. Cioè si chiede all’utente di reinserire il valore di S in quanto quello appena inserito non è ammesso. Finché l’utente non inserisce un valore ammesso, il programma non prosegue, ma richiede continuamente un valore di S corretto. Se il valore è giusto si va al blocco successivo, fino a calcolare e stampare il risultato cioè la media dei tre voti. Questo programma può essere usato per calcolare la media di ogni alunno, quindi uno stesso programma è utilizzato per calcolare le medie di più alunni, basta eseguirlo nuovamente inserendo i voti del nuovo alunno. inizio Inserire S V S<0 o S>10 F Inserire O V O<0 o O>10 F Inserire P V P<0 o P>10 F SOMMA=S+O+P M=SOMMA/3 Inserire S fine 6 7) Problema: somma di due numeri positivi; Problema: calcolare la somma S di due numeri A e B controllando che siano entrambi positivi. 1. ANALISI DEL PROBLEMA: 1. dati in ingresso (A e B); 2. Valori ammessi (A>0, B>0); 3. Dati in uscita ( S ); 4. Relazione ingresso/uscita: S=A+B; 2. ALGORITMO: 1. Inizio 2. Inserire A; 3. Se A<0 torna al punto 2; 4. Inserire B; 5. Se B<0 torna al punto 4; 6. S=A+B; 7. Stampa a video S; 8. Fine; 3. DIAGRAMMA DI FLUSSO inizio Inserire A V A<0 F Inserire B V B<0 F S=A+B Stampa S fine 7 8) Problema: Rettangolo; 3. DIAGRAMMA DI FLUSSO Problema: calcolare l’area A e il perimetro 2P conoscendo La base B e l’altezza H, controllando che siano positivi. inizio 1. ANALISI DEL PROBLEMA: 1. dati in ingresso (B e H); 2. Valori ammessi (B>0, H>0); 3. Dati in uscita ( A, 2P ); 4. Relazione ingresso/uscita: A=B+H, 2P=2*(B+H) 2. ALGORITMO: 1. Inizio 2. Inserire B; 3. Se B<0 torna al punto 2; 4. Inserire H; 5. Se H<0 torna al punto 4; 6. A=B*H; 7. P=2*(B+H); 8. Stampa a video A; 9. Stampa a video P; 10. Fine; Inserire B V B<0 F Inserire H V H<0 F A=B*H 2P=2*(B+H) Stampa A Stampa 2P fine 8 8) Problema: Pari o dispari; Problema: dato un numero N in ingresso, dire in uscita Se esso è pari o dispari valutando il resto R di N/2 Se R=0 N è PARI, R=1 N è DISPARI; 3. DIAGRAMMA DI FLUSSO 1. ANALISI DEL PROBLEMA: 1. dati in ingresso: N 2. Valori ammessi: tutti i numeri interi 3. Dati in uscita ( PARI, DISPARI) 4. Relazione ingresso/uscita: se R=RESTO (N/2)=0 allora N è PARI, se R=RESTO (N/2)=1 allora N è DISPARI; 2. ALGORITMO: 1. Inizio 2. Inserire N; 3. R=RESTO(N/2); 4. Se R=0 stampa “N è PARI”; 5. Se R≠0 stampa “N è DISPARI”; 6. Fine; Notiamo che il blocco di selezione (il rombo), permette di far proseguire il programma in due differenti strade, che portano a stampare PARI o DISPARI 9 alternativamente 9) Le VARIABILI; Caratteristiche delle variabili: - Sono oggetti utilizzati dalle istruzioni dei programmi; - Hanno un nome detto IDENTIFICATORE che può essere una lettera, una parola ma non un numero, i numeri si possono usare solo insieme ad almeno una lettera (es. variabile PERIMETRO, oppure 2P, sono degli identificatori) - Contengono i valori immessi in ingresso dall’utente, i valori dei risultati calcolati dal computer, calcoli temporanei non visualizzati all’uscita (es π=3.14); - Una variabile contiene un valore che potrebbe cambiare durante l’esecuzione del programma; - Le variabili risiedono nella memoria RAM memorizzando i valori contenuti al loro interno. In fase di avvio del programma, l’elaboratore assegna uno spazio di memoria RAM a ciascuna variabile del programma; 10 11) ASSEGNAZIONE di un VALORE alle VARIABILI; Vediamo i valori assunti dalle variabili durante l’esecuzione di un programma: Es. somma di 2 numeri S=A+B: V inizio A 0 B 0 S 0 Inserire A A 3 B=0 S=0 A<0 A=3 B=0 S=0 Inserire B A=3 B 2 S=0 B<0 A=3 B=2 S=0 A=3 B=2 S 5 A=3 B=2 S=5 A=3 B=2 S=5 F V F S=A+B Stampa S fine Inizialmente il programma crea le variabili A, B, S nella ram e assegna il valore 0 iniziale. Durante la fase di input l’utente decide di assegnare il valore 3 alla variabile A. Si nota che il Valore 0 precedentemente assunto da A è SOVRASCRITTO dal valore 3 e quindi lo 0 viene perso per sempre. Proseguendo, il valore di A non viene modificato, e si passa alla variabile B, se l’utente assegna un valore 2, lo 0 contenuto in B viene SOVRASCRITTO dal 2. Si prosegue con il calcolo di S in cui, al posto dello 0 finora contenuto, viene messo il valore calcolato dall’elaboratore, pari a A+B cioè 5. Alla fine il programma stampa sul video il contenuto della variabile S cioè il 5 mostrando all’utente il risultato. S A+B significa:”metti in S la somma di ciò che c’è in A e ciò che c’è in B” 11 12) ASSEGNAZIONE di un VALORE alle VARIABILI; Problema: dati due numeri A e B,scambiarne i valori e stamparli in uscita Proponiamo una soluzione errata per mostrare come operano le variabili A 0 B 0 A 3 B=0 A=3 B 2 A 2 B=2 A=2 B 2 A=2 B=2 A=2 B=2 A=2 B=2 Inzialmente i valori A e B vengono inizializzati a 0, poi l’utente assegna ad A il valore 3 ed a B il valore 2. Volendo scambiare il valore di A con quello di B e viceversa, al quarto passo dello schema, decidiamo di assegnare ad A il valore contenuto in B, ma così facendo perdiamo per sempre il valore 3 contenuto finora in A. E’ stato quindi appena commesso l’errore di sovrascrivere il valore di A (il 3) che ci sarebbe servito nell’istruzione successiva per completare lo scambio di A con B. Se si continua nonostante l’errore, vediamo che al passo 5 viene assegnato a B il valore contenuto in A che ormai non è più il 3 ma è diventato 2 nel passo 4. La stampa quindi ci mostrerà che entrambe le variabili contengono il valore 2 e quindi non siamo riusciti a scambiare i valori delle due variabili, poiché abbiamo perso il valore di A. per risolvere questo problema, basta usare una variabile C di APPOGGIO, per conservare il valore di A durante lo scambio. 12 13) ASSEGNAZIONE di un VALORE alle VARIABILI; Problema: dati due numeri A e B,scambiarne i valori e stamparli in uscita Soluzione esatta: Usiamo la variabile C per “salvare” il contenuto di A al passo 4, poi cominciamo le operazioni di scambio, al passo 5 metto B in A perdendo il 3 da A ma che ho precedentemente salvato in C. Al passo 6 quindi metto in B il vecchio contenuto di A prendendolo dalla variabile C. Stampando i risultati vedo come ora ho realizzato correttamente lo scambio dei valori tra A e B. A 0 B 0 C 0 A 3 B=0 C=0 A=3 B 2 C=0 A=3 B=2 C 3 A A 2 B=2 C=3 A=2 B 3 C=3 A=2 B=3 C=3 Modi di indicare un assegnazione: A=2 B=3 C=3 A B (metto in A il valore di B) oppure A = B (metto in A il valore di B); A=2 B=3 C=3 In questo modo evito di perdere dei valori a causa delle operazioni di assegnazione, che distruggono i valori finora contenuti nelle variabili. = è equivalente alla D’ora in avanti si userà solo = 13 14) ALGORITMI SU CONDIZIONE; Problema:Dati in ingresso i valori di 3 lati A,B,C, dire se il triangolo è EQUILATERO, ISOSCELE o SCALENO 1. 2. ANALISI DEL PROBLEMA: 1. dati in ingresso: A,B,C 2. Valori ammessi: A>0, B>0, C>0; 3. Dati in uscita: EQUILATERO, ISOSCELE,SCALENO; 4. Relazioni ingressi/uscite: se A=B=C allora EQUILATERO, se A=B o A=C o B=C allora ISOSCELE, se A ≠ B≠C allora SCALENO, ALGORITMO: 1. Inizio 2. Inserire A; 3. SE A<0 torna al punto 2 4. Inserire B; 5. SE B<0 torna al punto 4 6. Inserire C; 7. SE C<0 torna al punto 6 8. Se (A=B=C) allora stampa “Equilatero” 9. Se (A=B o A=C o B=C) allora stampa “Isoscele” 10. Se (A ≠ B ≠ C) allora stampa “Scaleno” 11. Fine; NOTARE CHE CONTROLLANDO SE I LATI SONO TUTTI UGUALI O SOLO ALCUNI O NESSUNO, IL PROGRAMMA SEGUE TRE STRADE DIVERSE CHE SI INCONTRANO PRIMA DELLA FINE. 14 15) ALGORITMI SU CONDIZIONE; Problema: Dati in ingresso i valori di altezza H e base B positivi, ed il tipo di figura Geometrica tra TRIANGOLO e RETTANGOLO, calcoli la relativa area A. 1. 2. ANALISI DEL PROBLEMA: 1. dati in ingresso: H,B, TIPO 2. Valori ammessi: H>0, B>0, TIPO=TRIANGOLO o RETTANGOLO; 3. Dati in uscita: A; NOTA: i passi da 9 a 11 vengano eseguiti 4. Relazioni ingressi/uscite: solo se il passo 8 è vero, se è falso si va se TIPO=TRIANGOLO allora A=(B*H)/2; direttamente al passo 12. se TIPO=RETTANGOLO allora A=B*H; Siccome abbiamo controllato il TIPO immesso, in modo che venga accettato ALGORITMO: solo se le parole sono o TRIANGOLO o 1. Inizio RETTANGOLO, se non è vero il passo 8 2. Inserire H; allora è per forza vero il 12. Viceversa se 3. SE H<0 torna al punto 2 è vera la 8, vengono eseguiti i passi da 9 a 4. Inserire B; 11 e risulta falsa la 12, quindi non si 5. SE B<0 torna al punto 4 eseguono i passi 13 e 14. 6. Inserire TIPO; 7. SE TIPO≠(TRIANGOLO o RETTANGOLO) torna al punto 6; 8. Se (TIPO=TRIANGOLO) allora 9. A=(B*H)/2; 10. Stampa “area triangolo=“A; 11. Vai al punto 15 (la fine); 12. Se (TIPO=RETTANGOLO) allora 13. A=B*H; 14. Stampa “area rettangolo=“A; 15. Fine; 15 16) ALGORITMI SU CONDIZIONE; 3. Diagramma di flusso: Dal diagramma di flusso si vede che questo programma è in grado di calcolare le aree di due figure geometriche, basta che l’utente indichi il tipo di figura desiderato ed il programma sceglierà la giusta formula per il calcolo dell’area, visualizzando poi il risultato corretto. 16 17) ALGORITMI BASATI SU CICLI; Problema: INDOVINELLO, dato un numero segreto S tra 0 e 100, l’utente deve indovinarlo con dei tentativi T. Una volta indovinato, il computer visualizza quanti tentativi (N) sono stati fatti 1. 2. ANALISI DEL PROBLEMA: 1. dati in ingresso: S, T 2. Valori ammessi: 0<S<100, 0<T<100; 3. Dati in uscita: N (numero tentativi); 4. Relazioni ingressi/uscite: N= numero di tentativi prima di avere T=S; ALGORITMO: 1. Inizio 2. N=0 (azzeramento contatore dei tentativi) 3. Inserire S (numero da indovinare inserito da un amico); 4. SE S<0 o S>100 torna al punto 2; 5. Inserire T (tentativo inserito dal giocatore); 6. SE T<0 o T>100 torna al punto 4 7. N=N+1 (il contatore comincia a contare i tentativi) 8. SE T≠S torna al punto 5 (fai un nuovo tentativo); 9. Stampa “hai indovinato! Il numero era” S; 10. Stampa “n°tentativi=“ N; 15. Fine; NOTA: il passo 8, in caso di tentativo fallito, riporta il programma al punto 5 creando un ciclo tra 8 e 5 che permette di ritentare finchè non si indovina. Ogni volta che si tenta, il numero CONTATORE N viene incrementato tramite l’operazione 7 di assegnazione N=N+1 che significa che il nuovo valore di N è dato dal vecchio N a cui si somma 1. Quando si indovina, il passo 8 lascia proseguire il programma uscendo dal ciclo e andando al passo 9 che stampa quindi il messaggio e il numero N di tentativi utilizzati. 17 18) ALGORITMI BASATI SU CICLI; Problema: INDOVINELLO, dato un numero segreto S tra 0 e 100, l’utente deve indovinarlo con dei tentativi T. Una volta indovinato, il computer visualizza quanti tentativi (N) sono stati fatti 3. Diagramma di FLUSSO: NOTA: il diagramma di flusso mostra come il programma contenga un ciclo (evidenziato con le linee nere più spesse). Si eseguono sempre le stesse operazioni finchè la condizione T=S non è verificata. Appena lo è, si esce dal ciclo e si prosegue verso la fine del programma. Siccome la condizione T=S è controllata alla fine del ciclo, il ciclo prende il nome di CICLO POSTCONDIZIONALE e viene eseguito ALMENO una volta. Nei cicli PRECONDIZIONALI, con la condizione posta all’inizio del ciclo, può succedere che la condizione sia subito verificata e quindi il ciclo non viene eseguito nemmeno una volta. 18 19) Esercizi di programmazione; Di ogni esercizio, realizzare l’analisi, l’algoritmo ed il diagramma di flusso: 1. Realizzare un programma che dato il prezzo P di un prodotto (sempre positivo) e lo sconto S (compreso tra 0 e 100, in percentuale), calcoli e stampi il prezzo scontato PS=P-(P*S)/100 ; 2. dato un numero N in ingresso, dire in uscita se esso è positivo o negativo; 3. Dati in ingresso due lati L1 e L2 (positivi), dire se la figura è un quadrato (se L1=L2) o un rettangolo (se L1≠L2) e calcolare l’area A. Stampare infine un messaggio con il tipo di figura (quadrato o rettangolo) e la relativa area A; 4. Dati due numeri X e Y tra di loro diversi verificare quale dei due sia maggiore. Moltiplicare quindi il maggiore per 2 e assegnarlo ad una variabile A. Mostra quindi il risultato A; 5. Considerare il problema “INDOVINELLO” e modificarlo nel seguente modo: in caso di tentativo FALLITO (T≠S), controllare se T>S, se si stampare “ALTO”, se no stampare “BASSO”. Dopo questo controllo ritornare al punto 5; 6. Realizzare un ciclo POSTCONDIZIONATO per calcolare la somma S di 4 numeri a partire da un numero X dato dall’utente. Es. ( con X=3, calcolare S=3+4+5+6, oppure con X=14, calcolare S=14+15+16+17); il ciclo deve terminare quando il contatore N=4 ; 19