PROGRAMMA EFFETTIVAMENTE SVOLTO Disciplina: INFORMATICA Docente: SALVATORE D URSO L. S. Scienze Applicate - Classe: TERZA - Sezione: O - Anno Scolastico 2014/2015 SUPPORTO DIGITALE: CORSO SUL LINGUAGGIO C++ AUTORE: GIOVANNI CALABRESE Durante l anno scolastico è stato fornito materiale didattico dall insegnante. 1. U.D.A. 1: RIPASSO CONCETTI FONDAMENTALI DEL PROGRAMMA DI SECONDA Le strutture di controllo; L ambiente di programmazione C++; Progettazione di algoritmi e loro realizzazione in C++; Le funzioni; Le variabili static e le funzioni ricorsive; I Vettori; 2. U.D.A. 2: STRUTTURE DATI, ALGORITMI E GESTIONE DELLE STRINGHE I vettori ad una o più dimensione; Gestione dati con i vettori paralleli; Algoritmi di ordinamento: Ordinamento per selezione; Ordinamento per inserzione; Bubble sort; Quick sort (cenni sui puntatori); Algoritmi di ricerca: Ricerca sequenziale; Ricerca binaria (dicotomica); Funzioni per la gestione delle stringhe; Utilizzo delle funzioni della libreria <string.h> per la gestione delle stringhe Le funzioni: printf, scanf, gets e puts; Le struct in C++; I vettori di struct; 1
3. U.D.A. 3: CONCETTI DI BASE SULLA OOP Introduzione; Definizione di classi, membri di una classe: attributi e metodi; Incapsulamento e l information hiding; Definizione di oggetti (istanze); Metodi speciali: Costruttori; Costruttore di copia; Distruttore (cenni); L operatore di assegnazione fra istanze; Metodi Get e Set; Variabili locali e variabili ad istanza; Accessibilità e visibilità (scope) di attributi e metodi: pubblici e privati; Il metodo main (): il programma principale; Classi con all interno altre classi. 4. U.D.A. 4: IL LINGUAGGIO HTML Introduzione al linguaggio HTML; Siti internet, pagine web, link, browser; Principali tag di HTML: HTML, HEAD, BODY, P, BR, HR, BGCOLOR, BACKGROUND, ALIGN, MARGIN. Le tabelle, i link, le immagini, sfondi, suoni e video; Esercitazione attraverso l editor Notepad++ ed il blocconote. Bergamo, lì Gli studenti Il Docente 2
LAVORO ESTIVO CLASSE 3O IL LAVORO ESTIVO DEVE ESSERE FATTO DA TUTTA LA CLASSE. PER COLORO CHE HANNO AVUTO LA SOSPENSIONE DEL GIUDIZIO IN INFORMATICA, IL LAVORO DOVRÀ ESSERE CONSEGNATO IL GIORNO DELL'ESAME SCRITTO. PER TUTTI GLI ALTRI, IL LAVORO DOVRÀ ESSERE CONSEGNATO IL PRIMO GIORNO DI SCUOLA. LA PUNTALITÀ NELLA CONSEGNA, L'ORDINE, LA QUALITÀ E LA QUANTITÀ DEL LAVORO SVOLTO RIENTRERANNO TRA GLI ELEMENTI CHE SARANNO PRESI IN CONSIDERAZIONE PER LA VALUTAZIONE FINALE. PER OGNI ESERCIZIO, RIPORTARE IL NUMERO E IL TESTO ALL INIZIO DELL EDITOR DI TESTO USATO (DEVC++) E IL COMMENTO DEL CODICE. Studiare e ripassare i capitoli riguardanti la parte teorica del programma svolto dal libro digitale e dagli appunti forniti dall insegnante. Consultare gli appunti dati a lezione. Fare gli esercizi e i problemi di fine capitolo dal libro di testo per le parti trattate, aiutandosi con gli esercizi svolti in classe dal docente. Svolgere i seguenti esercizi: 1. Scrivi una funzione in C++ che data una richiesta di conversione di temperatura da Kelvin o in Celsius o viceversa (usando una funzione SCEGLI), restituisca in uscita il valore in gradi Celsius o Kelvin rispettivamente (TC=TK-273 e TK=TC-273). Richiamare le funzioni nel main. COMMENTARE OPPORTUNAMENTE IN 2. Scrivi una funzione in C++, che dato in input un numero intero n lo trasformarmi in binario, richiama la funzione nel main. COMMENTARE OPPORTUNAMENTE IN 3. Dato un valore di raggio e di altezza di un cono, scrivere le seguenti funzioni in C++: o Funzione per il calcolo della circonferenza. o Funzione per il calcolo dell area del cerchio. o Funzione per il calcolo della superficie laterale del cono. o Funzione per il calcolo della superficie totale del cono. o Funzione per il calcolo del volume cono. o Funzione per il calcolo del peso specifico in g/cm3 (Ps=P/V) il peso deve essere fornito in grammi (g) nel main. Richiamare le funzioni nel main. COMMENTARE OPPORTUNAMENTE IN 3
4. Scrivi un programma in C++ per il calcolo delle soluzioni di un equazione di secondo grado, usare le seguenti funzioni da richiamare opportunamente nel main: o Funzione inserimento coefficienti (puoi farlo con passaggio per riferimento oppure dichiarando le variabili globali prima del main). o Funzione calcolo determinante. o Funzione calcolo e visualizzazione delle soluzioni, contemplare i casi equazione impossibile ed indeterminata. o Funzione calcolo dell equazione di primo grado, solo se il coefficiente del termine quadratico è nullo (a=0), contemplare i casi equazione impossibile ed indeterminata. Richiamare le funzioni nel main. COMMENTARE OPPORTUNAMENTE IN 5. Scrivi un programma in C++ che risolva un sistema di due equazioni in due incognite, usando il metodo di Cramer. Contemplando il caso di sistema impossibile (Δ=0) ed indeterminato. a x + b y = c { a x + b y = c Usare le seguenti funzioni da richiamare opportunamente nel main: o Funzione inserimento coefficienti (puoi farlo con passaggio per riferimento oppure dichiarando le variabili globali prima del main). o Funzione che calcoli in delta (Δ). o Funzione che calcoli la soluzione. o Funzione stampa per stampare a video la soluzione. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 6. Scrivi un programma in C++ che, dati in input tre numeri qualsiasi, calcoli la somma dei tre numeri, il maggiore, il minore e se tali numeri possono essere i lati di un triangolo. Usare le seguenti funzioni da richiamare opportunamente nel main: o Funzione inserimento dei numeri (puoi farlo con passaggio per riferimento oppure dichiarando le variabili globali prima del main). o Funzione somma, che restituisca al main la somma dei tre numeri. o Funzione maggiore, che restituisca al main il maggiore dei tre numeri. o Funzione minore, che restituisca al main il minore dei tre numeri. o Funzione triangolo, che restituisca al main una variabile di tipo bool con vero se i tre numeri rappresentano un triangolo e falso in caso contrario. (stampare a video un opportuno messaggio di segnalazione). COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 7. Scrivi una funzione in C++ che, dato in input un intero N, stampi a video i primi N caratteri del codice ASCII. Usare la seguente funzione da richiamare opportunamente 4
nel main. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 8. Scrivi una funzione in C++ che, letti da tastiera una serie di caratteri minuscoli chiusi dal carattere zero, stampi a video i caratteri in maiuscolo. Usare la seguente funzione da richiamare opportunamente nel main. COMMENTARE OPPORTUNAMENTE IN 9. Riempire due vettori di lunghezza differente con numeri qualsiasi attraverso la funzione randomica e determinare il minimo, il massimo e la media complessiva dei due vettori, usando tre diverse funzioni da richiamare nel main. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT- OUTPUT. 10. Far visualizzare le prime n righe del triangolo di Tartaglia: 1 1 1 2 1 1 3 3 1 1 4 6 4 1....... La prima riga è costituita da due uno, il primo e ultimo numero di ogni riga è sempre 1, ogni altro numero è uguale alla somma di due numeri della riga precedente: quello che si trova proprio sopra il numero da determinare e quello immediatamente a sinistra. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 11. Fare un programma che, assegnata una frase, isoli e metta in un vettore tutte le parole in essa contenute. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 12. Fare un programma per caricare un testo in un vettore di stringhe. COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT- OUTPUT. 13. Dato un vettore ordinare gli elementi di posto dispari in ordine crescente e quelli di posto pari in ordine decrescente. COMMENTARE OPPORTUNAMENTE IN 14. Dati due vettori numerici ordinati, riunirli in un terzo sempre ordinato (fusione). COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 5
15. Si realizzi un programma in C++ che legga da utente i dati relativi ad alcuni corsi. In particolare, per ogni corso vengono dati: o Denominazione del corso: una stringa di 20 caratteri che riporta il nome del corso; o Cognome del docente: una stringa di 15 caratteri che rappresenta il cognome del docente del corso; o Iscritti: un intero che indica il numero di studenti che frequentano il corso. Scrivere (COMMENTANDO OPPORTUNAMENTE IL CODICE) la funzione main () del programma che preveda la gestione di 10 differenti corsi e che utilizzi le seguenti funzioni, con il vettore dei corsi e la sua dimensione sempre presenti tra i parametri: a) Funzione INSERIMENTO per l inserimento dei dati nel vettore di struct. b) Funzione VISUALIZZAZIONE per la visualizzazione dei dati della struttura dati. c) Funzione che ordini per alfabeto sul campo Denominazione del Corso il vettore di struct e stampi a video il risultato. d) Funzione che, stampi la denominazione del corso e il cognome del docente relativi a tutti i corsi che hanno il numero di iscritti maggiore o uguale alla media aritmetica degli iscritti (calcolata su tutti i corsi). e) Funzione che, data una soglia minima di iscritti ai corsi, stampi a video corso per corso (compreso il cognome del docente) se il corso verrà tenuto o meno. 16. Si realizzi un programma in C++ che legga una serie di dati e li memorizzi in un vettore SQUADRE (di dimensione 10) contenente strutture (struct squadra) del tipo: o nome squadra (stringa di lunghezza 20) o goal fatti (intero) o goal subiti (intero) Scrivere (COMMENTANDO OPPORTUNAMENTE IL CODICE) la funzione main () del programma che utilizzi le seguenti funzioni, con il vettore dei corsi e la sua dimensione sempre presenti tra i parametri: a) Funzione INSERIMENTO per l inserimento dei dati nel vettore di struct. b) Funzione VISUALIZZAZIONE per la visualizzazione dei dati della struttura dati. c) Funzione che, stampi a video tutti i nomi delle squadre che hanno fatto un numero di goal maggiore del numero dei goal subiti. d) Funzione che, dato il nome di una squadra, stampi a video i goal fatti e i goal subiti della squadra in questione. e) Funzione che, ordini da quella che ha una maggiore differenza reti a quella che ne ha di meno e stampi a video il nome delle squadre del vettore di struct. 6
17. Si realizzi un programma in C++ che legga una serie di dati e li memorizzi in un vettore contenente strutture (struct esami) del tipo: o nome esame (stringa di lunghezza 20) o voto esame (intero) o crediti esame (intero) Scrivere (COMMENTANDO OPPORTUNAMENTE IL CODICE) la funzione main() del programma che preveda la gestione di 25 esami e che utilizzi le seguenti funzioni, con il vettore degli esami e la sua dimensione sempre presenti tra i parametri: a) Funzione INSERIMENTO per l inserimento dei dati nel vettore di struct. b) Funzione VISUALIZZAZIONE per la visualizzazione dei dati della struttura dati. c) Funzione che ordini per alfabeto sul campo nome esame il vettore di struct e stampi a video il risultato. d) Funzione che calcoli la media pesata degli esami sostenuti. La media pesata si calcola moltiplicando il voto dell esame per i crediti dell esame e sommando questi contributi bisogna dividere la somma per i crediti totali. e) Funzione che dato il nome di un esame restituisca il voto e i crediti dell esame in questione. Se l esame non è presente nel vettore di strutture, la funzione deve fornire un messaggio di errore. 18. Un alunna, esperta in informatica e in particolar modo del linguaggio C++, vuole creare un vettore di strutture dati con all interno i seguenti campi relativi alle materie che sta frequentando e studiando: o Nome materia: una stringa di 20 caratteri che riporta il nome della materia; o Cognome docente della materia: una stringa di 15 caratteri che rappresenta il cognome del docente del corso; o Voto materia: un numero qualsiasi che indica il voto della materia. Scrivere (COMMENTANDO OPPORTUNAMENTE IL CODICE) la funzione main () del programma che preveda la gestione di 10 differenti materie che utilizzi le seguenti funzioni, con il vettore della materie e la sua dimensione sempre presenti tra i parametri: a) Funzione INSERIMENTO per l inserimento dei dati nel vettore di struct. b) Funzione VISUALIZZAZIONE per la visualizzazione dei dati della struttura dati. c) Funzione che ordini per alfabeto sul campo Nome materia il vettore di struct e stampi a video il risultato. d) Funzione che, dato il Cognome del docente della materia visualizzi la materia che il docente insegna e il relativo voto. e) Funzione che, calcoli il numero di insufficienze della studentessa e visualizzi le materie insufficienti. 7
19. Si realizzi un programma in C++ che, crei una matrice bidimensionale NxM, con M e N inseriti da tastiera dall utilizzatore, di numeri random da 0 a 90, e determini la somma di tutti i suoi elementi. COMMENTARE OPPORTUNAMENTE IL CODICE. 20. Si realizzi un programma in C++ che, crei una matrice bidimensionale quadrata NxN, con N inserito da tastiera dall utilizzatore, in cui tutti gli elementi della diagonale principale siano posti ad 1. COMMENTARE OPPORTUNAMENTE IL CODICE. 21. Si realizzi un programma in C++ che, crei una matrice bidimensionale NxM, con M e N inseriti da tastiera dall utilizzatore, di numeri random da 0 a 90. Fatto ciò allocare un vettore di dimensione NxM che contenga tutti i numeri random della matrice di partenza. COMMENTARE OPPORTUNAMENTE IL CODICE. 22. Si realizzi un programma in C++ che, crei una matrice bidimensionale NxM, con N (=numero di righe) ed M (=numero colonne) inseriti da tastiera dall utilizzatore, di numeri random da 0 a 100, e determini la somma di ogni riga ponendola in un vettore di dimensione N. COMMENTARE OPPORTUNAMENTE IL CODICE. 23. Si realizzi un programma in C++ che, crei una matrice PITAGORICA bidimensionale quadrata NxN, con N compreso fra 10 e 15 ed inserito da tastiera dall utilizzatore. COMMENTARE OPPORTUNAMENTE IL CODICE. 24. Si realizzi un programma in C++ che, crei una matrice bidimensionale NxM, con M e N inseriti da tastiera dall utilizzatore, di numeri random da 0 a 10, che dato un numero di indice (K) inserito da tastiera con K<=M, elimini la colonna corrispondente all indice dato. COMMENTARE OPPORTUNAMENTE IL CODICE. 25. Si realizzi un programma in C++ che, crei una matrice bidimensionale NxM, con M e N inseriti da tastiera dall utilizzatore, di numeri random da 0 a 10, che dato un numero di indice (K) inserito da tastiera con K<=N, elimini la riga corrispondente all indice dato. COMMENTARE OPPORTUNAMENTE IL CODICE. 26. Si realizzi un programma in C++ che, crei una matrice quadrata di ordine N, con N inserito da tastiera dall utilizzatore, di numeri random da 0 a 100, e successivamente si determini la somma degli elementi sulla diagonale principale. COMMENTARE OPPORTUNAMENTE IL CODICE. 8
27. Scrivere un programma contenente la seguente classe: class Frazione { // Attributi public: int numeratore; int denominatore; // Costruttori Frazione (); Frazione (int numeratore, int denominatore); //Metodi...valido (?); // indica se è valido, den!=0...getnumeratore (?) // restituisce il numeratore...getdenominatore (?) // restituisce il denominatore...setnumeratore (?) // imposta il numeratore...setdenominatore (?) // imposta il denominatore...reale (?); // restituisce il valore della frazione come numero reale... inverti (?); // inverte la frazione. es: 7/4 4/7... eleva (?); // eleva la frazione ad un dato esponente... confronta (?); // restituisce -1, 0, 1 a seconda dell'esito del confronto con un'altra frazione... stampa (?);... incrementa (?); // incrementa di uno numeratore e denominatore... decrementa (?);// decrementa di uno numeratore e denominatore addiziona(?); // il mio oggetto frazione ad un numero (provate anche il caso di addizionare due oggetti di tipo frazione) }; Richiamare i metodi nel main (), COMMENTARE OPPORTUNAMENTE IN 28. Scrivere un programma contenente la seguente classe: class Segmento Sapendo che un segmento è caratterizzato dal punto iniziale e dal punto finale individuare gli attributi scrivere i costruttori (sul costruttore di default è lasciata ampia autonomia) metodi: set/get stampa, che visualizza sullo schermo la "scheda" del segmento nullo, indica se è un segmento nullo lunghezza del segmento distanza del punto medio dall'origine orizzontale, indica se il segmento è orizzontale 9
coincide, che verifica se il segmento coincide con un altro segmento (*) confronta, che confronta il segmento con un altro segmento in termini di lunghezza connesso, che verifica se il segmento è connesso per uno dei suoi estremi ad un altro segmento (*) (*) si tenga conto che di un segmento è arbitrario l ordine con cui si stabilisce quale sia il punto iniziale e quello finale. Richiamare i metodi nel main (), COMMENTARE OPPORTUNAMENTE IN 29. La classe Posteggio consente di gestire un posteggio di automobili, contenente fino a 350 autovetture. Ad ogni Automobile verranno attribuiti i seguenti attributi privati: Targa Categoria (utilitaria, berlina, station wagon, monovolume, fuoristrada) Minuto di arrivo (minuto, non fare controlli) Ora di arrivo (ora, non fare controlli) Giorno di arrivo (giorno, non fare controlli) Mese di arrivo (mese, non fare controlli) Auto presenti. Il programma dovrà contenere i seguenti metodi: Posteggio(); //Costruttore: all inizio il posteggio è vuoto; impostare a zero tutti gli attributi. Funzioni get e set; //Per ingresso nuova automobile ed informazioni automobili presenti. Uscita automobile; costo da pagare; //In uscita automobile si dovrà calcolare il numero di minuti trascorsi dall ingresso dell auto nel posteggio (per semplicità si suppongono tutti i mesi di 30 giorni e si suppone di lavorare in un unico anno, es. 2015). Con le seguenti tariffe: TEMPO COSTO 1 minuto 1 centesimo Stampa elenco auto presenti nel seguente modo: N. Targa Categoria Ora arrivo Data arrivo --- ------ ------------ ------------ -------------- 1) AB123XY W 08:35 19/05 10
2) AE456CF B 16:24 20/05........... 224) BH987YT U 20:58 19/05 Richiamare i metodi nel main (), COMMENTARE OPPORTUNAMENTE IN CODICE E DARE OPPORTUNI MESSAGGI INPUT-OUTPUT. 30. Creare una pagina WEB, attraverso l HTML, che descriva un argomento di scienze a piacere. 11