diff --git a/slides/boucles_conditions.md b/slides/boucles_conditions.md new file mode 100644 index 0000000000000000000000000000000000000000..ed5c54803f2d10efb3e5bfd8f7315a60e402acb0 --- /dev/null +++ b/slides/boucles_conditions.md @@ -0,0 +1,199 @@ +--- +title: "Boucles et conditions" +date: "2021-09-28" +patat: + wrap: true + margins: + left: 10 + right: 10 +--- + +# Quiz: Que fait le code suivant? + +```C +#include <stdio.h> +#include <stdlib.h> +int main() { + printf("Enter n: "); + int n = 0; + scanf("%d", &n); + int res = 0; + for (int i = 0; i <= n; ++i) { + res += i; + } + printf("For = %d, the result is %d\n", n, res); + if (sum != n * (n+1) / 2) { + printf("Error: the answer is wrong.\n"); + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} +``` + +# Génération d'un exécutable + +- Pour pouvoir être exécuté un code C doit être d'abord compilé (avec `gcc` ou `clang`). +- Pour un code `prog.c` la compilation "minimale" est + + ```bash + $ clang prog.c + $ ./a.out # exécutable par défaut + ``` + +- Il existe une multitude d'options de compilation: + + ```bash + $ clang -std=c11 -Wall -Wextra prog.c -o prog + ``` + 1. `-std=c11` utilisation de C11. + 2. `-Wall` et `-Wextra` activation des warnings. + 3. `-o` défini le fichier exécutable à produire en sortie. + +# Structures de contrôle: `if`{.C} .. `else if`{.C} .. `else`{.C} (1/2) + +## Syntaxe + +```C +if (expression) { + instructions; +} else if (expression) { // optionnel + // il peut y en avoir plusieurs + instructions; +} else { + instructions; // optionnel +} +``` + +```C +if (x) { // si x s'évalue à `vrai` + printf("x s'évalue à vrai.\n"); +} else if (y == 8) { // si y vaut 8 + printf("y vaut 8.\n"); +} else { + printf("Ni l'un ni l'autre.\n"); +} +``` + +# Entrées/sorties: `printf()`{.C} (1/2) + +## Généralités + +- La fonction `printf()`{.C} permet d'afficher du texte sur le terminal: + + ```C + int printf(const char *format, ...); + ``` +- Nombre d'arguments variables. +- `format`{.C} est le texte, ainsi que le format (type) des variables à afficher. +- Les arguments suivants sont les expressions à afficher. + +# Entrées/sorties: `printf()`{.C} (2/2) + +## Exemple + +```C +#include <stdio.h> +#include <stdlib.h> + +int main() { + printf("Hello world.\n"); + int val = 1; + printf("Hello world %d time.\n", val); + printf("%f squared is equal to %f.\n", 2.5, 2.5*2.5); + return EXIT_SUCCESS; +} +``` + +# Entrées/sorties: `scanf()`{.C} (1/2) + +## Généralités + +- La fonction `scanf()`{.C} permet de lire du texte formaté entré au clavier: + + ```C + int scanf(const char *format, ...); + ``` + +- `format`{.C} est le format des variables à lire (comme `printf()`{.C}). +- Les arguments suivants sont les variables où sont stockées les valeurs lues. + +# Entrées/sorties: `scanf()`{.C} (2/2) + +## Exemple + +```C +#include <stdio.h> +#include <stdlib.h> + +int main() { + printf("Enter 3 numbers: \n"); + int i, j, k; + scanf("%d %d %d", &i, &j, &k); + printf("You entered: %d %d %d\n", i, j, k); + + return EXIT_SUCCESS; +} +``` + +# Structures de contrôle: `continue`{.C}, `break`{.C} + +- `continue`{.C} saute à la prochaine itération d'une boucle. + + ```C + int i = 0; + while (i < 10) { + if (i == 3) { + continue; + } + printf("%d\n", i); + i += 1; + } + ``` + +- `break`{.C} quitte le bloc itératif courant d'une boucle. + + ```C + for (int i = 0; i < 10; i++) { + if (i == 3) { + break; + } + printf("%d\n", i); + } + ``` + +# La fonction `main()` (1/2) + +## Généralités + +- Point d'entrée du programme. +- Retourne le code d'erreur du programme: + - 0: tout s'est bien passé. + - Pas zéro: problème. +- La valeur de retour peut être lue par le shell qui a exécuté le programme. +- `EXIT_SUCCESS`{.C} et `EXIT_FAILURE`{.C} (de `stdlib.h`) sont des valeurs de retour **portables** de programmes C. + +# La fonction `main()` (2/2) + +## Exemple + +```C +int main() { + // ... + if (error) + return EXIT_FAILURE; + else + return EXIT_SUCCESS; +} +``` + +- Le code d'erreur est lu dans le shell avec `$?`{.bash} + +```bash +$ ./prog +$ echo $? +0 # tout s'est bien passé par exemple +$ if [ $? -eq 0 ]; then echo "OK" ; else echo "ERROR"; fi +ERROR # si tout s'est mal passé +``` + + diff --git a/slides/figs/matrix.png b/slides/figs/matrix.png deleted file mode 100644 index 7fc07f4c8b426af6d9b873f349c832844d92cf50..0000000000000000000000000000000000000000 Binary files a/slides/figs/matrix.png and /dev/null differ diff --git a/slides/figs/matrix_qr.png b/slides/figs/matrix_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2c45261290e5dc508c661a2c66b3545776e553 Binary files /dev/null and b/slides/figs/matrix_qr.png differ diff --git a/slides/figs/terminal_open.png b/slides/figs/terminal_open.png new file mode 100644 index 0000000000000000000000000000000000000000..16bd9c85f6380b34bb9c46c2286831ae9bb66ab2 Binary files /dev/null and b/slides/figs/terminal_open.png differ