Description: 

Nowadays one cannot think of technology or innovation without taking into account the programming world. Almost everything surrounding us, both physical and virtual elements, require a set of instructions to manage them and to allow them to "be alive". Thus, programming is indispensable and is a key concept for every engineer. In this subject, we learn the fundamentals of this world, applied in this case to any computer. The subjects' practical work will introduce the C programming language. To do that, this subject uses a multitude of examples, which help the student to deepen in all those aspects taught in a more theoretical way.

Type Subject
Primer - Obligatoria
Semester
Annual
Course
1
Credits
10.00

Titular Professors

Previous Knowledge: 

None

Objectives: 

The students acquire the knowledge and develop the following abilities:
1. To understand a real problem with all their conditions and their limitations.
2. To withdraw the important contents from the real problems in order to analyze them correctly and to be able to make them explicit.
3. To find out adequate and precise solutions for the real problems.
4. To choose, among all the possible solutions, the most efficient one.
5. To learn a pseudocode to improve the reflection about an imperative language.
6. To order different sentences correctly.
7. To understand how a program works without being necessary to execute it.
8. To reach the basic knowledge to carry out a structured and modulated programming.
9. To master the notions of a real imperative language (C language).
10. To design and use existent components in order to obtain more complex algorithms.
11. To know a real program environment that allows putting into practice the daily programs.
12. To work as a team in the domain of analysis, design and the software implementation.
13. To acquire continued work and study habits.

Contents: 

Chapter 1. Introduction
Chapter 2. Introduction to algorithms
Chapter 3. Functions and procedures
Chapter 4. Structured data types
Chapter 5. Files and modular programming
Chapter 6. Pointers and dynamic memory
Chapter 7. Linear data structures
Chapter 8. Introduction to recursion

Methodology: 

The Programming classes want to promote the students' active learning through their involvement in the learning process. From the first day, the student is an active member and learns as the student carries out the different activities on their laptop. To solve these activities, the student must take the initiative, study and read some documentation. As such, a computer is an essential tool for the student to successfully achieve the learning outcomes of this subject. The classes are designed for the student to code software every day. The theoretical classes are combined with practical sessions where the student can validate the reliability of the acquired knowledge. The student's acquired knowledge is reinforced during the classes by performing two individual projects for every semester, which cover the concepts that are taught throughout the academic year. At the same time, the student can also do the Continuous Assessment of the course, which consists of weekly labs that examine the concepts learned during the previous week.

Evaluation: 

The main assessment activities of the course are: semester exams, practical assignments (2 per semester), and continuous assessment sessions. The exam grade, together with the continuous assessment, accounts for 50% of the final semester grade. The grades of the two practical assignments in each semester account for the remaining 50% of the final semester grade. It is necessary to pass the exam with a grade equal to or higher than 4 in order for the continuous assessment grade to be considered. Both semesters must be passed independently.

Evaluation Criteria: 

The student will be assessed on:

The ability to apply computational thinking in solving exercises.

The understanding and correct application of basic algorithmic concepts.

The correct use of the C programming language to solve problems and exercises.

The preparation of documentation that clearly and comprehensively explains the developed programs.

The ability to understand the requirements of a problem and propose a solution in the form of an algorithm.

Basic Bibliography: 

Kernighan, Brian W.; Ritchie, Dennis M. El lenguaje de programación C, Prentice-Hall Hispanoamericana, 1991.

Additional Material: 

Cormen, Thomas H.; Leiserson Charles E.; Rivest Ronald L; Stein Clifford. Introduction to Algorithms, The MIT Press, 2009.
García-Bermejo, J.R. Programación Estructurada en C, Pearson/Prentice-Hall, 2008.
Hanly, Jerry R.; Koffman, Elliot B.; Problem Solving and Program Design in C, Pearson Education, 2013.
Joyanes, L. Fundamentos de la programación. Algoritmos y Estructura de Datos, McGraw-Hill, 2008.
Kruse, Robert Leroy; Tondon, Clovis L.; Leung, Bruce P. Data structures and program design in C, Prentice-Hall, 1997.
Weiss, Mark Allen. Estructuras de datos y algoritmos, Addison-Wesley Iberoamericana, 1995.