Esercizio Trovare quoziente e resto di una divisione intera per differenze successive (supponendo cioè di non disporre dell operatore di divisione) Dati di Input: D, D1 (supponiamo D1>0) Dati di Output: Q, R (quoziente e resto) 1 Pseudocodice leggi D, D1 R = D Q = 0 Mentre (R >= D1) Esegui R = R D1 Q = Q + 1 FineEsegui scrivi Q, R 2
Soluzione 3 Esercizio Sommare i primi N numeri interi positivi e scrivere il risultato Dati di Input: N (con N > 0) Dati di Output: S (somma dei primi N numeri) 4
leggi N I = 0 S = 0 Esegui S = S + I I = I + 1 Mentre (I <= N) scrivi S Pseudocodice 5 Soluzione 6
Esercizio Leggere N numeri e scrivere la loro somma Dati di Input: N, ed N numeri Dati di Output: S (somma di questi N numeri) 7 Pseudocodice leggi N I = 1 S = 0 Mentre (I <= N) Esegui leggi NUM S = S + NUM I = I + 1 FineEsegui scrivi S 8
Soluzione 9 Esercizi con strutture sequenziali Leggere prezzo unitario, quantità e percentuale di sconto relativa a una data merce e calcolare l'importo, l'importo scontato e lo sconto Letti i voti di tre materie, calcolare il voto medio Acquisito il lato di un quadrato, calcolarne perimetro ed area 10
Esercizi con strutture condizionali Inserire un numero dall'esterno, dire se diverso da 0, in caso affermativo visualizzare il suo quadrato in caso negativo dire che è uguale a 0 Inseriti due numeri dall'esterno dire se sono uguali tra loro o diversi Leggere un numero dall'esterno e segnalare se è pari o dispari 11 Esercizi con strutture condizionali Inseriti due numeri dall'esterno stamparli in ordine crescente Per un servizio fotografico vengono offerte le seguenti tariffe: 200 lire a scatto più un fisso di 25000 lire, oppure 300 lire a scatto. Inserito il numero di scatti dire quale delle due tariffe risulta la più conveniente 12
Esercizi con strutture condizionali Un certo prodotto costa 1000 lire al pezzo se si acquistano fino a 10 pezzi, 800 lire a pezzo se si acquistano da 11 a 50 pezzi, 500 lire se si acquistano più di 50 pezzi. Dare in input il numero di pezzi e visualizzare l importo da pagare Il biglietto per entrare a un parco di divertimenti costa 30000 lire a persona. Il biglietto è ridotto del 20% per i ragazzi fino a 12 anni di età e del 40% per gli anziani oltre i 60 anni. Inserita dall esterno l età visualizzare l importo da pagare 13 Esercizi con strutture iterative Inseriti 15 numeri dall esterno eseguire la somma Inserire un numero positivo, visualizzare i suoi primi cinque multipli Inserire dall esterno sei numeri qualsiasi. Visualizzare quanti sono i numeri negativi tra quelli inseriti Inserito un numero n dall esterno, visualizzare i primi n numeri naturali 14
Esercizi con strutture iterative Stampare la somma dei primi n numeri naturali pari Inserire dall esterno 5 numeri qualsiasi positivi. Emettere qual è il più grande Inseriti dall esterno N numeri positivi, visualizzare il più grande, il più piccolo e la loro media Leggere 100 numeri interi e calcolare la percentuale dei positivi 15
Università C. Cattaneo Algoritmi: esercizi Esercizi /1 1. Si realizzi il diagramma di flusso di un algoritmo in cui l esecutore legge l età di ciascuno di una classe di 40 studenti e calcola e stampa il numero totale di maggiorenni. 2. Si realizzi il diagramma di flusso di un algoritmo che legge i 13 simboli corrispondenti ai risultati delle partite inserite in una schedina del totocalcio e calcola e stampa il numero di occorrenze dei simboli 1, X e 2. 3. Si realizzi il diagramma di flusso di un algoritmo che, per ogni studente di una classe di 30, legge il voto della prova teorica e quello della prova pratica di un esame. Se almeno un voto è inferiore a 18 il voto finale è insufficiente ; se entrambi sono maggiori o uguali a 18 il voto finale è pari al valore medio. Per ogni coppia di valori l algoritmo deve stampare il voto complessivo conseguito ("insufficiente" in caso di voto insufficiente o la media dei due valori nel caso di voto sufficiente). Alla fine deve stampare il numero totale di voti insufficienti. 12/10/2004 Ingegneria - Informatica - A.A. 2004-05 2 Ingegneria - Informatica - A.A. 2004-05 1
Università C. Cattaneo Esercizi /2 4. All ingresso di un teatro si decide di applicare uno sconto al prezzo del biglietto per tutti gli spettatori minorenni o con più di 60 anni. Si realizzi il diagramma di flusso di un algoritmo che, dati in ingresso i 1000 numeri corrispondenti alle età di tutti gli spettatori presenti, calcola e stampa il numero totale di biglietti a cui applicare lo sconto. 5. L azienda XYZ ha deciso di dotare i propri 250 dipendenti di un telefono cellulare. I dipendenti di livello inferiore (dal I al IV livello) riceveranno un modello base che costa 150, quelli di livello intermedio (V e VI) ne riceveranno uno migliore (costo pari a 200 ), mentre i dipendenti di livello più elevato (VII e VIII) avranno un telefono che costa 300. Scrivere il diagramma di flusso dell algoritmo che riceve la sequenza dei 250 numeri interi che rappresentano il livello di ciascun dipendente e che calcola (e stampa) la spesa complessiva. 6. Si realizzi il diagramma di flusso di un algoritmo che legge i 21 valori di temperature registrati nei capoluoghi di regione italiani e al termine stampa il valore massimo e il valore minimo di temperatura registrati. 12/10/2004 Ingegneria - Informatica - A.A. 2004-05 3 Esercizi /3 7. Dati in ingresso i valori IVA esclusa di un certo numero di fatture, si calcoli e si stampi l importo complessivo di IVA da versare tenendo presente che nello stato di LIUClandia vengono applicate le seguenti aliquote IVA: per ogni fattura di importo fino a 5000 l aliquota applicata è del 10%; per ogni fattura di importo superiore a 5000 l aliquota applicata è del 20%. Si consideri che la sequenza di valori in ingresso termina quando viene inserita una fattura con valore totale pari a zero. 8. Il Comune di Castellanza ha deciso di effettuare una serie di rilevazioni della concentrazione di polveri sottili in "N" giorni successivi, dove il valore N è deciso dal sindaco. Il rilevatore deve innanzitutto leggere il numero N. Durante l analisi, ogni qual volta il valore di concentrazione è maggiore di 50 si deve stampare il messaggio allarme. Alla fine delle rilevazioni, che coincide con la terminazione della analisi, si devono stampare: il valore massimo e il numero che identifica il giorno in cui è stato ottenuto, il valore minimo e il numero che identifica il giorno in cui è stato ottenuto, e la variazione percentuale, cioè: (massimo-minimo)/minimo. 12/10/2004 Ingegneria - Informatica - A.A. 2004-05 4 Ingegneria - Informatica - A.A. 2004-05 2
Università C. Cattaneo Esercizi /4 9. Un negozio di scarpe decide di applicare uno sconto di fine serie per quelle scarpe che normalmente rimangono a magazzino, cioè per le scarpe da uomo il cui numero è minore di 39 e maggiore di 45. In magazzino sono presenti 12 modelli diversi di scarpe per un totale di 350 scatole. Su ogni scatola è presente il numero che indica la misura della scarpa. Si realizzi il diagramma di flusso di un algoritmo che, per ognuno dei 12 modelli: - legge il numero di scatole di tale modello - per ogni scatola legge la misura stampata - calcola e stampa il numero totale di scatole di tale modello a cui applicare lo sconto. 10. L ufficio censimenti vuole aggiornare i dati relativi alla densità di popolazione nei comuni situati nel territorio dei 21 capoluoghi di regione italiani. Si realizzi il diagramma di flusso di un algoritmo che, per ciascuno dei 21 capoluoghi di regione: - legge un valore N corrispondente al numero di comuni presenti nel territorio del capoluogo; - legge l insieme degli N valori corrispondenti al numero di abitanti di ciascuno dei comuni; - calcola e stampa la media di tali N valori. 12/10/2004 Ingegneria - Informatica - A.A. 2004-05 5 Ingegneria - Informatica - A.A. 2004-05 3
Esercizi Svolti di Programmazione Walter Cazzola DICo - Dipartimento di Informatica e Comunicazione Università degli Studi di Milano cazzola@dico.unimi.it Introduzione Di seguito sono riportati alcuni esercizi svolti di programmazione, lo scopo è sia quello di darvi degli esercizi con soluzione, sia quello di farvi vedere cosa è necessario produrre per l esame. A lezione si è introdotto un processo di sviluppo del software composto di quattro passi: analisi del problema, specifica funzionale, outline dell algoritmo (contenitori dei dati e diagramma di flusso) e scrittura del programma. In questo foglio mi limiterò a riportare il diagramma di flusso ed il programma nel linguaggio LP, mentre per l esame dovrete produrre anche un analisi del problema e della soluzione proposta. Nota, siccome è stata presentata a lezione, includo anche il codice C della soluzione. Esercizio: Radici Calcolare le radici di un equazione di secondo grado. Diagramma di Flusso.
Esercizi Svolti di Programmazione 2 Programma LP. Programma C. var a, b, c, delta: int begin read(a); read(b); read(c); delta := b*b-4*a*c; if delta < 0 then write( Nessuna soluzione. ); else if delta = 0 then write( Radici coincidenti =,-b/(2*a)); else write( Radici distinte =, (-b+sqrt(delta))/(2*a), e, (-b-sqrt(delta))/(2*a)); endif endif end. #include <stdio.h> int main() { int a, b, c, delta; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf("c = "); scanf("%d", &c); delta = b*b-4*a*c; if (delta < 0) { printf("nessuna soluzione.\n"); } else { if (delta == 0) { printf("coincidenti = %lf\n", -b/(2*a)); } else { printf("radici distinte = %lf e %lf\n", (-b+sqrt((double)delta))/(2*a), (-b-sqrt((double)delta))/(2*a)); } } }
3 Walter Cazzola Esercizio: Ricerca del Minimo. Ricerca del minimo tra i K (1 K 50) numeri introdotti come input. Diagramma di Flusso. Programma LP. var K,i,min,x: int, begin read(k); i:=1; read(min); while i<=k do read(x); if x < min then min:=x; endif i :=i+1; write(min); end.
Esercizi Svolti di Programmazione 4 Esercizio: Conversioni Temperature Programma di conversione delle temperature date in input da gradi Celsius a gradi Fahrenheit (t F = 9 5 t C + 32). Il programma si ferma quando si introduce il numero zero. Alla fine stampiamo la somma delle temperature sia Celsius che Fahrenhait calcolate e la loro media. Diagramma di Flusso. Programma LP. var SC,SF,C,F: float, i: int; begin read(c); i:=0; SC:=C; SF:=0; while not(c=0) do F := 9/5*C+32; write(c, C =, F, F ); SC:= SC+C; SF:= SF+F; i:=i+1; read(c); write( Totale, SC, C =, SF, F ); write( Media, SC/i, C =, SF/i, F ); end.
5 Walter Cazzola Esercizio: Moltiplicazione Calcolare la moltiplicazione di due numeri interi dati in input avendo a disposizione solo addizione e sottrazione. Diagramma di Flusso. Programma LP. var mul, a, b: int; begin read(a); read(b); write(a, x, b, = ); mul := 0; while b>0 do mul := mul + a; b := b - 1; write(mul); end.
Esercizi Svolti di Programmazione 6 Esercizio: Ordinamento di un Array Ordinare in ordine crescente e stampare un array di K interi con 1 K 50. Nota nel seguente diagramma sia la lettura che la scrittura di un array sono indicate in modo compatto con leggi A e scrivi A. Diagramma di Flusso. Programma LP. var A: array 1..50 of int, K,i,j,l,min: int; begin read(k); i := 0; while i<k do read(a[i]); i := i+1; i := 0; while i<k do min := A[i]; l := i; j := i+1; while j<k do if A[j] < min then l:=j; min:=a[j]; endif j := j+1; A[l] := A[i]; A[i] := min; i := i +1; i := 0; while i<k do write(a[i]); i := i+1; end.
7 Walter Cazzola Esercizio: Agenda Telefonica. Implementare un agenda telefonica contenente esattamente 100 nominativi. Ogni nominativo è composto da: Nome, Cognome e numero di telefono. L agenda è ordinata lessicograficamente. Scrivere l algoritmo di ordinamento e l algoritmo per ritrovare un numero dato il cognome ed il nome. Sono valide le stesse considerazioni fatte sul diagramma dell esercizio precedente. Diagramma di Flusso: Ordinamento Agenda Diagramma di Flusso: Ricerca in Agenda
Esercizi Svolti di Programmazione 8 Programma LP. const K=100; var agenda: array 1..K of record nome: string; cognome: string; numero: int; end; var i,j,l: int, tmp: record nome: string; cognome: string; numero: int; end; begin i := 0; while i<k do l:=i; j :=i+1; while j<k do if (agenda[j].cognome < agenda[l].cognome) or ((agenda[j].cognome = agenda[l].cognome) and (agenda[j].nome < agenda[l].nome)) then l:=j; endif j := j+1; tmp := agenda[l]; agenda[l] := agenda[i]; agenda[i] := tmp; i := i +1; end. var elem: record nome: string; cognome: string; numero: int; end; min, max, med: int; begin read(elem.nome); read(elem.cognome); read(elem.numero); min := 1; max := K; med := (max-min)/2; while not ((elem.cognome=agenda[med].cognome) and (elem.nome=agenda[med].nome)) and not (med = min) do if (elem.cognome < agenda[med].cognome or ((elem.cognome=agenda[med].cognome) and (elem.nome < agenda[med].nome))) then max := med; else min := med; endif med := min + (max-min)/2; write(med); end.
9 Walter Cazzola Esercizio: Crittografia. Realizzare un sistema crittografico che translittera un testo secondo uno schema (carattere nel testo, carattere con cui sostituirlo) dato in input. Il testo da codificare sarà al più di 5000 caratteri. Nota: supponiamo l esistenza di una funzione ord() che passatogli un carattere restituisce la sua posizione nell alfabeto, es. ord( A ) ritorna 1 e ord( Z ) ritorna 26. Diagramma di Flusso. Programma LP. const card_alfabeto = 26; var schema : array 1..card_alfabeto of char; testo : array 1..5000 of char; i,n: int; begin i := 1; while i <= card_alfabeto do read(schema[i]); i := i+1; read(n); i := 1; while i <= n do read(testo[i]); testo[i] := schema[ord(testo[i])]; i := i +1; i := 1; while i <= n do write(testo[i]); i := i +1; end.