Fondamenti di Informatica - A.A. 2019-20

Scuola di Ingegneria Industriale e dell’Informazione

obiettivi del corso

Corso introduttivo alla risoluzione di problemi e programmazione in linguaggio C. L'obiettivo del corso è fare in modo che al termine lo studente sia in grado di:

  • individuare un algoritmo che risolve un problema e scrivere un programma in C che lo realizza, partendo da una specifica di un problema;
  • scrivere, leggere e comprendere un programma scritto in C;
  • compilare ed eseguire un programma scritto in C;
  • conoscere a grandi linee l'architettura di un sistema di calcolo, in termini di hardware e sistema operativo.

Queste conoscenze verranno in parte approfondite in corsi successivi.

informazioni generali

Cristiana Bolchini
Phone: (02 2399) 3619
Email: cristiana . bolchini @ polimi . it

 

Cesare Bernardis
Email: cesare . bernardis @ polimi . it

Andrea Romanoni
Email: andrea . romanoni @ polimi . it

orario del corso

lezione ed esercitazione in aula

lunedì 8:15 - 10:15 | aula B8.0.4
martedì 8:15 - 11:15 | aula B8.2.1
giovedì 10:15 - 13:15 | aula B8.0.4

 

ricevimento studenti

lunedì 10:15 - 12:15 (concordato)

esercitazione con il calcolatore (laboratorio)

giovedì 14:15 - 17:15 | B8.1.2 (inizio ore 14:15)

Nota: Le sessioni di laboratorio non si terranno tutti i giovedì ma nelle date qui riportate.

26/09* - 17/10 - 24/10 - 14/11 - 21/11 - 5/12.
*: lezione introduttiva all'ambiente di sviluppo (ambiente linux, compilatore gcc, debugger gdb).
La lezione è consigliata a coloro che non hanno mai utilizzato un ambiente di programmazione o sono abituati ad utilizzare ambienti di sviluppo integrati.

risorse

  • volantino del corso 
  • syllabus 
  • rappresentazione dell'informazione 
  • numero reale: conversione IEEE754 > 10MS 
  • numero reale: conversione 10MS > IEEE754 
  • cheatsheet unix/linux 
  • cheatsheet linguaggio C 
  • temi d'esame 
  • programma del corso

    Gli argomenti che verranno trattati all'interno del corso sono i seguenti:

    • Architettura calcolatore: hardware & sistema operativo
    • Rappresentazione/codifica dell'informazione e aritmetica
    • Introduzione agli algoritmi
    • Dall'algoritmo al programma (in linguaggio C)
    • Il linguaggio C

    Un riepilogo degli argomenti trattati è riportato nel syllabus.

    testi di riferimento

    Manuali del linguaggio C (in alternativa tra loro)

    • Kim N. King, Programmazione in C, Apogeo *
    • Jeri R. Hanly, Elliot B. Koffman, Problem solving e programmazione in C, Apogeo **
    • H. M. Deitel, P. J. Deitel, C Corso completo di programmazione, Apogeo
    • Kernigham, Ritchie, Linguaggio C II edizione, Jackson Libri

    * argomenti trattati in un ordine/modo simile a quanto fatto nel corso
    ** molto bello il modo di spiegare come individuare un algoritmo dato il problema da risolvere (parte di problem solving)

    modalità d'esame

    Riferite al regolamento didattico valido per tutti i corsi di Fondamenti di Informatica

    L'esame prevede una verifica scritta con eventuale discussione orale (esclusivamente nel caso di verifica scritta ampiamente sufficiente) su richiesta del docente.

    La prova si svolge senza l'uso del calcolatore.

    attività di laboratorio ¬ esercizi con il calcolatore

    L'attività di laboratorio consiste nello svolgimento autonomo di esercizi. Non si tratta di un'esercitazione guidata, quanto di un momento in cui ogni studente in modo autonomo risolve gli esercizi proposti e chiede aiuto nel caso in cui si trovi in difficoltà al responsabile o al tutor che sono presenti in aula. Si tratta di un'opportunità per risolvere problemi simili a quelli proposti in aula durante le lezioni ed esercitazioni (talvolta un po' più articolati vista la modalità di lavoro e il tempo a disposizione) avendo la possibilità di essere supportati.
    Lo studente può anche risolvere esercizi diversi da quelli proposti (esercizi presentati a lezione e/o esercitazione, o tratti da precedenti temi d'esame), purchè inerenti il corso.
    Ad ogni sessione di laboratorio viene proposta una lista di esercizi che coprono gli argomenti trattati in aula fino a quel momento, pertanto è opportuno aver studiato tali argomenti per utilizzare al meglio il tempo e beneficiare della presenza di persone competenti.

    Sono previste 5 sessioni: nei giorni in cui non c'è attività di laboratorio, non c'è alcun altro tipo di didattica.

    Sebbene la prova d'esame si svolga risolvendo esercizi senza l'uso del calcolatore, lo studente al termine del corso deve essere in grado di scrivere il programma, compilarlo ed eseguirlo. Questa capacità non viene direttamente valutata durante le sessioni di laboratorio, ma emerge comunque dalla prova scritta. Si suggerisce quindi di frequentare le sessioni e compilare ed eseguire sempre gli esercizi proposti in aula.

    ambiente di sviluppo: linux/unix

    In laboratorio l'ambiente di sviluppo adottato (consigliato anche a fronte dei corsi degli anni successivi) è un ambiente linux, dove il codice viene compilato da linea di comando.
    • editor: nessuna IDE, editor di testi semplice, con eventuale evidenziazione della sintassi senza completarla (unix/linux: gedit - mac: TextMate, SublimeText, windows: Notepad++, SublimeText)
    • compilatore: gcc (http://gcc.gnu.org/)
    • debugger: gdb

    È stata preparata inoltre una VirtualBox identica a quella utilizzata per le esercitazioni con il calcolatore, con tutto il software necessario, ed è scaricabile all'indirizzo ftp://ftp.elet.polimi.it/users/Cristiana.Bolchini/fi/Lubuntu18.ova (1.78GB). L'ambiente della virtual machine è una distribuzione Lubuntu (versione leggera di Ubuntu, per limitare le dimensioni https://lubuntu.net/): se desiderate aggiornare il software, la password dell'utente è nopassword.

    Coloro che possiedeno un mac non hanno bisogno di installare VirtualBox: possono lavorare direttamente utilizzando il sistema operativo a disposizione, tramite terminale. Il compilatore gcc è già installato. Per il debugger, è disponibile lldb.

    Per coloro che possiedono un pc con Windows 10, una comoda opzione è l'installazione di Ubuntu dal Windows Store (https://tutorials.ubuntu.com/tutorial/tutorial-ubuntu-on-windows#0).

    siti web

    Oltre a questa pagina web che riporta le informazioni generali del corso, si farà uso del seguente sito:

    • piazza (interazione con il docente)

    Per accedere a Piazza è necessario registrarsi, per l'altro l'accesso avviene tramite il sistema di autenticazione unica del Politecnico (assicurarsi di non aver problemi con tale autenticazione o non sarà possibile consegnare gli esercizi di laboratorio.).

    contatti

    È stato attivato uno spazio su piazza.com per le interazioni con i docenti. Ogni studente iscritto al corso verrà invitato a registrarsi al corso per poter accedere al forum/chat. In questo modo verrà anche condiviso materiale e altre informazioni di interesse generale. È quindi preferibile utilizzare questo strumento (ci sono anche le app per smartphone).
    È anche possibile contattarmi mediante posta elettronica. I messaggi devono avere nel campo oggetto [FINFO] e devono essere firmati. Qualsiasi messaggio che non rispetta questo formato non verrà preso in considerazione.

    Lezioni 2019-20: calendario provvisorio (aggiornato in corso d'opera)

    lezioneesercitazionelaboratorioaltrosospensione

    data argomento dettaglio
    16 settembre 2019introduzione al corso
    17 settembre 2019rappresentazione dell'informazionei numeri naturali e i numeri relativi
    18 settembre 2019rappresentazione dell'informazionei numeri reali in virgola mobile, il codice ASCII
    19 settembre 2019sospensione
    23 settembre 2019algoritmidal problema all'algoritmo
    24 settembre 2019programmazione in Cintroduzione al C: struttura di un programma
    26 settembre 2019programmazione in Cintroduzione al C: tipi, operatori
    26 settembre 2019laboratorio 0introduzione all'ambiente di lavoro
    30 settembre 2019programmazione in Ccast, costrutto if, condizioni, espressioni
    01 ottobre 2019programmazione in Cesercizi
    03 ottobre 2019sospensione: lauree
    07 ottobre 2019programmazione in Ccostrutto while e do-while
    08 ottobre 2019programmazione in Cesercizi
    10 ottobre 2019programmazione in Carray mono-dimensionali, costrutto for
    14 ottobre 2019programmazione in Cesercizi
    15 ottobre 2019programmazione in Carray bi-dimensionali, struct e typedef
    17 ottobre 2019programmazione in Cstringhe
    17 ottobre 2019laboratorio 1esercizi fino ad array
    21 ottobre 2019programmazione in Cesercizi
    22 ottobre 2019programmazione in Csottoprogrammi e passaggio parametri
    24 ottobre 2019programmazione in Csottoprogrammi e passaggio parametri
    24 ottobre 2019laboratorio 2esercizi fino a array, struct e stringhe
    28 ottobre 2019programmazione in Cesercizi
    29 ottobre 2019programmazione in Cesercizi
    31 ottobre 2019programmazione in Cesercizi di riepilogo
    04 novembre 2019sospensione
    05 novembre 2019sospensione
    07 novembre 2019programmazione in Cfile di testo e file binari
    11 novembre 2019programmazione in Cesercizi file
    12 novembre 2019programmazione in Callocazione dinamica
    14 novembre 2019programmazione in Cesercizi allocazione dinamica
    14 novembre 2019laboratorio 3esercizi fino a sottoprogrammi
    18 novembre 2019programmazione in Cliste concatenate semplici
    18 novembre 2019programmazione in Cliste concatenate semplici
    21 novembre 2019programmazione in Cesercizi
    21 novembre 2019laboratorio 4lavoro di gruppo
    25 novembre 2019programmazione in Cricorsione e variabili static
    26 novembre 2019programmazione in Cesercizi
    28 novembre 2019programmazione in Cesercizi
    02 dicembre 2019programmazione in Cesercizi
    03 dicembre 2019programmazione in Cesercizi
    05 dicembre 2019programmazione in Cargc, argv, variabili globali
    05 dicembre 2019laboratorio 5lavoro di gruppo
    09 dicembre 2019programmazione in Cesercizi
    10 dicembre 2018architettura del calcolatorearchitettura hardware
    12 dicembre 2018architettura del calcolatoresistema operativo
    16 dicembre 2018XMAS party