FONDAMENTI DI INFORMATICA A - E

Anno accademico 2022/2023 - Docente: GAETANO PATTI

Risultati di apprendimento attesi

Conoscenza e comprensione
Al completamento del corso, lo studente avrà acquisito: Conoscenze sulla rappresentazione dell’informazione nei calcolatori e sull’architettura dell’elaboratore; Comprensione del funzionamento di un elaboratore; Conoscenze sul software di base e sul sistema operativo; Comprensione degli algoritmi; Conoscenze sui linguaggi di programmazione e su compilatori e interpreti; Conoscenze sulle reti di calcolatori; Conoscenze sulla programmazione strutturata e sulla programmazione in linguaggio C.

Capacità di applicare conoscenza e comprensione
Al termine del corso, lo studente sarà in grado di sviluppare programmi in linguaggio C per la risoluzione di problemi di calcolo in ambito ingegneristico o per la gestione di strutture dati complesse (magazzini, archivi, etc.). Saprà inoltre applicare le conoscenze acquisite alla scelta sia dei componenti HW e SW sia degli strumenti di sviluppo adeguati al problema da risolvere.

Autonomia di giudizio.
Al termine del corso, nello sviluppo di programmi lo studente sarà in grado di effettuare autonomamente le opportune scelte progettuali sulla base delle specifiche richieste. Tale capacità è affinata attraverso le esercitazioni svolte durante il corso e lo svolgimento di opportuni quesiti di programmazione in sede d'esame.

Abilità comunicative.
Al termine del corso, lo studente avrà acquisito padronanza della terminologia tecnica dell'informatica. Sarà in grado di discutere della struttura HW e SW degli elaboratori, delle reti e della programmazione strutturata sia con un pubblico specialista sia con un pubblico non specialista, illustrando in modo chiaro e inequivocabile le varie scelte progettuali effettuate per la risoluzione dei problemi.

Capacità di apprendimento.
Al termine del corso, lo studente sarà in grado di ampliare autonomamente le proprie conoscenze di informatica attraverso l’approfondimento dei testi di riferimento e la lettura di articoli su riviste specializzate. Potrà inoltre affinare le proprie skill di programmazione, anche in linguaggi diversi dal C, tramite la consultazione di tutorial, guide e manuali.

Modalità di svolgimento dell'insegnamento

Il corso si basa su lezioni frontali, che comprendono anche lo svolgimento di esercizi al calcolatore da parte dei docenti. Il corso prevede anche esercitazioni pratiche svolte dagli studenti. Tali esercitazioni vengono svolte anche nelle aule multimediali dell'Ateneo. Le modalità di svolgimento dell'insegnamento descritte permettono il raggiungimento degli obiettivi formativi pressati, che includono l’acquisizione di conoscenze e la capacità di applicare la conoscenza.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

I docenti sono disponibili anche a incontri di ricevimento in modalità telematica, previo appuntamento.

Prerequisiti richiesti

Notazione esponenziale o scientifica. Arrotondamento dei valori numerici. Numeri reali. Operazioni con numeri reali. Potenza ad esponente razionale e reale. Logaritmo di un numero reale positivo. Concetto di funzione. Vettori e Matrici: Operazioni con vettori e matrici.

Frequenza lezioni

La frequenza non è obbligatoria, ma fortemente consigliata.

Contenuti del corso

Gli asterischi (*) indicano le competenze minime.

Rappresentazione dell'informazione: Sistemi di numerazione e algoritmi di conversione. Aritmetica intera e in virgola mobile. (*)

Struttura di un elaboratore: La struttura di un elaboratore: memoria centrale, unità centrale, funzionamento elementare dell'elaboratore. (*)

Sistema Operativo: Traduzione ed esecuzione di programmi. Ambiente di Programmazione. Compilatori vs. interpreti. Sistema Operativo. (*)

Algoritmi e Programmi: Elaborazione automatica dell'informazione. Algoritmi e programmi. Linguaggi di programmazione. Il progetto di un programma. (*)

Reti di Calcolatori e Internet: Reti di calcolatori. Reti locali. Reti geografiche. Internet e le più diffuse applicazioni di rete. (*)

Il linguaggio di programmazione "C": sintassi e semantica Controllo: Assegnazione. Strutture di controllo. Tipi di dato in C: tipi semplici (int, char, float, double) e strutturati (array e stringhe, strutture). Il tipo puntatore. Le funzioni. Campo d'azione degli identificatori. Dichiarazioni e campo d'azione degli identificatori. Variabili locali, globali e statiche. Tecniche di legame dei parametri. La ricorsione. I file: file di testo e file binari. Primitive di accesso ai file. (*)

Algoritmi di ordinamento: Algoritmi di ordinamento e ricerca. Ricerca sequenziale e binaria. (*)

Allocazione dinamica della memoria.(*)

Strutture dati: Liste. (*)

Testi di riferimento

  • A. Bellini, A. Guidi, "Linguaggio C - guida alla programmazione", dalla 4a Ed in poi (quindi va bene sia la 4a, sia la 5a sia
    la 6a), McGraw-Hill
  • Dispense dei docenti

Il materiale didattico sarà fornito su Studium (https://studium.unict.it) nell'area dedicata al corso.

Programmazione del corso

 ArgomentiRiferimenti testi
1Rappresentazione dell'Informazione. Sistema numerico binario. Sistema esadecimale, sistema ottale. Conversione tra sistemi numerici. Rappresentazione dei numeri interi, reali. Codice ASCII.- Dispense del docente.- Libro di testo: Appendice D
2Architettura e funzionamento elementare del calcolatore. Esecuzione delle istruzioni. Interrupt. Algebra di Boole- Dispense del docente.- Libro di testo: Capitolo 1
3Sistema operativo. Politiche di gestione della CPU, della memoria centrale e di massa.- Dispense del docente.- Libro di testo: Capitolo 2
4Algoritmi e programmi. Linguaggi di Programmazione.• Traduzione ed esecuzione dei programmi • Linker • Notazione grafica per la rappresentazione degli algoritmi: Diagrammi di flusso- Dispense del docente.- Libro di testo: Capitoli 3 e 4
5Linguaggio C: Tipi di dato. Identificatori. Variabili. Classi di memorizzazione. Costanti. Operatori. Strutture di Controllo.Istruzioni di selezione, iterazione, salto,espressione, blocco. Preprocessore, include, define- Libro di testo: Capitoli 5,6,7,8,9,23
6Array•Puntatori •Puntatori ad array •Stringhe •Strutture •Array di strutture • Lettura e scrittura di caratteri e stringhe •I/O formattato •File di testo • Allocazione dinamica della memoria •Puntatori a strutture - Libro di testo: Capitoli 10,13,14,16
7Funzioni • Istruzione return • Passaggio di Parametri • Ricorsione • Variabili locali, regole di visibilità e tempo di vita- Libro di testo: Capitoli 11,15,17,19,20
8Algoritmi di ricerca e di ordinamento - Libro di testo: Capitolo 12
9Strutture dati lineari: Liste- Libro di testo:  Capitolo 21
10Esercizi sugli argomenti svolti Libro di testo casi di studio III e IV - Dispense del docente.

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

La prova d'esame è composta da una prova scritta (obbligatoria) e una prova orale (opzionale). La prova scritta, della durata di due ore, consiste in un elaborato al calcolatore, del valore di 24/30 punti, e da una sezione teorica, composta da una o più domande a risposta aperta, del valore complessivo di 6/30 punti. L'elaborato al calcolatore consiste di vari quesiti, il cui punteggio è indicato esplicitamente nel testo del compito (es. 3 funzioni da 6 punti ciascuna, etc.). La prova scritta si considera superata se si ottiene una valutazione complessiva di almeno 18/30. Lo studente che lo desideri può integrare la prova scritta con la prova orale da svolgere in un qualunque appello regolare (entro la fine dell’a.a.), per il superamento dell’esame.

Prenotazione obbligatoria tramite portale di Ateneo.

La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.

Sono previste due prove in itinere durante il corso. La prima prova consiste in domande sulla parte teorica e ha durata di un'ora. La seconda prova, al calcolatore, consiste di vari quesiti di programmazione e ha durata di due ore. Il punteggio delle domande e dei vari quesiti è indicato esplicitamente nel testo delle due prove. Lo studente che abbia superato pienamente entrambe le prove in itinere, ossia ottenendo una valutazione complessiva di almeno 18/30, può accettare il voto proposto (media delle due prove) o, se lo desidera, può integrare le due prove in itinere con una prova orale da svolgere negli appelli regolari (entro la fine dell’a.a.), al fine di poter ottenere una migliore valutazione.

Esempi di domande e/o esercizi frequenti

Verrà accertata la capacità di sviluppare programmi in linguaggio C per la gestione di strutture dati complesse tramite quesiti inerenti:

  • Implementazione di menu' a scelta multipla.
  • Uso di funzioni e passaggio di parametri.
  • Implementazione di array di struct.
  • Implementazione di liste.
  • Uso della ricorsione tramite esempi di funzioni ricorsive.

Le domande della sezione teorica potranno essere simili a, ma non limitate a, quelle sottoelencate:

  • Qual è la differenza tra dato e informazione?
  • Quali sono gli elementi fondamentali dell'architettura dei sistemi di elaborazione?
  • Come si effettuano le conversioni di base tra i vari sistemi di numerazione (decimale, binario, esadecimale, ottale)
  • Quali sono i componenti principali della CPU?
  • Cosa sono gli interrupt?
  • Cos'e' un registro?
  • A cosa serve il Program Counter?
  • Cosa si intende per algoritmo.
  • Che differenza c'e' tra algoritmo e programma?
  • Qual è la differenza tra Internet e il Web?
  • Cos'è un protocollo di rete?
  • Quali sono le principali differenze tra memoria centrale e memoria di massa?
  • Descrivere la gerarchia di memoria.
  • Cos'è un Sistema Operativo? Qual è il suo ruolo in un sistema di elaborazione?
  • Cosa significa multiprogrammazione?
  • Cos'è lo scheduler e qual è il suo compito?
  • Cosa si intende per file system?
  • Definire il concetto di processo.
  • Qual è la differenza tra processo e programma?
  • Descrivere il diagramma a stati di un processo.
  • Cos'e' il linguaggio Assembler?
  • Differenza tra compilatori e interpreti.
  • Cos'è e a che serve un diagramma di flusso?
ENGLISH VERSION