28004 - FONDAMENTI DI INFORMATICA T-1

Scheda insegnamento

Anno Accademico 2018/2019

Conoscenze e abilità da conseguire

Conoscenza dei principi, delle metodologie e degli strumenti per lo sviluppo di algoritmi e programmi che risolvano problemi di complessità non elevata. Capacità di applicare tali conoscenze nel progetto di algoritmi e nello sviluppo di programmi mediante un linguaggio di programmazione di alto livello.

Programma/Contenuti

Prerequisiti: La frequentazione di questo insegnamento non richiede alcun prerequisito. Nell'ambito dell'insegnamento infatti lo studente viene introdotto gradualmente ai principi e ai metodi della programmazione imperativa, strutturata e procedurale in particolare. Le nozioni basilari e fondamentali necessarie alla comprensione della materia sono fornite nell'ambito dell'insegnamento stesso, e non viene fatta alcuna assunzione di conoscenze pregresse. Ovviamente, eventuali nozioni acquisite precedentemente sui linguaggi di programmazione possono comunque risultare di aiuto allo studente.

Contenuti:

  • Introduzione ai concetti di base dei sistemi di elaborazione moderni: cenni storici sull'informatica, introduzione alla "Architettura di von Neumann" ed ai dispositivi hardware, concetti di base dei sistemi operativi moderni.
  • Introduzione al concetto di algoritmo, macchine speciali e universali di Turing, risoluzione di problemi e funzioni computabili e non, concetti di base sui linguaggi macchina e sui linguaggi di programmazione ad alto livello, sintassi dei linguaggi tramite grammatiche EBNF.
  • Introduzione al linguaggio C: valori, tipi, costanti, variabili, operatori ed espressioni, puntatori, vettori e stringhe, strutture.
  • Programmazione strutturata e procedurale in C: istruzioni di controllo, funzioni, procedure.
  • Input e Output in C: primitive di I/O, astrazione basata sul concetto di "stream", accesso ai file.
  • Principi e metodologie fondamentali di progetto e sviluppo di algoritmi: soluzione di problemi su piccola scala, iterazione e ricorsione, progettazione e organizzazione di programmi sorgente su più file/moduli nel linguaggio C.
  • Organizzazione della macchina runtime del C: rappresentazione run-time dei programmi e del record di attivazione delle funzioni
  • Allocazione dinamica della memoria di scalari, strutture e array; gestione della memoria e problemi di "memory leaking" in C.
  • Algoritmi di ordinamento semplici: Naive Sort, Bubble Sort, Insert Sort, Merge Sort, e Quick Sort.
  • Introduzione ai tipi di dato astratto (ADT): definizione del tipo e operazioni (costruttori, selettori, predicati, funzioni e trasformatori). Alcuni esempi di ADT fondamentali: liste, code, pile.

Testi/Bibliografia

Programmazione e il linguaggio C:

  • H. Deitel, P. Deitel. "Il Linguaggio C - Fondamenti e Tecniche di Programmazione", Pearson, Ottava edizione o precedenti 2016.
  • A. Kelley, I. Pohl. "C: Didattica e Programmazione", Pearson Education, 2004, Quarta Edizione o precedenti.
  • A. Bellini, A. Guidi. "Linguaggio C: Guida alla Programmazione", Mc Graw-Hill, 2013, Quinta Edizione o precedenti.


Informatica in generale:
  • S. Ceri, D. Mandrioli, L. Sbattella. "Informatica: Arte e Mestiere", Mc Graw-Hill, 2004.

Metodi didattici

L'insegnamento è organizzato in due moduli, strettamente integrati per argomenti trattati:

  • Il Modulo 1 si tiene in aula, ed ha come obiettivo quello di fornire principi, metodi e strumenti caratterizzanti la disciplina. Le lezioni sono erogate mediante proiezione diretta dal computer del docente, in aula, di diapositive (delle quali lo studente può liberamente scaricarne copia dal sito web del corso, prima delle lezioni).
  • Il Modulo 2 si tiene nei laboratori della Scuola, ed ha come scopo quello di permettere agli studenti di "mettere in pratica" quanto presentato nel Modulo 1: ciò avviene tramite esercitazioni, casi di studio e problemi reali posti dal docente. Gli studenti sono spesso invitati a risolvere tramite i computer presenti nei laboratori i problemi posti (esercitazioni), effettuando così una esperienza immediata e diretta di quanto appreso pur restando sotto la supervisione del docente. Anche nel Modulo 2 si fa uso di diapositive proiettate dal computer del docente (disponibili sul sito del corso).
Le lezioni in aula e le esercitazioni in laboratorio sono continuamente intercalate, alternando l'esposizione di un concetto o costrutto linguistico con i relativi esempi, a successive esercitazioni pratiche in cui allo studente viene richiesto di usare le conoscenze apprese per risolvere piccoli problemi di programmazione "in-the-small" nel linguaggio C. Per tale motivo, un argomento presentato nel Modulo 1 viene poi trattato nel Modulo 2 a circa una settimana di distanza, al fine di lasciare il tempo sufficiente allo studente per assimilare le nozioni.

I due moduli sono quindi strettamente correlati, poichè forniscono due "punti di vista" complementari degli stessi argomenti: l'acquisizione da parte dello studente degli argomenti della materia può dirsi completa solo se entrambi gli aspetti sono stati completamente esplorati e oppurtunamente approfonditi.

Modalità di verifica dell'apprendimento

La verifica dell'apprendimento si svolge sia in forma di autovalutazione dello studente, tramite le esercitazioni sistematicamente proposte in laboratorio durante il corso, sia al termine, sotto forma di prova d'esame.

La prova d'esame riflette la strutturazione del corso in due moduli. Allo studente infatti viene richiesto di sostenere due prove, una scritta ed una in laboratorio:

  • La prova scritta (un'ora di durata) si svolge in aula, e riguarda piccoli esercizi e/o domande aperte su tutti gli argomenti trattati nel corso. Il voto di tale prova consiste in un punteggio fino ad un massimo di 12 punti, con una soglia di sufficienza posta al minimo di 7/12 punti; sotto tale soglia la prova è considerata "non superata". Durante tale prova allo studente non è concesso consultare testi, appunti o altra fonte di informazione.
  • La prova in laboratorio (due ore di durata)  consiste nella risoluzione di un problema tramite la progettazione e lo sviluppo di un piccolo programma in linguaggio C. La prova si svolge al calcolatore, e la consegna dei file di programma avviene tramite una semplice interfaccia web. Il voto di tale prova consiste in un punteggio fino ad un massimo di 20 punti, con una soglia di sufficienza posta al minimo di 11/20 punti; sotto tale soglia la prova è considerata "non superata". Durante tale prova allo studente è permessa la consultazione di testi, appunti e altro materiale in suo possesso; inoltre, è possibile accedere a tutti i materiali didattici pubblicati nel sito web del corso stesso, incluse le diapositive delle lezioni.


Il voto finale è dato dalla somma dei punteggi ottenuti nelle singole prove, se superate. Il voto ottenuto dalla somma è da considerarsi in /30; qualora lo studente abbia preso un punteggio finale eccedente i 30 punti, il voto finale è 30&Lode/30. Qualora lo ritengano necessario, i docenti si riservano la possibilità di chiamare all’orale gli studenti per confermare il voto della prova.

Lo studente può richiedere di sostenere una prova orale facoltativa, allo scopo di aumentare il voto conseguito (l'aumento possibile è al massimo di due punti). In tale caso l'orale verterà su tutti gli argomenti, teorici e non, che sono stati trattati durante il corso.

Lo studente può sostenere le due prove in qualunque ordine, e in uno o più appelli di esame, indifferentemente. Ad esempio è possibile sostenere una prova in un appello di gennaio, ed un'altra prova in un appello a giugno. Tuttavia, data la stretta correlazione delle prove, si consiglia di sostenere entrambe le prove in date prossime tra loro.

Lo studente può ripetere più volte una prova, qualora non sia riuscito a superarla in precedenza, o qualora non sia soddisfatto del punteggio conseguito. Qualora lo studente ripeta una prova (consegnando l'elaborato al docente), tutti i voti precedenti relativi a quella prova vengono considerati nulli, e verrà presa in considerazione solo la prova più recente.

Strumenti a supporto della didattica

Materiale Didattico: tutte le diapositive proiettate e discusse a lezione (sia in aula che in laboratorio) sono pubblicate in formato elettronico e consultabili sul sito Web del corso:
http://lia.disi.unibo.it/Courses/FondT1-1819-INF/
La pubblicazione e l'aggiornamento delle diapositive avviene a cura del docente, che provvede a rendere disponibile il materiale usato in aula in anticipo rispetto allo svolgersi delle lezioni.
Un elenco esaustivo di testi di riferimento e manuali è consultabile sia sul sito Web, sia sulle diapositive.
Il sito fornisce inoltre suggerimenti per ulteriori approfondimenti, nonchè un certo numero di esercizi e problemi aggiuntivi utili nella preparazione all'esame.
Infine, sempre sul sito web del corso sono disponibili un grande numero di testi e soluzioni di prove d'esame degli anni accademici precedenti, utili allo studente per raffinare e autovalutare la propria preparazione.

Altri strumenti: durante le lezioni e le esercitazioni in laboratorio sono disponibili elaboratori con installati ambienti professionali di sviluppo e programmazione per il linguaggio C. Tali strumenti software, indicati sul sito Web del corso, sono a disposizione gratuita degli studenti e possono essere scaricati ed installati su personal computer privati degli studenti.

Link ad altre eventuali informazioni

http://lia.disi.unibo.it/Courses/FondT1-1819-INF/

Orario di ricevimento

Consulta il sito web di Paola Mello

Consulta il sito web di Federico Chesani