aboutsummaryrefslogtreecommitdiff
path: root/semestre 2/informatique/1- De Python à C.md
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 2/informatique/1- De Python à C.md')
-rw-r--r--semestre 2/informatique/1- De Python à C.md208
1 files changed, 208 insertions, 0 deletions
diff --git a/semestre 2/informatique/1- De Python à C.md b/semestre 2/informatique/1- De Python à C.md
new file mode 100644
index 0000000..c088a7b
--- /dev/null
+++ b/semestre 2/informatique/1- De Python à C.md
@@ -0,0 +1,208 @@
+---
+tags:
+ - sorbonne
+ - informatique
+semestre: 2
+---
+```c
+#include <stdio.h>
+#include <stdlib.h>
+
+/* premier programme */
+
+int main(){
+ printf("Hello World\n");
+ return 0;
+}
+```
+
+On écrit des programmes comme éditeur de texte
+|> Visual Studio Code
+|> gedit
+|> vi/vim
+|> emacs
+-> permet d'écrire le programme
+
+Au début, on écrit les bibliothèques :
+```c
+#include <stdio.h>
+#include <stdlib.h>
+```
+
+Les commentaires s'écrivent comme ça :
+```c
+/* bonjour,
+je suis un commentaire sur
+plusieurs lignes */
+
+// bonjour, je suis sur une seule ligne
+```
+
+(le deuxième type de commentaire provient du C++, mais souvent ça passe)
+
+Après, on doit toujours écrire une fonction `main` :
+```c
+int main(){
+ /* ... */
+ return 0;
+}
+```
+
+Après avoir écrit notre programme, on doit faire en sorte qu'il soit exécutable
+|> est la compilation
+|> on utilise `gcc` (GNU C Compiler) pour compiler le texte
+
+Pour compiler, on fait :
+```bash
+$ gcc -Wall -o hello_world hello_world.c
+$ ./hello_world
+Hello World
+$
+```
+
+Le `-Wall` veut dire "Warning all", i.e. affiche tous les warnings
+## Fonctions
+Quand on définit une fonction, on a besoin de spécifier :
+- le type de retour (`void` si rien n'est retourné)
+- le nom de la fonction
+- les arguments avec leur type
+- le corps de la fonction (entre accolades)
+
+Les blocks en C sont définis par des accolages (`{ ... }`)
+
+Toutes les lignes d'instructions se finissent par un `;`
+
+On a toujours besoin d'une *unique* fonction `main` par programme.
+
+On peut définir plusieurs fonctions dans un programme, e.g.
+```c
+void hello(){
+ printf("Hello World\n");
+}
+
+int main(){
+ hello();
+ return 0;
+}
+```
+
+> [!warning] Définition d'une fonction
+> On a besoin de définir une fonction avant de l'utiliser !
+## Types que l'on utilise
+
+| Type | Signification | Taille (o) | Plage de valeurs | Exemple |
+| ----- | ---------------- | ---------- | ------------------------------- | ------- |
+| char | Caractère | 1 | -128 à 127 | 'a' |
+| int | Entier | 4 | -2 147 483 648 à 2 147 483 647 | 25 |
+| float | Simple précision | 4 | $\pm$ ... | 3.14 |
+> [!warning] `'a'` et `"a"`
+> Ce sont des types différents !
+> `'a'` est un caractère tandis que `"a"` est une chaîne de caractère !
+
+> [!warning] Booléen en C
+> Il n'existe pas de booléen en C : on utilise donc les `int` pour décrire l'état.
+> `0` est vraie, le reste est faux.
+## Arguments dans une fonction
+On les place dans les parenthèses et il fonctionne comme en Java
+```c
+void hello(int annee){
+ printf("Hello World %d!\n", annee)
+}
+
+int main(){
+ hello(2025);
+ return 0;
+}
+```
+
+La fonction `printf` ici est utilisée pour formaté un string que l'on va ensuite afficher
+|> `"%d"` insert un `int`
+|> `"%f"` insert un `float`
+|> `"%c"` insert un `char`
+|> les valeurs que l'on insert sans mise après le format
+i.e.
+```c
+printf("Hello World%d-%d\n", 2024, 2025);
+// est équivalent à
+printf("Hello World 2024-2025\n");
+```
+## Variables
+On est obligé de déclarer les variables avec leur type, i.e.
+```c
+int p;
+p = 5;
+
+float a=1, b=2.5, c=-2.5;
+```
+
+> [!warning] Porté des variables
+> Les variables sont locales au bloc ! On ne peut pas y accéder autre part !
+> (comme en python)
+
+![[used_operators_c.png]]
+
+> [!warning] Division en C
+> Si on a une division d'un entier par un entier, on obtient un... entier !
+> Pour avoir un `float`, on doit faire quelque chose comme `int / (float) int`
+
+## De Python à C
+### Syntaxe simple
+```python
+def perimetre(largeur: int, longeur: int) -> int:
+ """Precond: longueur >= largeur >= 0
+ Retourne le périmètre du rectangle défini par sa longeur et sa largeur"""
+ return 2*(largeur + longueur)
+```
+devient en C
+```c
+/* hypothèse: longueur >= largeur >= 0
+retourne le périmetre du rectangle défini par sa longueur et sa largeur*/
+int perimetre(int largeur, int longueur){
+ return 2*(largeur + longueur);
+}
+```
+### Structures de contrôle
+Un `if/else` s'écrit :
+```c
+if (cond) {
+ //
+} else {
+ //
+}
+```
+où `cond` est un booléen
+
+Un `while` s'écrit :
+```c
+while (cond) {
+ //
+}
+```
+où `cond` est toujours un booléen
+
+Une nouvelle boucle : la `do while` qui est une boucle `while` où la condition est testée à la fin de la boucle (i.e. elle tourne toujours au moins 1 fois)
+```c
+do {
+ //
+} while (cond);
+```
+où `cond` est encore un booléen
+⚠ il y a un `;` après le while
+
+La boucle `for` est comme celle en java
+```c
+int n = 5;
+int i;
+for (i = 0; i <= n; i++) {
+ printf("%d", i);
+}
+```
+est équivalente à
+```c
+int i;
+i = 0;
+while (i <= n) {
+ printf("%d", i);
+ i++;
+}
+```