- Laboratorio di Informatica I
- Introduzione
Syllabus del corso
Obiettivi
Acquisire i fondamenti concettuali della programmazione dei calcolatori e le nozioni di base sulla struttura tipica di un calcolatore digitale e sui sistemi operativi.
Acquisire la capacità di progettare e realizzare strutture di dati e programmi nel linguaggio C per la risoluzione di problemi in campo scientifico e in ambito più generale.
Contenuti sintetici
Le nozioni di algoritmo e di costo computazionale di un algoritmo.
Principi di programmazione imperativa: strutture dei dati e strutture di controllo del flusso.
Nozioni di base su programmazione in C, struttura funzionale dei calcolatori e sistemi operativi.
Rappresentazione dei dati, errori e approssimazione nei calcoli numerici.
Strategie di disegno degli algoritmi.
Programma esteso
Le nozioni di algoritmo e di costo computazionale di un algoritmo.
Struttura funzionale di un calcolatore. Natura e funzioni dei sistemi operativi.
Rappresentazione dei dati. Numerazione binaria. Rappresentazione dei numeri interi e dei numeri reali. Rappresentazione a virgola mobile. Approssimazioni e errori.
Principi di programmazione imperativa. Variabili e tipi, istruzioni primitive, strutture di controllo (sequenza, scelta, iterazione). Funzioni e passaggio di parametri. Esemplificazione in C.
Tipi strutturati: vettori, matrici, record. Tipi di dati dinamici: liste concatenate, alberi, tabelle associative. Esemplificazione in C.
Generazione di sequenze pseudocasuali e applicazioni a problemi di simulazione.
Strategie di progettazione delle strutture dei dati e degli algoritmi. Esempi di algoritmi significativi.
Cenni ai paradigmi di programmazione (imperativo, funzionale, logico, a oggetti), ai linguaggi interpretati e ai fondamenti logico-matematici dell'linformatica.
Prerequisiti
Nozioni di base di logica proposizionale (connettivi logici: congiunzione, disgiunzione, negazione). Nozioni di base di matematica (funzioni e relazioni, nozioni semplici di combinatoria).
Modalità didattica
Didattica erogativa: lezioni frontali (2 CFU, per un totale di 16 ore)
Didattica interattiva: esercitazioni in laboratorio (2 CFU, per un totale di 24 ore)
Il corso è tenuto in italiano.
Materiale didattico
Dispense a cura dei docenti, esercizi svolti e commentati, disponibili sul sito del corso.
Testi di consultazione:
1. JG Brookshear, SG Kochan, Fondamenti di informatica e programmazione in C, Pearson, 2014.
2. BW Kernighan, DM Ritchie, Il linguaggio C, seconda edizione, Pearson, 2004.
Periodo di erogazione dell'insegnamento
Secondo semestre.
Modalità di verifica del profitto e valutazione
L'esame prevede una prova scritta e una prova orale obbligatorie.
Prova scritta: la prova consiste in un esercizio di programmazione in C.
Prova orale: discussione del compito scritto e domande sui contenuti dell'insegnamento.
La valutazione è complessiva.
Non sono previste prove in itinere.
Orario di ricevimento
Luca Bernardinello: per appuntamento.
Federico Nati: per appuntamento
Aims
Acquire the conceptual basis of computer programming, and fundamental notions about the typical structure of digital computers, and about operating systems.
Acquire the ability to design and implement, in the C language, data structures and algorithms for solving problems in scientific fields, and in a more general setting.
Contents
The notions of algorithm, and of computational cost of an algorithm.
Basics of imperative programming: data structures and flow control.
Basic notions on C programming, the functional structure of computers and on operating systems.
The representation of data; errors and approximations in numerical computations.
Strategies for algorithm design.
Detailed program
The notions of algorithm, and of computational cost of an algorithm.
The functional structure of digital computers. Nature and functions of operating systems.
Representation of data. The binary notation. Representation of integers and of real numbers. Floating-point representation. Approximation and errors.
Principles of imperative programming. Variables and types, primitive instructions, control structures (sequence, choice, iteration). Functions and parameter passing. Examples in C.Structured types: arrays, matrices*,* records. Dynamic data types: linked lists, trees, hash tables. Examples in C.
Pseudorandom sequences and application to simulation problems.
Strategies for the design of data structures and algorithms. Examples of relevant algorithms.
Basic notions on programming paradigms (imperative, functional, logic, object-oriented), interpreted languages, and the logical and mathematical foundations of computer science.
Prerequisites
Basic notions of propositional logic. Basic notions of mathematics (functions and relations, simple combinatorics).
Teaching form
Instructional teaching: Lectures (2 CFU, 16h)
Interactive teaching: Laboratory activity (2 CFU, 24h).
Lectures are given in Italian.
Textbook and teaching resource
Notes prepared by the teacher, exercises with commented solutions, published on the course site.
1. JG Brookshear, SG Kochan, Fondamenti di informatica e programmazione in C, Pearson, 2014.
2. BW Kernighan, DM Ritchie, Il linguaggio C, seconda edizione, Pearson, 2004.
Semester
Second semester.
Assessment method
The exam includes a written part and an oral part, both mandatory.
Written exam: the exam consists in an exercise in programming in C.
Oral exam: discussion about the written exam, and questions on the content of the course.
The evaluation is comprehensive.
There are no in-progress tests.
Office hours
Luca Bernardinello: on appointment.
Federico Nati: on appointment.
Scheda del corso
Staff
-
Luca Bernardinello
-
Federico D'Aniello
-
Mitsuaki Hirasawa
-
Federico Nati
-
Giovanni Pelliccioli
-
Marco Petruzzo
-
Syed Adeel Ali Shah
-
Mattia Tambaro