Computer Programming

ComProg
Abstract

Programming Languages and Algorithm Design has 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.).

Teachind and Learning methods

The course is composed by lectures and laboratory sessions. The laboratory sessions consist in interactive crash courses (2 sessions of 3 hours each for each programming language, see “Course Structure” below) where the students have the opportunity of learning the basic programming concepts of different programming languages.

Course policies:

The course is composed by lectures, laboratory sessions in the form of interactive crash courses, and a mini student project.

Interactive:

The laboratory sessions will be interactive and will include discussions with the students and 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 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 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 solution at least once during the course.

Bibliography

Dive into Python (https://diveintopython3.problemsolving.io/) by Mark Pilgrim

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, definition of functions;
    • Variable duration and scope;
    • Heap and stack memory, garbage collection;
    • Memory allocation and deallocation;
    • Strings and data structures;
    • Recursion;
    • Compiled language, 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 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:

  • Students will acquire knowledge and understanding of the construction of a programming language;
  • They will be able to transfer their knowledge to other programming languages that have not been studied in the course;
  • Students will acquire basic knowledge of the studied programming languages;
  • They will be able to use the software’s basic tools;
  • They will acquire an understanding of the different programming language paradigms.
  • Students will acquire knowledge suitable for the design of efficient algorithms;
  • They will be able to analyze algorithm memory usage and time complexity;
  • Students will acquire basic knowledge of the asymptotic notations Big O, Theta, and Omega;
  • They will acquire knowledge of the most well-known and efficient algorithms for basic computational problems (sorting, searching, resource optimization, etc.).

Students will meet the objectives listed above through a combination of the following activities in this course:

  • Attend classes;
  • Participate in the discussion;
  • Volunteer to present the solution of the exercises.

Programming Languages and Algorithm Design has the following objectives:

  • Introduce students to basic programming concepts and programming tools;
  • 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.).

Hours: 

Total

Lect.

Lab.

Prob.

Self.

Re. Self.

Perso.

42

24

18

 

 

 

8

Grading Policy: