FONDAMENTI DI INFORMATICA - canale 2

Anno accademico 2016/2017 - 1° anno
Docente: Orazio TOMARCHIO
Crediti: 9
SSD: ING-INF/05 - Sistemi di elaborazione delle informazioni
Organizzazione didattica: 225 ore d'impegno totale, 146 di studio individuale, 49 di lezione frontale, 30 di esercitazione
Semestre: Insegnamento annuale
ENGLISH VERSION

Obiettivi formativi

Il corso introduce alla conoscenza dei principi dell'informatica e della programmazione di tipo procedurale.

Il corso ha l'obiettivo primario di fornire allo studente le conoscenze delle principali strutture dati, degli algoritmi di base e dei rudimenti di complessità computazionale.

Il corso inoltre fornisce allo studente le tecniche e gli strumenti per lo sviluppo di programmi applicativi mediante l'utilizzo del linguaggio di programmazione ANSI-C, con particolare attenzione ai meccanismi di “problem solving” e ricerca dell'errore


Prerequisiti richiesti

  • Notazione esponenziale o scientifica. Arrotondamento dei valori numerici
  • Numeri reali. Operazioni con numeri reali. Potenza ad esponente razionale e reale. Logaritmo di un numero reale positivo
  • Concetto di funzione
  • Vettori e Matrici: Operazioni con vettori e matrici

Frequenza lezioni

Lo studente è tenuto a frequentare almeno il 70% delle lezioni del corso per poter sostenere le prove in itinere.

La frequenza non è richiesta, seppure fortemente consigliata, per sostenere la prova di esame


Contenuti del corso

Modulo 1

  • Elaborazione automatica dell'informazione e algoritmi - Algoritmi e programmi - Una notazione grafica per esprimere algoritmi - Linguaggi di programmazione - Il progetto di programmi
  • Rappresentazione dell'informazione: Sistemi numerici - Conversione fra sistemi numerici - Sistema di numerazione binaria - Operazioni tra numeri binari - overflow e underflow - Rappresentazione dei numeri interi - Rappresenzione dei numeri con segno - Rappresentazione in virgola fissa e virgola mobile - Codici e Rappresentazione dei Caratteri - Algebra di Boole, Funzioni logiche, Espressione logiche, Applicazioni dell'algebra booleana
  • Cenni della struttura di un elaboratore e sistema di elaborazione: Struttura di un elaboratore: memoria centrale, unita centrale, funzionamento elementare dell'elaboratore.
  • Cenni sui sistemi di elaborazione: software di base: Traduzione ed esecuzione dei programmi - ambiente di programmazione - Linguaggi di programmazione: linguaggi imperativi - Compilatori, Linker, Cenni sulla realizzazione di applicazioni: Preprocessore - Commenti - Librerie e file di intestazione

Modulo 2

  • Elementi fondamentali del linguaggio C: Sintassi del C - Struttura di un programma C - Compilazione di un programma - Tipi di dato e rappresentazioni - Tipi di dato principali -Identificatori - Variabili - Modificatori di accesso - Costanti - Operatori - Strutture di controllo - Istruzione di selezione - Istruzioni di Iterazione - Istruzioni di salto - Istruzioni di espressione - Istruzione blocco
  • Array, stringhe e puntatori: Array monodimensionali - Puntatori ad array - Array come argomento di una funzione - Stringhe - Array di stringhe - Array multidimensionali - Variabili puntatore - Operatori ed espressioni con puntatori - Puntatori ad array - Puntatori a funzioni - Allocazione dinamica
  • Funzioni: Regole di visibilità delle funzioni - Argomenti delle funzioni - Argomenti di main - Istruzione return - Valori restituiti da una funzione - Ricorsione - Dichiarazioni e campo di azione degli identificatori - Tecniche di legame dei parametri - effetti collaterali ed implementazione delle funzioni
  • Strutture, unioni e tipi definiti dall'utente: Strutture- Array di strutture - Strutture come argomenti di funzioni - Puntatori a strutture - Array e strutture all'interno di altre strutture - Unione - Enumerazioni - Sizeof - Tipedef
  • I/O da console da file: Lettura e scrittura di caratteri e stringhe da consolle - I/O formattato da consolle - Canali - File

Modulo 3

  • Ricorsione
  • Allocazione dinamica della memoria.
  • Complessita’ Computazionale: Efficienza dei Programmi, le Notazioni O e W, Valutazione della Complessità di un Programma, Relazioni di Ricorrenza.
  • Algoritmi di Ordinamento: Classi di algoritmi di ordinamento - Valutazione degli algoritmi di ordinamento - ordinamento per selezione (selection sort) - algoritmi per inserzioni (insertion sort) - algoritmi per scambio bubble sort, quick sort, merge sort.
  • Tipi di dato astratto: Liste, Code, Pile, Alberi binari, Alberi generali, Grafi, Dizionari.

Testi di riferimento

  • [BeGu] Bellini, Guidi. Linguaggio C. Guida alla programmazione. McGraw-Hill
  • [Pel] Pellegrino Principe. C guida alla programmazione. Apogeo
  • Dispense del docente per alcuni argomenti


Programmazione del corso

 *ArgomentiRiferimenti testi
1*UDE 1: Rappresentazione dei numeri interi e dei numeri reali. Algebra di boole, funzione ed espressioni logiche.Appunti del docente
[Pel] Capitolo 1, Appendice C
[BeGu] Capitolo 1, 2, App. D, E 
2 UDE 1: Cenni sui sistemi di elaborazione; Traduzione ed esecuzione dei programmi; Ambiente di Programmazione; Linguaggi di Programmazione; Operazioni tra numeri binari; Codifica dei caratteri.Appunti del docente
[Pel] Capitolo 1, Appendice C
[BeGu] Capitolo 1, 2, App. D, E 
3*UDE 2: Tipo di dato principale; Identificatori; Variabili; Modificatori di Accesso; Specificatori di classe di memorizzazione; Costanti; Operatori; Strutture di Controllo; Istruzioni di selezione, di iterazione, di salto, di espressione, di blocco[Pel] Capitolo 2,4,5
[BeGu] Capitolo 3, 4, 5, 6, 7, 8, 9 
4 UDE 2: Algoritmi e programmi; Uso di notazione grafica per esprimere algoritmi; Espressioni Complesse[Pel] Capitolo 2,4,5
[BeGu] Capitolo 3, 4, 5, 6, 7, 8, 9 
5*UDE 3: Array Monodimensionali; Puntatori; Puntatori ad array; Stringhe; Strutture e strutture nidificate; Array di strutture[Pel] Capitolo 3,7,8,11
[BeGu] Capitolo 10, 13, 14, 16 
6 UDE 3: Puntatori a strutture; Unione; Enumerazione[Pel] Capitolo 3,7,8,11
[BeGu] Capitolo 10, 13, 14, 16 
7*UDE 4:Lettura e scrittura di caratteri e stringhe; I/O formattato; Canali; File di testo; Esercizi sugli argomenti svolti nelle UDE 1,2,3,4[Pel] Capitolo 11
[BeGu] Capitolo 17, 19 
8 UDE 4: File binari[Pel] Capitolo 11
[BeGu] Capitolo 17, 19 
9*UDE 5: Funzioni; Istruzione return; Passaggio di parametri; Allocazione dinamica della memoria[Pel] Capitolo 6,9,10
[BeGu] Capitolo 11, 15 
10 UDE 5: Ricorsione e Record di Attivazione; Variabili locali, regole di visibilità e tempo di vita; Puntatori a Funzioni[Pel] Capitolo 6,9,10
[BeGu] Capitolo 11, 15 
11*UDE 6: Algoritmi di ricerca e ordinamento in memoria interna: classi di algoritmi; Esempi di Algoritmi di ordinamentoDispense del docente 
12 UDE 6: Complessità computazionale; la notazione O e Omega grande; Cenni sulla valutazione della complessità di un programmaDispense del docente 
13*UDE 7: Strutture dati lineari: Liste, Pile, Code; Strutture dati annidate; Esercizi sugli argomenti svolti nelle UDE 5,6,7Dispense del docente 
14 UDE 7: Strutture dati non lineari: Alberi, Grafi e HashDispense del docente 
* Conoscenze minime irrinunciabili per il superamento dell'esame.

N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, il superamento dell'esame.

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Durante lo svolgimento del corso sono previste due prove in itinere che permettono il superamento dell'esame. L'esame finale (se necessario) è composto da una prova al calcolatore e da una prova orale opzionale.

Le competenze minime richieste per il superamento dell'esame sono le seguenti:

  • Conoscenze elementari di paradigmi di programmazione
  • Conoscenza della sequenza completa di produzione di programmi eseguibili
  • Capacità di realizzazione di semplici conversioni decimali/binarie e vice versa
  • Capacità di utilizzo di funzioni ed espressione booleane
  • Comprensione delle differenti tipologie di algoritmi di ordinamento
  • Capacità di saper applicare un qualunque algoritmo di ordinamento ad un problema informatico
  • Capacità di utilizzare le strutture dati elementari (pile, code e liste)
  • Capacità di risoluzione di problemi informatici tramite la decomposizione in funzioni elementari
  • Linguaggio ANSI-C:
    • Capacità di risoluzione di problemi informatici elementari tramite l’utilizzo delle istruzioni di selezione ed iterazione
    • Capacità di risoluzione di problemi informatici che richiedono l’utilizzo di vettori monodimensionali
    • Capacità di utilizzo delle funzioni e dei parametri formali e dell’istruzione return
    • Capacità di gestione della memoria Heap, tramite semplici operazioni di allocazione dinamica di elementi e vettori
    • Capacità di utilizzo i file di testo per rendere persistenti le informazioni.
    • Capacità di implementare semplici algoritmi di ordinamento utilizzando la memoria interna
    • Capacità di implementare le strutture dati elementari (pile, code e liste)

Esempi di domande e/o esercizi frequenti

Esempi di domande ed esercizi sono disponibili sul portale Studium.UniCT di Ateneo