Conoscenza e comprensione
Al completamento del corso, lo studente avrà acquisito: Conoscenze sulla rappresentazione dell’informazione nei calcolatori e sull’architettura dell’elaboratore; Comprensione del funzionamento di un elaboratore; Conoscenze sul software di base e sul sistema operativo; Comprensione degli algoritmi; Conoscenze sui linguaggi di programmazione e su compilatori e interpreti; Conoscenze sulle reti di calcolatori; Conoscenze sulla programmazione strutturata e sulla programmazione in linguaggio C.
Capacità di applicare conoscenza e comprensione
Al termine del corso, lo studente sarà in grado di sviluppare programmi in linguaggio C per la risoluzione di problemi di calcolo in ambito ingegneristico o per la gestione di strutture dati complesse (magazzini, archivi, etc.). Saprà inoltre applicare le conoscenze acquisite alla scelta sia dei componenti HW e SW sia degli strumenti di sviluppo adeguati al problema da risolvere.
Autonomia di giudizio.
Al termine del corso, nello sviluppo di programmi lo studente sarà in grado di effettuare
autonomamente le opportune scelte progettuali sulla base delle specifiche richieste. Tale capacità è affinata attraverso le esercitazioni svolte durante il corso e lo svolgimento di opportuni quesiti di programmazione in sede d'esame.
Abilità comunicative.
Al termine del corso, lo studente avrà acquisito padronanza della terminologia tecnica dell'informatica. Sarà in grado di discutere della struttura HW e SW degli elaboratori, delle reti e della programmazione strutturata sia con un pubblico specialista sia con un pubblico non specialista, illustrando in modo chiaro e inequivocabile le varie scelte progettuali effettuate per la risoluzione dei problemi.
Capacità di apprendimento.
Al termine del corso, lo studente sarà in grado di ampliare autonomamente le proprie conoscenze di informatica attraverso l’approfondimento dei testi di riferimento e la lettura di articoli su riviste specializzate. Potrà inoltre affinare le proprie skill di programmazione, anche in linguaggi diversi dal C, tramite la consultazione di tutorial, guide e manuali.
Il corso si basa su lezioni frontali, che comprendono anche lo svolgimento di esercizi al calcolatore da parte dei docenti. Il corso prevede anche esercitazioni pratiche svolte dagli studenti. Tali esercitazioni vengono svolte anche nelle aule multimediali dell'Ateneo. Le modalità di svolgimento dell'insegnamento descritte permettono il raggiungimento degli obiettivi formativi prefissati, che includono l’acquisizione di conoscenze e la capacità di applicare la conoscenza.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
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.
La frequenza è obbligatoria.
Gli asterischi (*) indicano le competenze minime.
Rappresentazione dell'informazione: Sistemi di numerazione e algoritmi di conversione. Aritmetica intera e in virgola mobile. (*)
Struttura di un elaboratore: La struttura di un elaboratore: memoria centrale, unità centrale, funzionamento elementare dell'elaboratore. (*)
Sistema Operativo: Traduzione ed esecuzione di programmi. Ambiente di Programmazione. Compilatori vs. interpreti. Sistema Operativo. (*)
Algoritmi e Programmi: Elaborazione automatica dell'informazione. Algoritmi e programmi. Linguaggi di programmazione. Il progetto di un programma. (*)
Reti di Calcolatori e Internet: Reti di calcolatori. Reti locali. Reti geografiche. Internet e le più diffuse applicazioni di rete. (*)
Il linguaggio di programmazione "C": sintassi e semantica Controllo: Assegnazione. Strutture di controllo. Tipi di dato in C: tipi semplici (int, char, float, double) e strutturati (array e stringhe, strutture). Il tipo puntatore. Le funzioni. Campo d'azione degli identificatori. Dichiarazioni e campo d'azione degli identificatori. Variabili locali, globali e statiche. Tecniche di legame dei parametri. La ricorsione. I file: file di testo e file binari. Primitive di accesso ai file. (*)
Algoritmi di ordinamento: Algoritmi di ordinamento e ricerca. Ricerca sequenziale e binaria. (*)
Allocazione dinamica della memoria.(*)
Strutture dati: Liste. (*)
Autore | Titolo | Editore | Anno | ISBN |
---|---|---|---|---|
A. Bellini, A. Guidi | Linguaggio C - guida alla programmazione, IV Edizione | McGraw-Hill | 2009 | 9788838665790 |
Argomenti | Riferimenti testi | |
---|---|---|
1 | Rappresentazione dell'Informazione. Sistema numerico binario. Sistema esadecimale, sistema ottale. Conversione tra sistemi numerici. Rappresentazione dei numeri interi, reali. Codice ASCII. | Dispense della docente su STUDIUM, nell'area dedicata all'insegnamento. Bellini Guidi: Appendice D. |
2 | Architettura e funzionamento elementare del calcolatore. Esecuzione delle istruzioni. Interrupt. Algebra di Boole. | Dispense della docente su STUDIUM, nell'area dedicata all'insegnamento. Bellini Guidi: Capitolo 1. |
3 | Sistema operativo. Politiche di gestione della CPU, della memoria centrale e di massa. | Dispense della docente su STUDIUM, nell'area dedicata all'insegnamento. Bellini Guidi: Capitolo 2 |
4 | Algoritmi e programmi. Linguaggi di Programmazione.• Traduzione ed esecuzione dei programmi • Linker • Notazione grafica per la rappresentazione degli algoritmi: Diagrammi di flusso | Capitolo 3,4. Dispense della docente su STUDIUM, nell'area dedicata all'insegnamento. |
5 | Linguaggio C: Tipi di dato. Identificatori. Variabili. Classi di memorizzazione. Costanti. Operatori. Strutture di Controllo.Istruzioni di selezione, iterazione, salto,espressione, blocco. Preprocessore, include, define | Capitolo 5,6,7,8,9,23 |
6 | Array•Puntatori •Puntatori ad array •Stringhe •Strutture •Array di strutture • Lettura e scrittura di caratteri e stringhe •I/O formattato •File di testo • Allocazione dinamica della memoria •Puntatori a strutture | Capitolo 10,13,14,16 |
7 | Funzioni • Istruzione return • Passaggio di Parametri • Ricorsione • Variabili locali, regole di visibilità e tempo di vita | Capitolo 11,15,17,19,20 |
8 | Algoritmi di ricerca e di ordinamento | Cap.12 |
9 | Strutture dati lineari: Liste | Capitolo 21. |
10 | Esercizi sugli argomenti svolti | Caso di studio III e IV Dispense della docente su STUDIUM, nell'area dedicata all'insegnamento. |
La prova d'esame è composta da una prova scritta (obbligatoria) e una prova orale (opzionale). La prova scritta, della durata di due ore, consiste in un elaborato al calcolatore, del valore di 24/30 punti, e da una sezione teorica, composta da una o più domande a risposta aperta, del valore complessivo di 6/30 punti. L'elaborato al calcolatore consiste di vari quesiti, il cui punteggio è indicato esplicitamente nel testo del compito (es. 3 funzioni da 6 punti ciascuna, etc.). La prova scritta si considera superata se si ottiene una valutazione complessiva di almeno 18/30. Lo studente che lo desideri può integrare la prova scritta con la prova orale da svolgere in un qualunque appello regolare (entro la fine dell’a.a.), per il superamento dell’esame. Prenotazione obbligatoria tramite portale di Ateneo.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Sono previste due prove in itinere durante il corso. La prima prova consiste in domande sulla parte teorica e ha durata di un'ora. La seconda prova, al calcolatore, consiste di vari quesiti di programmazione e ha
durata di due ore. Il punteggio delle domande e dei vari quesiti è indicato esplicitamente nel testo delle due prove. Lo studente che abbia superato pienamente entrambe le
prove in itinere, ottenendo una valutazione di almeno
18/30 in ciascuna di esse, può accettare il voto proposto (media delle due prove) o, se lo
desidera, può integrare le due prove in itinere con una prova orale da
svolgere negli appelli regolari (entro la fine dell’a.a.), al fine di
poter ottenere una migliore valutazione.
Verrà accertata la capacità di sviluppare programmi in linguaggio C per la gestione di strutture dati complesse tramite quesiti inerenti:
- Implementazione di menu' a scelta multipla.
- Uso di funzioni e passaggio di parametri.
- Implementazione di array di struct.
- Implementazione di liste.
- Uso della ricorsione tramite esempi di funzioni ricorsive.
Le domande della sezione teorica potranno essere simili a, ma non limitate a, quelle sottoelencate:
- Qual è la differenza tra dato e informazione?
- Quali sono gli elementi fondamentali dell'architettura dei sistemi di elaborazione?
- Come si effettuano le conversioni di base tra i vari sistemi di numerazione (decimale, binario, esadecimale, ottale)
- Quali sono i componenti principali della CPU?
- Cosa sono gli interrupt?
- Cos'e' un registro?
- A cosa serve il Program Counter?
- Cosa si intende per algoritmo.
- Che differenza c'e' tra algoritmo e programma?
- Qual è la differenza tra Internet e il Web?
- Cos'è un protocollo di rete?
- Quali sono le principali differenze tra memoria centrale e memoria di massa?
- Descrivere la gerarchia di memoria.
- Cos'è un Sistema Operativo? Qual è il suo ruolo in un sistema di elaborazione?
- Cosa significa multiprogrammazione?
- Cos'è lo scheduler e qual è il suo compito?
- Cosa si intende per file system?
- Definire il concetto di processo.
- Qual è la differenza tra processo e programma?
- Descrivere il diagramma a stati di un processo.
- Cos'e' il linguaggio Assembler?
- Differenza tra compilatori e interpreti.
- Cos'è e a che serve un diagramma di flusso?