FONDAMENTI DI PROGRAMMAZIONE A
cod. 1000747

Anno accademico 2018/19
1° anno di corso - Primo semestre
Docente
Settore scientifico disciplinare
Informatica (INF/01)
Ambito
Formazione informatica
Tipologia attività formativa
Base
56 ore
di attività frontali
6 crediti
sede: PARMA
insegnamento
in ITALIANO

Obiettivi formativi

L'obiettivo principale del corso è quello di far acquisire allo studente le tecniche fondamentali della programmazione imperativa attraverso l'uso del sottoinsieme imperativo del linguaggio di programmazione C++. Il corso mira anche a fornire allo studente la capacità di applicare tecniche di analisi dei problemi per risolvere in modo algoritmico semplici problemi pratici (quali, ad esempio, problemi di calcolo, di ordinamento di dati, di gestione di archivi) e quindi tradurre tali soluzioni in programmi eseguibili. Infine il corso mira a sviluppare capacità di analisi, di astrazione e di scomposizione di problemi in sottoproblemi.
Con riferimento agli Indicatori di Dublino:

Conoscenza e capacità di comprensione

Il corso introduce i primi concetti relativi alla programmazione imperativa, con particolare attenzione alla comprensione delle tecniche algoritmiche di base dei linguaggi imperativi. Il testo di riferimento è in italiano, ma durante le lezioni viene utilizzata anche la terminologia in lingua inglese come avviamento alla consultazione di letteratura scientifica internazionale. Durante il corso, lo studente impara i fondamenti della programmazione, attraverso l’uso del linguaggio di programmazione C++. Lo studente acquisisce inoltre adeguate competenze informatiche, legate all’architettura dei calcolatori e alla rappresentazione dell’informazione. Inoltre, lo studente è in grado di comprendere le applicazioni di base della matematica all’informatica.

Capacità di applicare conoscenza e comprensione

Le conoscenze teoriche presentate vengono sempre applicate alla risoluzione di problemi specifici, spesso di carattere modellistico/matematico. Lo studente è quindi in grado di utilizzare strumenti informatici e computazionali, sia come supporto ai processi matematici, sia per acquisire ulteriori informazioni. Le esercitazioni che affiancano il corso sono incentrate sulla risoluzione di esercizi e problemi, con particolare riferimento alla realizzazione di programmi nel linguaggio C++. Molti metodi risolutivi vengono applicati a problemi di natura matematica e numerica e vengono presentati e analizzati sotto forma algoritmica.

Autonomia di giudizio

Gli esercizi proposti relativamente alla parte teorica svolta a lezione possono essere affrontati individualmente o in gruppo e, spesso, possono essere risolti in modi molto diversi. Il confronto con i compagni di corso e l'ascolto delle soluzioni proposte da altri, nel lavoro a casa o durante gli svolgimenti in aula, favoriscono lo sviluppo di capacità specifiche per poter a chiarire le proprie argomentazioni e individuare strutture comuni tra i diversi approcci.

Abilità comunicative
Le discussioni in aula e durante le esercitazioni consentono di migliorare le capacità di comunicazione. Tali discussioni riguardano i metodi per risolvere i problemi proposti, evidenziando vantaggi e svantaggi dei diversi approcci proposti. Lo studente impara a lavorare sia in autonomia che in gruppo.

Capacità di apprendimento

Lo studio delle tecniche algoritmiche di base e la loro applicazione a problemi di natura eterogenea contribuiscono a realizzare negli studenti la capacità di apprendere in modo approfondito e non solo superficiale e ripetitivo. Le conoscenze così acquisite non sono mai rigide e meccaniche, ma sono perfettamente adattabili ad ogni evoluzione e cambiamento di prospettiva e di contesto. Lo studente è in grado di acquisire tecniche di calcolo scientifico per il mondo del lavoro, in modo autonomo o in collaborazione con studiosi di altre materie.

Prerequisiti

Nozioni di base su funzioni, insiemi ed espressioni logiche.

Contenuti dell'insegnamento

Nella prima parte del corso sono presentati concetti relativi all'architettura degli elaboratori e alla rappresentazione dell'informazione, con particolare attenzione alla rappresentazione dei numeri interi e dei numeri reali. Successivamente, sono introdotti i fondamenti della programmazione imperativa, utilizzando il linguaggio C++ come linguaggio di programmazione di riferimento. In particolare, sono sviluppate le nozioni di variabile, tipo di dato, algoritmo, espressione e sono introdotte le funzioni e le funzioni ricorsive.

Programma esteso

1) Rappresentazione dell’Informazione
- Definizione di alfabeto, stringa, linguaggio (esempi)
- Definizione di informazione
- Codifiche binarie e loro proprietà
- Rappresentazione di testi
- Rappresentazione di suoni
- Rappresentazione di immagini
- Rappresentazione di video
- Codifiche ridondanti
- Codifica di Huffman e applicazioni
- Rappresentazione dei numeri naturali, interi, razionali e conversione tra basi
- Rappresentazione dei numeri nei calcolatori (modulo/segno e complemento a 2; virgola fissa e virgola mobile)

2) Architettura degli Elaboratori
- Problemi e soluzioni
- Definizione di processo, programma, algoritmo
- Macchine astratte e gerarchia di macchine (cenni)
- Architettura dei calcolatori (CPU; memorie e gerarchia di memorie)

3) Programmazione
- Variabili e tipi di dato
- Assegnamento e espressioni
- Funzioni e funzioni ricorsive
- Statement di selezione
- Statement iterativi
- Diagramma di flusso e pseudocodice
- Array e operazioni su array
- Strutture e operazioni su strutture
- Input/output da/su file
- Costo di un algoritmo (cenni)
- Puntatori (cenni)

Bibliografia

- D. Mandrioli, S. Ceri, L. Sbattella, P. Cremonesi, G. Cugola. Informatica arte e mestiere, McGraw-Hill, 2014.

Altro materiale:
- Esercizi caricati di volta in volta sulla piattaforma elly.smfi.unipr.it
- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.

- R. Miller, D. Clark, B. White, e W. Knottenbel: An Introduction to the
Imperative Part of C++, 1999, disponibile su WEB all'indirizzo http:
//www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html#S

- Dispense disponibili su Web all'indirizzo http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html


Metodi didattici

Buona parte del corso consiste in lezioni frontali svolte in aula. Il corso si avvale inoltre di esercitazioni svolte in aula dal docente e di esercitazioni svolte in laboratorio, durante le quali gli studenti saranno tenuti a risolvere alcuni esercizi proposti.
Le slide utilizzate a supporto delle lezioni verranno caricate nei giorni successivi alla lezione sulla piattaforma Elly. Su Elly vengono caricati anche i file relativi ai programmi svolti e discussi a lezione. Per scaricare il materiale didattico è necessaria l’iscrizione al corso on line. Le slide e i file presenti su Elly vengono considerati parte integrante del materiale didattico.

Modalità verifica apprendimento

L'esame consiste in una prova scritta e in una prova di programmazione al computer, a cui si accede solo previo superamento della prova scritta. Nella prova scritta, della durata di 3 ore, sono proposti sia esercizi sia domande a risposta aperta riguardanti tutti gli argomenti svolti a lezione. I risultati della prova scritta verranno caricati su esse3 e comunicati agli studenti prima della prova di programmazione. Una volta superata la prova scritta, la prova di programmazione dev'essere effettuata nello stesso appello. La durata della prova di programmazione è 3 ore. La valutazione finale tiene conto dell'esito di entrambe le prove, le quali vengono considerate con ugual peso. Si osservi che per superare l'esame è necessario che entrambe le prove risultino sufficienti (cioè con esito maggiore o uguale a 18).

Altre informazioni

- - -