A.S. 2015/2016 CLASSE 2 SEZ T PROGRAMMA EFFETTIVAMENTE SVOLTO DOCENTE Prof. Massimo Leone DISCIPLINA Informatica UDA1: Dal problema al programma. Le strutture di controllo • • • • • Definizione di algoritmo Le operazioni sui dati e l'istruzione di assegnazione Le strutture di controllo: la sequenza, la selezione e l'iterazione Teorema di Bohm-Jacopini Rappresentazione degli algoritmi tramite diagrammi di flusso o pseudocodifica UDA2: Introduzione all'ambiente di programmazione C++ • • • • • • • • • I linguaggi di programmazione, compilatori ed interpreti Primi programmi in linguaggio C++. Dichiarazione di variabili Tipi fondamentali: int, short int, char, float, double Il casting implicito ed esplicito. Notazione prefissa e postfissa Installare e configurare l'ambiente di sviluppo Dev C++ Input e output dei dati Generazione di numeri casuali Istruzioni in sequenza Il commento al codice UDA3: Programmazione C++ • • Istruzione condizionale: codificare la selezione semplice e doppia Utilizzare le variabili di tipo bool • Operatori logici e bitwise; tipi di dato interi con e senza segno Combinare più selezioni con condizioni logiche composte • • • • • • • Istruzioni di selezione annidate Istruzione switch case Algoritmi iterativi Il ciclo while Il ciclo post condizionato: do...while Individuare errori nel codice: la trace table Il ciclo for • UDA4: Le funzioni • • • • • • • Scomposizione top-down di un programma I sottoprogrammi: funzioni e procedure Variabili locali e globali Prototipo, chiamata e dichiarazione di una funzione Parametri formali e parametri attuali Passaggio di parametri per valore Passaggio di parametri per riferimento UDA5: I vettori e le matrici • • • • • • • Gli array a una dimensione: i vettori Dichiarazione e popolamento di un vettore Ricerca lineare di un elemento all'interno di un vettore Ordinamento di un vettore: algoritmo selection sort Stringhe in C++: principali librerie e funzioni utilizzate Gli array a due dimensioni: le matrici. Dichiarazione, popolamento e gestione delle matrici con l'utilizzo del ciclo for annidato LAVORO ESTIVO Per quanto riguarda il materiale teorico si fa riferimento a quello fornito dal docente durante l'anno scolastico e caricato sul registro elettronico nella sezione Didattica. Per chi volesse o avesse bisogno di approfondire i concetti è stata caricata sul registro, sezione Didattica, una dispensa con gli stessi contenuti delle slide citate precedentemente ma più dettagliati. Il nome del file (in formato pdf) è “Dispensa C++”. Esercizi di programmazione 1. Scrivere un programma in C++ che calcoli e visualizzi il numero di KWh da addebitare e l'ammontare della bolletta della luce di un utente ricevendo in input: il nome dell'utente, il numero di KWh della lettura precedente, il numero di KWh della lettura attuale. L'ammontare della bolletta è dato da una quota fissa (Canone), che deve essere fornita in input, e dall'importo relativo al consumo, considerando costante (ad esempio di euro 0,07) il costo per Kwh. 2. La tassa per la raccolta dei rifiuti urbani in comune viene calcolata rispetto alle dimensioni dell'appartamento espresse in metri quadri, in ragione di X euro per ogni mq. All'importo così determinato viene poi aggiunta una cifra fissa di Y euro; sul totale, inoltre, viene calcolata un'addizionale pari al P%. I valori dei parametri X, Y e P sono forniti all'inizio digitandoli da tastiera. Si vuole ottenere la stampa dell'importo totale per un appartamento dopo aver introdotto da tastiera la superficie in mq. 3. Dati il codice e il prezzo di un prodotto, calcolare il prezzo da pagare sapendo che se il prezzo è superiore a una determinata cifra (costante) si applica il 6% di sconto, e se il pagamento è fatto in contanti si applica un ulteriore sconto del 2%. 4. Una nuova compagnia telefonica ha promosso l'offerta "oltre80": alla cifra fissa di 0,10 euro (costo della risposta) occorre aggiungere la cifra di 0,15 euro per ogni secondo del tempo della telefonata; però oltre gli 80 secondi la tariffa per ogni secondo è di 0,09. Fornito da tastiera il numero dei secondi della telefonata, visualizzare il costo totale della chiamata. 5. Scrivi un programma che, data in input una sequenza di numeri chiusa dallo zero, determini tutti i numeri che risultano maggiori della somma di tutti i precedenti. 6. Scrivi un programma all'interno del quale viene effettuata una chiamata ad un sottoprogramma che riceve un numero intero e visualizzi in output tanti asterischi quanti sono indicati dal parametro trasmesso. Il numero intero non può essere maggiore di 10. 7. Scrivi un programma all'interno del quale viene effettuata una chiamata ad un sottoprogramma che riceve un numero intero minore o uguale a dodici e visualizzi il corrispondente in lettere. 8. Scrivi un programma all'interno del quale viene effettuata una chiamata ad un sottoprogramma che riceve un numero reale e visualizzi separatamente la parte intera e quella decimale. 9. Scrivi un sottoprogramma che richiesti in input il nome e l'età di tre persone visualizzi i dati in ordine alfabetico e in ordine di età. Inserisci la chiamata al sottoprogramma all'interno di un programma chiamante (main) realizzato opportunamente. 10. Scrivi un sottoprogramma che riceve in input il nome e l'età di una serie di n persone (n<=10). Visualizzare su richiesta dell'utente la media dell'età, la persona più giovane, la persona più grande. Inserisci la chiamata al sottoprogramma all'interno di un programma chiamante (main) realizzato opportunamente. 11. Scrivere un programma che, letti due vettori di n numeri interi (n<=50), crei successivamente i vettori somma e differenza dei due vettori precedentemente letti. 12. Un'azienda ha 10 dipendenti. Essi possono fare, al massimo 30 giorni di ferie e avere, al massimo, 40 giorni di malattia (dopodiché non saranno più pagati). I totali dei giorni di ferie (di tutti i dipendenti) sono registrati in un vettore, i totali dei giorni di malattia (di tutti i dipendenti) sono registrati in un secondo vettore e i nominativi dei dipendenti in un terzo vettore. Dati in input: • il nominativo di un dipendente • il numero di giorni di permesso che desidera avere • il tipo di permesso (ferie o malattia)pi bisogna fornire in output l'esito della concessione di tale permesso (positivo nel caso in cui il dipendente non ha superato il tetto massimo previsto, negativo nel caso contrario). Se il permesso viene accordato, aggiorna il totale che lo interessa. L'algoritmo, inoltre, dovrà fornire in output la trattenuta relativa al permesso concesso tenendo conto che per ogni giorno di ferie vengono trattenuti 5 euro, mentre per ogni giorno di malattia vengono trattenuti 3 euro. 13. Scrivere un programma che verifichi se un vettore di caratteri è palindromo (cioè se risulta uguale partendo da sinistra o da destra). 14. In un vettore viene memorizzato un testo di caratteri. Ogni frase è chiusa da un punto e le singole parole sono divise da spazi. Occorre contare il numero di frasi presenti nel testo e, per ognuna, fornire anche il numero di parole di cui è composta. 15. I dati di N prodotti (descrizione, prezzo e quantità, scorta minima) vengono memorizzati in quattro vettori paralleli. Stampa tutti quelli che hanno prezzo superiore a un valore X richiesto in input e, successivamente, tutti quelli che risultano sotto scorta, ossia tutti quelli la cui quantità presente in magazzino è inferiore alla scorta minima. 16. Sono dati in input il codice, la descrizione e la quantità in magazzino. A ogni ordine occorre detrarre la quantità richiesta del prodotto indicato in base al codice; se la quantità in magazzino non è sufficiente, l'ordine non può essere soddisfatto; a una specifica richiesta termina il programma producendo la quantità rimasta in magazzino per i vari tipi di merce e un messaggio per la produzione con il totale degli ordini non soddisfatti per ogni tipo di prodotto. 17. Si svolge una gara di ciclismo con N concorrenti. Ogni concorrente è identificato dal numero di maglia (da 1 a N). Costruisci un vettore con i tempi di arrivo. Inizialmente i tempi sono 0 per tutti. All'arrivo del ciclista, invece, si registra il suo tempo. Finita la gara si vuole conoscere: • il tempo impiegato dai ciclisti di cui sono forniti i numeri • lo scarto di ogni tempo dalla media dei tempi • il numero di maglia e il nome del concorrente primo arrivato e quello dell'ultimo. 18. L'utente inserisce una matrice NxM composta da numeri interi. Il programma scambia le righe pari con quelle dispari. Le dimensioni della matrice vengono scelte dall'utente. 19. Dati due array bidimensionali (matrici) di interi, trova gli elementi con lo stesso valore e indicane la posizione. 20. Scrivere un programma C++ che consideri una matrice rettangolare intera con N righe e M colonne, con N e M minori di 50, e che svolga le seguenti operazioni: • determini se gli elementi nulli della matrice sono in percentuale maggiore dell’80% del totale degli elementi; • se nel passo precedente la risposta è stata affermativa, visualizzi i soli elementi non nulli della matrice stessa. 21. Scrivere un programma in C++ che: • legge una matrice nxm di numeri interi, con n ed m letti da tastiera; • costruisca un vettore v di dimensione n i cui elementi sono ottenuti calcolando il massimo di ogni riga della matrice. • Visualizzi il vettore v ottenuto. 22. Costruire una matrice le cui colonne rappresentino le colonne di una schedina. Leggere la colonna vincente del totocalcio in un vettore. Controllare il numero di risultati esatti per ogni colonna della schedina e stampare, eventualmente, la colonna vincente.