# FUNDAMENTALS OF PROGRAMMING A

## Learning outcomes of the course unit

A goal of the course is to provide the student with the basic knowledge for the design and implementation of simple programs written in a conventional programming language. In particular, the student will acquire in-depth knowledge about the programming tools provided by the imperative fragment of C++.

The course also aims to provide students with the ability to apply the acquired knowledge about programming tools and the acquired problem analysis techniques to solve simple practical problems (such as, for example, mathematical calculation problems, sorting, file management, etc.) and then translate these solutions into executable programs.

Finally, the course aims to help students to develop more general skills of analysis, abstraction (mainly intended as the ability to describe and understand an entity in terms of the features rather than the details of its implementation), the decomposition of problems into subproblems, and development of solutions "from top to bottom" ("top-down") and by stepwise refinements.

A goal of the course is to provide the student with the basic knowledge for the design and implementation of simple programs written in a conventional programming language. In particular, the student will acquire in-depth knowledge about the programming tools provided by the imperative fragment of C++.

The course also aims to provide students with the ability to apply the acquired knowledge about programming tools and the acquired problem analysis techniques to solve simple practical problems (such as, for example, mathematical calculation problems, sorting, file management, etc.) and then translate these solutions into executable programs.

Finally, the course aims to help students to develop more general skills of analysis, abstraction (mainly intended as the ability to describe and understand an entity in terms of the features rather than the details of its implementation), the decomposition of problems into subproblems, and development of solutions "from top to bottom" ("top-down") and by stepwise refinements.

## Prerequisites

Basics of functions, sets and logical connective and expressions. Basics of computer architecture and information representation.

Basics of functions, sets and logical connective and expressions. Basics of computer architecture and information representation.

## Course contents summary

The course introduces the basics of imperative programming, using the imperative fragment of C++ as the reference language.

In particular, the first part of the course introduces basics of programming such as algorithms, flowcharts, variables, simple and structured data types, expressions, and control statements.

The second part of the course deals with the development of more complex programs, introducing, on the one hand, the notion of sub-program and other related concepts, such as recursive functions and scope rules, on the other hand, other forms of data management, such as files and manipulation of dynamic data structures with pointers.

For both parts, the course shows the implementation of simple C++ programs that use the introduced concepts.

The course introduces the fundamentals of the "object-oriented" and modular programming paradigms, using as the main reference the C++ language, but also taking into account the Java language in the final part of the course.

The course also presents some advanced constructs and mechanisms of C++ and Java, such as function and operator overloading and exception handling, as well as some notions and tools that are not strictly related to the "object-oriented" programming paradigm, but which are nevertheless of great importance, such as the notions of abstract data type and the software development cycle.

## Course contents

- Problems and algorithms: basic notions, flow-charts.

- Programming languages and tools. A sample program in C++.

- Constants and variables.

- Elementary data types in C++.

- Assignment and compound statements - Basic input/output.

- Operators and expressions.

- Control structures (selection, iteration).

- Data structures (abstract vs. concrete). Arrays in C++. Matrices. Strings. 'struct'. Tables.

- The 'typedef' declaration.

- Subprograms: motivations. Function declaration and call in C++.

- Parameter passing: by value, by reference.

- 'void' functions.

- Recursive functions.

- Scope rules in C++. Local vs. global declarations.

- File management in C++.

- Pointers and dynamic memory allocation. Simple linked lists.

- Program development. Integrated Development Environments.

- Developing simple programs using the imperative part of C++.

- Using library functions.

## Recommended readings

- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.

- R. Miller, D. Clark, B. White, e W. Knottenbel: An Introduction to the Imperative Part of C++, 1999, disponibile su WEB all'indirizzo http://www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html#S

- Teacher lecture notes, available on the Web at http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html

- C++ programs shown in class and in the laboratory, available on the Web at http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/EsempiLe... and http://lea.unipr.it/course/view.php?id=324

- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.

- R. Miller, D. Clark, B. White, e W. Knottenbel: An Introduction to the

Imperative Part of C++, 1999, disponibile su WEB all'indirizzo http:

//www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html#S

- Dispense del corso, disponibili su WEB all'indirizzo http://people.math.

unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html

- Programmi C++ mostrati a lezione e in laboratorio, disponibili su Web

agli indirizzi http://people.math.unipr.it/gianfranco.

rossi/Teaching/FondProgr/EsempiLezione/index.html e http://lea.unipr.

it/course/view.php?id=324

## Teaching methods

Teaching takes place mainly through lectures and computer-based exercises, either assisted or carried out independently by the students.

The lectures provide, among other, the presentation of a number of practical examples, along with the related solutions written in C++, that will be made available on the Web site of the course (at http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/EsempiLe...).

The exercises provide the assignment, every week, of one or more exercises related to the topics covered in class. The student will have to solve the exercises independently and deliver solutions within a week, using the Parma University e-learning platform LEA (http://lea.unipr.it/course/view.php?id=324). The platform allows, among other, the teacher to monitor the delivery of the exercises carried out and to provide suggestions for their implementation.

Physical meetings with the teacher are scheduled, on a weekly basis, for all those students who have difficulties in achieving the assigned exercises.

Teaching takes place mainly through lectures and computer-based exercises, either assisted or carried out independently by the students.

The lectures provide, among other, the presentation of a number of practical examples, along with the related solutions written in C++ and Java, that will be made available on the Web site of the course (at http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/EsempiLe...).

The exercises provide the assignment, every week, of one or more exercises related to the topics covered in class. The student will have to solve the exercises independently and deliver solutions within a week, using the Parma University e-learning platform LEA (http://lea.unipr.it/course/view.php?id=324). The platform allows, among other, the teacher to monitor the delivery of the exercises carried out and to provide suggestions for their implementation.

Physical meetings with the teacher are scheduled, on a weekly basis, for all those students who have difficulties in achieving the assigned exercises.

## Assessment methods and criteria

The final examination of the course consists of a written test and an oral test.

The written test consists in the solution (on paper) of some programming exercises, using the imperative fragment of C++ presented in the course.

The oral test consists of some questions (usually three) on the most basic and general topics treated throughout the course.

For students of the Degree in Computer Science, exam test is integrated with that of the course Fundamentals of Programming B, which provides a practical test and an oral test. The practical test consists in the solution (on the PC, in the PC Laboratory at the Department of Mathematics and Computer Science) of some programming exercises, using the "Object-Oriented" feature of C++ presented during Fundamentals of Programming B.

For each of the tests (written, practical and oral) is given a mark out of thirty. The tests are considered valid if the vote is greater than or equal to 16/30. The exam is passed if all tests that constitute it are valid and the final grade is greater than or equal to 18/30. The final grade is calculated as the average of the marks obtained in each test.

There will be an "in itinere" test (not mandatory) which will be held in the months of January to February of the current academic year. The test is reserved to students of the first year that have solved and delivered at least two thirds (66.6%) of the exercises assigned during the course.

The "in itinere" test replaces the normal written test of Part A.

The final examination of the course consists of a written test and an oral test.

The written test consists in the solution (on paper) of some programming exercises, using the imperative fragment of C++ presented in the course.

The oral test consists of some questions (usually three) on the most basic and general topics treated throughout the course.

For students of the Degree in Computer Science, exam test is integrated with that of the course Fundamentals of Programming B, which provides a practical test and an oral test. The practical test consists in the solution (on the PC, in the PC Laboratory at the Department of Mathematics and Computer Science) of some programming exercises, using the "Object-Oriented" feature of C++ presented during Fundamentals of Programming B.

For each of the tests (written, practical and oral) is given a mark out of thirty. The tests are considered valid if the vote is greater than or equal to 15/30. The exam is passed if all tests that constitute it are valid and the final grade is greater than or equal to 18/30. The final grade is calculated as the weighted average of the marks obtained in each test.

There will be an "in itinere" test (not mandatory) which will be held in the months of January to February of the current academic year. The test is reserved to students of the first year that have solved and delivered at least two thirds (66.6%) of the exercises assigned during the course.

The "in itinere" test replaces the normal written test of Part A.

## Other informations

The course includes its own Web page for all general information, managed directly by the teacher (http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html), and a page on the University of Parma Web Learning System for the management of exercises (http://lea.unipr.it/course/view.php?id=324).

Basics of functions, sets and logical connective and expressions. Basics of computer architecture and information representation.