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 :
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.