Computer Programming

ComProg
Abstract

Programming Languages and Algorithm Design have the following objectives:

  • Introduce students to basic programming concepts and programming tools;
  • Study three programming languages: C, as an example of low-level language; Python, as an example of high-level language; and MATLAB, as an example of domain-specific language;
  • Provide students with methods and knowledge suitable for the design of efficient algorithms;
  • Provide methods for the analysis of resources (memory and time) used by algorithms;
  • Provide a catalogue of the most well-known and efficient algorithms for basic computational problems (sorting, searching, resource optimization, etc.).

Teaching and Learning methods: The course is composed of lectures and laboratory sessions. The laboratory sessions consist of interactive crash courses (2 sessions of 3 hours each for each programming language) where the students can learn the basic programming concepts of different programming languages.

Interactive:

The laboratory sessions will be interactive and will include discussions with the students and the lab. exercises. It will be held in one lab. room equipped with a projector.

Crash curse:

The course will be structured into two sessions of 3 hours each.

The first session will serve as an introduction to the programming language and corresponding programming tools. After a short description of the purpose and characteristics of the environment and programming language, the students will be guided through lab exercises to familiarize themselves with the software and the basic programming concepts.

The second session will introduce additional libraries with a particular emphasis on the ones used in EURECOM courses.

The discussion will be alternated with lab exercises. The students will be given some time to solve a problem and then a volunteer student will be asked to show their solution to the other students using the computer connected to the projector.

The objective is to ensure that all students participate in the discussions and present their solutions at least once during the course.

Course Policies: Lab attendance. sessions are mandatory.

Bibliography

E-book: PILGRIM Mark. Dive into Python 3 (https://diveintopython3.problemsolving.io/) APRESS, 2009, 360 p.

Requirements

None

Description

The lectures will cover the following topics:

  • Programming Languages module:

    • Introduction to programming languages;
    • History and evolution of the programming languages;
    • Algorithms and programs;
    • Input/output, expressions, conditional statements, loops;
    • Data types, array indexing, the definition of functions;
    • Variable duration and scope;
    • Heap and stack memory, garbage collection;
    • Memory allocation and deallocation;
    • Strings and data structures;
    • Recursion;
    • Compiled language, and interpreter;
    • Programming language paradigms;
    • Introduction to the programming languages selected for the lab sessions;
  • Algorithm Design module:

    • Introduction to asymptotic notations Big O, Omega, Theta and their applications to the asymptotic analysis of algorithms;
    • Study of recurrence equations for the analysis of the complexity of recursive algorithms and derivation of methods for their solution;
    • Study of the divide and conquer technique for the design of algorithms and related application examples;
    • Study of the dynamic programming technique for the design of algorithms and related application examples;
    • Study of the greedy technique for the design of algorithms and related application examples;
    • Graphs and algorithms on graphs. Breadth- and depth-first search of graphs and their applications. acyclic direct graphs and topological ordering;
    • Algorithms for the calculation of minimum cost paths;
    • Intelligent algorithms for comprehensive search: backtracking, branch-and-bound, and related application examples.

Learning Outcomes: 

  • Know and understand the construction of a programming language;
  • Adapt the knowledge acquired to other programming languages;
  • Know and understand the basis of the programming languages studied;
  • Use the basic software tools;
  • Know and understand the different paradigms of programming languages;
  • Design efficient algorithms;
  • Analyse memory usage and time complexity of algorithms;
  • Know and understand the basis of the asymptotic notations Big O, Theta, and Omega;
  • Know and understand the best-known and most efficient algorithms for basic computational problems (sorting, searching, resource optimization, etc.).

Nb hours: 42.00

Evaluation:

  • Exercises from practical sessions (40% of the final grade);
  • Final Exam in the form of a quiz (60% of the final grade).