diff --git a/slides/Makefile b/slides/Makefile index ca456632868c6c60372634b61f8c8c31360e37c7..46d7e37eef2751e0c2e3f8ef7d34d6700fe75ff9 100644 --- a/slides/Makefile +++ b/slides/Makefile @@ -27,7 +27,8 @@ all: puppeteer $(PDF) # La cible par défaut (all) exécute les cibles %.html et puppeteer: @echo "Setting chromium to $(CHROMIUM) for puppeteer" - @echo -e "{\n\"executablePath\":" \"$(CHROMIUM)\" ",\n\"args\": [\"--no-sandbox\"]\n}" > .puppeteer.json + @echo "{\n\"executablePath\":" \"$(CHROMIUM)\" ",\n\"args\": [\"--no-sandbox\"]\n}" > .puppeteer.json + # @echo -e "{\n\"executablePath\":" \"$(CHROMIUM)\" ",\n\"args\": [\"--no-sandbox\"]\n}" > .puppeteer.json markdown: $(MARKDOWN) # La markdown les cibles %.markdown diff --git a/slides/boucles_conditions.md b/slides/boucles_conditions.md index 39197583aef040cc6ec734b7a9653105fbd4166c..f7dd76a6da9f5dfd33f2cc3b89319089f9e2656c 100644 --- a/slides/boucles_conditions.md +++ b/slides/boucles_conditions.md @@ -1,6 +1,6 @@ --- title: "Boucles et conditions" -date: "2023-09-28" +date: "2024-09-24" --- # Quiz diff --git a/slides/command_line.md b/slides/command_line.md index 67cab0777b8365b730042bee2c97db7a4434f8eb..c736e66f31bac206fe5c6d048fd4f43b50358cbe 100644 --- a/slides/command_line.md +++ b/slides/command_line.md @@ -1,6 +1,6 @@ --- title: "Introduction à la l'interface en ligne de commande" -date: "2023-09-28" +date: "2024-09-24" --- # Introduction diff --git a/slides/intro.md b/slides/intro.md index ea1d387fd87ec3865a759334ff8f632be6896e4b..5988df8965316f7d763e17536524c9e7b85e9214 100644 --- a/slides/intro.md +++ b/slides/intro.md @@ -1,6 +1,6 @@ --- title: "Introduction générale" -date: "2023-09-21" +date: "2024-09-17" --- # La hotline @@ -9,7 +9,7 @@ Nom Mél Bureau -------------------- ------------------------------ -------------------- Kevin Heirich kevin.heirich@hesge.ch A403 Quentin Leblanc quentin.leblanc@hesge.ch A403 -Raphael Bach raphael.bach@hesge.ch B411 +Damian Boquete damian.boquete@hesge.ch B403 Michaël El Kharroubi michael.el-kharroubi@hesge.ch A403 Paul Albuquerque paul.albuquerque@hesge.ch B410 Orestis Malaspinas orestis.malaspinas@hesge.ch A401 @@ -32,15 +32,12 @@ Tout le contenu de ce qu'on raconte se trouve sur cyberlearn: [Matrix](https://matrix.to/#/!aKYVlcclmPGYXQFxAK:matrix.org?via=matrix.org), installez [element.io](https://element.io). - {width=20%} -* Communauté Lemmy: <https://lemmy.hepiapp.ch/c/prog_seq> - # Organisation du cours (1/3) ## But: Illustration des concepts vus au cours d'algorithmique -- Salle A502 pour la "théorie" (présentation langage et TPs). -- Salles A406-A432-A433 pour la "pratique". +- Salle B119 pour la "théorie" (présentation langage et TPs). +- Salles A404-A406-A432-A433 pour la "pratique". ## Le bâton @@ -69,7 +66,6 @@ Tout le contenu de ce qu'on raconte se trouve sur cyberlearn: - Il y a un certain nombre de ressources se trouvant sur <https://malaspinas.academy>. - Mon bureau est toujours ouvert (tapez *assez fort* sur la porte). - N'hésitez pas à utiliser le salon *Element*... -- Et/ou lemmy. # Évaluations diff --git a/slides/.gitignore b/slides_2023/.gitignore similarity index 100% rename from slides/.gitignore rename to slides_2023/.gitignore diff --git a/slides_2023/Makefile b/slides_2023/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ca456632868c6c60372634b61f8c8c31360e37c7 --- /dev/null +++ b/slides_2023/Makefile @@ -0,0 +1,65 @@ +# PDFOPTIONS = -t beamer +# PDFOPTIONS += -F mermaid-filter +# PDFOPTIONS += --highlight-style my_highlight.theme +# PDFOPTIONS += --pdf-engine pdflatex +# PDFOPTIONS += -V theme:metropolis +# PDFOPTIONS += -V themeoptions:numbering=none -V themeoptions:progressbar=foot +# PDFOPTIONS += -V urlcolor=blue + +PDFOPTIONS = -t beamer +PDFOPTIONS += --pdf-engine=xelatex +PDFOPTIONS += -F mermaid-filter +PDFOPTIONS += --default-image-extension=pdf +PDFOPTIONS += -V theme:metropolis +PDFOPTIONS += -V themeoptions:numbering=none -V themeoptions:progressbar=foot +PDFOPTIONS += -V fontsize=smaller +PDFOPTIONS += --highlight-style espresso +PDFOPTIONS += -H ./header.tex --listings + +MD=$(wildcard *.md) # Tous les fichiers .md +HTML=$(MD:%.md=%.html) # Pour les fichier html on transforme .md -> .html +PDF=$(MD:%.md=%.pdf) # Pour les fichier pdf on transforme .md -> .pdf +MARKDOWN=$(MD:%.md=%.markdown) # Pour les fichier markdown on transforme .md -> .markdown +CHROMIUM:=$(shell which chromium || which chromium-browser) + +# all: $(PDF) $(HTML) # La cible par défaut (all) exécute les cibles %.html et %.pdf +all: puppeteer $(PDF) # La cible par défaut (all) exécute les cibles %.html et %.pdf + +puppeteer: + @echo "Setting chromium to $(CHROMIUM) for puppeteer" + @echo -e "{\n\"executablePath\":" \"$(CHROMIUM)\" ",\n\"args\": [\"--no-sandbox\"]\n}" > .puppeteer.json + +markdown: $(MARKDOWN) # La markdown les cibles %.markdown + +%.pdf: %.md metadata.yaml # %.pdf (chaque fichier %.md génère un fichier avec le même nom mais l'extension .pdf et la dépendance metadata.yaml) + pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^ + +%.html: %.md metadata.yaml + pandoc -s $(OPTIONS) $(REVEALOPTIONS) -o $@ $^ + +%.markdown: %.md metadata.yaml yq + sed '1 { /^---/ { :a N; /\n---/! ba; d} }' $< > no_header + grep -v -F -x -f no_header $< > header.yaml + echo "---" > tmp.yaml + ./yq_linux_amd64 merge metadata.yaml header.yaml >> tmp.yaml + cat tmp.yaml no_header > $@ + rm no_header header.yaml tmp.yaml + +yq: # On peut même télécharger un petit programme avec notre makefile + wget -nc https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_amd64 + chmod "u+x" yq_linux_amd64 + +index.md: gen_index.sh + $(shell ./gen_index.sh) + +index.html: index.md + pandoc -s $(OPTIONS) --css ../css/tufte-css/tufte.css -o $@ $^ + +deploy: all index.html + mkdir -p prog_seq_c_cours + cp *.pdf prog_seq_c_cours + cp *.html prog_seq_c_cours + +clean: + rm -f *.pdf *.html *.markdown yq_linux_amd64* index.md + diff --git a/slides/allocation_dynamique.md b/slides_2023/allocation_dynamique.md similarity index 100% rename from slides/allocation_dynamique.md rename to slides_2023/allocation_dynamique.md diff --git a/slides_2023/boucles_conditions.md b/slides_2023/boucles_conditions.md new file mode 100644 index 0000000000000000000000000000000000000000..39197583aef040cc6ec734b7a9653105fbd4166c --- /dev/null +++ b/slides_2023/boucles_conditions.md @@ -0,0 +1,269 @@ +--- +title: "Boucles et conditions" +date: "2023-09-28" +--- + +# Quiz + +\footnotesize + +## 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 (res != 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) + +\footnotesize + +## 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"); +} +``` + + +# Structures de contrôle: `continue`{.C}, `break`{.C} + +\footnotesize + +- `continue`{.C} saute à la prochaine itération d'une boucle. + + ```C + int i = 0; + while (i < 10) { + if (i == 3) { + i += 1; + 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é +``` + +# 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; + // %d => int + printf("Hello world %d time.\n", val); + // %f => float + printf("%f squared is equal to %f.\n", + 2.5, 2.5*2.5); + // %s => string + printf("Hello world %s.\n", "Hello world"); + 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; +} +``` + +# Nombres aléatoires: `rand()`, `srand()`{.C} (2/2) + +\footnotesize + +``` +$ man 3 rand +The rand() function returns a pseudo-random integer +in the range 0 to RAND_MAX inclusive (i.e., the +mathematical range [0, RAND_MAX]). +``` + +## Exemple + +```C +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +int main() { + srand(0); // every run will be identical + srand(time(NULL)); // every run will be be different + for (int i = 0; i < 50; ++i) { + printf("%d\n", rand() % 50); // à quoi sert % 50? + } + return EXIT_SUCCESS; +} +``` + +# Le cas du nombre secret + +## But du programme + +* Faire chercher un nombre aléatoire, +* Le nombre est compris entre 0 et une borne max. + +## Quelles sont les étapes? + + +1. Donner une borne maximale à l'ordinateur, MAX. + +. . . + +2. Faire tirer un nombre aléatoire à l'ordinateur entre 0 et MAX-1. + +. . . + +3. Le·la joueur·se joue un nombre. + +. . . + +4. L'ordinateur vérifie la réponse: + + * Si correct le jeu est fini, + * Sinon indiquer si le nombre secret est plus grand ou plus petit et revenir à 3. + +# La fin + +1. Y a-t-il des questions? + +. . . + +2. Si oui, répondre et revenir à 1, sinon aller faire l'exercice en A432/433/406. diff --git a/slides_2023/command_line.md b/slides_2023/command_line.md new file mode 100644 index 0000000000000000000000000000000000000000..67cab0777b8365b730042bee2c97db7a4434f8eb --- /dev/null +++ b/slides_2023/command_line.md @@ -0,0 +1,220 @@ +--- +title: "Introduction à la l'interface en ligne de commande" +date: "2023-09-28" +--- + +# Introduction + +## Généralités + +* *Command line interface* (CLI) en anglais. +* Interface textuelle vers l'ordinateur. +* Peut s'appeler le *shell*, le *terminal*, la *console*, ... +* Semble obscure, mais est très pratique (automatisation de tâches, copier-coller, ...). +* Vous devrez l'utiliser tout au long de vos études. +* Existe sous Linux, MacOS, et même Windows (les commandes peuvent varier!). +* Ici on ne parlera que de *Linux*. + +# A quoi ça sert? + +## Équivalent textuel d'un GUI + +Toutes les informations obtenues avec une interface graphique, peuvent être obtenues à l'aide de la ligne de commande (liste loin d'être exhaustive): + +* Changement d'un répertoire: `cd`{.bash} +* Affichage du contenu d'un répertoire: `ls`{.bash} +* Déplacement de fichier: `mv`{.bash} +* Copie de fichier: `cp`{.bash} +* Création de répertoire: `mkdir`{.bash} +* Recherche de fichier: `find`{.bash} +* Recherche de texte dans un fichier: `grep`{.bash} +* Etc, etc, etc, etc, etc + +## Mais aussi + +* Télécharger des documents, compiler, éditer des fichiers, ... + +# Ouvrir un terminal + +\footnotesize + +Dépendant de votre distribution de Linux l'ouverture d'un terminal peut varier. + +Ce qui marche *presque* tout le temps: + +1. Appuyer sur le bouton `Super` (`Windows`) du clavier. +2. Commencer à taper "terminal". + +{width=100%} + +Raccourcis clavier: + +* `Ctrl+Alt+T`{.bash} +* `Super+T`{.bash} +* Vous pouvez customiser les raccourcis. + +# Une fois le terminal ouvert + +Vous pouvez taper des commandes puis `Entrée`. + +```bash +$ pwd +/home/orestis +``` + +Exemple: `pwd`{.bash} affiche le répertoire courant (**p**rint **w**orking **d**irectory). + +**Attention: les commandes sont sensibles à la casse!** + +Exemple: `cd`{.bash} change de répertoire (**c**hange **d**irectory). + +:::::::::::::: {.columns} + +::: {.column width="45%"} + +```bash +$ pwd +/home/orestis +$ cd .. +$ pwd +/home +``` + +::: +::: {.column width="45%"} + +```bash +$ cd orestis +$ pwd +/home/orestis +$ cd ../.. +$ pwd +/ +``` + +::: +:::::::::::::: + +# Remarque: chemins relatifs ou absolus + +Un *chemin* est relatif à moins que le chemin commence par `/` ou `~`. + +```bash +$ pwd +/home/orestis +$ cd Downloads +$ pwd +/home/orestis/Downloads +$ cd /tmp +$ pwd +/tmp +$ cd ~/Downloads +$ pwd +/home/orestis/Downloads +``` + +# Ouvrir un éditeur de texte et éditer un ficher + +* Installer un éditeur de texte: `codium`, `vim`, `nvim`, ... +* Ouvrir l'éditeur de texte (ici codium): + + ```bash + $ codium + ``` +* Écrire `Hello World!` dans le fichier et sauver sous `cours.dat`. + +* Ou alors utiliser `nano`, `vi`, `nvim`, ... + + ```bash + $ nano cours.dat + ``` +* Écrire `Hello World!` puis `Ctrl+X` et `Y`. + +# Quelques commandes utiles (1/3) + +\footnotesize + +## `mkdir`, création de répertoire + +```bash +$ mkdir tmp +$ cd tmp +$ pwd +/home/orestis/tmp +``` + +## `ls`, affiche le contenu d'un répertoire + +```bash +$ ls +Desktop Documents git Music Public tmp +Docker Downloads go Pictures Templates Videos +$ ls -ltr +... # des répertoires +drwxr-xr-x 3 orestis orestis 4096 31 aoû 09:54 Documents +drwxr-xr-x 11 orestis orestis 4096 7 sep 15:59 Downloads +drwxr-xr-x 2 orestis orestis 4096 9 sep 11:14 Pictures +drwxr-xr-x 2 orestis orestis 4096 9 sep 12:41 tmp +-rw-r--r-- 1 orestis orestis 6 9 sep 12:52 cours.dat +``` + +# Quelques commandes utiles (2/3) + +## `cp`{.bash}, copie de fichiers/répertoires + +```bash +$ cp cours.dat tmp/ # cp cours.dat -> tmp +$ ls tmp # affiche le rép tmp +cours.dat +$ cp -r tmp tmp2 # option -r => recursive +$ ls +cours.dat Docker Downloads go Pictures Templates tmp2 +Desktop Documents git Music Public tmp Videos +``` + +## `mv`{.bash}, déplacement de fichiers/répertoires + +```bash +$ ls tmp +$ mv cours.dat tmp # déplace cours.dat -> tmp +$ ls tmp +cours.dat +``` + +# Quelques commandes utiles (3/3) + +## `rm`{.bash}, effacer des fichiers/répertoires + +```bash +$ ls tmp +cours.dat +$ rm tmp/cours.dat +$ ls tmp +$ rm -r tmp tmp2 +$ ls +Desktop Documents git Music Public Videos +Docker Downloads go Pictures Templates +``` + +# La touche `tab`{.bash} + +Probablement la touche la plus utile du clavier: + +* permet la complétion d'une commande. +* permet la complétion d'un nom de fichier. +* permet d'afficher les complétions possibles. + +Fait gagner un temps considérable. + +# Éditeurs de texte + +Il existe différents éditeurs de texte qui pourraient être utiles: + +* `vscode`{.bash} ou `codium`{.bash} (la version sans l'espionnage M\$) +* `vim`{.bash} +* `geany`{.bash} +* `gedit`{.bash} +* ... + +Ne vous reposez pas trop sur l'éditeur pour tout faire à votre place. + diff --git a/slides/compilation_make.md b/slides_2023/compilation_make.md similarity index 100% rename from slides/compilation_make.md rename to slides_2023/compilation_make.md diff --git a/slides/examen.md b/slides_2023/examen.md similarity index 100% rename from slides/examen.md rename to slides_2023/examen.md diff --git a/slides/fichiers.md b/slides_2023/fichiers.md similarity index 100% rename from slides/fichiers.md rename to slides_2023/fichiers.md diff --git a/slides/figs/compilation.svg b/slides_2023/figs/compilation.svg similarity index 100% rename from slides/figs/compilation.svg rename to slides_2023/figs/compilation.svg diff --git a/slides/figs/compilation_plusieurs.svg b/slides_2023/figs/compilation_plusieurs.svg similarity index 100% rename from slides/figs/compilation_plusieurs.svg rename to slides_2023/figs/compilation_plusieurs.svg diff --git a/slides/figs/complex_makefile.svg b/slides_2023/figs/complex_makefile.svg similarity index 100% rename from slides/figs/complex_makefile.svg rename to slides_2023/figs/complex_makefile.svg diff --git a/slides/figs/double_pointeur.svg b/slides_2023/figs/double_pointeur.svg similarity index 100% rename from slides/figs/double_pointeur.svg rename to slides_2023/figs/double_pointeur.svg diff --git a/slides/figs/ex_makefile.svg b/slides_2023/figs/ex_makefile.svg similarity index 100% rename from slides/figs/ex_makefile.svg rename to slides_2023/figs/ex_makefile.svg diff --git a/slides/figs/ex_makefile_cible.svg b/slides_2023/figs/ex_makefile_cible.svg similarity index 100% rename from slides/figs/ex_makefile_cible.svg rename to slides_2023/figs/ex_makefile_cible.svg diff --git a/slides/figs/ex_makefile_dep.svg b/slides_2023/figs/ex_makefile_dep.svg similarity index 100% rename from slides/figs/ex_makefile_dep.svg rename to slides_2023/figs/ex_makefile_dep.svg diff --git a/slides/figs/ex_makefile_regle.svg b/slides_2023/figs/ex_makefile_regle.svg similarity index 100% rename from slides/figs/ex_makefile_regle.svg rename to slides_2023/figs/ex_makefile_regle.svg diff --git a/slides/figs/matrix_qr.png b/slides_2023/figs/matrix_qr.png similarity index 100% rename from slides/figs/matrix_qr.png rename to slides_2023/figs/matrix_qr.png diff --git a/slides/figs/memory.svg b/slides_2023/figs/memory.svg similarity index 100% rename from slides/figs/memory.svg rename to slides_2023/figs/memory.svg diff --git a/slides/figs/pointer_arithmetics.svg b/slides_2023/figs/pointer_arithmetics.svg similarity index 100% rename from slides/figs/pointer_arithmetics.svg rename to slides_2023/figs/pointer_arithmetics.svg diff --git a/slides/figs/pointer_struct.svg b/slides_2023/figs/pointer_struct.svg similarity index 100% rename from slides/figs/pointer_struct.svg rename to slides_2023/figs/pointer_struct.svg diff --git a/slides/figs/pointer_struct_ok.svg b/slides_2023/figs/pointer_struct_ok.svg similarity index 100% rename from slides/figs/pointer_struct_ok.svg rename to slides_2023/figs/pointer_struct_ok.svg diff --git a/slides/figs/terminal_open.png b/slides_2023/figs/terminal_open.png similarity index 100% rename from slides/figs/terminal_open.png rename to slides_2023/figs/terminal_open.png diff --git a/slides_2023/gen_index.sh b/slides_2023/gen_index.sh new file mode 100755 index 0000000000000000000000000000000000000000..5ecece660e8a02222c9c5d85e270a2f9f1b4b427 --- /dev/null +++ b/slides_2023/gen_index.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -e + +function get_info() { + local field=$(echo "$fullName" | sed "$2q;d" $1); + IFS=$3; + local field=($field); + if [ "${field}" != $5 ]; then + return 1 + fi + local field=${field[1]}; + IFS=$4; + local field=($field); + local field=${field[1]}; + echo "$field" +} + +function fail() { + printf '%s\n' "$1" >&2 ## Send message to stderr. + exit "${2-1}" ## Return a code specified by $2, or 1 by default. +} + +OIFS=$IFS +NUM_LINE=2 +PREFIX="" +# PREFIX=cours/algo/slides/ + +classes=() +for i in *.md; do + [ -f "$i" ] || break + date="$(get_info $i 3 ":" '"' "date")" + if [ "$date" == 1 ]; then + fail "Error date field not found" + fi + comp="$(get_info $i 2 ":" '"' "title")" + if [ "$comp" == 1 ]; then + fail "Error title field not found" + fi + i="${i%.*}" + class="[${date}: ${comp}](${PREFIX}${i}.pdf)" + classes+=("$class") +done +IFS=$'\n' +classes=($(sort <<<"${classes[*]}")) +date=$(date '+%Y-%m-%d') +echo "---" > index.md +echo "title: Cours de programmation séquentielle" >> index.md +echo "date: ${date}" >> index.md +echo "---" >> index.md +echo "" >> index.md +echo "# Les slides du cours" >> index.md +echo "" >> index.md +for i in ${classes[*]}; do + echo "* $i" >> index.md +done + + +IFS=$OIFS diff --git a/slides/genericite.md b/slides_2023/genericite.md similarity index 100% rename from slides/genericite.md rename to slides_2023/genericite.md diff --git a/slides_2023/header.tex b/slides_2023/header.tex new file mode 100644 index 0000000000000000000000000000000000000000..f5564a1de4766b4ab1f1eca259f6b90286e208eb --- /dev/null +++ b/slides_2023/header.tex @@ -0,0 +1,18 @@ +\lstset{ + basicstyle=\fontsize{7}{7}\ttfamily, + keywordstyle=\color[rgb]{0.13,0.29,0.53}\bfseries, + stringstyle=\color[rgb]{0.31,0.60,0.02}, + commentstyle=\color[rgb]{0.56,0.35,0.01}\itshape, + backgroundcolor=\color[RGB]{238,238,238}, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=4, + captionpos=b, + breaklines=true, + extendedchars=true, + columns=fixed, + frame=trbl, + framesep=4pt, +} +\usepackage{dsfont} diff --git a/slides_2023/intro.md b/slides_2023/intro.md new file mode 100644 index 0000000000000000000000000000000000000000..ea1d387fd87ec3865a759334ff8f632be6896e4b --- /dev/null +++ b/slides_2023/intro.md @@ -0,0 +1,105 @@ +--- +title: "Introduction générale" +date: "2023-09-21" +--- + +# La hotline + +Nom Mél Bureau +-------------------- ------------------------------ -------------------- +Kevin Heirich kevin.heirich@hesge.ch A403 +Quentin Leblanc quentin.leblanc@hesge.ch A403 +Raphael Bach raphael.bach@hesge.ch B411 +Michaël El Kharroubi michael.el-kharroubi@hesge.ch A403 +Paul Albuquerque paul.albuquerque@hesge.ch B410 +Orestis Malaspinas orestis.malaspinas@hesge.ch A401 +-------------------- ------------------------------ -------------------- + +Utilisez le libre service (pas encore d'horaire): + +# Communication + +Tout le contenu de ce qu'on raconte se trouve sur cyberlearn: + +- Algorithmes et structures de données + - <https://cyberlearn.hes-so.ch/course/view.php?id=7276> + - Clé d'inscription: algo_2023_24 + +- Programmation Sequentielle en C + - <https://cyberlearn.hes-so.ch/course/view.php?id=7282> + - Clé d'inscription: prog_seq_2023_24 +* Espace de discussion + [Matrix](https://matrix.to/#/!aKYVlcclmPGYXQFxAK:matrix.org?via=matrix.org), + installez [element.io](https://element.io). + + {width=20%} +* Communauté Lemmy: <https://lemmy.hepiapp.ch/c/prog_seq> + +# Organisation du cours (1/3) + +## But: Illustration des concepts vus au cours d'algorithmique + +- Salle A502 pour la "théorie" (présentation langage et TPs). +- Salles A406-A432-A433 pour la "pratique". + +## Le bâton + +- Présence en cours **obligatoire** (13h-16h45 tous les mardis). +- P. Albuquerque note les présences. + +## La carotte + +- Rare cours d'informatique de première. +- Travaux pratiques amusants et stimulants. + +# Organisation du cours (2/3) + +- Travaux pratiques à faire en C. +- Chaque séance est un nouveau travail pratique (typiquement d'une durée d'une + séance). +- Vous aurez à utiliser `git` sur <https://gitedu.hesge.ch/>. +- **Utilisez uniquement Linux** (dual boot sur vos portables). +- Les jeux vidéos sont pas une excuse pour pas avoir de linux[^1]. + +[^1]: [80 Percent of Steam's Top 100 Games Run 'Nearly Flawlessly' on Linux](https://www.tomshardware.com/news/80-percent-of-steam-games-run-on-linux). + +# Organisation du cours (3/3) + +- Les cours "théoriques" seront disponible en replay sur <https://bbb.hesge.ch/rooms/wkm-a1q-7d1-rjb/join>. +- Il y a un certain nombre de ressources se trouvant sur <https://malaspinas.academy>. +- Mon bureau est toujours ouvert (tapez *assez fort* sur la porte). +- N'hésitez pas à utiliser le salon *Element*... +- Et/ou lemmy. + +# Évaluations + +## 1er semestre deux examens sur machine + +- Seul·e devant votre ordinateur. +- Avec à disposition une page rect-verso de notes manuscrites. + +## 2e semestre deux examens sur machine + +- Seul·e devant votre ordinateur. +- Avec à disposition une page rect-verso de notes manuscrites. + +# Sondage: expérience de programmation + +## [Sondage: expérience de linux](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=501943) + +## [Sondage: expérience de programmation](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=501940) + +**Installez un lecteur de QR code s'il-vous-plaît.** + +# Questions? + +- N'hésitez pas à poser des *questions*, nous sommes là pour ça! [^3] [^4] +- Ne restez pas coincés pendant des jours sur un problème. +- Utilisez le *libre-service*! +- N'hésitez pas à faire des *retours*: *négatifs* ou *positifs* (évaluations des cours, ou au cours de discussions). +- Il est très tentant de faire les TPs en groupe, mais il est **primordial** de programmer vous-mêmes (c'est comme apprendre une langue)! + +[^3]: Surtout les assistants. +[^4]: Chaque étudiant·e·s a un quota de 1 question par semestre pour les professeurs. + + diff --git a/slides/les_exos_avec_le_dojo.md b/slides_2023/les_exos_avec_le_dojo.md similarity index 100% rename from slides/les_exos_avec_le_dojo.md rename to slides_2023/les_exos_avec_le_dojo.md diff --git a/slides/ligne_de_commande_c.md b/slides_2023/ligne_de_commande_c.md similarity index 100% rename from slides/ligne_de_commande_c.md rename to slides_2023/ligne_de_commande_c.md diff --git a/slides_2023/metadata.yaml b/slides_2023/metadata.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b0c5ffda6bfa9acad02a3f6910d932cebfad210b --- /dev/null +++ b/slides_2023/metadata.yaml @@ -0,0 +1,8 @@ +--- +subtitle: "Programmation séquentielle en C, 2023-2024" +author: "Orestis Malaspinas (A401)" +institute: "Informatique et Systèmes de Communication, HEPIA" +lang: fr-CH +mathjaxurl: "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML" +--- + diff --git a/slides_2023/my_highlight.theme b/slides_2023/my_highlight.theme new file mode 100644 index 0000000000000000000000000000000000000000..1d80b47b144ca30f252d27a32e3d3775267c7bbb --- /dev/null +++ b/slides_2023/my_highlight.theme @@ -0,0 +1,204 @@ +{ + "text-color": null, + "background-color": "#f0f0f0", + "line-number-color": "#aaaaaa", + "line-number-background-color": null, + "text-styles": { + "Other": { + "text-color": "#8f5902", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Attribute": { + "text-color": "#c4a000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialString": { + "text-color": "#4e9a06", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Annotation": { + "text-color": "#8f5902", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Function": { + "text-color": "#000000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "String": { + "text-color": "#4e9a06", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "ControlFlow": { + "text-color": "#204a87", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "Operator": { + "text-color": "#ce5c00", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "Error": { + "text-color": "#a40000", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "BaseN": { + "text-color": "#0000cf", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Alert": { + "text-color": "#ef2929", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Variable": { + "text-color": "#000000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Extension": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Preprocessor": { + "text-color": "#8f5902", + "background-color": null, + "bold": false, + "italic": true, + "underline": false + }, + "Information": { + "text-color": "#8f5902", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "VerbatimString": { + "text-color": "#4e9a06", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Warning": { + "text-color": "#8f5902", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Documentation": { + "text-color": "#8f5902", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Import": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Char": { + "text-color": "#4e9a06", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DataType": { + "text-color": "#204a87", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Float": { + "text-color": "#0000cf", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Comment": { + "text-color": "#8f5902", + "background-color": null, + "bold": false, + "italic": true, + "underline": false + }, + "CommentVar": { + "text-color": "#8f5902", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Constant": { + "text-color": "#000000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialChar": { + "text-color": "#000000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DecVal": { + "text-color": "#0000cf", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Keyword": { + "text-color": "#204a87", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + } + } +} diff --git a/slides/opaque.md b/slides_2023/opaque.md similarity index 100% rename from slides/opaque.md rename to slides_2023/opaque.md diff --git a/slides/pointeurs_avances.md b/slides_2023/pointeurs_avances.md similarity index 100% rename from slides/pointeurs_avances.md rename to slides_2023/pointeurs_avances.md diff --git a/slides/strings.md b/slides_2023/strings.md similarity index 100% rename from slides/strings.md rename to slides_2023/strings.md diff --git a/slides/structs.md b/slides_2023/structs.md similarity index 100% rename from slides/structs.md rename to slides_2023/structs.md diff --git a/slides/tableaux_fonctions.md b/slides_2023/tableaux_fonctions.md similarity index 100% rename from slides/tableaux_fonctions.md rename to slides_2023/tableaux_fonctions.md diff --git a/slides/variables_fonctions.md b/slides_2023/variables_fonctions.md similarity index 100% rename from slides/variables_fonctions.md rename to slides_2023/variables_fonctions.md