Programmazione 1
AA 2021-2022
Syllabus
Obiettivi formativi
L'obiettivo del corso è l'apprendimento dei fondamenti della programmazione imperativa. Come linguaggio verrà usato (un sottoinsieme stretto del) C++, visto prettamente come linguaggio di programmazione imperativo.
In questo corso non verranno analizzati aspetti di programmazione Object-Oriented (in quanto argomento di altro corso specifico).
Gli studenti sperimenteranno direttamente in laboratorio tutti i concetti e le competenze acquisiti a lezione.
Prerequisiti
Sono richieste le seguenti conoscenze e competenze di base:
nozioni di base di matematica
padronanza della lingua italiana scritta
discrete capacità logiche/analitiche
Importante: non è richiesta alcuna conoscenza informatica pregressa
Contenuti e Programma del corso
Gli argomenti principali affrontati nel corso saranno i seguenti:
Sviluppo di un programma
I/O standard
Variabili e costanti
Tipi (interi, booleani, reali, caratteri)
Istruzioni elementari
Istruzioni strutturate (sequenze, condizioni, cicli)
Puntatori e Riferimenti, Algebra dei puntatori
Funzioni e passaggi di parametri
Funzioni ricorsive
Array, array ordinati, array multidimensionali
Stringhe e trattamento di testi
I/O su files (argc & argv)
Organizzazione di un programma su più file
Struct
Allocazione dinamica di memoria
Strutture dati fondamentali (liste, stack, code)
Alberi binari
Grafi
Metodi didattici
Le lezioni saranno supportate da slide proiettate via computer, ed integrate da spiegazioni alla lavagna (quando possibile) o con opportuno strumenti didattici. Inoltre, verranno usati (proiettati, analizzati, compilati, eseguiti, modificati) un gran numero di programmi di esempio per illustrare tipici scenari di uso e di errore.
In laboratorio verranno assegnati alcuni compiti di programmazione che gli studenti dovranno realizzare individualmente al terminale.
Gli studenti dovranno acquisire le conoscenze di base e la capacità di analizzare e decomporre un problema e di scrivere un programma che lo risolva.
Le lezioni verranno erogate in modalità blended secondo le indicazioni dell'Università. Il professore si riserva il diritto di passare da modalità blended a completa modalità on-line se le condizioni lo richiederanno per salvaguardare la salute sia degli studenti, che del personale coinvolto.
Metodo di accertamento
L'esame consiste in una prova pratica scritta di programmazione di due ore al terminale svolta in laboratorio, in ambiente Linux Ubuntu.
Agli studenti saranno assegnati 3 esercizi di media difficoltà, più un quarto esercizio opzionale molto difficile (solo su richiesta).
A ciascuno dei primi tre esercizi è attribuito un punteggio, in modo tale che il corretto svolgimento di tutti e tre gli esercizi comporterà un voto di 30/30.
Il quarto esercizio, che verrà valutato solo in caso di valutazione 30/30 degli altri tre, comporterà il voto di 30/30 con lode se svolto correttamente.
E' ammesso l'uso di editor, compilatore e debugger.
Non è ammesso l'uso di alcun testo o strumento di acquisizione di informazioni o comunicazione con l'esterno.
Non sono previste prove in itinere.
Testi di riferimento
Il materiale di riferimento consiste nei seguenti elementi.
Appunti delle lezioni.
Handouts/slides "Corso Programmazione 1" (disponibile sul sito del corso)
Esempi di programmi e Materiale didattico aggiuntivo (disponibile sul sito del corso)
Libro di testo suggerito (alternativi):
John R. Hubbard. “Programming with C++” (2ed)
McGraw Hill (ENGL): ISBN: 0-07-135346-1,
http://www.mathcs.richmond.edu/~hubbard/Books.html
(versione italiana): ISBN: 88-386-5045-4 “Programmare in C++” (non più disponibile nuovo)Luis Joyanes Aguilar “Fondamenti di programmazione in C++”
McGraw Hill, ISBN: 9788838664779
http://www.catalogo.mcgraw-hill.it/catLibro.asp?item_id=2299
Riferimento per il linguaggio C++ (facoltativo):
Bjarne Stroustrup “Il Linguaggio C++” Pearson,
ISBN: 9788871920788 (4 a ed.)
http://www.pearson.it/opera/pearson/0-2613-c_%2B%2B_linguaggio_libreria_standard_principi_di_programmazione
Slides
13/09/2020 : Handouts
Esercitazioni
14/09/2020 : Handouts