Istituto Universitario Navale Facoltà di Ingegneria Corso di Laurea in Ingegneria delle Telecomunicazioni Fondamenti di Informatica Modulo 1 Programma dell'a.a. 2003/2004 Luigi Romano Dipartimento di Informatica e Sistemistica Università degli Studi di Napoli Federico II Obiettivo del corso Fornire agli allievi le conoscenze di base di architettura dei calcolatori e di tecniche di programmazione, necessarie alla realizzazione di semplici applicazioni in ambiente locale.il corso tratta i meccanismi di base della programmazione procedurale, con particolare riferimento al linguaggio C++. Al termine del corso, gli allievi devono mostrare di possedere la capacità di risolvere problemi specifici mediante programmi in C++ realizzati ad hoc, operanti in amb iente Windows. Organizzazione del corso Il corso si articola su 25 lezioni di 2 ore ciascuna. Gli argomenti teorici sono chiariti ed approfonditi con numerosi esempi ed esercizi. Ove possibile, le problematiche sono affrontate in chiave del tutto generale. Negli altri casi, si fa riferimento a specifici contesti reali. In particolare, per quanto riguarda l architettura del processore, si adopera soprattutto l esempio della famiglia Motorola 68000, con cenni alla famiglia Intel X86. Per l esecuzione degli esempi in assembler del 68000, viene fornito un simulatore in ambiente Windows. Per quanto riguarda la programmazione di applicazioni locali, ove possibile le problematiche sono affrontate in chiave del tutto generale. Negli altri casi, si fa riferimento al linguaggio C++, usato secondo un approccio procedurale. Metodologia didattica Lezioni frontali con supporto multimediale. Esempi in linguaggio C++. Esercitazioni guidate in aula. Esercitazioni autonome in laboratorio e/o a casa. Prerequisiti Padronanza delle operazioni di base necessarie all uso di un personal computer in ambiente Windows. Conoscenza dei principali applicativi informatici d uso comune in ambiente Windows. Sistema Operativo di riferimento Uno qualsiasi dei sistemi operativi Windows. Ambienti Didattici 1 ASIM 1 L allievo dovrà essere in grado di utilizzare tali ambienti unicamente per la riproduzione degli esempi proposti dal docente. Non si richiede agli allievi la capacità di sviluppare applicazioni ex-novo.
Di sviluppo 2 DevC++ Argomenti L architettura dei sistemi di elaborazione dell informazione L evoluzione dei sistemi di calcolo Multicalcolatori Reti locali Reti di workstation Il punto di vista del programmatore Modello a me moria condivisa Modello a scambio di messaggi L architettura dei nodi di elaborazione Le unità funzionali I concetti operativi di base La struttura del bus Il software Le prestazioni L elaborazione distribuita Prospettiva storica Modalità di indirizzamento e di organizzazione delle istruzioni Locazioni di memoria, indirizzi e codifica delle informazioni Le operazioni sulla memoria Le istruzioni e il loro ordinamento Le modalità di indirizzamento Il linguaggio assemblatore Operazioni fondamentali di ingresso/uscita Pile e code Le procedure L esempio del 68000 L unità di elaborazione Il prelievo di una parola dalla memoria La memorizzazione di una parola nella memoria I trasferimenti fra registri Concetti fondamentali della programmazione Il concetto di elaborazione Il concetto di algoritmo Il concetto di automa Grandezze numeriche ed analogiche Algoritmi, Linguaggi e Programmi Definizione e riconoscimento dei linguaggi Analisi lessicale Analisi sintattica Analisi semantica Elaborazione Linguaggi simbolici Caratteristiche dei linguaggi più diffusi: C e C++ 2 L allievo dovrà essere in grado non soltanto di utilizzare tali ambienti per la riproduzione degli esempi proposti dal docente, ma anche di sviluppare applicazioni ex-novo.
Il modello di Von Neumann Algebra di Boole (cenni) Definizione di algebra di Boole Variabili e funzioni booleane Eguaglianze notevoli e Teorema di De Morgan L algebra degli insiemi L algebra della logica delle proposizioni I Tipi Semplici I tipi: introduzione Variabili e costanti I tipi nei linguaggi di programmazione Definizioni e notazioni per le operazioni sui tipi Tipo intero Tipo reale Tipo carattere Tipo enumerativo Tipo sottocampo Tipo booleano Relazioni e predicati Funzioni per la trasformazione di tipo I Tipi Strutturati Fondamentali I tipi strutturati Gli array Allocazione degli array Gli array nel linguaggio C++ Il tipo record Il tipo record in C Il tipo file Il tipo astratto stringa di cara tteri La stringa nei linguaggi di programmazione Le Istruzioni Semplici Dati ed istruzioni Istruzioni di ingresso Istruzioni di uscita Esempi di istruzioni di ingresso e uscita Istruzioni di calcolo Istruzioni di calcolo e assegnazione nel C++ Esempi di istruzioni di assegnazioni Sottoprogrammi procedure e funzioni I sottoprogrammi nel linguaggio C++ Istruzioni per il controllo di sequenza Istruzioni di controllo non strutturate (di salto) Le Istruzioni Strutturate La programmazione strutturata Il costrutto sequenza Costrutti di selezione Esempi di istruzione di selezione Costrutti di iterazione Esempi di strutture di iterazione Equivalenza dei programmi Altri costrutti per il controllo di sequenza
Modalità di scrittura Programmi con strutture di selezione Caratteristiche dei programmi Uso di sottoprogrammi Problemi ed algoritmi Esempi di programmi semplici Esempio di programmi con strutture di selezione Esempi di sottoprogrammi Programmi con cicli Generalità Schemi di programmi con cicli ripetitivi Schemi di algoritmi iterativi Puntatori Gestione dinamica della memoria: gli operatori new e delete Stream di Input/Output La libreria standard del C++ Operazioni di ingresso e uscita primarie Operazioni di I/O formattato Manipolatori Input/Output su file sequenziale Operazione di apertura di file Specificatori dell operazione di apertura Operazione di chiusura di file Operazioni di lettura e scrittura Copia sequenziale di un file Gestione di un file sequenziale Controllo degli errori Struttura dei programmi I linguaggi di programmazione Compilatori, interpreti e supporto a run-time Il ciclo di vita di un programma Le unità strutturali di un programma Portata, visibilità e tempo di legame Ciclo di vita delle variabili Struttura del programma Struttura dei programmi C++ Debugging dei programmi Errori nei programmi Il testing (cenni) Semplici tecniche di debugging Uso di un debugger (cenni) Materiale didattico Testi consigliati 1. V. C. Hamacher, Z. G. Vranesic: Introduzione all architettura dei calcolatori, Mc. Grraw Hill, 1997 2. B. Fadini, C. Savy, "Fondamenti di Informatica II", Liguori, 2000 3. C. Savy, "Da C++ ad UML: Guida alla progettazione", Mc. Graw Hill, 2000
Materiale didattico addizionale Saranno disponibili presso la segreteria didattica e sul sito web del docente (http://cds.unina.it/~lrom/) i lucidi delle lezioni ed un cospicuo numero di programmi d esempio. Modalità d esame Gli allievi dovranno sviluppare tre esercizi da scegliere tra quelli proposti dal docente da discutere in sede d esame. Tali esercizi dovranno essere corredati dalla relativa documentazione tecnica, in forma sia cartacea che digitale. La discussione degli elaborati è subordinata al superamento di un semplice test scritto. Il test scritto e la discussione orale si terranno ove possibile nello stesso giorno.