Weekly outline

  • Decouvrir le numerique  Delannoy theory Delannoy exercises K. N. King

    • Théorie
      • Cours: les vendredis de 14h15 à 16h00, en salles SG 1 et par Zoom
      • Exercices: les vendredis de 16h15 à 17h15+, en salles DIA 004, DIA 005, INF 1, INF 119 et INJ 218
      • Assistant principal: Pierre Quinton (pierre.quinton@epfl.ch)

    • Programmation
      • Cours: les mardis de 14h15 à 15h00, en salle SG 1 / les cours enregistrés
      • Exercices: les mardis de 15h15 à 17h00, en salles BC 07-08, CO 020, CO 021, CO 023, INF 3

    Examen final: Lundi 24 juin, 15h15-18h15, en salles CE 1515, CE 4, CE 6, MA A1 10, PO 01.

    Matériel autorisé: 2 pages A4 recto-verso manuscrites, rien d'électronique
    Remarquez que dans la partie théorique, vous avez le droit de réutiliser les algorithmes vus en cours.
    • Semaine 1 (19-23 février)

      Mardi: Programmation

      Cours: 14h-15h, Exercices:  15h-17h

      Vendredi: Théorie

      Cours:  14-16h , Exercices:  16-17h+

      Cours (rediffusion): 

      • Introduction
      • Constantes, variables, fonctions
      • Sortie standard 

      Cours:                                                                 

      • Introduction et logistique
      • Algorithmes: ingrédients de base


      Exercices:

      • Préparer l'environment (Unix + VS Code)
      • Premiers programmes en C

      Exercices: 

      • Lire et écrire des algorithmes
    • Semaine 2 (26 février - 1er mars)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h,  Exercices:  16-17h+

      Cours (rediffusion): 

      • Rappels
      • Lecture depuis stdin
      • Expressions et opérateurs

      Cours:                                                                         

      • Algorithmes: complexité temporelle
      • Notation "Grand Theta"

      Exercices: 

      • Affichage, opérations, expressions

      Exercices: 

      • Complexité temporelle
      • Ecriture d'algorithmes

    • Semaine 3 (4-8 mars)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h,  Exercices:  16-17h+

      Cours (rediffusion)

      • Expressions, instructions conditionnelles

      Cours: 

      • Récursivité

      Exercices: 

      • Expressions, instructions conditionnelles

      Exercices: 

      • Lire et écrire des algorithmes récursifs

    • Semaine 4 (11-15 mars)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h, Exercices:  16-17h+

      Cours (rediffusion): 

      • Instructions itératives (boucles)


      Cours:

      • Rendu de pièces de monnaie: algorithme
        glouton et programmation dynamique
      • Introduction à la théorie de la calculabilité

      Exercices: 

      • Boucles

      Exercices: 

      • Divers exercices sur la récursivité

    • Semaine 5 (18-22 mars)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h, Exercices:  16-17h+

      Cours (rediffusion): 

      • Fonctions

      Cours:                                      

      • Classes de complexité des problèmes
      • Le problème du sac à dos
      • Le problème du voyageur de commerce
      Exercices
      • Fonctions, boucles

      Exercices:

      • Identifier quels problèmes font partie de P/NP

    • Semaine 6 (25-29 mars)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h, Exercices:  16-17h+

      Cours (rediffusion): 

      • Pointeurs


      Pas de cours (vendredi saint)

      Exercices: 

      • Boucles, Pointeurs, Fonctions

      • La question 6 est ambiguë...

        Il y a deux options qui pourraient être justes:
        La première teste les indices de 0 à 6 (car le plus grand i < 8 est i=7 et on regarde t[i-1])
        for (i = 1; i < 8; i++) { if (!t[i-1]) zeros++; }

        et l'autre option
        for (i = 0; i <= (N-1); i++) { if ( !(t[i]) ) zeros++; }
        va de 0 à 7 et utilise N comme borne sup, pas la valeur 8.
        C'est la deuxième qui était marquée comme la bonne, mais je trouve la question ambiguë,
        car il n'y a que 7 éléments qui ont été initialisés...
        C'est tout à fait possible que le code marqué comme juste donne une mauvaise réponse,
        car il va regarder aussi le 8e élément non-initialisé qui pourrait avoir la valeur 0 par hasard.

    • Semaine 7 (8-12 avril)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h, Exercices:  16-17h+

      Cours (rediffusion): 

      • Pointeurs et tableaux


      Cours: 

      • Représentation binaire des nombres entiers
      • Représentation binaire des nombres réels
                                      

      Exercices: 

      • Divers

      Exercices:

      • Nombres de bits nécessaires
      • Utilisation de la représentation binaire

    • Semaine 8 (15-19 avril)

      Mardi: Programmation

      Cours: 14-15h, Exercices:  15-17h

      Vendredi: Théorie

      Cours:  14-16h, Exercices:  16-17h+

      Cours (rediffusion):

      • Révisions
      • Debugging


      Cours:                                                                         

      • Portes logiques et opérations élémentaires
      • Transistors et mémoire vive
      • Circuits quantiques

        Exercices: 

        • Mini-projet!

        Exercices: 

        • Exercices sur les portes logiques et transistors

        • A rendre jusqu'au 26.04 au soir, modalités suivront.

        • Vous devez rendre un seul fichier .c comme celui ci. 

          Important:

          • Les trois fonctions doivent être définies dans ce fichier. Si vous ne modifierez pas une des trois fonctions, laissez-la avec l'implémentation par défaut (`return -1`).
          • Vous pouvez définir d'autres fonctions auxiliaires dans ce fichier si cela peut vous être utile.
          • Attention! Il ne faut pas inclure une fonction main dans ce fichier.

          Votre fichier doit compiler pour être pris en compte!

          La commande suivante doit fonctionner sans avertissement, ni message d'erreur (si votre fichier s'appelle engine.c):

          gcc -Wall -c engine.c -o engine.o

        • Un banc de test pour vos fonctions.

          Voici une nouvelle version qui mesure aussi le temps d'execution de la fonction en millisecondes.

        • Première vidéo (en anglais) de Ben Eater sur le fonctionnement d'une diode, le plus simple des semi-conducteurs

        • Deuxième vidéo (toujours en anglais) de Ben Eater sur le fonctionnement d'un transistor

      • Semaine 9 (22-26 avril)

        Mardi: Programmation

        Cours: 14h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h,  Exercices:  16-17h+

        Cours (rediffusion): 

        • Projets multi-fichier
        • Préprocesseur
        • Lire/écrire des fichiers

        Cours:                                    

        • Signaux: fréquences et bande passante
        • Filtrage de signaux
        • Echantillonnage de signaux
        • Effet stroboscopique

        Exercices: 

        • Mini-projet


        Exercices:

        • Bande passante
        • Signaux périodiques et apériodiques
        • Filtre à moyenne mobile

        • Un fichier engine.c avec les trois fonctions.

        • Remplacez tout simplement le fichier engine.c dans ce projet par celui que vous venez de coder et jouez à Candy Crush! La version fournie a un fichier engine.c qui ne fait rien, donc vous pouvez uniquement naviguer le tableau avec les flèches... (Fonctionne uniquement sous Mac et Linux, notamment sur les machines de l'EPFL).

          $ unzip crush.zip
          $ cd crush
          $ make

          Vous pour une taille plus grande du tableau lancez le programme avec l'option -s. Par exemple, une taille de 20x20 utilisez

          $ ./crush -s 20

          Une fois dans le jeu utilisez la touche "?" pour suggérer l'action suivante, "a" pour jouer une action suggérée, "A" pour utiliser le pilote automatique (re-appuyez sur "A" pour l'arrêter), et "q" pour sortir!

      • Semaine 10 (29 avril - 3 mai)

        Mardi: Programmation

        Cours: 14-15h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h,  Exercices:  16-17h+

        Cours (rediffusion): 

        • Types composés

        Cours:                                                                         

        • Reconstruction de signaux    
        • Théorème d'échantillonnage
        • Sous-échantillonnage

        Exercices:

        • Structures, données tabulaires

        Exercices: 

        • Filtrer avant d'échantillonner
        • Phénomène de battement
        • Formule d'interpolation

      • Semaine 11 (6-10 mai)

        Mardi: Programmation

        Cours: 14-15h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h, Exercices:  16-17h+

        Cours ANNULÉ

        • -

        Cours:                                                                      

        • Introduction à la compression de données
        • Entropie

        Exercices: Séance ANNULÉE

        • -

        Exercices: 

        • Calculs d'entropie
        • Comparaison d'entropies

      • Semaine 12 (13-17 mai)

        Mardi: Programmation

        Cours: 14-15h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h,  Exercices:  16-17h+

        Cours (rediffusion):

        • Listes

        Cours:                                                                         

        • Algorithmes de Shannon-Fano et Huffman
        • Théorème de Shannon
        • Compression avec pertes


        Exercices:

        • Listes

        Exercices: 

        • Algorithmes de compression
        • A la recherche d'un trésor
        • Codage par plages (RLE)

      • Semaine 13 (20-24 mai)

        Mardi: Programmation

        Cours: 14-15h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h, Exercises:  16-17h+

        Cours (rediffusion): 

        • Récursivité

        Cours:                                                                      

        • Correction d'erreurs: introduction
        • Codes de Reed-Solomon
        • Reseaux: Protocole TCP (algorithme AIMD)
        • Réseaux: protocole IP (algorithme BFS et routage)

        Exercices: 

        • Récursivité

        Exercices: 

        • Distance minimale
        • Codage de Hamming
        • Code-barres
        • Algorithme AIMD et variantes
        • Exercices de routage

      • Semaine 14 (27-31 mai)

        Mardi: Programmation

        Cours: 14-15h, Exercices:  15-17h

        Vendredi: Théorie

        Cours:  14-16h, Exercices:  16-17h+

        Cours (rediffusion): 

        • Fichiers

        Cours:                                                                            

        • Cryptographie à clé secrète
        • Cryptographie à clé publique        

        Exercises: 

        • Fichiers

        Exercices: 

        • Protocoles de Diffie-Hellman et El-Gamal
        • Recherche de grands nombres premiers

      • ICC-C Exam archive