CODE 52473 ACADEMIC YEAR 2025/2026 CREDITS 8 cfu anno 1 MATEMATICA 11897 (L-35 R) - GENOVA 8 cfu anno 1 STATISTICA MATEM. E TRATTAM. INFORMATICO DEI DATI 11900 (L-35 R) - GENOVA SCIENTIFIC DISCIPLINARY SECTOR INF/01 LANGUAGE Italian TEACHING LOCATION GENOVA SEMESTER 2° Semester OVERVIEW The course will provide the basic notions and tools of imperative programming, by introducing high-level languages. In the career of the students, knowing the basics of programming and a "general-purpose" programming language (as the one presented here) will enable them to easily learn the specialized languages of the mathematical and statistical domain, which will be used in later teaching. AIMS AND CONTENT LEARNING OUTCOMES We introduce to programming and programming languages, in particular to the imperative programming paradigm, using a reference language. We will provide basic knowledge and technical skills for designing simple algorithms to solve small problems, and for designing, writing and validating simple programs starting from informal specifications of the task to be performed. The acquired notions and abilities will also be useful for learning other programming languages in the future. AIMS AND LEARNING OUTCOMES The course will provide some necessary basic notions about computer architecture, data representation, operating system. It will introduce the notions of algorithm and program, high-level programming languages and execution modes. It will present the basic concepts and constructs of high-level imperative programming (variables, statements, flow-control instructions, functions), using a reference imperative language as a case study. It will provide the guide lines for the design of small-size programs solving a simple problem and for testing them. After attending the course, the student will: know the basic concepts about how programs are executed in a computer (data representation, high level languages and machine language, file system, etc.) know the basic features of a high-level imperative programming language. be able to use simple tools for developing computer programs (text editor, command-line compilation and execution) be able to develop simple algorithms and to write small programs, starting from informal specifications be able to understand, using and modifying programs written by other people PREREQUISITES There are no specific requirements. TEACHING METHODS The course takes place in the second semester. There will be 3 classroom hours and 4 laboratory hours per week. Classroom lessons and laboratories are strictly coordinated, so that the students can experience an immediate application the theory. Attending the laboratorie hours is not mandatory, but it is strongly recommended. The programming practice is necessary to acquire the capabilities in writing and testing code. The students will also receive instructions to install the necessary software packages on their PCs. The laboratory work will be carried on in small groups (of 2-3 students). Working students, or students that for other reasons do not attend the classes, will be allowed to work on their own. Every week some laboratory exercises will be given, which require writing small programs. The students will have the opportunity to deliver some of such exercises (not evaluated for the exam) and obtain useful feedback. In some weeks, recap exercises will be assigned. If delivered, such recap exercises will be evaluated and will gain marks for the final exam (see "Assessment methods"). Delivering the exercises is not mandatory; in case, they are delivered as a group work. SYLLABUS/CONTENT Basic notions about computers: data representation and arithmetic processors; hints about computer architecture and operating systems, limited to the basic notions for understanding how programs are executed. High-level programming languages: source code and compilers. Algorithm, pseudocode, program. Imperative programming languages: state (represented by variables and their values) and state changes (performed by executing the instructions). Basic features of imperative languages: types, expressions, variables, declarations; assignments, flow-control instructions (conditionals, cycles), functions and procedures; structured and modular programming. Programming in the small: design of simple algorithms and small sequential programs starting from the informal specification of the problem. Practical tools for writing, compiling, executing programs; basic guidelines for testing. RECOMMENDED READING/BIBLIOGRAPHY The teaching material will be made available on Aulaweb, including lesson slides, links to on-line resources about the used programming language (manuals and tutorials), laboratory exercises, corrections of the delivered exercises, etc. In general, the notes taken by the students during the lessons and the material on Aulaweb, together with the necessary laboratory work, are sufficient to prepare the exam. As additional material, the student can use the following books, as well as other books or on-line resources which provide an introduction to programming: Programming Principles and Practice using C++. B.Stroustrup. Addison-Wesley 2008, 2014, 2024. C++. Fondamenti di programmazione. H.M.Deitel, P.J.Deitel. Apogeo 2009 Che C serve? Per iniziare a programmare. Burattini, Chianese, Picariello, Moscato, Sansone. Maggioli editore 2016. TEACHERS AND EXAM BOARD PAOLA MAGILLO Ricevimento: On request. Appointment by email (paola.magillo@unige.it) MATTEO DELL'AMICO Ricevimento: By appointment (in person or online), taken via email (matteo.dellamico@unige.it). LESSONS LESSONS START The class will start according to the academic calendar (second semester). Class schedule The timetable for this course is available here: Portale EasyAcademy EXAMS EXAM DESCRIPTION The final exam consists of two mandatory parts: Quiz test about the contents of the course. The quiz will be delivered by using Aulaweb. It will contain both questions with predefined answers (multiple choice, matching, field-filling etc.) and questions that require writing small fragments of computer code by scratch. Laboratory test, that will require writing code in the reference programming language. The student will have to complete a provided program template, according to given requirements. Both tests will be graded with marks in the range from 0 to 30. In order to pass the exam, it is necessary to get at least 18 in each of the two tests. The overall grade will be the average of the two marks. By delivering the (non-mandatory) recap exercises during the semester, the student can get up to 2 marks, that will be added to the above average. The result, rounded to an integer number, will be the final grade of the exam. The two tests (quiz and laboratory test) can be passes in different exam sessions. The sufficient grade of a test will remain valid until the last exam session of the academic year (February of the next solar year). The same happens with the marks obtained from the recap exercises delivered during the semester. If the student repeats a test, the new grade replaces the previous one (even in case it is lower). Students who have valid certification of physical or learning disabilities (DSA) on file with the University can refer to this page https://corsi.unige.it/corsi/8766/studenti-disabilita-dsa to ask for accommodations regarding the exams. ASSESSMENT METHODS The quiz test will evaluate the knowledge of basic concepts presented during the course, of the basic constructs of imperative languages and their correct use, the ability of understanding given program code and of writing (short) correct code for a given purpose. Each correct answer will get a positive score (with different value depending on the difficulty of the question), in multiple choice questions some wrong answers may get a penalty (negative score), in other question types wrong answer will get zero score. For the questions which require writing computer code, Aulaweb allows trying the code to check whether it produces the expected results; the system gives a small penalty to any of such trials. The laboratory test will evaluate the ability to develop algorithms for solving simple problems, translate them into the programming language, and generate computer programs with the expected behavior. The test consists of completing a program template that will be provided, following the specified requirements. The evaluation will take into account the following aspects in order of decreasing importance: code implementing a correct algorithmic, without syntax errors, giving correct results (minimum requirement), style and readability of the code, computational efficiency. FURTHER INFORMATION Ask the professor for other information not included in the teaching schedule. Agenda 2030 - Sustainable Development Goals Quality education Gender equality