diff --git a/slides/cours_2.md b/slides/cours_2.md index 27094b701e71e352895539774a4fc59d806396e9..6e0b9e05c8cbd57f5940b08f3bbf50d20da52c9e 100644 --- a/slides/cours_2.md +++ b/slides/cours_2.md @@ -52,7 +52,6 @@ int main() { - Plus petit commun multiple (PPCM) de deux nombres - Autre algorithme de calcul du PPCM de deux nombres - Plus grand commun diviseur (PGCD) de deux nombres -- Remplissage d'un tableau et recherche de la valeur minimale # Le calcul du PPCM (1/5) @@ -372,138 +371,4 @@ void main() { } ``` -# Collections: tableaux statiques -* Objets de même type: leur nombre est **connu à la compilation**; -* Stockés contigüement en mémoire (très efficace); - - ```C - #define SIZE 10 - int entiers[] = {2, 1, 4, 5, 7}; // taille 5, initialisé - int tab[3]; // taille 3, non initialisé - float many_floats[SIZE]; // taille 10, non initialisé - ``` -* Les indices sont numérotés de `0` à `taille-1`; - - ```C - int premier = entier[0]; // premier = 2 - int dernier = entier[4]; // dernier = 7 - ``` -* Les tableaux sont **non-initialisés** par défaut; -* Les bornes ne sont **jamais** vérifiées. - - ```C - int indetermine_1 = tab[1]; // undefined behavior - int indetermine_2 = entiers[5]; // UB - ``` - -# Remarques - -* Depuis `C99` possibilité d'avoir des tableaux dont la taille est *inconnue à - la compilation*; - - ```C - int size; - scanf("%d", &size); - char string[size]; - ``` - - . . . - -* Considéré comme une mauvaise pratique: que se passe-t-il si `size == 1e9`? -* On préfère utiliser l'allocation **dynamique** de mémoire pour ce genre de - cas-là (spoiler du futur du cours). - -# Initialisation - -* Les variables ne sont **jamais** initialisées en `C` par défaut. -* Question: Que contient le tableau suivant? - - ```C - double tab[4]; - ``` - -. . . - -* Réponse: On en sait absolument rien! -* Comment initialiser un tableau? - -. . . - - ```C - #define SIZE 10 - double tab[SIZE]; - for (int i = 0; i < SIZE; ++i) { - tab[i] = rand() / (double)RAND_MAX * 10.0 - 5.0; // double [-5;5] - } - ``` - -# Recherche du minimum dans un tableau (1/2) - -## Problématique - -Trouver le minimum d'un tableau et l'indice de l'élément le plus petit. - -## Écrire un pseudo-code résolvant ce problème (groupe de 3), 2min - -. . . - -```C -index = 0 -min = tab[0] -for i in [1; SIZE] { - if min > tab[i] { - min = tab[i] - index = i - } -} -``` - -# Recherche du minimum dans un tableau (2/2) - -## Implémenter ce bout de code en C (groupe de 3), 4min - -. . . - -```C -int index = 0; -float min = tab[0]; -for (int i = 1; i < SIZE; ++i) { - if min > tab[i] { - min = tab[i]; - index = i; - } -} -``` - -# Tri par sélection (1/2) - -## Problématique - -Trier un tableau par ordre croissant. - -## Idée d'algorithme - -```C -ind = 0 -boucle (ind < SIZE-1) { - Trouver le minimum du tableau, tab_min[ind:SIZE]. - Échanger tab_min avec tab[ind] - ind += 1 -} -``` - -# Tri par sélection (2/2) - -## Implémentation par groupe de 3 - -* Initialiser aléatoirement un tableau de `double` de taille 10; -* Afficher le tableau; -* Trier par sélection le tableau; -* Afficher le résultat trié; -* Vérifier algorithmiquement que le résultat est bien trié. - - -# La fin - -## Des questions? diff --git a/slides/cours_3.md b/slides/cours_3.md new file mode 100644 index 0000000000000000000000000000000000000000..0f2ca366b80e6f8aab3592f2f56395c43312daeb --- /dev/null +++ b/slides/cours_3.md @@ -0,0 +1,141 @@ +# Quelques algorithmes simples + +## Voyons quelques algorithmes supplémentaires + +- Remplissage d'un tableau et recherche de la valeur minimale + +# Collections: tableaux statiques + +* Objets de même type: leur nombre est **connu à la compilation**; +* Stockés contigüement en mémoire (très efficace); + + ```C + #define SIZE 10 + int entiers[] = {2, 1, 4, 5, 7}; // taille 5, initialisé + int tab[3]; // taille 3, non initialisé + float many_floats[SIZE]; // taille 10, non initialisé + ``` +* Les indices sont numérotés de `0` à `taille-1`; + + ```C + int premier = entier[0]; // premier = 2 + int dernier = entier[4]; // dernier = 7 + ``` +* Les tableaux sont **non-initialisés** par défaut; +* Les bornes ne sont **jamais** vérifiées. + + ```C + int indetermine_1 = tab[1]; // undefined behavior + int indetermine_2 = entiers[5]; // UB + ``` + +# Remarques + +* Depuis `C99` possibilité d'avoir des tableaux dont la taille est *inconnue à + la compilation*; + + ```C + int size; + scanf("%d", &size); + char string[size]; + ``` + + . . . + +* Considéré comme une mauvaise pratique: que se passe-t-il si `size == 1e9`? +* On préfère utiliser l'allocation **dynamique** de mémoire pour ce genre de + cas-là (spoiler du futur du cours). + +# Initialisation + +* Les variables ne sont **jamais** initialisées en `C` par défaut. +* Question: Que contient le tableau suivant? + + ```C + double tab[4]; + ``` + +. . . + +* Réponse: On en sait absolument rien! +* Comment initialiser un tableau? + +. . . + + ```C + #define SIZE 10 + double tab[SIZE]; + for (int i = 0; i < SIZE; ++i) { + tab[i] = rand() / (double)RAND_MAX * 10.0 - 5.0; // double [-5;5] + } + ``` + +# Recherche du minimum dans un tableau (1/2) + +## Problématique + +Trouver le minimum d'un tableau et l'indice de l'élément le plus petit. + +## Écrire un pseudo-code résolvant ce problème (groupe de 3), 2min + +. . . + +```C +index = 0 +min = tab[0] +for i in [1; SIZE] { + if min > tab[i] { + min = tab[i] + index = i + } +} +``` + +# Recherche du minimum dans un tableau (2/2) + +## Implémenter ce bout de code en C (groupe de 3), 4min + +. . . + +```C +int index = 0; +float min = tab[0]; +for (int i = 1; i < SIZE; ++i) { + if min > tab[i] { + min = tab[i]; + index = i; + } +} +``` + +# Tri par sélection (1/2) + +## Problématique + +Trier un tableau par ordre croissant. + +## Idée d'algorithme + +```C +ind = 0 +boucle (ind < SIZE-1) { + Trouver le minimum du tableau, tab_min[ind:SIZE]. + Échanger tab_min avec tab[ind] + ind += 1 +} +``` + +# Tri par sélection (2/2) + +## Implémentation par groupe de 3 + +* Initialiser aléatoirement un tableau de `double` de taille 10; +* Afficher le tableau; +* Trier par sélection le tableau; +* Afficher le résultat trié; +* Vérifier algorithmiquement que le résultat est bien trié. + + +# La fin + +## Des questions?