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.