Séance du 25 octobre.

This commit is contained in:
Samy Avrillon 2021-10-25 10:07:26 +02:00
parent 5abd592b3d
commit e69d497f95
No known key found for this signature in database
GPG Key ID: 4220348226C4A071
11 changed files with 1831 additions and 53 deletions

15
C10.1.c Normal file
View File

@ -0,0 +1,15 @@
int main()
{
// Le mot `register` est réservé par C est ne doit pas être utilisé comme nom de variable.
int my_account, register_v = 1, amount = 0, dest, succeed = 0;
// On peut imaginer qu'ici il faut demander son compte à l'utilisateur ou le récupéréer dans un fichier de config du programme.
if(my_account == dest)
{
amount+=register_v;
succeed = 1;
}
//Values of succeed + amount
// succeed undefined (car on n'est pas rentré dans le if)
// amount 0 (car non modifié)
return 0;
}

28
C10.10.c Normal file
View File

@ -0,0 +1,28 @@
int x = 0;
int g()
{
return ++x;
}
int h()
{
return x++;
}
int f(int a, int b)
{
if(a+b == 2)
return a+x;
else
return b+x;
}
int main()
{
int v = f(g(), h());
//Value of v
// v=4
// Je ne sais pas ce que le développeur voulait faire avec ce code ...
}

12
C10.2.c Normal file
View File

@ -0,0 +1,12 @@
int main()
{
int a = 1,b;
// L'opérateur `=` est un opérateur d'assignation (qui renvoie la valeur assigné, donc ici, 1)
// L'opérateur d'égalité est `==`
if(a==1)
b = 10;
else
b = 5;
//Value of a + b = 11 car a==1.
return 0;
}

12
C10.3.c Normal file
View File

@ -0,0 +1,12 @@
#include<stdio.h>
int main()
{
// On ne peut nommer des variable en commencant par un chiffre.
int _x=5,y=0, _1tmp = 3;
_x++;
y = _x++;
y = ++_x; // Oubli du point-virgule
_1tmp = (y > _x);
//Value of _x, y and 1tmp
// 8, 8 et 0 (_x est incrémenté trois fois, y prend la valeur de _x après son troiséme incrémentation et 1tmp est «faux» car x==y)
}

18
C10.4.c Normal file
View File

@ -0,0 +1,18 @@
int main()
{
int i , j = 2, k, l = 1;
for(i = 0; i< 100; ++i)// Le point-virgule qui était ici «annule» le for.
{
int j = 0;
for(k=2*i; k > 0; k=k-2, l += 8)
{
k++;
j++;
}
}
//Valeur de i, j, k, l
// i=100 car incrémenté jusqu'à ce que i<100 soit faux
// j=2 car n'a pas été modifié (c'est un autre j à l'interieur de la boucle)
// k=0 a pris sa valeur à la dernière boucle (i=99), initialisé à 198 et décrémenté de un (-2 +1) jusqu'à se que k>0 soit faux.
// l = 79201 car incrémenté de huit dès que la boucle interne faisait une itération. soit l= 1 +sum(i=0..99, 2i)*8 = 16*99*50 +1
}

12
C10.5.c Normal file
View File

@ -0,0 +1,12 @@
#include<stdio.h>
// Il manquait la directive afin de définir printf
int main()
{
int i=0;
while(i < 100){ // Si le bloc contient plusieurs lignes, il faut utiliser des crochets, l'indentation est «inutile» car inexistance du point de vue du compilateur.
printf("%i", i);
i++;
}
//Valeur de i
// i = 100, première valeur de i telle que (i<100) soit faux.
}

17
C10.6.c Normal file
View File

@ -0,0 +1,17 @@
int main()
{
//new version of the code
int a=0, b= 1;
/* We modify a */
a += a+b;
//old version of the code (now commented)
/*
int a=0, b= 1;
// We modify a
a = a+b;*/
// Il n'est pas possible de faire des commentaires en bloc imbriqués, puisque la pause du préprocesseur s'arrêtera au premier */ croisé.
//Valeur de a
//a=1 (car 0 + (0+1) = 1)
}

18
C10.7.c Normal file
View File

@ -0,0 +1,18 @@
int x = 0;
int f(int* x)
{
return (*x)++; // Ne sert pas à grand chose, int x est passé en valeur. Il faut utiliser la référence ici.
}
void g(int b)
{
x = x+1; // Ici pas de problème puisqu'on utilise la variable globale.
}
int main()
{
g(f(&x));
//Value of x
// x=2 car incrémenté deux fois.
}

12
C10.8.c Normal file
View File

@ -0,0 +1,12 @@
//Polymorphic mul
// Les noms de macro sont sensibles à la casse, donc il faut respecter une convension (ici, j'ai choisi les minuscules).
// Attention aussi, une macro, c'est idiot, il faut mieux isoler les paramètre dans des parenthèses.
#define mul(a,b) (a)*(b)
int main()
{
// Ici, la macro créait la séquence «3+4*4+3» étant mal compris à cause de la précédence plus élevée du *.
int x = mul(3+4, 4+3);
//Value of x
// x=49 (des maths: (3+4)*(4+3) = 49)
}

28
C10.9.c Normal file
View File

@ -0,0 +1,28 @@
//Error codes
#define DIV_0 1
#define OVERFLOW 2
#define NO_ERROR 0
#define MAXI_ERROR 10
#define INTERMEDIATE_ERROR 5
int check_error(int a, /*Il faut préciser le type de chaque paramètre */ int b)
{
if(b == 0)
return DIV_0;
if(a > 100000 && b > 100000) // Double esperluette pour le et logique
return OVERFLOW;
else
return NO_ERROR;
}
int main()
{
if(check_error(1000000, 1000000) && check_error(5, 0)) // double esperluette pour le et logique
return MAXI_ERROR;
else if(check_error(1000000, 1000000))
return INTERMEDIATE_ERROR;
return NO_ERROR;
//Value returned by main
// 10 = MAXI_ERROR car les deux condition créent une erreur.
}

1712
C9.md

File diff suppressed because it is too large Load Diff