
Course unit
PROGRAMMING
SC02121720, A.A. 2017/18
Information concerning the students who enrolled in A.Y. 2017/18
ECTS: details
Type 
ScientificDisciplinary Sector 
Credits allocated 
Basic courses 
INF/01 
Computer Science 
10.0 
Course unit organization
Period 
Annual 
Year 
1st Year 
Teaching method 
frontal 
Type of hours 
Credits 
Teaching hours 
Hours of Individual study 
Shifts 
Laboratory 
3.0 
24 
51.0 
No turn 
Lecture 
7.0 
56 
119.0 
No turn 
Examination board
Board 
From 
To 
Members of the board 
10 a.a 2018/2019 
01/10/2018 
28/02/2020 
FILE'
GILBERTO
(Presidente)
TOLOMEI
GABRIELE
(Membro Effettivo)
AIOLLI
FABIO
(Supplente)
BRESOLIN
DAVIDE
(Supplente)
CRAFA
SILVIA
(Supplente)
RANZATO
FRANCESCO
(Supplente)

9 a.a. 2017/2018  canale 1 
01/10/2017 
28/02/2019 
FILE'
GILBERTO
(Presidente)
AIOLLI
FABIO
(Membro Effettivo)
BRESOLIN
DAVIDE
(Membro Effettivo)
CRAFA
SILVIA
(Membro Effettivo)
RANZATO
FRANCESCO
(Membro Effettivo)
TOLOMEI
GABRIELE
(Membro Effettivo)

Prerequisites:

Some knowledge of computer architecture. 
Target skills and knowledge:

The ability to specify a problem through a pre and a postcondition that must be obeyed by the program that we wanto to build in ordere to solve the problem. The ability to write a program in C++ and show that it actually computes what is specified in its pre and postcondition. The ability to device also recursive solutions to problems and to show their correctness through an inductive proof. Some knowledge of the basic notions of imperative programming: simple commands, pointers, arrays, functions, passing parameters by value and by reference, userdefined types, exceptions. 
Examination methods:

The exam consists of a written proof with a theoretical and a programming part. In the programming part the students are asked to develop a iterative and a recursive program. For both programs some considerations about their correctness are requested. The exam takes place in the computer laboratory and students receive the assignment and turn in their solution via computer. An oral examination may be required in special cases. 
Assessment criteria:

The exam is constructed to challenge the ability of the student to think and to express his/her thoughts in a precise manner. In particular, one evaluates the ability of a student to specify the problem proposed and to build a program that solves the specified problem. One evaluates also the capacity to explain why the proposed solution solves the specified problem. Simplicity and clarity are important plus points. 
Course unit contents:

There are two interacting subjects of this course:
1) On the one hand notions about correctness à la Hoare are taught. The main concepts are that of pre and postcondition and of invariant of a cycle. Each program is accompanied by a pre and postcondition and its correctness with respect to them must be proven in a convincing way.
2) Simultaneously to part (1), students learn the basic notions of imperative programming with C++. In particular, predefined types, simple commands, pointers, array, pointer arithmetic, functions, recursive functions, dynamic memory, concatenated lists and binary trees. 
Planned learning activities and teaching methods:

We follow the approach that one learns to program well by programming a lot and receiving feedback about the solutions turned in. Therefore, each week, programming exercises are assigned that mus be solved. The exercises are made available via a web service based on the moodle application. This service is also used to turn in the solutionsand also to test them on some inputs. At each momnt of the course, each student can view his/her progress with respect to solving the exercises that have been assiged till then. Having turned in correct (wrt the tests) solutions to all exercises is required in order to be admitted to the exams. The exams take place in the computer laboratory and use the same web service that is used for the weekly exercises. The course consists of 80 hours of course work of which 24 are given in the laboratory. The course will be dividrd in 2 parts: the first one of 2 credits takes place during the first semester and the second one of 8 credits during the second semester.
The aim of the first part is twofold: on the one level students learn how to write and execute programs on a computer and on the other hand they are presented with the first notions of program correctness. 
Additional notes about suggested reading:

The course uses a moodle site in which students can find all useful documents for the course: the slides of the classes, past exams with and without solutions, and weekly exercises with the obtained score. All lessons are recorded and are accessible to students. 
Textbooks (and optional supplementary readings) 

Gilberto Filè, Programmazione consapevole. Padova: Progetto, 2014.


