Aller au contenu

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.

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:
          - Théorie sur les instructions if, for, while, do..while, switch.
          - Utilisation des structures de contrôle
      - 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

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

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

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 (½)
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

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} \]
#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;
}

Directives¤

  • En cas d'absence à un quiz, la note de 1.0 est donnée.
  • En cas de plagiat, le dilemme du prisonnier s'applique.