Programma del corso di
Fondamenti di Informatica (SSE, Statistica)
docente: prof. Paolo Franciosa
anno accademico 2000-2001
Concetto di algoritmo.
Generalità sui linguaggi di programmazione, compilatori.
Componenti di un sistema di elaborazione: hardware, software,
principali unità periferiche.
Architettura di un elaboratore: modello di von Neumann. Memoria
centrale, unità centrale, principali registri. Esecuzione dei
programmi, fasi di fetch ed execute.
Rappresentazione dell'informazione:
- Sistemi di numerazione posizionali.
- Codifica binaria, ottale, esadecimale.
- Conversioni di base.
- Rappresentazione di numeri interi negativi.
- Addizioni in complemento a 2, overflow.
- Rappresentazione in virgola mobile.
- Codifica di caratteri.
Tipi di dato astratti: vettori, matrici, pile, code. Implementazione
di pile e code tramite array e array dinamici.
Algoritmi fondamentali:
- Algoritmo di Euclide per il Massimo Comun Divisore.
- Ricerca sequenziale, ricerca dicotomica su un vettore ordinato.
- Algoritmi di base su matrici.
- Ordinamento: bubble sort, insertion sort, selection sort, merge sort, counting sort.
- Algoritmo di selezione del k-mo elemento.
Introduzione alla complessità computazionale:
(vedi [3, pagg. 21-26, 58-60, 163-165])
- Concetto di complessità di un algoritmo.
- Notazioni asintotiche.
- Complessità intrinseca di un problema.
- Complessità del problema dell'ordinamento basato su confronti.
- Equazioni di ricorrenza e metodi per la loro soluzione.
Interazione con un sistema operativo basato su finestre. Concetto di
cartella, documento, applicazione.
Il sistema operativo: funzioni principali, gestione dei processi,
gestione della memoria, file system.
Introduzione alle reti di calcolatori: reti locali e geografiche,
protocolli e servizi fondamentali: ftp, smtp, DNS, http, cenni al linguaggio HTML.
Strumenti di produttività individuale: i fogli elettronici.
Linguaggio C
- concetto di variabile, tipo, identificatore
- struttura di un programma C
- operatore di assegnazione
- tipi interi, floating point, carattere
- uso delle funzioni printf() e scanf()
- operatori aritmetici, autoincremento, confronto, logici. Espressioni,
precedenza tra operatori.
- conversioni implicite in espressioni disomogenee
- l'istruzione condizionale if ... else ...
- istruzioni condizionali nidificate
- l'istruzione composta { ... }
- l'istruzione switch ... case ...
- istruzioni di iterazione: while ..., do ... while, for ..., istruzione
break
- arrays, stringhe di caratteri
- funzioni, istruzione return, passaggio dei parametri
- direttive di compilazione #define e #include, file di headers
- modularizzazione di programmi in funzioni, variabili extern
- definizione di tipi utente (typedef)
- ricorsione
- puntatori, operatori & e *, passaggio di puntatori come parametri
- aritmetica dei puntatori, puntatori ed arrays
- variabili dinamiche: funzioni malloc(), calloc(), realloc(), free()
- il tipo struct
- definizione di tipi tramite typedef
- realizzazione di tipi di dato astratto tramite struct e typedef
- istruzioni di I/O su file
- funzioni di libreria per la generazione di numeri pseudocasuali
Uso di un ambiente di programmazione C per
editing, compilazione, esecuzione, debugging di semplici
programmi.
Sono disponibili a titolo gratuito i seguenti strumenti della Borland:
-
TurboC 2.01, ambiente di sviluppo integrato,
-
C++ Builder,
compilatore di linea, non contiene editor ne' debugger.
Testi consigliati
[1] Ceri, Mandrioli, Sbattella: Informatica, arte e
mestiere, McGraw-Hill
[2] Bellini, Guidi: Linguaggio C: guida alla programmazione,
McGraw-Hill
[3] Cormen, Leicerson, Rivest: Introduzione agli algoritmi, Jackson
libri