15305 - Foundations of Informatics A

Course Unit Page

Academic Year 2018/2019

Learning outcomes

By the end of the course, students will have basic knowledge about computation, structured programming, and data structures and algorithms. In particular, he/she will be able to: design basic algorithms to manipulate data structures, implement such algorithms and simple applications in a modern programming language.      

Course contents

Computer architectures: the Von Neumann architecture; structure of a CPU; introduction to boolean circuits.

Representation of information: boolean logic; representation of numbers (two's complement notation; floating point representation; representation of non-numerical information: discretization and quantization; lossy and lossless compression.

Introduction to algorithms and data structures: the concept of algorithm with examples; asymptotic analysis; basic data structures.

Theoretical computer science: Turing machines; computable and non-computable functions. Invariants and assertions (Floyd-Hoare-Dijkstra logic); some examples of invariants for simple programs.

The C programming language: structure of C programs: types, operators, expressions, functions, control structures and loops; structured programming; iteration and recursion; arrays and pointers; array algorithms (inversion, sorting, linear search, binary search); composite data types; lists and relevant algorithms (creation, join, print, search).



  • Paul J. Deitel, Harvey M. Deitel, "Il linguaggio C: fondamenti e tecniche di programmazione", 8/ed. Pearson, ISBN 978-8891901651

Additional material will be provided by the instructor.

For further study of general topics:

  • J. Glenn Brookshear, “Informatica—una panoramica generale”, 11/ed., Pearson 2012, ISBN 978-8871927671

For further study of the C programming language:

  • Brian W. Kernighan and Dennis M. Ritchie, "The C Programming Language, Second Edition" Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).

Teaching methods

Approximately 7 hours of classes each week, typically 4/5 in the lecture room and 2/3 in the lab. The fundamental topics of computer science, and the various programming costructs are introduced during the lectures. Then, the same concepts are applied in the lab through a set of small programming assignments under the supervision of the instructors. The solution of every programming exercise is provided after the lab sessions, in order to support self-study. Some of the lab sessions will be used to simulate the final exam. 

Assessment methods

The final exam will be held in the lab with the same tools used during the course. The exam consists of some programming exercises in the C language, and a set of quizzes/open answer questions on the whole syllabus of the course. There are normally three programming exercises, worth at most 24 points in total, and about 24 questions worth at most 8 points in total. Each correct answer to a question is worth +1/3 point; each incorrect answer to a question is worth -1/3 point; each missing answer is worth 0 points. The final grade is obtained as the sum of the points earned in the programming exercises and in the quizzes/questions. The exam is passed with a final grade greater or equal to 18 points.

Teaching tools

Lectures: slides and practical programming demos will often be used, integrated with exercises and Q&A sessions at the blackboard. All teaching material will be made available to the students.

Lab: all programming activities will use the CodeBlocks IDE, a free programming environment for Windows, Linux and MacOSX.

Links to further information


Office hours

See the website of Moreno Marzolla

See the website of Catia Prandi