Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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
2018/2019
Teacher
EVELINA LAMMA
Credits
15
Didactic period
Annuale
SSD
ING-INF/05

Training objectives

The course is the introductory one about software programming. The main aim of the course is to introduce students the basics of algorithmic techniques to solve simple problems, comparing the efficiency of two or more algorithms and implementing algorithms in the imperative language C and/or n the object-oriented language Java, also using simple data structures.

The course presents the basic elements of computer systems, and the C language as first programming language, with its virtual machine. The C language is accompanied by the presentation of algorithmic techniques - also recursive - to solve problems typical of computer science, discussing their complexity, and also exploiting, in their C implementation, simple data structures (as lists and trees). Starting from the concept of multi-file software development, introducing the notion of modular and object-oriented programming, the object-oriented language Java is presented and compared to C. Finally, the main dynamic data structures implemented in C are also presented as classes and interfaces of the Java Collections Framework.

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
- 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).

Prerequisites

Text understanding
Basic knowldge of mathematical methods as acquired at high school
Problem solving, logical reasoning

Course programme

The course includes lessons and exercises. 6 credits are devoted to Module A, and 9 credits to Module B.

In Module A, lectures occupy two-thinds of hours, and guided exercises in the laboratory one-third. The arguments 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
The run-time model of C, arguments of the command-line, programming with multiple C files.


As well, in Module B, main lectures occupy two-thinds of hours and take place either in classroom and laboratory where students directly experience, by programming, what the teacher introduces during the lesson (by following a learning-by-doing approach). The remaining one-third of 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 (lists, trees in laboratory).
Component-based programming
Object-oriented programming.
Object and software component: data encapsulation, information hiding.
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

The course includes classroom lectures, and guided lectures and practical exercises in the Computer Science Laboratory, for topics related to programming in C and Java.
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 includes classroom lectures, and guided lectures and practical exercises in the Computer Science Laboratory, for topics related to programming in C and Java.
Beside the lectures given in the laboratory, students can participate to tutoring sessions in the laboratory, where they solve proposed exercises by programming individually, but under the supervision of tutors, and test the implemented program by discussing it with the tutors at the end of the session. Students have also free access to the laboratory for further individual exercises.
Verification of learning

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

The exam consists of three tests, taking place the same day.

A laboratory test, in which the student is asked to write a program in language C, is aimed at assessing the knowledge of the language C and the ability to solve problems of the student. In this test, the student is required to apply the skills acquired during both classroom and laboratory lessons.

A second laboratory test focuses on the Java language and is aimed at evaluating the student's knowledge on object oriented programming and on the Java language, acquired during both classroom and laboratory lessons.

A third test, written (but answer can be edited by a computer system), has the purpose to verify the student's knowledge on the functionality of a given C program, the ability to use recursive programming and theoretical knowledge on the topics of the course. This test contains exercises of analysis of a program, recursive programming, analysis of the complexity of an algorithm/program and open-ended questions on computer architecture, development of a program in language C, and object-oriented programming.

Laboratory tests are designed to verify the ability of identifying algorithmic solutions and programming them. The written test (possibly at a computer system) contains exercises designed to check analytical skills and knowledge on basic topics.

The final grade is the sum of the scores of the three tests.

To pass the exam the student must 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

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.