diff --git a/slides/cours_4.md b/slides/cours_4.md index 93c493cf5fd92d7b1d6d3543b9932e7e7e2b7bc9..d1300137396fd53962462d944d54e193b00f12eb 100644 --- a/slides/cours_4.md +++ b/slides/cours_4.md @@ -73,7 +73,8 @@ int main() { ## Exercice: -* Réusiner le code se trouvant sur [Cyberlearn]() +* Réusiner le code se trouvant sur + [Cyberlearn](https://cyberlearn.hes-so.ch/mod/resource/view.php?id=1627712). # Tableau à deux dimensions (1/4) @@ -187,6 +188,53 @@ for (int i = 0; i < NX; ++i) { ## Poster le résultat sur `Element` +# Types énumérés (1/2) + +* Un **type énuméré**: ensemble de *variantes* (valeurs constantes). +* En `C` les variantes sont des entiers numérotés à partir de 0. + + ```C + enum days { + monday, tuesday, wednesday, + thursday, friday, saturday, sunday + }; + ``` +* On peut aussi donner des valeurs "custom" + + ```C + enum days { + monday = 2, tuesday = 8, wednesday = -2, + thursday = 1, friday = 3, saturday = 12, sunday = 9 + }; + ``` +* S'utilise comme un type standard et un entier + + ```C + enum days d = monday; + (d + 2) == tuesday + tuesday; // true + ``` + +# Types énumérés (2/2) + +* Très utile dans les `switch ... case`{.C} + + ```C + enum days d = monday; + switch (d) { + case monday: + // trucs + break; + case tuesday: + printf("0 ou 1\n"); + break; + } + ``` +* Le compilateur vous prévient qu'il en manque! + +# Utilisation des types énumérés + +## Réusiner votre couverture de la reine avec des `enum` + # Représentation des nombres (1/2) * Le nombre `247`. @@ -226,7 +274,7 @@ $$ = 247. $$ -# Conversion de décimal à binaire (1/N) +# Conversion de décimal à binaire (1/2) ## Convertir 11 en binaire? @@ -247,7 +295,7 @@ $$ 2^0=11. $$ -# Conversion de décimal à binaire (2/N) +# Conversion de décimal à binaire (2/2) ## Convertir un nombre arbitraire en binaire: 247? @@ -265,6 +313,7 @@ $$ N += 1 } ``` + . . . 2. Boucle @@ -277,14 +326,82 @@ $$ } ``` +# Les additions en binaire + +Que donne l'addition `1101` avec `0110`? + +* L'addition est la même que dans le système décimal + + ``` + 1101 8+4+0+1 = 13 + + 0110 + 0+4+2+0 = 6 + ------- ----------------- + 10011 16+0+0+2+1 = 19 + ``` +* Les entiers sur un ordinateur ont une précision **fixée** (ici 4 bits). +* Que se passe-t-il donc ici? + +. . . + +## Dépassement de capacité: le nombre est tronqué + +* `10011 (19) -> 0011 (3)`. +* On fait "le tour"." + +# Les multiplications en binaire (1/2) + +Que donne la multiplication de `1101` avec `0110`? + +* L'addition est la même que dans le système décimal + + ``` + 1101 13 + * 0110 * 6 + --------- -------------- + 0000 78 + 11010 + 110100 + + 0000000 + --------- -------------- + 1001110 64+0+0+8+4+2+0 + ``` + +# Les multiplications en binaire (2/2) + +## Que fait la multiplication par 2? + +. . . + +* Décalage de un bit vers la gauche! + + ``` + 0110 + * 0010 + --------- + 0000 + + 01100 + --------- + 01100 + ``` + +. . . + +## Que fait la multiplication par $2^N$? + +. . . + +* Décalade de $N$ bits vers la gauche! + +# Entiers signés (1/N) + -# TODO +<!-- # TODO --> -## Entiers, entiers non-signés +<!-- ## Entiers, entiers non-signés --> -## Complément à 1, 2 +<!-- ## Complément à 1, 2 --> -## Nombres à virgule flottante, simple/double précision +<!-- ## Nombres à virgule flottante, simple/double précision --> # Types composés: `struct`{.C} (1/6)