Do you need any help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.



Course regulation AY 2020-21

angelo.spognardi (4120 points)
31 49 79
asked Sep 22, 2020 in Course info by angelo.spognardi (4,120 points)
closed Sep 29, 2020 by andrea.sterbini

Course regulation: Programming and Programming Lab

The two courses have different examinations, though they share the same topics.

  • To access both exams, you are required to hand in four (4) mandatory homework assignments (see below).
  • The Programming exam is an oral one, during which you prove your theoretical skills.
  • The Programming Lab exam is an in-lab one, during which you prove your practical skills by writing four (4) programs, each solving a given problem on a topic of the courses.
  • For each of the two exams, you will receive a separate grade taking into consideration the cumulative grade of the homework assignments.


Eight (8) homework assignments will be released during the course, plus four (4) recovery ones. Homework assignments are intended to be carried out individually at home. Four (4) of them are optional and four (4) are mandatory to be admitted to the exams, both of Programming and Programming Lab.

Each homework assignment consists of one exercise to be carried out. Usually, these exercises need a preliminary analysis and oblige you to think well about the problem, how to represent the intermediate data and how to solve the problem efficiently. The difficulty is calibrated so as to let you devise the possible solutions taking efficiency and effectiveness into account.

The four optional homework assignments are used to get acquainted with the homework mechanism and with the topics carried out during the course. The optional homework assignments do not yield points (even if they have their own ranking) and are not subject to a deadline.

The four mandatory homework assignments are used to verify that you are able to deal with different exam topics. Each of those homework assignments has a deadline (usually two weeks) and is explained in the classroom right after the deadline. Those homework assignments can also receive some extra points (as explained next).

You can recover missed (or improve the score of) mandatory homework assignments by performing the corresponding recovery homework assignments, usually of the same difficulty of the former. Recovery homework assignments are subject to no deadline, and no explanation nor bonus will be given. The best score will be considered between the two achieved (mandatory and recovery assignments), in case. 

Homework assignments are automatically tested on a sample data set via a test program that is delivered to you together with a description of the assignment. In addition to the provided tests, a number of additional hidden tests will be run to further check the provided solution and obtain the final score.

Every exercise is given a score in the range of 0–30 points, proportionally to the number of tests passed. On top of that, a bonus can be added to reward

  1. the quality of the implementation (see below)
  2. the participation in the training peer-assessment (peer evaluation and suggestions for improvement) and in the Q2A forum (see below).

Honour code 

Those who deliver an exercise that is too similar to another one or try some tricks will have their homework cancelled. A cancelled homework assignment must be recovered. Beware that if the recovery homework is also cancelled, its contribution to the overall grade will be 0 (you can not recover a recovery homework).


Mandatory homework solutions that pass all the tests (i.e. yield 30 points), can have up to 4 additional points if:

  1. they are in the top 1/2 of the ranking for highest efficiency (shortest total test time): +2 points
  2. they are in the top 1/2 of the ranking for least cyclomatic complexity of the codebase: +2 points.

Peer assessment

In order to encourage the exchange of ideas (NOT the code though) and the understanding of exercises, there will be a peer assessment activity during which you can voluntarily suggest one another how to improve your homework solutions.

Each homework assignment will have two deadline dates, then: the first is mandatory for everyone, while the second one (4 days later) is for the voluntary peer assessment. By the first deadline, all the students have to deliver the code of their solution and the description in English of the implemented algorithm. The description must be anonymous. Right after the first deadline, students who want to participate in the peer assessment have 4 more days to revise their solution, providing and getting advice to and from colleagues. In particular: during the first 2 days, the students have to evaluate the algorithms of 3 randomly chosen anonymous peers and give effective suggestions to improve the algorithm. At the same time, they will receive advice from 3 random anonymous peers. In the last 2 days, the participating students are required to give feedback about the received pieces of advice and can deliver a revised (possibly improved) solution of their algorithm, leveraging received ideas and feedback.

Taking part in the peer assessment also gives access to a bonus in the grade. At the end of the course, the clarity of algorithm descriptions, the usefulness and the quality of provided advice collected with the feedback to the anonymous peers will determine a ranking: those who are in the top ⅓ of the ranking will receive a bonus up to +3 points that will be added to the final exam grade.

Note: the evaluations that you give/receive do not directly affect the score (apart from the bonus that you can get for helping others better) and will be used by us to investigate the social mechanisms underlying the peer-assessment.

Dates and topics of homework assignments

The recovery homework assignments will be about the same topics as those of the corresponding mandatory ones. They will be released upon the expiry of the PA deadlines.

      HW        Release date   First deadline    PA deadline                     Topic                    
 ------------- -------------- ----------------- -------------- ------------------------------------------
  1 optional    --             --                --             strings, sequences, sets and lists        
  2 mandatory   22/10/2020     1/11/2020         5/11/2020      as in (1)        
  3 optional    --             --                --             dictionaries and file access              
  4 mandatory   5/11/2020      15/11/2020        19/11/2020     as in (3)              
  5 optional    --             --                --             matrices, images and classes              
  6 mandatory   19/11/2020     29/11/2020        3/12/2020      as in (5)              
  7 optional    --             --                --             directory or tree or game tree recursion  
  8 mandatory   3/12/2020      13/12/2020        17/12/2020     as in (7) 


In order to be admitted to the examination for both Programming and Programming Lab, a grade of 16 or more in each of the 4 mandatory homework assignments is required. For both exams, the final grade to be recorded is the weighted average of the collected scores, computed as follows:

  • ⅓ for the average grade of the mandatory homework assignments, including bonus points for peer assessment and activity in the Q2A forum;
  • ⅔ for the examination (with a minimum grade of 18) – we remind that the final exam is oral for Programming and in-lab for Programming Lab.

For example, let us assume a student gets:

  • 20, 32, 20, 24 (giving an average 24/30) to the mandatory homework assignments, plus an overall bonus of 1.5;
  • 29 to the examination. 

As a result, the final grade will be 28, namely (24 + 1.5) × 1/3 + 29 × 2/3 = 27.83

closed with note: small edit