Programma consuntivo di Informatica Anno scolastico 2013 - 2014 Classe IV A Indirizzo Informatico Docente teorico Lolita Tiriticco Docente tecnico pratico Massimiliano Patti Obiettivi L'obiettivo del programma annuale è far acquisire all’alunno le competenze per affrontare progetti di una certa complessità. Deve acquisire la flessibilità che gli consenta di analizzare e risolvere problemi di varia natura utilizzando il linguaggio e gli strumenti più adatti al particolare problema in considerazione. Al termine della classe quarta gli obiettivi raggiunti dovranno essere i seguenti: Svolgere un’analisi qualitativa circa la bontà ed il costo di un algoritmo. Capire la ricorsione, distinguere e realizzare sottoprogrammi ricorsivi e tradurli in iterativi. Applicare con proprietà le tecniche di programmazione modulare. Conoscere le strutture dati statiche fondamentali di un linguaggio di programmazione imperativo. Conoscere, usare e gestire le stringhe e le sue librerie. Sapere dichiarare, usare, gestire archivi di dati. Elaborare file di caratteri e testo. Capire i flussi dei dati e la bufferizzazione. Saper utilizzare e definire i puntatori a variabili strutturate. Conoscere le strutture dati dinamiche fondamentali di un linguaggio di programmazione imperativo. Definire e manipolare strutture di dati connesse da puntatori. Essere in grado di usare, definire, differenziare e scegliere tra le strutture dati, statiche e dinamiche, lineari e non. Sapere operare operazioni sulle strutture dati. Essere in grado di realizzare programmi nei linguaggi prescelti, verificandone la correttezza e producendo una idonea documentazione. Saper definire classi e costruire gli oggetti per la risoluzione di un problema con metodologia bottom-up e uso di un linguaggio di programmazione ad oggetti. Obiettivi minimi per l’attribuzione della sufficienza: Possedere i contenuti minimi: Sapere i parametri per valutare la bontà di un algoritmo. Uso delle librerie per le stringhe, cos’è la ricorsione e come si distingue un problema ricorsivo, uso e gestione delle principali strutture dati statiche e differenze con le dinamiche. A cosa serve e come si dichiara un puntatore, gestione di un file di testo e cos’è; a cosa serve un archivio; ADT cosa sono, quali sono a cosa servono. Saper implementare le operazioni base sulle strutture dati. Basi della scelta di implementazione di un algoritmo. Sapere cos’è, a cosa serve e saper definire una o più classi ed i relativi oggetti. Gerarchia delle classi. Applicare le conoscenze acquisite per la soluzione di problemi (saper sviluppare programmi in C con uso dei contenuti minimi). Scegliere la metodologia, ed i relativi strumenti, per progettare una strategia risolutiva. Sapersi esprimere in modo semplice ma con uso del linguaggio specifico della materia. Saper commentare un codice e realizzare una analisi formalmente corretta di un problema. Contenuti: Unità 1 – dal Tomo A del libro di testo Le stringhe e loro gestione in C, uso delle librerie string.h. Le stringhe come vettore di caratteri. I record e le operazioni di caricamento, visualizzazione e assegnamento. Le tabelle con le operazioni. ( anche codice C). Allocazione dei record e tabelle in memoria. Dal Tomo B del libro di testo Unità 2 – FILE DI TESTO E MEMORIZZAZIONE DEI DATI Oltre ai contenuti del libro, per questa unità sono stati forniti appunti, codice C ed esempi svolti dall’insegnante e caricati su una cartella di Google Drive condivisa con la classe. I puntatori, cosa sono, uso, operazioni, allocazione della memoria, definizione di NULL. I File, introduzione File di testo Operazioni logiche Considerazioni sull’uso dei file File non strutturati Leggere e creare file di testo Usare file di testo per I/O File e diagrammi di flusso File strutturati Definizione, operazioni logiche e fisiche File sequenziali File ad accesso diretto Accesso ad indice, ricerca ed inserimento File ad accesso calcolato Funzione Hash Gestione dell’overflow File relative Chiavi secondarie Chiavi, multi catene, indice Compressione di file lossless e lossy Soppressione caratteri ripetuti Campi opzionali Codifica di Huffman Unità 3 – COMPLESSITA’ DEGLI ALGORITMI La bontà degli algoritmi Costo di un algoritmo Complessità computazionale per gli algoritmi ricorsivi rispetto agli iterativi Complessità degli algoritmi di ricerca, ordinamento, algoritmo ottimo. Unità 4 – STRUTTURE DATI DINAMICHE LINEARI – LISTA PILA CODA Oltre ai contenuti del libro, per questa unità sono stati forniti appunti, codice C ed esempi svolti dall’insegnante e caricati su una cartella di Google Drive condivisa con la classe. Per ognuno dei punti sono state date e spiegate le procedure di gestione in C Allocazione statica e dinamica della memoria Aree di memoria I puntatori Allocare e deallocare memoria con i puntatori Aliasing, garbage, side effect e dangling reference Assegnazione tra puntatori di tipo diversi Puntatori a variabili strutturate Le strutture dati Implementazione delle strutture dati astratte Strutture dati concrete dinamiche e concatenate Classificazione delle strutture dati Il concetto di nodo La lista semplice, circolare, bidirezionale, concatenata e multipla. La Lista con le operazioni di creazione, cancellazione, inserimento, ordinamento, ricerca, eliminazione struttura. Memorizzazione di una lista dinamica. La Pila con le operazioni di creazione, cancellazione, inserimento, ordinamento, ricerca, eliminazione struttura. Memorizzazione di una Pila con i puntatori. Memorizzazione di una Pila con i vettori. La Coda con le operazioni di creazione, cancellazione, inserimento, ordinamento, ricerca, eliminazione struttura. Memorizzazione di una Coda con i puntatori. Memorizzazione di una Coda con i vettori. Unità 5 – STRUTTURE DATI DINAMICHE NON LINEARI – GRAFI ED ALBERI Oltre ai contenuti del libro, per questa unità sono stati forniti appunti, codice C ed esempi svolti dall’insegnante e caricati su una cartella di Google Drive condivisa con la classe. Per ognuno dei punti sono state date e spiegate le procedure di gestione in C I grafi: definizione e terminologia Rappresentazione matematica dei grafi Allocazione dei grafi in memoria Allocazione mediante matrice di adiacenza o incidenza Le operazioni sui grafi Implementazione di un grafo orientato pesato Gli alberi: definizione e terminologia Alberi generici e alberi binari Alberi bilanciati e relazione tra livelli e numero di nodi Allocazione in memoria degli alberi generici Allocazione in memoria degli alberi binari Visita di un albero Visita in profondità Algoritmi di visita in ampiezza (BFS) di un albero binario Algoritmi di visita in profondità (DFS) di un albero binario Alberi e rappresentazione delle espressioni Alberi e valutazione delle espressioni Alberi binari di ricerca, ABR, e loro implementazione Nodi e foglie di un ABR Alberi binari di ricerca bilanciati: AVL e B-Tree Unità 6 – PROGRAMMAZIONE ORIENTATA AGLI OGGETTI Dalla programmazione tradizionale all’object oriented Incapsulamento Oggetti Classe Attributi Operazioni e metodi Unità 7 - METODOLOGIA UML Metodologie a oggetti Class diagram Modello dinamico Sequence diagram Unità 8 – CARATTERISTICHE DELLE CLASSI Caratteristiche delle classi e degli oggetti Costruttori Oggetti pubblici e privati Gestire classi semplici e complesse Gestire array con classi Unità 9 – LE SOTTOCLASSI E LA LORO GESTIONE Ereditarietà Polimorfismo Definizione di sottoclassi Gestire sottoclassi Classe per la gestione di file di testo Laboratorio Le ore di laboratorio sono state utilizzate per esercizi e verifiche sia teorici che pratici. Per l’implementazione abbiamo utilizzato l’interfaccia Dev C++. Materiale didattico Libro di testo: Iacobelli,Ajme,Marrone – EPROGRAM Tomo A Tomo B – Juvenilia Scuola Fotocopie da libri per alcune parti della teoria e per il codice C; Appunti e presentazioni forniti dall’insegnante, caricati in Google Drive