Programmazione 1
AA 2020-2021
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
14/09/2020 : Handouts
16/09/2020 Handouts
23/09/2020 Handouts
28/09/2020 Handouts
30/09/2020 Handouts
05/10/2020 Handouts
07/10/2020 Handouts
12/10/2020
14/10/2020
19/10/2020
26/10/2020
28/10/2020
02/11/2020
04/11/2020
09/11/2020
11/11/2020
16/11/2020
18/11/2020
23/11/2020
25/11/2020
Esercitazioni
17/09/2020
22/09/2020
24/09/2020
29/09/2020
01/10/2020
06/10/2020
08/10/2020
13/10/2020
15/10/2020
20/10/2020
22/10/2020
27/10/2020
29/10/2020
03/11/2020
10/11/2020
12/11/2020
17/11/2020
19/11/2020
24/11/2020