Pagina principale

Programma del corso e bibliografia

Organizzazione e orario

Materiale didattico

Esami

Come contattare il docente

Valutazione del corso

Avvisi

Fondamenti di Informatica 1

Docente: Giorgio Fumera - A.A. 2017/2018

FacoltÓ di Ingegneria e Architettura - UniversitÓ degli Studi di Cagliari


Programma del corso e bibliografia

Il programma del corso per l'A.A. 2017/2018 Ŕ il seguente (tra parentesi sono indicati i testi di riferimento per ognuno degli argomenti). Tutti gli argomenti verranno trattati a lezione.

Codifica binaria dell'informazione (Mandrioli; Sciuto)
Il concetto di codifica dell'informazione. Codifica analogica e numerica ("digitale"). Codifica binaria. Codifica di informazioni numeriche: richiami sui sistemi di numerazione posizionali e sulle basi di numerazione; codifica dei numeri interi (senza segno, segno e valore, complemento a due) e dei numeri frazionari (virgola fissa e virgola mobile; cenni alla codifica in virgola mobile IEEE 754). Cenni alla codifica di informazioni non numeriche: testi, suoni e immagini.

Architettura dei calcolatori (Mandrioli; Sciuto)
Cenni storici. I calcolatori come esecutori automatici di algoritmi. Organizzazione logica e principi di funzionamento dei calcolatori: l'architettura di von Neumann. Componenti dell'architettura di von Neumann: l'unitÓ di elaborazione (CPU), la memoria principale, le periferiche, il bus di sistema. Il meccanismo di esecuzione dei programmi. Evoluzioni dell'architettura di von Neumann: gerarchia di memorie (memoria cache, principale, secondaria e terziaria); cenni al pipelining, architetture CISC e RISC, architetture multiprocessore e multi-core.

Il sistema operativo (Mandrioli; Sciuto)
Cenni storici. Funzioni e organizzazione dei sistemi operativi. Gestione dei processi, della memoria principale, della memoria secondaria, delle periferiche. L'interfaccia utente.

Algoritmi e linguaggi di rappresentazione degli algoritmi (Mandrioli; Sciuto)
Il concetto di algoritmo. Linguaggi per la codifica degli algoritmi. Linugaggi di programmazione: linguaggi di basso livello (linguaggio macchina) e di alto livello. Linguaggi tradotti e interpretati. Paradigmi di programmazione (cenni): procedurale, orientato agli oggetti, funzionale, dichiarativo. ProprietÓ degli algoritmi: correttezza ed efficienza.
Algoritmi di ricerca:

  • ricerca sequenziale
  • ricerca binaria
Algoritmi di ordinamento:
  • per selezione (selection sort)
  • "a bolle" (bubble sort)
  • per inserimento (insertion sort)

Il linguaggio Python (Lambert: cap. 1-5)
(Obbligatorio per gli studenti immatricolatisi a partire dall'A.A. 2012/2013; a scelta, in alternativa al linguaggio C, per gli studenti immatricolatisi negli A.A. precedenti)

  • I principali tipi di dato: numeri interi, numeri reali, stringhe di caratteri, valori Booleani (i simboli True e False), liste, dizionari.
  • Operatori:
    • +   -   *   /   //   **   %   (numeri)
    • ==   !=   <   <=   >   >=   (numeri e stringhe di caratteri)
    • and, or, not (valori Booleani)
    • + (concatenazione di stringhe di caratteri, e di liste)
    • in e not in (verifica della presenza di elementi in una sequenza - lista, stringa o dizionario)
    • slicing ("sezionamento" di stringhe e liste)
  • Accesso agli elementi di una sequenza: stringhe di caratteri, liste e dizionari.
  • Espressioni. Espressioni aritmetiche (valori numerici). Espressioni condizionali (valori logici / Booleani). Espressioni che coinvolgono stringhe di caratteri, liste e dizionari.
  • Le istruzioni principali: assegnamento, ingresso  e uscita (input(), raw_input(), print), condizionale (if, if...else), iterativa (while, for). Le istruzioni break e continue.
  • Funzioni. La libreria standard di Python: le principali funzioni predefinite. Le librerie math e random. L'istruzione from... import... Definizione di nuove funzioni (l'istruzione def), parametri, chiamata, argomenti, visibilitÓ locale dei parametri e delle variabili di una funzione. Passaggio degli argomenti per riferimento. 
  • Accesso ai file: tipi di file, operazioni sui file, modalitÓ di accesso, apertura e chiusura. Le funzioni open, close, read, readline, readlines, write.
  • Implementazione di algoritmi di ricerca e ordinamento in Python: ricerca sequenziale e binaria; ordinamento per selezione (selection sort), per inserimento (insertion sort) e "a bolle" (bubble sort).
Il linguaggio C (Mandrioli)
(A scelta per gli studenti immatricolatisi A.A. 2011/2012 e precedenti, in alternativa al linguaggio Python)
  • Introduzione al linguaggio C. Definizione di un esecutore di riferimento. Le istruzioni principali del linguaggio C: istruzione di assegnamento, condizionale, iterativa (while), "istruzioni" di ingresso/uscita (printf e scanf). Parte dichiarativa dei programmi C. Ambienti di programmazione e componenti principali: editor, compilatore, linker.
  • Strutture dati del linguaggio C. Definizione di "tipo di dato". Tipi di dato semplici e strutturati. Tipi predefiniti e definiti dall'utente. I tipi semplici predifiniti del C: int, char, float. Definizione e uso di nuovi tipi strutturati: array e struct. Cenni sui puntatori e sulla relazione tra puntatori e variabili array.
  • Strutture di controllo del linguaggio C. Le istruzioni switch-case, for, do-while. L'istruzione break.
  • I sottoprogrammi nel linguaggio C: funzioni e procedure. Suddivisione di un programma in sottoprogrammi. Parametri e argomenti dei sottoprogrammi. Definizione e chiamata dei sottoprogrammi. I sottoprogrammi nel linguaggio C: funzioni e procedure. Dichiarazione dei sottoprogrammi. Passaggio dei parametri per valore e per indirizzo. Funzioni predefinite del C: la standard library. Le funzioni printf e scanf. Lettura e scrittura di stringhe di caratteri per mezzo del carattere di conversione %s.
  • Input/Output standard e su file nel linguaggio C. Flussi di comunicazione (stream) e file. La struttura dati FILE. Operazioni sui file della memoria secondaria: le funzioni fopen, fclose, feof. I/O formattato: fprintf, fscanf.
  • Algoritmi di ricerca e ordinamento: ricerca sequenziale e binaria; ordinamento per selezione (selection sort) e "a bolle" (bubble sort).

Testi di riferimento

  • Dino Mandrioli, Stefano Ceri, Licia Sbattella, Paolo Cremonesi, Gianpaolo Cugola, "Informatica: arte e mestiere", 3a ed. (2008), McGraw-Hill.
  • Donatella Sciuto, Giacomo Buonanno, Luca Mari, "Introduzione ai sistemi informatici", 3a ed. (2005) oppure 4a ed. (2008), McGraw-Hill.
  • Kenneth A. Lambert, "Programmazione in Python", 1a ed. (2012, Apogeo; 2013 Maggioli).
  • Brian W. Kernighan, Dennis M. Ritchie, "Il linguaggio C: principi di programmazione e manuale di riferimento", 2a ed., Pearson Prentice Hall, 2004.

I testi di Mandrioli et al. e di Sciuto et al. sono equivalenti. Si suggerisce di consultarli entrambi per una migliore comprensione dei vari argomenti.

Per il linguaggio Python si consiglia il testo di K.A. Lambert. I capitoli a cui fare riferimento sono indicati sopra. Nel sito Web dell'editore sono disponibili i programmi usati negli esempi dei vari capitoli.

Per il linguaggio C si consiglia il testo di Mandrioli et al.
Chi volesse approfondire la conoscenza del linguaggio C potrÓ usare il testo di Kernighan e Ritchie, che Ŕ una traduzione in italiano di un classico manuale di riferimento del linguaggio C (non Ŕ un testo introduttivo sulla programmazione, come il titolo italiano potrebbe far pensare).

Tutti i testi consigliati sono disponibili in pi¨ copie presso la Biblioteca della FacoltÓ di Ingegneria e Architettura.

Inizio pagina