Computer programming

A.Y. 2019/2020
Overall hours
Learning objectives
This is an introductory class on programming, its principles, and techniques. Its aim is to make the student, who might never have been exposed to programming, familiar with this discipline and to provide those insights and tools required to approach all further classes that assume some knowledge of programming.
Expected learning outcomes
At the end of the course the student will be able to devise and write solutions to average difficult problems using an imperative programming language. They will also be able to solve some simle problems using the object oriented paradigm.
Course syllabus and organization

Unique edition

Lesson period
First semester
Course syllabus
· Algorithms.
· Phases of programming.
· Modeling tools.
· Documentation.
· A brief history of programming.
· Programming languages
· Principles of structured programming.
· C Language: expressions and assignments, control structures, predefined types, arrays, matrices, and strings, structured types, pointers, and memory management, functions and parameter passing, main and parameters to main, standard library, file management.
· Jumps elimination: the Böhm-Jacopini Theorem, Ashcroft and Manna's transformation.
· Code correctness: elements of validation and verification.
· Modularity, abstraction and abstract data type, encapsulation classes and objects, inheritance and polymorphism
· Design pattern, Aspect oriented programming
· Java programming
· Advanced software development practices
Prerequisites for admission
This is an introductory class on programming, its principles, and techniques. The scope is to provide all the knowledge to model, solve and develop software solution to simple problems. Therefore, there are no specific pre-requisites to address the course.
Teaching methods
Lectures for the theoretical part and laboratory exercises mainly for practicing C and Java programming.
Slides and additional documents available on the course web site.
Assessement methods and criteria
The exam is divided into three different parts. A written exam for the theoretical part where competences in terms of computer programming concepts and algorithmic thinking are evaluated. A laboratory exam based on simple problems to be solved writing simple C programs. A project in Java (that need to be agreed with the teacher) where the OO competences in Java, the quality and complexity of the project are evaluated.
The vote of theoretical and laboratory parts of the exam is expressed in thirtieths. The vote of the project is expressed as an increment of a maximum 2 points on the average of the theoretical and laboratory parts.
The three parts of the exam can be done even in separated distinct exam sessions. The project can be presented just when a vote greater or equal than 17 has been obtained for both the theoretical and the laboratory exams (but with an average vote greater or equal to 18).
INF/01 - INFORMATICS - University credits: 12
: 48 hours
Lessons: 72 hours
Turno A
Professors: Anisetti Marco, Ferrari Stefano
Turno B
Professor: Tresoldi Emanuele
Educational website(s)
Tuesday, from 10 AM to 12 AM (please send email before coming)
OptLab, Room 3018, Dipartimento di Informatica, Via Celoria 18, Milano