Computer programming

A.Y. 2020/2021
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

Single session

Lesson period
First four month period
Teaching methods:
The course will be held mainly by online synchronous online lectures using Teams. All lessons will be recorded. The recordings will be available on the relative platform. The laboratory activities will be both and simultaneously available in face-to-face for a limited number of students, and online for the others.
The methods and criteria for attending face-to-face laboratory lessons will be published in time. Booking via app is required to attend the laboratory lesson in presence.

Reference materials:
No variation.

Learning verification procedures and assessment criteria:
The exam is divided into three parts as usual (theoretical, practical, project) but is oral and takes place in Teams (videoconferencing), according to the indications provided by the University. The details and calendars of the oral examinations are published and constantly updated.
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.
Teaching Resources
Slides, additional documents, and video-lectures available on the course web site.
Assessment methods and Criteria
The exam is divided into two parts.
A written exam for the theoretical part where competences in terms of computer programming concepts and algorithmic thinking are evaluated, and a project in C (that need to be agreed with the teacher) where the quality and complexity of the project are evaluated to assess the C programming skills.
The two parts of the exam can be done even in separated distinct exam sessions and in any order. The votes of the exam is expressed in thirtieths and results as the average of the scores of the written exam and the project. Both the parts are considered passed when a score of at least 18 is achieved.
Optionally, always after previous agreement with the teacher, it is possible to do an additional project in Java, where the competence on the object oriented programming will be evaluated (for a maximum increment of 2 points).
INF/01 - INFORMATICS - University credits: 12
Lessons: 96 hours
Professor: Anisetti Marco