# BASICS OF COMPUTER SCIENCE AND LABORATORY

Academic year and teacher

If you can't find the course description that you're looking for in the above list,
please see the following instructions >>

- Versione italiana
- Academic year
- 2022/2023
- Teacher
- EVELINA LAMMA
- Credits
- 15
- Didactic period
- Annuale
- SSD
- ING-INF/05

#### Training objectives

- ------------------------------------------------------------

Modulo: 27000 - MODULO A

------------------------------------------------------------

The course is the introduction course about software programming. Its main aim is to introduce the basics of the C and Java programming languages, to make students able to identify algorithms for solving simple problems and program them in C or Java language by also using data structures, and finally to make students able to identify the complexity of simple algorithms/programs.

The acquired knowledge includes:

- Notion of an algorithm, and complexity of an algorithm

- Von Neumann Architecture, and abstract machine supporting the execution of a C program

- The C programming language

- Recursive functions

- Implementation in C of the main data structure, including dynamic ones (lists, trees)

- Multi-file projects in C

- Object-oriented programming and the Java language

- The Java Collections Framework as a Java implementation of data structures.

The main skills (the ability to apply acquired knowledge) will be:

- Ability to solve simple problems with algorithmic techniques and to implement algorithms using the C and Java programming languages

- Be able to determine the evolution at execution time of a C program

- Be able to evaluate the complexity of simple algorithms, also exploiting simple data structures (lists, trees).

------------------------------------------------------------

Modulo: 27002 - MODULO B

------------------------------------------------------------

The module is the second parte of first course about software programming. The use of C language is exploited for programming also data structures, and Java language is also learned. Students will be able to identify algorithms for solving simple problems and program them in C or Java language by also using data structures, and finally the will be also able to identify the complexity of simple algorithms/programs.

The acquired knowledge includes:

- complexity of an algorithm/program

- Implementation in C of the main data structure, including dynamic ones (lists, trees)

- Object-oriented programming and the Java language

- The Java Collections Framework as a Java implementation of data structures.

The main skills (the ability to apply acquired knowledge) will be:

- Ability to solve simple problems with algorithmic techniques and to implement algorithms using the C and Java programming languages

- Be able to evaluate the complexity of simple algorithms, also exploiting simple data structures (lists, trees). #### Prerequisites

- ------------------------------------------------------------

Modulo: 27000 - MODULO A

------------------------------------------------------------

There are no prerequisites, except basic notions given by high school, such as text understanding, and basics of mathematics

------------------------------------------------------------

Modulo: 27002 - MODULO B

------------------------------------------------------------

There are no prerequisites, except basic notions given by high school, and to have followed and studied Module A contents. #### Course programme

- ------------------------------------------------------------

Modulo: 27000 - MODULO A

------------------------------------------------------------

The course is split into two modules, Module A (6 CFU) given in the first semestrer, and Module B (9 CFU) given in the second semester. Each module includes lecture hours in the classroom, and practical exercise sessions in the laboratory, alternated and strictly integrated to assess course arguments.

In Module A, about two-thirds of the lecture hours are in the classroom, while guided exercises in the laboratory take the remaining one-third. The topics faced in Module A are:

Notion of algorithm.

Von Neumann architecture.

Structured programming.

Language C, control structures, basic types, arrays, structures, pointers, functions and parameter passing, iteration versus recursion, file access.

The run-time model of language C, arguments of the command-line, programming with multiple C files.

In Module B, the main lectures take about two-thirds of the hours and take place either in the classroom or in the laboratory. In the laboratory lessons, students directly experience, by programming, what the professor introduces during the lesson (by following a learning-by-doing approach). The remaining one-third of the hours is devoted to guided exercises in the laboratory, designed to consolidate programming skills and use of data structures introduced in main lectures.

The arguments faced in Module B are:

Algorithms' complexity.

Algorithms and data structures in C (with lists and trees in the laboratory).

Component-based programming

Object-oriented programming.

The Java language (in laboratory):

Class construct, object creation, nested objects

Packages and the I/O package.

Inheritance; abstract classes; interfaces.

Exceptions.

Java Collections Framework.

------------------------------------------------------------

Modulo: 27002 - MODULO B

------------------------------------------------------------

Module B (9 CFU) includes lecture hours in the classroom, and practical exercise sessions in the laboratory, alternated and strictly integrated to assess course arguments.

In Module B, the main lectures take about two-thirds of the hours and take place either in the classroom or in the laboratory. In the laboratory lessons, students directly experience, by programming, what the professor introduces during the lesson (by following a learning-by-doing approach). The remaining one-third of the hours is devoted to guided exercises in the laboratory, designed to consolidate programming skills and use of data structures introduced in main lectures.

The arguments faced in Module B are:

Algorithms' complexity.

Algorithms and data structures in C (with lists and trees in the laboratory).

Component-based programming

Object-oriented programming.

The Java language (in laboratory):

Class construct, object creation, nested objects

Packages and the I/O package.

Inheritance; abstract classes; interfaces.

Exceptions.

Java Collections Framework. #### Didactic methods

- ------------------------------------------------------------

Modulo: 27000 - MODULO A

------------------------------------------------------------

In order to provide the theoretical knowledge of the course, there are lectures held in the classroom. During the classroom lessons for Module A, exercises are given to the students, and the solution is obtained through suggestions from the whole class, with the professor writing on the blackboard the suggested solution, correcting possible errors, and discussing together with the class pros and cons of different approaches.

In order to have students acquire practical skills (such as usage of compilers and debugging tools, as well programming in C and Java), each week there are practical exercises in the Laboratory, where students can program on the computer.

Both during the lectures given in the laboratory, and during tutoring sessions in the laboratory, students can take advantage of the presence of tutors, solving proposed exercises by programming individually, but under the supervision of tutors, and testing the implemented program by discussing it the end of the session. Students have also free access to the laboratory for further individual exercises.

------------------------------------------------------------

Modulo: 27002 - MODULO B

------------------------------------------------------------

In order to provide the theoretical knowledge of the course, there are lectures held in the classroom.

In order to have students acquire practical skills (such as programming in C and Java), each week there are practical exercises in the Laboratory, where students can program on the computer.

Both during the lectures given in the laboratory, and during tutoring sessions in the laboratory, students can take advantage of the presence of tutors, solving proposed exercises by programming individually, but under the supervision of tutors, and testing the implemented program by discussing it the end of the session. Students have also free access to the laboratory for further individual exercises. #### Learning assessment procedures

- The course exam is devoted to test the level of achievement of the previously indicated training objectives.

In particular, the exam consists of three parts, taking place the same day. The first and second part are solved by using a computer in the laboratory, and by loading the solution via a simple web interface. The third part is written. In more details:

In order to assess the knowledge of the language C and the ability to solve problems of the student, there is a laboratory session, with exercises of programming and analysis of C programs. In the programming exercise, the student is asked to write a program in language C with given specifications, using and defining functions, and using the data structures learned during the course. In the analysis exercise, the student is provided with a simple C code using arrays, lists or trees and will have to evaluate its computational complexity. In this test, the student is required to apply the skills acquired during both classroom and laboratory lessons. In this test, 18+20 points maximum are given, and the minimum to pass the exam is 10+10.

In order to evaluate the student's knowledge on object oriented programming and on the Java language (acquired during both classroom and laboratory lessons), there is a second laboratory test consisting of two exercises: writing a Java program from a given specification, and answering to a question of Java and Object-Oriented Programming. This part provides 13 points maximum, the minimum score to pass the exam is 7 points.

In order to evaluate the knowledge of the student on theoretical parts of the course, there is a written test. It consists of the following exercises: writing a simple recursive function and showing how a simple program (that invokes the function written by the student) is executed in the C runtime architecture, with the activation records; answering three open-ended questions on computer architecture, tools and methods to produce an executable program from the source files, and language C. This part provides 11 points maximum.

The total score is 62 points maximum. The final grade of the exam is obtained by halving the sum of the scores in the three parts, for a maximum of 31 points.

To pass the exam, the student must reach the minimum score in each of the parts and also obtain a minimum score of 18 out of 31.

If one of the three tests is insufficient or if the total score is less than 18, the student must repeat all three tests.

For students attending the course, it is possible to take the exam in two parts, one at the end of each module of the course. To pass the exam, the student must obtain a minimum score of 18 out of 31 for part A, and a minimum score of 18 out of 31 for part B. The final mark is the average of the two scores. #### Reference texts

- ------------------------------------------------------------

Modulo: 27000 - MODULO A

------------------------------------------------------------

Slides projected during the classroom or laboratory lessons, are available at the course Web siste:

http://www.unife.it/ing/informazione/fondamenti-informatica

At the same Web site, also texts of exercises, and some exam texts with solution can be found.

Specific topics can be found on the following texts.

About the C language:

S. Ceri, D. Mandrioli, L. Sbattella, Informatica: Programmazione, McGraw-Hill, 2006.

A. Bellini, A. Guidi: Guida al Linguaggio C, McGraw-Hill, 1995.

or any other introductory text about the C language.

About the Java Language, any introductory text is appropriate.

We point out:

H. M. Deitel, P. J. Deitel: Java Fondamenti di Programmazione, Apogeo.

Lewis John, Loftus William: Java Fondamenti di progettazione software, Addison Wesley.

C. Thomas Wu: Java Fondamenti di Programmazione, Mc Graw Hill.

------------------------------------------------------------

Modulo: 27002 - MODULO B

------------------------------------------------------------

Slides projected during the classroom or laboratory lessons, are available at the Classorrom of the module, also with texts of exercises, and some exam texts and their solution.

Specific topics can be found on the following texts.

About the C language:

S. Ceri, D. Mandrioli, L. Sbattella, Informatica: Programmazione, McGraw-Hill, 2006.

A. Bellini, A. Guidi: Guida al Linguaggio C, McGraw-Hill, 1995.

or any other introductory text about the C language.

About the Java Language, any introductory text is appropriate.

We point out:

H. M. Deitel, P. J. Deitel: Java Fondamenti di Programmazione, Apogeo.

Lewis John, Loftus William: Java Fondamenti di progettazione software, Addison Wesley.

C. Thomas Wu: Java Fondamenti di Programmazione, Mc Graw Hill.