Fondamenti di Informatica - A.A. 2018-19

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

 

Matteo Luperto
Email: matteo . luperto @ unimi . it

Andrea Romanoni
Email: andrea . romanoni @ polimi . it

orario del corso

lezione ed esercitazione in aula

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

 

ricevimento studenti

lunedì 11:15 - 12:15

esercitazione con il calcolatore (laboratorio)

martedì 14:15 - 17:15 | B8.1.01 (arrivare in aula per le 14:15)

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

2/10* - 16/10 - 23/10 - 13/11 - 20/11 - 4/12 - 18/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.
^: gioco - sfida: attività facoltativa di intrattenimento, svolta in gruppi.

risorse

  • volantino del corso 
  • syllabus 
  • rappresentazione dell'informazione 
  • 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 6 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 (unix/linux: gedit - mac: TextMate, windows: Notepad++)
    • 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.

    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.

    studenti 2018-19

    Qualche statistica sulla tipologia di studenti iscritti al corso

    Lezioni 2018-19: calendario provvisorio

    lezioneesercitazionelaboratorioaltrosospensione

    data argomento dettaglio
    17 settembre 2018introduzione al corso
    18 settembre 2018rappresentazione dell'informazionei numeri naturali e i numeri relativi
    20 settembre 2018rappresentazione dell'informazionei numeri reali in virgola mobile, il codice ASCII
    24 settembre 2018algoritmidal problema all'algoritmo
    25 settembre 2018algoritmialgoritmi
    27 settembre 2018algoritmiesercizi sugli algoritmi
    01 ottobre 2018programmazione in Cintroduzione al C: tipi, operatori
    02 ottobre 2018programmazione in Ccast, costrutto di selezione if, condizioni, espressioni
    02 ottobre 2018laboratorio 0introduzione all'ambiente di lavoro
    04 ottobre 2018programmazione in Cesercizi
    08 ottobre 2018programmazione in Ccostrutto while e do-while
    09 ottobre 2018programmazione in Cesercizi
    11 ottobre 2018programmazione in Carray mono-dimensionali, costrutto for
    15 ottobre 2018programmazione in Cesercizi
    16 ottobre 2018programmazione in Carray bi-dimensionali, struct e typedef
    16 ottobre 2018laboratorio 1esercizi fino ad array mono-dimensionali
    18 ottobre 2018programmazione in Cstringhe
    22 ottobre 2018programmazione in Cesercizi fino a tutti concetti base
    23 ottobre 2018architettura del calcolatoreorganizzazione hw del calcolatore
    23 ottobre 2018laboratorio 2esercizi fino a array, struct e stringhe
    24 ottobre 2018architettura del calcolatoresistema operativo
    29 ottobre 2018sospensione: inaugurazione anno accademico
    30 ottobre 2018programmazione in Cesercizi di riepilogo
    01 novembre 2018sospensione
    02 novembre 2018sospensione
    05 novembre 2018sospensione
    06 novembre 2018sospensione
    08 novembre 2018programmazione in Csottoprogrammi
    12 novembre 2018programmazione in Cesercizi sottoprogrammi
    13 novembre 2018programmazione in Csottoprogrammi
    13 novembre 2018laboratorio 3esercizi fino a sottoprogrammi
    15 novembre 2018programmazione in Csottoprogrammi
    19 novembre 2018programmazione in Cesercizi sottoprogrammi
    20 novembre 2018programmazione in Cfile di testo e file binari
    20 novembre 2018laboratorio 4esercizi fino a sottoprogrammi
    22 novembre 2018programmazione in Cesercizi file
    26 novembre 2018programmazione in Cricorsione e variabili static
    27 novembre 2018programmazione in Callocazione dinamica
    29 novembre 2018programmazione in Cesercizi ricorsione e allocazione dinamica
    3 dicembre 2018programmazione in Cliste concatenate semplici
    4 dicembre 2018programmazione in Cliste concatenate semplici
    4 dicembre 2018laboratorio 5esercizi allocazione dinamica
    6 dicembre 2018programmazione in Cesercizi liste concatenate
    10 dicembre 2018programmazione in Cargc, argv, variabili globali
    11 dicembre 2018programmazione in Cesercizi riepilogo + assembly
    13 dicembre 2018programmazione in Cesercizi riepilogo
    17 dicembre 2018programmazione in Cesercizi riepilogo
    18 dicembre 2018XMAS party (AM) & Gioco-sfida (PM)
    20 dicembre 2018lauree

    Elenco degli argomenti delle lezioni per l'anno accademico 2017-2018 (per farsi un'idea...)

    data argomento dettaglio
    18 settembre 2017rappresentazione dell'informazione i numeri naturali e i numeri relativi
    21 settembre 2017rappresentazione dell'informazione i numeri reali in virgola mobile, il codice ASCII
    25 settembre 2017algoritmi dal problema all'algoritmo
    26 settembre 2017algoritmi introduzione agli algoritmi ed esempi
    28 settembre 2017programmazione in C introduzione al C
    02 ottobre 2017programmazione in C cast, costrutto di selezione if, condizioni, espressioni
    04 ottobre 2017laboratorio introduzione all'ambiente di lavoro
    05 ottobre 2017programmazione in C costrutti ciclici while e do-while
    09 ottobre 2017programmazione in C esercizi fino ai cicli
    10 ottobre 2017programmazione in C array monodimensionali e costrutto for
    11 ottobre 2017laboratorio costrutti di controllo
    12 ottobre 2017programmazione in C esercizi fino agli array
    16 ottobre 2017programmazione in C array bidimensionali e strutture e typedef
    17 ottobre 2017programmazione in C esercizi array mono e bidimensionali, strutture
    18 ottobre 2017laboratorio array
    19 ottobre 2017programmazione in C stringhe
    23 ottobre 2017programmazione in C esercizi stringhe
    30 ottobre 2017programmazione in C sottoprogrammi
    31 ottobre 2017programmazione in C sottoprogrammi: passaggio parametri
    02 novembre 2017programmazione in C esercizi sottoprogrammi base
    06 novembre 2017programmazione in C esercizi sottoprogrammi avanzati
    07 novembre 2017programmazione in C ricorsione (e relativi esercizi)
    09 novembre 2017programmazione in C file
    16 novembre 2017programmazione in Cesercizi file
    27 novembre 2017programmazione in C liste concatenate semplici
    28 novembre 2017programmazione in Cliste concatenate semplici ed esercizi
    29 novembre 2017laboratorio sottoprogrammi
    30 novembre 2017programmazione in Cesercizi liste
    04 dicembre 2017programmazione in C esercizi liste
    05 dicembre 2017programmazione in Cargc, argc e riga di comando
    06 dicembre 2017laboratorio liste
    11 dicembre 2017programmazione in Cesercizi
    12 dicembre 2017programmazione in Cesercizi
    13 dicembre 2017laboratorio riepilogo
    14 dicembre 2017programmazioneil linguaggio assembly
    18 dicembre 2017programmazione in C esercizi di riepilogo
    19 dicembre 2017programmazione in Cesercizi di riepilogo