Salta ai contenuti. | Salta alla navigazione

Strumenti personali

FONDAMENTI DI INFORMATICA E LABORATORIO

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2022/2023
Docente
EVELINA LAMMA
Crediti formativi
15
Periodo didattico
Annuale
SSD
ING-INF/05

Obiettivi formativi

------------------------------------------------------------
Modulo: 27000 - MODULO A
------------------------------------------------------------
Il corso è il primo insegnamento di programmazione software. Apprendere il linguaggio di programmazione imperativo C e il linguaggio a oggetti Java, divenendo capaci di individuare l’algoritmo risolutivo di semplici problemi e realizzarlo nel linguaggio C e/o nel linguaggio Java, anche utilizzando strutture di dato. Inoltre, saper calcolare la complessità in tempo di un semplice programma/algoritmo.

Le principali conoscenze acquisite saranno:
- nozione di algoritmo e calcolo della complessità di un algoritmo
- architettura della macchina di Von Neumann, e macchina astratta a supporto dell’esecuzione di un programma in linguaggio C
- il linguaggio di programmazione C
- la ricorsione
- la realizzazione in C delle principali strutture di dato, anche dinamiche (liste, alberi)
- la programmazione su più file
- la programmazione a oggetti e il linguaggio Java
- la Java Collections Framework come implementazione in Java di strutture di dato.

Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
- capacità di risolvere semplici problemi con tecniche algoritmiche e realizzarle mediante il linguaggio di programmazione C o Java
- essere in grado di individuare l’evoluzione a tempo di esecuzione di un programma in linguaggio C
- essere in grado di valutare la complessità di semplici algoritmi, anche su strutture dati collegate (liste, alberi).


------------------------------------------------------------
Modulo: 27002 - MODULO B
------------------------------------------------------------
Il modulo è la seconda parte del primo insegnamento di programmazione software. Obiettivo del Modulo B è approndire l'uso del linguaggio C per gestire strutture di dato e presentare il linguaggio a oggetti Java, divenendo capaci di individuare l’algoritmo risolutivo di semplici problemi e realizzarlo nel linguaggio C e/o nel linguaggio Java, anche utilizzando strutture di dato. Inoltre, saper calcolare la complessità in tempo di un semplice programma/algoritmo.

Le principali conoscenze acquisite saranno:
- calcolo della complessità di un algoritmo
- la realizzazione in C delle principali strutture di dato, anche dinamiche (liste, alberi)
- la programmazione a oggetti e il linguaggio Java
- la Java Collections Framework come implementazione in Java di strutture di dato.

Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
- capacità di risolvere semplici problemi con tecniche algoritmiche e realizzarle mediante il linguaggio di programmazione C o Java, anche usando strutture dati collegate (liste, alberi);
- essere in grado di valutare la complessità di semplici algoritmi, anche su strutture dati collegate (liste, alberi).

Prerequisiti

------------------------------------------------------------
Modulo: 27000 - MODULO A
------------------------------------------------------------
Il corso non ha prerequisiti, se non quelli di base forniti dalla scuola media superiore, quali la capacità di comprensione di un testo, e le conoscenze minime di matematica


------------------------------------------------------------
Modulo: 27002 - MODULO B
------------------------------------------------------------
Il modulo non ha prerequisiti, se non quelli di base forniti dalla scuola media superiore, e l'aver seguito e studiato i contenuti del Modulo A.

Contenuti del corso

------------------------------------------------------------
Modulo: 27000 - MODULO A
------------------------------------------------------------
L’insegnamento e’ organizzato in due moduli: Modulo A (6 CFU) nel primo semestre, e Modulo B (9 CFU) nel secondo. Ciascun modulo include ore di didattica nella forma di lezioni ed esercitazioni, correlate tra loro, e alternate nel corso di ogni settimana, per consolidare gli argomenti man mano.

Nel Modulo A, circa due terzi delle ore di lezione sono erogate in aula e un terzo come ore di esercitazioni guidate in laboratorio. Gli argomenti affrontati nel Modulo A sono:
- Nozione di algoritmo
- La Macchina di Von Neumann
- La programmazione strutturata
- Il linguaggio C, le sue strutture di controllo, tipi primitivi, vettori, struct, puntatori, funzioni e passaggio dei parametri, iterazione e ricorsione, accesso ai file.
- Il modello "run-time" del C, argomenti della linea di comando, la programmazione su più file.

Nel Modulo B, circa due terzi delle ore sono dedicate a lezioni (sia in aula sia in Laboratorio di informatica). Durante le lezioni in laboratorio gli studenti verificano direttamente, programmando, ciò che il docente introduce nel corso della lezione (con un approccio learning-by-doing). Il restante terzo è dedicato ad esercitazioni pratiche di consolidamento degli argomenti legati alla programmazione e alle strutture dati presentati a lezione.
Gli argomenti affrontati nel Modulo B sono:
- Complessità degli algoritmi e calcolo della complessità temporale
- Algoritmi e strutture di dato anche dinamiche in C
- Programmazione in C di algoritmi con strutture dati di tipo lista e albero (in Laboratorio)
- La programmazione per componenti e ad oggetti.
- Il linguaggio Java (in Laboratorio):
- Classe e istanza, costruzione e distruzione di oggetti, oggetti semplici e oggetti composti.
- Package e Package di I/O.
- Ereditarietà, Classi Astratte, Interfacce.
- Eccezioni.
- Java Collections Framework.



------------------------------------------------------------
Modulo: 27002 - MODULO B
------------------------------------------------------------
Il Modulo B (9 CFU) include ore di didattica nella forma di lezioni ed esercitazioni, correlate tra loro, e alternate nel corso di ogni settimana, per consolidare gli argomenti man mano.

Nel Modulo B, circa due terzi delle ore sono dedicate a lezioni (sia in aula sia in Laboratorio di informatica). Durante le lezioni in laboratorio gli studenti verificano direttamente, programmando, ciò che il docente introduce nel corso della lezione (con un approccio learning-by-doing). Il restante terzo è dedicato ad esercitazioni pratiche di consolidamento degli argomenti legati alla programmazione e alle strutture dati presentati a lezione.
Gli argomenti affrontati nel Modulo B sono:
- Complessità degli algoritmi e calcolo della complessità temporale
- Algoritmi e strutture di dato anche dinamiche in C
- Programmazione in C di algoritmi con strutture dati di tipo lista e albero (in Laboratorio)
- La programmazione per componenti e ad oggetti.
- Il linguaggio Java (in Laboratorio):
- Classe e istanza, costruzione e distruzione di oggetti, oggetti semplici e oggetti composti.
- Package e Package di I/O.
- Ereditarietà, Classi Astratte, Interfacce.
- Eccezioni.
- Java Collections Framework.

Metodi didattici

------------------------------------------------------------
Modulo: 27000 - MODULO A
------------------------------------------------------------
Al fine di far acquisire le conoscenze teoriche dell’insegnamento, si svolgono lezioni frontali in aula. Durante le lezioni in aula del modulo A, sono anche svolti esercizi, fornendo il testo di un problema e risolvendolo alla lavagna seguendo i suggerimenti dati dagli studenti, discutendone insieme vantaggi, svantaggi e correggendo eventuali errori.
Al fine di far apprendere le conoscenze pratiche (quali l’uso dei compilatori e degli strumenti di debugging, e la programmazione in C e Java), ogni settimana vengono svolte esercitazioni in laboratorio di informatica, in cui gli studenti potranno scrivere programmi al calcolatore.

Nelle ore di lezione ed esercitazione in Laboratorio inserite nel corso, e in quelle previste come tutorato didattico, gli studenti possono usufruire di tutor didattici in numero congruo per essere seguiti nello svolgimento degli esercizi proposti. Gli studenti hanno anche libero accesso al Laboratorio per ulteriori esercitazioni individuali.


------------------------------------------------------------
Modulo: 27002 - MODULO B
------------------------------------------------------------
Al fine di far acquisire le conoscenze teoriche dell’insegnamento, si svolgono lezioni frontali in aula.
Al fine di far apprendere le conoscenze pratiche (quali la programmazione in C e Java), ogni settimana vengono svolte esercitazioni in laboratorio di informatica, in cui gli studenti potranno scrivere programmi al calcolatore.

Nelle ore di lezione ed esercitazione in Laboratorio inserite nel corso, e in quelle previste come tutorato didattico, gli studenti possono usufruire di tutor didattici in numero congruo per essere seguiti nello svolgimento degli esercizi proposti. Gli studenti hanno anche libero accesso al Laboratorio per ulteriori esercitazioni individuali.

Modalità di verifica dell'apprendimento

L’obiettivo della prova d’esame è verificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
L'esame complessivo da 15 CFU è costituito da tre parti che hanno luogo nello stesso giorno. Le prime due si svolgono al calcolatore in laboratorio e la consegna delle soluzioni prodotte avviene attraverso una semplice interfaccia web. La terza prova e’ scritta. Piu’ in dettaglio:
- Al fine di valutare la capacità di risolvere semplici problemi da parte dello studente identificando un algoritmo risolutivo da programmare in linguaggio C, viene svolta una prova di laboratorio in cui si chiede allo studente di svolgere esercizi di programmazione e analisi. Nell’esercizio di programmazione si deve scrivere un programma in linguaggio C, partendo da una specifica data, utilizzando e definendo funzioni e usando le strutture dati apprese nel corso. Nell’esercizio di analisi, si dovrà analizzare un semplice codice C su vettori, liste, alberi, valutandone la complessità computazionale. Questa parte assegna al massimo 18+20 punti, la sufficienza è 10+10;
- Al fine di valutare sia la conoscenza dello studente sulla programmazione orientata agli oggetti e Java, sia la sua abilità nella programmazione Java, viene svolta una seconda parte di laboratorio che consiste di due esercizi: scrivere un programma in linguaggio Java partendo da una specifica data; rispondere a una domanda aperta su Java e programmazione orientata agli oggetti. Questa parte assegna al massimo 13 punti, la sufficienza è 7;
- Al fine di valutare le conoscenze di base del corso, viene effettuata una prova scritta. Essa è costituita dai seguenti esercizi: scrivere una semplice funzione ricorsiva e mostrare il funzionamento di un semplice programma, che invoca la funzione scritta dallo studente, tramite i record di attivazione; rispondere a tre domande a risposta aperta su architettura del calcolatore, strumenti e metodologia di costruzione di un programma eseguibile partendo dai file sorgente, linguaggio C. Questa parte assegna al massimo 11 punti.

Il totale massimo dei punteggi delle tre parti è di 62 punti.
Il voto finale è dato dimezzando la somma dei punteggi delle tre prove, per un massimo di 31 punti.
Per superare l’esame è necessario avere la sufficienza nelle singole parti ed acquisire un voto minimo di 18 su 31.
Qualora una delle tre parti risulti gravemente insufficiente o qualora il voto finale sia inferiore a 18 è necessario ripetere tutte e tre le parti.

Per gli studenti frequentanti, è possibile svolgere l'esame in due prove (parziali), una al termine di ciascun modulo del corso. La sufficienza per le prove parziali è di 18 su 31 punti per il modulo A, 18 su 31 punti per il modulo B, il voto finale è la media dei voti conseguiti.

Testi di riferimento

------------------------------------------------------------
Modulo: 27000 - MODULO A
------------------------------------------------------------
I lucidi proiettati durante le lezioni in aula o laboratorio sono resi disponibili dai docenti al sito:
http://www.unife.it/ing/informazione/fondamenti-informatica

Al sito indicato, si forniscono anche i testi delle esercitazioni ed alcuni testi d’esame, eventualmente con soluzione.

Argomenti specifici possono essere approfonditi sui seguenti testi.

Per la parte sul linguaggio C:
S. Ceri, D. Mandrioli, L. Sbattella, Informatica: Programmazione, McGraw-Hill, 2006.
A. Bellini, A. Guidi: Guida al Linguaggio C, McGraw-Hill, 1995.

Per la parte sul linguaggio Java, qualsiasi testo introduttivo al linguaggio è adatto.
Si segnalano:

H. M. Deitel, P. J. Deitel: Java Fondamenti di Programmazione, Apogeo.
Lewis John, Loftus William: Java Fondamenti di progettazione software, Addison Wesley.
C. Thomas Wu: Java Fondamenti di Programmazione, Mc Graw Hill.

------------------------------------------------------------
Modulo: 27002 - MODULO B
------------------------------------------------------------
I lucidi proiettati durante le lezioni in aula o laboratorio sono resi disponibili - man mano - tramite Classroom del modulo, dove sono pubblicati anche i testi delle esercitazioni ed alcuni testi d’esame, eventualmente con soluzione.

Argomenti specifici possono essere approfonditi sui seguenti testi.

Per la parte sul linguaggio C:
S. Ceri, D. Mandrioli, L. Sbattella, Informatica: Programmazione, McGraw-Hill, 2006.
A. Bellini, A. Guidi: Guida al Linguaggio C, McGraw-Hill, 1995.

Per la parte sul linguaggio Java, qualsiasi testo introduttivo al linguaggio è adatto.
Si segnalano:

H. M. Deitel, P. J. Deitel: Java Fondamenti di Programmazione, Apogeo.
Lewis John, Loftus William: Java Fondamenti di progettazione software, Addison Wesley.
C. Thomas Wu: Java Fondamenti di Programmazione, Mc Graw Hill.