diff --git a/lessons/lesson_1/contenu_cours_1.md b/lessons/lesson_1/contenu_cours_1.md index 24b2d2658718520002b1c33614c579c2950f2959..b1dc555cd13beb76667968333533ef42deb423ff 100644 --- a/lessons/lesson_1/contenu_cours_1.md +++ b/lessons/lesson_1/contenu_cours_1.md @@ -1,6 +1,6 @@ -# Algorithmes et structures de données 2019-20 +# Algorithmes et structures de données 2020-21 -Contenu du cours 1 du 18.09.2019 +Contenu du cours 1 du 16.09.2020 ***** @@ -12,7 +12,7 @@ bureau B410 022 546 2554 paul.albuquerque@hesge.ch -## Organisation du module (2 cours, 50 % chacun) +## Organisation du module (2 cours, 50 % chacun) - Algorithmes et structures de données - 1er semestre @@ -24,10 +24,10 @@ paul.albuquerque@hesge.ch > Au moins 2 évaluations par semestre - Programmation séquentielle en langage C - - 1er & 2ème semestre :travaux pratiques en langage C + - 1er & 2ème semestre :travaux pratiques en langage C - Chaque semestre des travaux pratiques sont répartis dans deux gros projets d'env. 7 semaines -## Qu'est-ce qu'un algorithme ? +## Qu'est-ce qu'un algorithme ? Informellement, c'est une recette ou une marche à suivre. @@ -42,9 +42,9 @@ Plus formellement: Le mot *algorithme* vient du nom latinisé du mathématicien perse [Al-Khawarizmi](http://fr.wikipedia.org/wiki/Al-Khawarizmi) -Les algorithmes des grecs : Euclide, Erastosthène +Les algorithmes des grecs : Euclide, Erastosthène -Le père de l'algorithmique : **Muhammad Ibn Mūsā al-Khuwārizmī** +Le père de l'algorithmique : **Muhammad Ibn Mūsā al-Khuwārizmī** Résolution d'un problème @@ -64,17 +64,17 @@ Résolution d'un problème - Forme de l'algorithme (boucle et tests) - Condition d'arrêt de la boucle -## Qu'est qu'un programme C ? +## Qu'est qu'un programme C ? -- Importations de librairies (paquetages) : +- Importations de librairies (paquetages) : ```C #include <stdlio.h> #include <stdlib.h> ``` -- Entête du programme : `int main()` -- Déclaration de variables : `int x = 5;` -- Bloc d'instructions : +- Entête du programme : `int main()` +- Déclaration de variables : `int x = 5;` +- Bloc d'instructions : ```C { int x = 5; @@ -83,12 +83,12 @@ Résolution d'un problème } ``` -## Les types de base : les entiers (`int, unsigned int`) +## Les types de base : les entiers (`int, unsigned int`) - Numérotation binaire en particulier sur 32 bits - Nombres négatifs =\> complément à 2 - numération sur 3 bits : + numération sur 3 bits : |binaire | entier≥0| binaire | entier<0| |:-------|:---------------------|:--------|:--------| @@ -99,27 +99,27 @@ Résolution d'un problème - Nombres négatifs =\> complément à 1 par simple inversion des bits - **problème **: 0 possède alors deux représentations ! + **problème **: 0 possède alors deux représentations ! - Opérations particulières - - Division entière : 5 / 2 = 2 , 10 / 3 = 3 , 18 / 5 = 3 - - Reste de la division entière (modulo) : 5 % 2 = 1 , 10 % 3 = 1 , 18 % 5 = 3 + - Division entière : 5 / 2 = 2 , 10 / 3 = 3 , 18 / 5 = 3 + - Reste de la division entière (modulo) : 5 % 2 = 1 , 10 % 3 = 1 , 18 % 5 = 3 - Constantes de la librairie `<limits.h>`: `INT_MAX, INT_MIN` -## Les types de base : les réels (`float, double`) +## Les types de base : les réels (`float, double`) - `Float`: écriture, opérations, exemples complets d'exponentiation - `pow(A,B)` où `A, B` sont des `double` =\> le résultat est un `double` ! - **Attention !** Le calcul effectué par *pow* utilise un logarithmes et une exponentielle. + `pow(A,B)` où `A, B` sont des `double` =\> le résultat est un `double` ! + **Attention !** Le calcul effectué par *pow* utilise un logarithmes et une exponentielle. > Sur 32 bits : 1 bit de signe, 8 bits pour l'exposant et 23 bits pour la mantisse. -- Exemple : coder 19,625 en binaire +- Exemple : coder 19,625 en binaire -> > 19 : 10011 = 2<sup>4</sup> + 2<sup>1</sup> + 2<sup>0</sup>; -0,625 : 0,101 = 2<sup>-1</sup> + 2<sup>-3</sup> +> > 19 : 10011 = 2<sup>4</sup> + 2<sup>1</sup> + 2<sup>0</sup>; +0,625 : 0,101 = 2<sup>-1</sup> + 2<sup>-3</sup> -> > 19,625 : 10011,101 = 0,10011101 \* 2<sup>5</sup> +> > 19,625 : 10011,101 = 0,10011101 \* 2<sup>5</sup> > > Le signe du nombre est stocké sur dans le 1<sup>er</sup> bit (0 positif / 1 négatif). @@ -128,11 +128,11 @@ Résolution d'un problème > > Donc 5 = 00000101 > > La mantisse de 23 bits stockée est 00111010000000000000000 -(le 1<sup>er</sup> 1 est omis car obligatoire) + (le 1<sup>er</sup> 1 est omis car obligatoire) -> > 19,625 stocké en binaire : 0 00000101 00111010000000000000000 +> > 19,625 stocké en binaire : 0 00000101 00111010000000000000000 -- Questions : quelles sont les valeurs les plus petite, grande, petite positive (\>0)? +- Questions : quelles sont les valeurs les plus petite, grande, petite positive (\>0)? ## Les booléens `bool` @@ -145,6 +145,7 @@ Résolution d'un problème bool x = true; // booléen vrai bool x = false; // booléen faux bool x = 17; // 17 converti en booléen vrai + bool x = -5; // -5 converti en booléen vrai bool x = 0; // 0 converti en booléen faux int y = false; // booléen faux converti en 0 int y = true; // booléen vrai converti en 1 @@ -153,16 +154,16 @@ Résolution d'un problème - Vérification =\> table de vérité - not (A and B) = (not A) or (not B) : `!(A && B) == (!A)|| (!B)` - not (A or B) = (not A) and (not B) : `! --|| B) == (!A) && (!B)` -- Opérateurs logiques : `*==, !=, &&, ||, !, <, >, <=, >=` -- Comparaisons bit à bit : `&` (et), `|` (ou), `^` (xor), `!` (not) -- Comparaisons bit à bit avec assignation : `&=, |=, ^=` +- Opérateurs logiques : `*==, !=, &&, ||, !, <, >, <=, >=` +- Comparaisons bit à bit : `&` (et), `|` (ou), `^` (xor), `!` (not) +- Comparaisons bit à bit avec assignation : `&=, |=, ^=` ## Structures de boucle - Syntaxe ```C - for (initialisation>;condition;increment) { + for (initialisation;condition;increment) { instructions; } @@ -174,7 +175,7 @@ Résolution d'un problème instructions; } while (condition); ``` -- Instructions : `break, continue` +- Instructions : `break, continue` ## Les caractères (type prédéfini) `char`