PROGRAMMAZIONE
cod. 1003606

Anno accademico 2019/20
1° anno di corso - Primo semestre
Docente
- Federico BERGENTI
Settore scientifico disciplinare
Informatica (INF/01)
Field
Attività formative affini o integrative
Tipologia attività formativa
Affine/Integrativa
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. 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 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. 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. 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. 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

Il corso consiste in lezioni frontali svolte in aula.

Modalità verifica apprendimento

L'esame consiste in una prova scritta e in una prova di programmazione. Le prove vanno sostenute nello stesso appello. Il voto finale tiene conto dei risultati di entrambe le prove.

Altre informazioni

- - -