You are here: Home » Study Plan » Subject

Sciences

Subject: PROGRAMMING 2 (A.A. 2022/2023)

degree course in COMPUTER SCIENCE

Course year 1
CFU 9
Teaching units Unit Programmazione 2
Information Technology (lesson)
  • TAF: Compulsory subjects, characteristic of the class SSD: ING-INF/05 CFU: 9
Teachers: Federica MANDREOLI, Luca BEDOGNI, Paolo BURGIO
Mandatory prerequisites Programmazione 1
Exam type oral
Evaluation final vote
Teaching language Italiano

Contents for group 2

Contents download pdf download

Teachers

Luca BEDOGNI

Overview

The main target of the course is to further develop knowledge and abilities that the students acquired during the previous course of "Programmazione I".
In particular, the course will improve the skills in analyzing and developing data structures advanced algorithms, on one side, and in developing and testing real applications, on the other side.

At the end of the course, the student will be able to
- design applications using the modular approach
- master C++ dynamic allocation
- code programs in C++ using the imperative mode constructs of the language
- implement abstract data types for the main dynamic data structures, i.e. lists, trees, and graphs
- encode C++ programs on multiple files and compile them by writing and executing makefiles
- implement algorithms that exploit the main dynamic data structures
- debugging applications written in C++ through the use of IDEs (Integrated Development Environment)
- manage software versions for distributed software development
- use the GIT version control system

Admission requirements

The knowledge acquired during the course of Programmazione I.

Course contents

The course is offered in the second semester of the first year, for a total of 72 hours of face-to-face teaching (9 CFU).
The number of hours per topic is purely indicative. It may be modified during the course of the course in light of feedback and student participation.


Course content:

Introduction to the course (3 hours)

Lists (12 hrs.): Introduction to pointers, list data type and simple lists, double lists, case study: Inverted Index

Development of recursive functions and procedures in C++ (3 hours)

Trees (10 hours): Tree representation, tree traversals,
Binary search trees

Graphs (8 hours): graph representation, graph traversals, implementation of Dijkstra algorithm and Prim algorithm

Advanced programming in C++ (6 hours): function pointers,
bitwise operators

Development and testing (25 hrs): Debugging, modularization and project development on multiple files, compilation and Makefile, project documentation and Doxygen, version control and GIT

Teaching methods

Teaching is usually (*) based on frontal lectures. The course includes theoretical lectures on the topics described in the "Course contents" section and exercises dedicated to software development also through real case studies. Questions and interventions from students are welcome and encouraged. Attendance is not compulsory but strongly recommended. The course is delivered in Italian. All the technical and organizational information on the course, as well as the teaching materials, will be uploaded on Moodle platform. Students are invited to register to and visit Moodle course page regularly. (*) Due to the COVID19 health situation, the teaching methods may be subject to change.

Assessment methods

During the year at least 5 written and 4 practical exams are scheduled. The maximum score assigned to each of the two exams is 32. To participate in the laboratory exam it is necessary to pass the written exam with a mark of at least 16/32. The final grade is determined as the weighted average of the two results: 35% mark in the written test, 65% in the lab. The written exam aims to verify the student's ability to write functions and encode algorithms on the data structures seen in class, to encode recursive functions and to master the main aspects of the use of dynamic memory and modular programming and compilation. The written exam can also be taken by passing two intermediate tests. The first test takes place about halfway through the course and the second test at the end of the course in conjunction with the first two written exams. The sum of the maximum marks for the two tests is 32. The laboratory exam aims to verify the student's ability to write applications for real case studies by writing software modules that involve the data structures seen in class and developing makefiles. Exams could be carried out in the presence or remotely depending on the evolution of the COVID19 situation. More information on the exam modalities is available in the FAQ document which can be downloaded from the Moodle website of the course where past exams are also available.

Learning outcomes

Knowledge and understanding: Through lectures, students will have a sound knowledge and understanding of implementation solutions for the data structures lists, trees and graphs, and related algorithms. In addition, the student will be able to design and understand makefiles for building C ++ projects and software documentation.

Applying knowledge and understanding: Through practical computer exercises and laboratory exercises, the student will be able to apply the knowledge acquired during the course.

Making judgments: Through laboratory activities, the student will be able to evaluate, expose and discuss the design choices made for the implementation of C ++ applications that cover advanced aspects of programming, data structures and algorithms seen in class.

Learning skills: The described activities will enable students to acquire the methodological tools to continue their studies and to be able to perform their own update; this is especially crucial in an area such as computer information management, where key technologies are ever evolving.

Readings

- P. Foggia, M. Vento. «Algoritmi e strutture dati - Astrazione, progetto e realizzazione», McGraw-Hill, 2011

- S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani. «Algorithms», McGraw-Hill, 2006

- B. Eckel, "Thinking in C++", 2nd Edition, Volume 1 http://www.mindviewinc.com/

- Slide e materiale a cura del docente disponibile su Moodle

Contents for group 1

Contents download pdf download

Teachers

Federica MANDREOLI
Paolo BURGIO

Overview

The main target of the course is to further develop knowledge and abilities that the students acquired during the previous course of "Programmazione I".
In particular, the course will improve the skills in analyzing and developing data structures advanced algorithms, on one side, and in developing and testing real applications, on the other side.

At the end of the course, the student will be able to
- design applications using the modular approach
- master C++ dynamic allocation
- code programs in C++ using the imperative mode constructs of the language
- implement abstract data types for the main dynamic data structures, i.e. lists, trees, and graphs
- encode C++ programs on multiple files and compile them by writing and executing makefiles
- implement algorithms that exploit the main dynamic data structures
- debugging applications written in C++ through the use of IDEs (Integrated Development Environment)
- manage software versions for distributed software development
- use the GIT version control system

Admission requirements

The knowledge acquired during the course of Programmazione I.

Course contents

The course is offered in the second semester of the first year, for a total of 72 hours of face-to-face teaching (9 CFU).
The number of hours per topic is purely indicative. It may be modified during the course of the course in light of feedback and student participation.


Course content:

Introduction to the course (3 hours)

Lists (12 hrs.): Introduction to pointers, list data type and simple lists, double lists, case study: Inverted Index

Development of recursive functions and procedures in C++ (3 hours)

Trees (10 hours): Tree representation, tree traversals,
Binary search trees

Graphs (8 hours): graph representation, graph traversals, implementation of Dijkstra algorithm and Prim algorithm

Advanced programming in C++ (6 hours): function pointers,
bitwise operators

Development and testing (25 hrs): Debugging, modularization and project development on multiple files, compilation and Makefile, project documentation and Doxygen, version control and GIT

Teaching methods

Teaching is usually (*) based on frontal lectures. The course includes theoretical lectures on the topics described in the "Course contents" section and exercises dedicated to software development also through real case studies. Questions and interventions from students are welcome and encouraged. Attendance is not compulsory but strongly recommended. The course is delivered in Italian. All the technical and organizational information on the course, as well as the teaching materials, will be uploaded on Moodle platform. Students are invited to register to and visit Dolly course page regularly. (*) Due to the COVID19 health situation, the teaching methods may be subject to change.

Assessment methods

During the year at least 5 written and 4 practical exams are scheduled. The maximum score assigned to each of the two exams is 32. To participate in the laboratory exam it is necessary to pass the written exam with a mark of at least 16/32. The final grade is determined as the weighted average of the two results: 35% mark in the written test, 65% in the lab. The written exam aims to verify the student's ability to write functions and encode algorithms on the data structures seen in class, to encode recursive functions and to master the main aspects of the use of dynamic memory and modular programming and compilation. The written exam can also be taken by passing two intermediate tests. The first test takes place about halfway through the course and the second test at the end of the course in conjunction with the first two written exams. The sum of the maximum marks for the two tests is 32. The laboratory exam aims to verify the student's ability to write applications for real case studies by writing software modules that involve the data structures seen in class and developing makefiles. Exams could be carried out in the presence or remotely depending on the evolution of the COVID19 situation. More information on the exam modalities is available in the FAQ document which can be downloaded from the Moodle website of the course where past exams are also available.

Learning outcomes

Knowledge and understanding: Through lectures, students will have a sound knowledge and understanding of implementation solutions for the data structures lists, trees and graphs, and related algorithms. In addition, the student will be able to design and understand makefiles for building C ++ projects and software documentation.

Applying knowledge and understanding: Through practical computer exercises and laboratory exercises, the student will be able to apply the knowledge acquired during the course.

Making judgments: Through laboratory activities, the student will be able to evaluate, expose and discuss the design choices made for the implementation of C ++ applications that cover advanced aspects of programming, data structures and algorithms seen in class.

Learning skills: The described activities will enable students to acquire the methodological tools to continue their studies and to be able to perform their own update; this is especially crucial in an area such as computer information management, where key technologies are ever evolving.

Readings

- P. Foggia, M. Vento. «Algoritmi e strutture dati - Astrazione, progetto e realizzazione», McGraw-Hill, 2011

- S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani. «Algorithms», McGraw-Hill, 2006

- B. Eckel, "Thinking in C++", 2nd Edition, Volume 1 http://www.mindviewinc.com/


- Slide e materiale a cura del docente disponibile su Moodle