E Fiches d'unités de cours

Les fiches d'unités sont les documents de référence pour les cours d'info1 et d'info2, ici présentées sous forme de données brutes au format YAML.

E.1 Informatique 1

# Version formelle et étendue de la fiche d'unité de cours disponible sur GAPS
# http://gaps.heig-vd.ch/public/fiches/uv/uv.php?id=5637
---
title:
    name: Informatique 1
    tag: info1
    id: 6488
domain: Ingénierie et Architecture
filière: Génie électrique
orientations:
  ? EAI
  ? EEM 
  ? MI 
formation: Plein temps
validityDate:
    - 2021-2022
author: Pierre Bressy
charge:
    academicHours: 150
    inClassAcademicHours: 96
planning:
    s1:
        class: # 48
            - hours: 4
              chapters:
                - Introduction.
                - Aperçu du fonctionnement de l'ordinateur.
                - Codage de l'information
            - hours: 2
              chapters:
                - Présentation du langage C
            - hours: 12
              chapters:
                - Types de données de base
                - Variables
                - Constantes
                - Opérateurs
                - Entrées et sorties console
            - hours: 8
              chapters:
                - Structures de contrôle
                - Branchements
                - Boucles
            - hours: 6
              chapters:
                - Fonctions
                - Passage par valeur et par adresse
            - hours: 8
              chapters:
                - Tableaux
                - Chaînes de caractères
            - hours: 4
              chapters:
                - Introduction à l'analyse et à la conception (découpage du problème)
            - hours: 4
              chapters:
                - Contrôle continu et corrections
        laboratory:
            - hours: 2
              chapters:
                - Mise en place de l'environnement de travail.
            - hours: 2
              chapters:
                - Environnement de développement intégré
                    - Installation
                    - Configuration
                    - Édition
                    - Compilation
            - hours: 8
              chapters:
                - Dialogues utilisateurs
            - hours: 10
              chapters:
                - Utilisation des structures de contrôle (if, for, while, do..while, switch).
            - hours: 8
              chapters:
                - Type de données composés
            - hours: 8
              chapters:
                - Mini projet.
prerequisites: |
    L'étudiant-e doit connaître et savoir utiliser les notions suivantes
        - utilisation générale d'un système d'exploitation graphique notamment 
          la gestion de fichiers et les bases des outils de bureautique,
        - notation binaire, octale et hexadécimale et de l’algèbre booléenne élémentaire.
goals:
    classroom:
        - Expliquer les principes généraux de représentation de l’information dans les ordinateurs.
        - Décrire la marche à suivre et les outils nécessaires pour créer un programme exécutable.
        - Assurer la traçabilité du code source de la conception à la livraison du programme.
        - Citer les éléments syntaxiques du langage C utilisé couramment pour écrire des programmes.
        - Choisir le type de données le plus adapté pour représenter une information physique.
        - Concevoir et programmer un dialogue opérateur en mode console.
        - Formater un affichage sur la sortie standard pour le rendre lisible.
        - Calculer la valeur d’une expression construite avec différents opérateurs du langage C et en déterminer le type de stockage résultant.
        - Choisir la structure de contrôle appropriée pour résoudre un problème algorithmique simple.
        - Concevoir et implémenter un algorithme imbriquant jusqu’à trois niveaux de structure de contrôle.
        - Créer une fonction impliquant un passage de paramètre par valeur et par adresse.
        - Utiliser le « type tableau » multidimensionnel et manipuler ses éléments constituants.
        - Manipulation simple de chaînes de caractères en utilisant la bibliothèque standard.
        - Mettre en œuvre des algorithmes utilisant des fonctions mathématiques de la bibliothèque standard.
        - Déboguer un programme informatique en utilisant des points d’arrêt.
        - Interagir avec un programme exécutable via les arguments et les flux d’entrées sorties.
        - Connaître les idiomes (patron d’implémentation) de base (SSOT, DRY, KISS).   
    laboratory:
        - Installer et configurer un environnement de développement intégré (IDE) pour le langage C.
        - Créer des programmes avec un IDE et compiler un programme en ligne de commande.
        - Construire une liste d’arguments.
        - Créer un programme gérant un menu en mode console et affichant des résultats sous forme structurée.
        - Mettre au point itérativement un programme pour atteindre un fonctionnement fiable et ergonomique.
        - Comprendre un cahier des charges, identifier et clarifier les exigences importantes, et s’y conformer.
        - Analyser de manière autonome les problèmes rencontrés et proposer une solution implémentable.
        - Livrer un logiciel en assurant sa traçabilité en respectant un délai.
        - Citer des applications pratiques de la programmation en relation avec ses futurs débouchés professionnels.
        - Chercher des solutions par soi-même en utilisant internet.
plan:
  - Numération
    - Bases (système décimal, hexadécimal, octal, binaire)
    - Conversion de bases
    - Complément à un
    - Complément à deux
    - Arithmétique binaire (et, ou, ou exclusif, négation)
  - Processus de développement
    - Outils
      - Environnement intégré (IDE)
      - Compilateur (*compiler*)
      - Chaîne de développement (*toolchain*)
    - Cycle de développement
    - Cycle de compilation
    - Installation d'un environnement de développement
    - Programmes et processus
  - Généralités du langage C
    - Séquences
    - Embranchements (if, switch)
    - Boucles (while, do..while, for)
    - Sauts (break, continue, return, goto)
  - Types de données
    - Typage
    - Stockage des données en mémoire
    - Entiers naturels
    - Entiers relatifs
    - Nombres réels (virgule flottante)
    - Caractères
      - Table ASCII
    - Chaînes de caractères
    - Booléens
  - Interaction utilisateur en mode console
    - Entrée standard
    - Sortie standard
    - Sortie d'erreur standard
    - Questions/Réponses avec `printf` et `scanf`
    - Formater un résultat sous forme tabulée et lisible
    - Menu (choix multiples)
  - Opérateurs
    - Opérateurs du langage C
    - Priorité des opérateurs
    - Expressions
    - Promotion et promotion implicite
  - Conception
    - Choix des structures de contrôles adaptées à des problèmes
    - Algorithmes simple (min, max, moyenne, ...)
      - Manipulation de chaînes
      - Manipulation de tableaux
      - Manipulation de bits
  - Algorithmie
    - Complexité d'un algorithme
    - Exemples d'algorithmes
    - Algorithmes de tri (tri à bulle)
  - Fonctions
    - Passage par valeur et par adresse
    - Utilisation de la valeur de retour
    - Prototypes de fonctions
  - Types de données composées
    - Structures
    - Unions
    - Tableaux
    - Énumérations
  - Bibliothèques standard
    - <math.h>
      - Fonctions trigonométriques
      - Exponentielle
      - Logarithme
    - <string.h>
      - Comparaison de chaînes de caractères
      - Concaténation de chaînes de caractères
      - Copie de chaînes de caractères
      - Longueur d'une chaîne de caractères
      - Recherche d'une sous-chaîne dans une chaîne de caractères
    - <stdio.h>
      - printf
      - scanf
      - putchar
      - getchar
      - puts
      - gets
  - Structure du code
    - Corriger les erreurs de syntaxes
    - Corriger les erreurs sémantiques
    - Indentation du code
    - Commentaires

E.1.1 Panification du semestre d'hiver

Semaine

Académique

Cours

Labo

38

1

Introduction

00 Familiarisation

39

2

Numération

01 Premier pas en C

40

3

Fondements du C

02 Équation quadratique

41

4

Variables, opérateurs

03 Fléchettes

42

5

Types, entrées sorties

04 Pneus

43

Vacances d'automne

44

6

Entrées sorties

05 Monte-Carlo

45

7

TE1

06 Tables Multiplications

46

8

Structure de contrôles

07 Chaînes (par équipe)

47

9

Fonctions

08 Nombre d'Armstrong

48

10

Tableaux et structures

09 Sudoku

49

11

Programmes et processus

50

12

Algorithmique

Labo Test

51

13

Pointeurs

10 Galton

52

Vacances de Noël

1

2

14

Ergonomie et dialogues

12 Tableau des scores

3

15

TE2

4

16

Exercices de révision

5

Préparation Examens

6

Examens

7

Relâches

E.2 Informatique 2

# Version formelle et étendue de la fiche d'unité de cours disponible sur GAPS
# https://gaps.heig-vd.ch/consultation/fiches/uv/uv.php?id=6491
---
title:
    name: Informatique 2
    tag: info2
    id: 6491
domain: Ingénierie et Architecture
filière: Génie électrique
orientations:
  ? EAI
  ? EEM 
  ? MI 
formation: Plein temps
validityDate:
    - 2021-2022
author: Pierre Bressy
charge:
    academicHours: 120
    inClassAcademicHours: 80
planning:
    s1:
        class: # 48
            - hours: 4
              chapters:
                - 'Préprocesseur (#include, #define, #if, #pragma)'
            - hours: 4
              chapters:
                - Classes de stockage (static, volatile, extern)
            - hours: 8
              chapters:
                - Conception de type de données abstraits simples
                - Création de bibliothèques
            - hours: 10
              chapters:
                - Pointeurs, arithmétique de pointeurs
                - Allocation dynamique
                - Segments mémoire (stack, heap)
            - hours: 6
              chapters:
                - Implémentation des listes
                - Queues et files d'attente basée sur les tableaux
            - hours: 8
              chapters:
                - Type de données récursifs, queues et files d'attente
            - hours: 4
              chapters:
                - Gestion des flux (stdin, stdout, stderr)
                - Fichiers binaires et textes
            - hours: 4
              chapters:
                - Contrôles continus
        laboratory:
            - hours: 6
              chapters:
                - >
                  Mise en œuvre de type de données composées
                  (structures, tableaux multidimensionnels)
            - hours: 4
              chapters:
                - Lecture et écriture de fichiers texte et binaire en mode séquentiel
            - hours: 4
              chapters:
                - Mise en œuvre de l'allocation dynamique de mémoire
            - hours: 2
              chapters:
                - Compilation séparée et implémentation de bibliothèques
            - hours: 4
              chapters:
                - Implémentation de types de données abstraits, type simple, liste tableau
            - hours: 6
              chapters:
                - Implémentation de types de données abstraits, file, pile
            - hours: 6
              chapters:
                - Mini-projet
prerequisites: |
    L'étudiant-e doit connaître et savoir utiliser les notions suivantes
        - bases de la programmation en C : types de base, structures 
          de contrôle et sous-programmes,
        - utilisation d'un environnement de développement, 
          compilation et exécution de programmes.
    L'unité d'enseignement Informatique 1 permet d'acquérir ces connaissances.

goals:
    class:
        - >
          Décomposer un algorithme selon l'approche descendante (raffinage successif)
          et ascendante.
        - Décomposer une application de complexité moyenne en algorithmes élémentaires.
        - Concevoir un type de données abstrait simple et les fonctions pour le manipuler.
        - Concevoir une bibliothèque de fonctions en utilisant la compilation séparée.
        - Écrire un programme qui manipule (lecture/écriture) des fichiers binaires
        - Lire et générer un fichier de données tabulées (p.ex. csv),
        - Mettre en œuvre un tableau dynamique avec facteur de croissance,
        - Définir et manipuler un type de données récursif e.g. liste chaînée,
        - Comprendre le fonctionnement d'un algorithme de tri en O(n log n),
        - Savoir implémenter une recherche dichotomique
        - Comprendre le fonctionnement du préprocesseur C
        - Connaître et savoir quand utiliser les différentes classes de stockage
        - Connaître en détail la notion de pointeur et savoir les utiliser
        - > 
          Utiliser les fonctions standard de recherche et de manipulation 
          de chaîne de caractères (p.ex. strstr, strchr, qsort).
    laboratory:
        - Réunir un ensemble de fonctions dans un module logiciel et l'utiliser
        - Programmer et mettre au point des algorithmes de complexité moyenne
        - > 
          Réaliser une application de taille et de complexité moyennes, 
          mêlants différents aspects de la programmation
        - Développer un programme en utilisant un outil de gestion de version
        - Utiliser un système de test automatique pour valider le fonctionnement d'un programme.

plan:
  - Algorithmie
    - Raffinage successif
    - Décomposition en éléments fonctionnels simples
    - Conception d'algorithmes de complexité moyenne
  - Types composés
    - Manipulation d'une structure (struct)
    - Passage par copie et adresse
    - Création de types (typedef)
  - Bibliothèque
    - Concevoir une bibliothèque statique
    - Utilisation d'une bibliothèque statique dans un programme
  - Fichiers
    - Types de fichiers
      - Binaire
      - Textes
      - Données tabulées
      - Données indexées
    - Système de fichier
      - Arborescence
      - Dossiers
      - Chemins relatifs et absolus
    - Manipulation de fichiers
      - Pointeur de fichier (ftell, fseek)
      - Lecture (fread, fscanf)
      - Écriture (fwrite, fprintf)
  - Gestion de la mémoire
    - Pointeurs
      - Règle gauche droite
      - Arithmétique de pointeurs 
      - Types de pointeurs imbriqués (p.ex. int**[]) 
    - Allocation dynamique
      - malloc
      - calloc
      - free
      - Création de tableaux dynamiques
      - Comprendre la différence entre le stack et le heap
  - Types de données récursifs
    - Liste simplement chaînée
    - Liste doublement chaînée
  - Alignement mémoire
    - Unions
    - Champs de bits
  - Livraison
    - Préparer le code à la livraison
    - Construire une bibliothèque documentée
    - Utiliser GitHub pour tracer le développement 
    - Utiliser une bibliothèque de test unitaire
bibliographie:
  - author: Jean-Michel Léry
    title: Algorithmique, Applications en C, C++ et Java
    editor: Pearson
    year: 2013
  - standard: ISO/IEC 9899:2011 
    title: Langage de programmation C, ISO/IEC 
    year: 2011
  - author: 
    ? Brian Kernighan 
    ? Dennis Ritchie
    title: Le langage C
    edition: 2nd 
    editor: Dunod 
    year: 2014 
    isbn: 978-2100715770
  - author: Claude Delannoy
    title: Programmer en langage C, Cours et exercices corrigés
    editor: Eyrolles 
    year: 2016
  - author: Stephen Kochan
    title: Programming in C
    edition: 4
    editor: Pearson
    year: 2014 
    isbn: 978-0321776419

E.2.1 Panification du semestre de printemps

Semaine

Académique

Cours

Labo

8

1

Introduction

GitHub - WSL

9

2

Fichiers

Proust (partie 1)

10

3

Allocation dynamique

Proust (partie 2)

11

4

Allocation dynamique

Météo (partie 1)

12

5

Compilation séparée

Météo (partie 2)

13

6

Préprocesseur

Tableau dynamique (1/2)

14

7

Unions, champs de bits

Tableau dynamique (2/2)

15

8

Usage bibliothèques

Stéganographie

16

Vacances de Pâques

17

9

TE1

Wave (partie 1)

18

10

Algorithmique Big-O

Wave (partie 2)

19

11

Tris

Quick-Sort / Merge-Sort

20

12

Queues et piles

Tries

21

13

Sockets

Labo Test

22

14

TE2

Shunting-yard

23

15

Arbres binaires

Tries (partie 1)

24

16

Exercices de révision

Tries (partie 2)

25

Préparation Examens

26

Examens

E.3 Modalités d'évaluation et de validation

Le cours se compose de :

  • Travaux écrits notés (coefficient 100%)

  • Quiz notés ou non (coefficient 10% ou 0%)

  • Séries d'exercices

  • Travaux pratiques, 2 à 3 labos notés (laboratoires)

  • Labo test noté comptabilisé comme un labo

La note finale est donnée par l'expression :

\[\text{final} = \frac{ \sum\limits_{t=1}^\text{T}{\text{TE}_t} + 10\% \cdot \sum\limits_{q=1}^\text{Q}{\text{Quiz}_q} }{ 4 \cdot (\text{T} + 10\% \cdot \text{Q}) } + \frac{1}{4 L} \sum\limits_{l=1}^L \text{Labo}_l + \frac{1}{2} \text{Exam}\]

L'équivalent en C :

#define QUIZ_WEIGHT (.1) // Percent
#define EXAM_WEIGHT (.5) // Percent

typedef struct notes {
    size_t size;
    float values[];
} Notes;

float sum(Notes *notes) {
    float s = 0;
    for (int i = 0; i < notes->size; i++)
        s += notes->values[i];
    return s;
}

float mark(Notes tes, Notes quizzes, Notes labs, float exam) {
    return (
    sum(tes) + QUIZ_WEIGHT * sum(quizzes)
    ) / (
        (EXAM_WEIGHT / 2.) * (tes.size + QUIZ_WEIGHT * quizzes.size)
    ) +
            (EXAM_WEIGHT / 2.) * sum(labs) / labs.size +
        EXAM_WEIGHT * exam;
}

Les règles sont :

  • En cas d'absence à un quiz, la note de 1.0 est donnée.

  • En cas de plagiat, le dilemme du prisonnier s'applique.

  • Le quiz le plus mauvais ne compte pas.