diff --git a/Makefile b/Makefile index c07dc3a3ef7ad1602877876114adcb2677ff7f72..3207e0dc1aee939409d03373e385207baca2fc4c 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,18 @@ -OPTIONS = --filter=pandoc-numbering -OPTIONS += --filter=pandoc-crossref +DATADIR = ./ +FILTERDIR = $(DATADIR)/filters +RESOURCEDIR = $(DATADIR)/resources -PDFOPTIONS = --highlight-style my_highlight.theme +PDFOPTIONS = -t beamer +PDFOPTIONS += --highlight-style my_highlight.theme PDFOPTIONS += --pdf-engine pdflatex -PDFOPTIONS += --number-sections PDFOPTIONS += --template=./default.latex +PDFOPTIONS += -V theme:metropolis +PDFOPTIONS += -V themeoptions:numbering=none -V themeoptions:progressbar=foot +PDFOPTIONS += -V fontsize=smaller +# PDFOPTIONS += --lua-filter=${FILTERDIR}/tex.lua +# PDFOPTIONS += --include-in-header=${RESOURCEDIR}/definitions.tex +# PDFOPTIONS += --include-in-header=${RESOURCEDIR}/beamer.tex +PDFOPTIONS += $(OPTIONS) HTMLOPTIONS += -t html5 HTMLOPTIONS += -c css/tufte-css/tufte.css @@ -12,14 +20,14 @@ HTMLOPTIONS += --self-contained all: base_2.pdf base_1.pdf intro.pdf index.html -intro.pdf: intro.md *.theme - pandoc -t beamer -o $@ $< +intro.pdf: intro.md metadata.yaml *.theme + pandoc $(PDFOPTIONS) -o $@ $^ -base_1.pdf: base_1.md *.theme - pandoc -t beamer -o $@ $< +base_1.pdf: base_1.md metadata.yaml *.theme + pandoc $(PDFOPTIONS) -o $@ $^ -base_2.pdf: base_2.md *.theme figs/memory.svg - pandoc -t beamer -o $@ $< +base_2.pdf: base_2.md metadata.yaml *.theme figs/memory.svg + pandoc $(PDFOPTIONS) -o $@ $^ index.html: index.md pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $< diff --git a/base_1.md b/base_1.md index b6ad320904c1052f5a598bf784562430e5c08541..f2d4fb4651a3a59fa04f79cd2fc10d1af0533e86 100644 --- a/base_1.md +++ b/base_1.md @@ -1,5 +1,5 @@ -% Programmation séquentielle en C -% Base I - Inspirés des slides de F. Glück +% Base I +% Inspirés des slides de F. Glück % 18 septembre 2019 # Historique (1/2) @@ -66,7 +66,6 @@ int main() { 1. `-std=c11` utilisation de C11. 2. `-Wall et -Wextra` activation des warnings. 3. `-fsanitize=…` contrôles d’erreurs extensifs à l’exécution (au prix d’un coût en performance). - Sur Ubuntu 14.04 `-fsanitize=leak` et `-fsanitize=undefined` ne sont pas supportés (`cat /etc/lsb-release` indique la version). 4. `-g` symboles de débogages sont gardés. 5. `-o` défini le fichier exécutable à produire en sortie. <!-- 6. `-O1`, `-O2`, `-O3`: activation de divers degrés d'optimisation --> diff --git a/base_2.md b/base_2.md index 203e396c117c06c45db3b1b6de2c63ba27bffbdd..813d1dec987b3e334a03e37af1ec7e09c7575bca 100644 --- a/base_2.md +++ b/base_2.md @@ -6,23 +6,22 @@ ## La mémoire -- La mémoire est un ensemble de bits. -- Elle est accessible via des adresses. +* La mémoire est: + - ... un ensemble de bits, + - ... accessible via des adresses, -+------+----------+----------+------+----------+------+------+ -| bits | 00110101 | 10010000 | .... | 00110011 | .... | .... | -+======+==========+==========+======+==========+======+======+ -| addr | 2000 | 2001 | .... | 4000 | .... | .... | -+------+----------+----------+------+----------+------+------+ + +------+----------+----------+------+----------+------+------+ + | bits | 00110101 | 10010000 | .... | 00110011 | .... | .... | + +======+==========+==========+======+==========+======+======+ + | addr | 2000 | 2001 | .... | 4000 | .... | .... | + +------+----------+----------+------+----------+------+------+ -- Elle est gérée par le système d'exploitation... -- et fournie à chaque programme pendant son exécution. -- Elle est séparée en deux parties: **la pile** et **le tas**. + - ... gérée par le système d'exploitation. + - ... séparée en deux parties: **la pile** et **le tas**. ## Une variable -- Une variable est un identifiant pour une valeur. -- Une variable, `type a = valeur`{.C}, possède: +* Une variable, `type a = valeur`{.C}, possède: - un type (`char`{.C}, `int`{.C}, ...), - un contenu (une séquence de bits qui encode `valeur`{.C}), - une adresse mémoire (accessible via `&a`{.C}), @@ -111,20 +110,20 @@ # Les fonctions (2/N) -- Exemple: +## Exemple - ```C - int max(int a, int b) { - if (a > b) { - return a; - } else { - return b; - } +```C +int max(int a, int b) { + if (a > b) { + return a; + } else { + return b; } +} - int main() { - int c = max(4, 5); - } +int main() { + int c = max(4, 5); +} ``` # Les fonctions (3/N) @@ -193,22 +192,26 @@ - Pour modifier un variable, il faut passer son **adresse mémoire**. - L'adresse d'une variable, `x`{.C}, est accédé par `&x`{.C}. - Un **pointeur** vers une variable entière a le type, `int *x`{.C}. -- La sytaxe `*x`{.C} sert à **déréférencer** le pointeur. +- La sytaxe `*x`{.C} sert à **déréférencer** le pointeur (à accéder à la mémoire pointée). - ```C - void set_to_two(int *a) { - // a contient une copie de l'adresse de la - // variable passée en argument +# Les fonctions (7/N) - *a = 2; // on accède à la valeur pointée par a, - // et on lui assigne 2 - } // le pointeur est détruit, pas la valeur pointée - int main() { - int x = -1; - set_to_two(&x); // l'adresse de x est passée - // x vaudra 2 ici - } - ``` +## Exemple + +```C +void set_to_two(int *a) { + // a contient une copie de l'adresse de la + // variable passée en argument + + *a = 2; // on accède à la valeur pointée par a, + // et on lui assigne 2 +} // le pointeur est détruit, pas la valeur pointée +int main() { + int x = -1; + set_to_two(&x); // l'adresse de x est passée + // x vaudra 2 ici +} +``` <!-- TODO quiz; ```C @@ -375,9 +378,9 @@ do { ## Les tableaux comme argument -- Un tableau n'est rien d'autre que le pointeur vers sa première case. +- Un tableau est le pointeur vers sa première case. - Pas moyen de connaître sa taille: `sizeof()`{.C} inutile. -- Quand on passe un tableau en argument à une fonction: toujours spécifier sa taille. +- Toujours spécifier la taille d'un tableau passé en argument. ```C void foo(int tab[]) { // sans taille... diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5838cf8fd56c879c76c8a0dc791b097a9daad3d0 --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,7 @@ +--- +# used for lecture slides and homework sheets +subtitle: "Programmation séquentielle en C, 2019-2020" +author: "Orestis Malaspinas, ITI, HEPIA" +lang: fr-CH +... +