Programmazione I - Edizione 2009/2010

Informazioni generali del corso

Nome del corso:Programmazione I [MN1-1140]
Docente:Paolo Valente
Corso di Studio:Informatica
Tipologia:Caratterizzante
CFU:9
Periodo Didattico:Primo Ciclo Semestrale

Recapiti docente:

Ricevimento studenti: contattare il docente per fissare l'orario.

Avvisi

Questo è il sito di una vecchia edizione del corso, trovate l'edizione corrente qui.

Materiale didattico anni precedenti

Cliccare qui per la pagina dell'edizione 2008/09 del corso di Programmazione I/Informatica Generale (nella quale troverete il link alla pagina dell'edizione ancora precedente e così via).

Obiettivi del corso

L'insegnamento ha per obiettivo l'introduzione dello studente ai fondamenti della programmazione. Come linguaggio di riferimento viene usato il sottoinsieme procedurale del C++, mentre come sistema operativo GNU/Linux. Nel corso si adotta l'approccio "imparare facendo": quasi ogni nuova nozione o dettaglio sono subito messi in pratica al calcolatore con esercizi di complessità crescente.

Mini corso di introduzione all'uso del PC

L'unico prerequisito del corso di Programmazione I è essere in grado di effettuare tutte le operazioni di base in un file system, nonché di scrivere e modificare file di testo. In merito, tutte le conoscenze necessarie per svolgere questi compiti in ambiente GNU/Linux vengono fornite nel mini-corso di introduzione all'uso del PC. Trovate tutte le informazioni ed il materiale di tale corso a questo indirizzo.

Programma del corso

  • Obiettivi e contenuti dell'informatica, algoritmi e programmi.
  • Costanti e variabili, tipi di dato primitivi, definizioni e dichiarazioni, espressioni aritmetiche e logiche, istruzioni di assegnamento, operatori, input/output, conversioni di tipo.
  • Concetto di blocco. Strutture di controllo condizionali e iterative. Regole di visibilità e durata delle variabili.
  • Tipi di dato strutturati: vettori, matrici, stringhe, struct. Concetto di riferimento e puntatore.
  • Funzioni, passaggio dei parametri per valore e per riferimento.
  • Memoria dinamica, record di attivazione delle funzioni, gestione memoria stack.
  • Gestione dei file di testo e dei file binari.
  • Panoramica sui linguaggi di programmazione. Interpreti, compilatori, linker.

Orario delle lezioni

Tutte le lezioni si sono tenute nel Laboratorio Informatico di Base, al piano terra del Dipartimento di Matematica, con il seguente orario:

  • Lunedì ore 14:00-17:00
  • Martedì ore 11:00-13:00
  • Giovedì ore 14:00-16:00

Materiale didattico

Tutte le nozioni fornite nel corso sono riportate nelle seguenti presentazioni. Non è quindi obbligatorio l'utilizzo di alcun libro di testo.

Invece, come ulteriore riferimento e materiale di approfondimento si consigliano i testi riportati nella sezione Testi consigliati

Lezioni

  • Introduzione dell'insegnamento di Programmazione I, pdf
  • Problemi, algoritmi, programi, pdf
  • Introduzione al linguaggio C/C++: tipi di dato e numeri interi, variabili e costanti con nome, struttura (semplificata) di un programma, pdf
  • Completamento assegnamento, compendio sintassi C/C++, tipo booleano ed operatori logici, espressioni aritmetiche e logiche, programmazione strutturata, istruzioni condizionali, pdf
  • Istruzioni cicliche, pdf; versione in bianco e nero degli esercizi per casa, ps
  • Funzioni, pdf
  • Visibilità e tempo di vita, pdf
  • Tipi di dato primitivi e conversioni di tipo, pdf
  • Riferimenti e passaggio dei parametri per riferimento, pdf
  • Ingegneria del codice, pdf
  • Array, pdf
  • Stream, file ed input/output formattato, pdf
  • Stringhe, struct e matrici statiche, pdf
  • Array dinamici e puntatori, pdf
  • Input/output non formattato, pdf
  • Compendio C/C++, pdf
  • Algoritmi e programmi, traduttori e compilatori, ambienti di sviluppo pdf
  • Gestione della memoria pdf
  • Introduzione alle listepdf

Esercitazioni

  • Introduzione ad ingresso e uscita, compilazione, pdf
  • Completamento ingresso e uscita, variabili e costanti intere, cartella
  • Tipo booleano, operatori relazionali e logici, espressioni logiche, istruzioni di scelta semplice, cartella
  • Overflow, istruzioni di scelta multipla, cartella
  • Istruzioni cicliche, cartella (versione parziale)
  • Funzioni, cartella
  • Visibilità, tipi di dato primitivi e conversioni, cartella
  • Riferimenti ed array, cartella
  • Stringhe, struct e matrici, cartella
  • Array dinamici, IO non formattato cartella

Modalità d'esame

  • L'esame si compone di due prove:
    • Una prova scritta (a volte chiamata anche test) con maggioranza di domande a scelta multipla e alcune domande aperte
      • Non si può utilizzare materiale didattico, appunti o altri manuali
    • Una prova di programmazione (a volte chiamata anche prova pratica) da svolgersi su calcolatore sia per gli studenti di Informatica, che per quelli di Matematica
      • La prova consiste nella scrittura di un programma o frammento di codice che risponda alle specifiche riportate nella traccia fornita all'atto della prova stessa.
      • Si può utilizzare materiale didattico, appunti o manuali.
      • Durante la prova lo studente avrà modo di scrivere, compilare e provare il proprio elaborato nel tempo a disposizione. Entro tale tempo lo studente deve informare il docente della sua eventuale intenzione di abbandonare la prova. Se non abbandona, il suo elaborato sarà preso in consegna dal docente, ma lo studente avrà comunque ancora la possibilità di decidere di non consegnare dopo la correzione pubblica, come di seguito specificato.
        • Al termine del tempo previsto avverrà una correzione pubblica. Ogni algoritmo equivalente a quello mostrato nella correzione è valido per superare la prova. Ovviamente l'esito della prova in termini di punti dipenderà dall'aderenza alle specifiche date nella traccia, dagli errori introdotti e, in misura minore, dalla efficienza/inefficienza in termini di quantità di codice scritto o numeri di passi effettuati dall'algoritmo realizzato dallo studente.
        • Dopo la correzione pubblica, lo studente, ovviamente purché non abbia precedentemente abbandonato, può decidere se consegnare o meno. Nel caso di mancata consegna, la prova scritta rimane valida per gli appelli successivi. Nel caso invece lo studente consegni, questo conclude l'esame.
        • L'esito dell'esame verrà comunicato nel modo più opportuno. In caso lo studente non abbia superato l'esame, oppure rifiuti il voto proposto, sia la prova scritta che quella di programmazione vengono invalidate, e pertanto dovranno essere sostenute di nuovo.
      • La prova di programmazione sarà svolta in uno dei laboratori del Dipartimento di Matematica (tipicamente il Laboratorio Base)
      • Le macchine su cui si svolgerà la prova di programmazione sono dotate di sistema operativo GNU/Linux, e probabilmente anche Windows. Tuttavia, siccome l'ambiente di sviluppo preso a riferimento durante il corso e' GNU/Linux, solo per quest'ultimo è garantita la presenza di tutti i necessari tool di sviluppo e la piena assistenza del docente.
      • Per chi non fosse pratico dell'ambiente GNU/Linux, può essere utile consultare il materiale del mini corso di Introduzione all'uso del PC
  • Si ricorda che:
    • nel caso di superamento della prova di programmazione, e di insoddisfazione rispetto al voto proposto è possibile sostenere un orale facoltativo (che potrà migliorare ma anche peggiorare il voto acquisito dalle prove scritta e di programmazione)
    • è possibile ripetere la prova scritta negli appelli successivi tenendo presente che il voto della prova scritta precedente rimane valido fino alla consegna della nuova prova scritta e comunque non oltre l'anno accademico in corso
    • è possibile ripetere la prova di programmazione negli appelli successivi tenendo presente che il voto della prova scritta precedente rimane valido fino alla consegna della nuova prova di programmazione e comunque non oltre l'anno accademico in corso
  • Per gli studenti che hanno seguito in anni precedenti
    • Se (e solo se) segnalano esplicitamente la cosa all'atto dell'iscrizione all'esame, avranno modo di sostenere l'esame in linguaggio C.

Iscrizione agli esami

  • A differenza degli anni precedenti, da quest'anno proviamo la seguente nuova forma di iscrizione agli appelli: ci si iscrive su esse3 senza spedire nessuna e-mail. In particolare ci si può iscrivere alla prova scritta, all'appello vero e proprio, o ad entrambi. L'iscrizione all'appello vero e proprio implica l'iscrizione alla prova pratica. Quindi: 1) se non si è ancora mai superata la prova scritta o se si intende solo rifare la prova scritta ci si può iscrivere solo alla prova scritta, 2) per potersi iscrivere direttamente all'appello vero e proprio bisogna aver superato la prova scritta in uno degli appelli precedenti dello stesso anno accademico. Se si rientra nel caso 2) e si vuole anche provare a ripetere la prova scritta, ci si iscrive sia alla prova scritta che all'appello vero e proprio. L'iscrizione a ciascuna delle due prove è aperta fino a tre giorni prima della prova stessa.
    Nel caso ci si sia immatricolati in anni precedenti a quello in corso, e si desideri sostenere l'esame secondo le regole del vecchio esame di Programmazione (ossia sostanzialmente utilizzando il linguaggio C anziché il C++), occorre comunicare la cosa al docente via e-mail. Attenzione, nel caso non pervenga alcuna segnalazione in merito, non saranno preparate tracce alternative, per cui non sarà di fatto possibile sostenere l'esame in base alle vecchie regole.

    NB: iscriversi per poi cambiare idea e non presentarsi non comporta nessun problema, mentre, al contrario iscrizioni pervenute in ritardo non saranno accettate.

Prove d'esame

  • Mini scritti
    • Traccia mini-scritto 15 Ottobre 2009, pdf
    • Soluzione mini-scritto 15 Ottobre 2009, pdf
    • Traccia mini-scritto 29 Ottobre 2009, pdf
    • Soluzione mini-scritto 29 Ottobre 2009, pdf
  • Pre-appello:
    • Prova scritta: 14 Dicembre 2009, ore 15:00, Laboratorio Base
    • Prova di programmazione: 15 Dicembre 2009, ore 14:00, Laboratorio Base
    • Tracce e soluzioni
  • Primo appello invernale:
    • Prova scritta: 1 febbraio 2010, ore 15:00, Laboratorio Base
    • Prova di programmazione: 3 febbraio 2010, ore 14:00, Laboratorio Base
    • Tracce e soluzioni
  • Secondo appello invernale:
    • Prova scritta: 22 febbraio 2010, ore 15:00, Laboratorio Base
    • Prova di programmazione: 24 febbraio 2010, ore 14:00, Laboratorio Base
    • Tracce e soluzioni
  • Primo appello estivo:
  • Secondo appello estivo:
    • Prova scritta: 5 luglio 2010, ore 10:00, Laboratorio Base
    • Prova di programmazione: 7 luglio 2010, ore 9:00, Laboratorio Base
    • Tracce e soluzioni
  • Appello autunnale:
    • Prova scritta: 20 settembre 2010, ore 10:00, Laboratorio Base
    • Prova di programmazione: 22 settembre 2010, ore 9:00, Laboratorio Base

Testi consigliati

  • Bruce Eckel
    Thinking in C++, 2nd Edition, Volume 1 http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
    Sito per il download gratuito: http://www.mindviewinc.com/
    • Testo chiaro e completo per apprendere il linguaggio, e per acquisire dimistichezza con il lessico della programmazione (ed in generale dell'Informatica) in lingua Inglese.

  • Andrea Domenici, Graziano Frosini
    Introduzione alla programmazione ed elementi di strutture dati con il Linguaggio C++
    Franco Angeli
    ISBN 88-464-3173-1
    • Più sintetico e formale del precedente, ma molto chiaro e conciso. Anche questo molto appropriato per incominciare.

  • Bjarne Stroustrup
    C++. Linguaggio, libreria standard, principi di programmazione
    Pearson Education Italia
    ISBN: 88-719-2078-3
    • Scritto dall'autore stesso del linguaggio C++, non è di facile lettura come i precedenti, e soprattutto presuppone la conoscenza del linguaggio C o del C++ stesso. E' segnalato in questo elenco quale testo di approfondimento e riferimento sul C++ (con alta probabilità tra i migliori disponibili).