Corrections
Fonctions simples
int addition(int a, int b)
{
return a + b;
}
int substraction(int a, int b)
{
return a - b;
}
int multiplication(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
if (b == 0)
{
return 0;
}
return a / b;
}
int and(int a, int b)
{
return a & b;
}
int or(int a, int b)
{
return a | b;
}
int xor(int a, int b)
{
return a ^ b;
}
int not(int a)
{
return ~a;
}
int double_int(int a)
{
return a + a;
}
int square(int a)
{
return a * a;
}
int cube(int a)
{
return a * a * a;
}
int power_of_two(unsigned int n)
{
return 1 << n;
}
int int_len(n)
{
int result = 0;
int sign = (n < 0);
while (n != 0)
{
n = n / 10;
++result;
}
return result + sign;
}
int is_lowercase(char c)
{
return ('a' <= c && c <= 'z');
}
int is_uppercase(char c);
{
return ('A' <= c && c <= 'Z');
}
int is_num(char c);
{
return ('0' <= c && c <= '9');
}
int is_alphanum(char c)
{
return (is_lowercase(c) || is_uppercase(c) || is_num(c));
}
void graduate(int n)
{
if (0 <= n && n <= 8)
{
printf("Mauvais\n");
}
else if (9 <= n && n <= 12)
{
printf("Moyen\n");
}
else if (13 <= n && n <= 16)
{
printf("Bien\n");
}
else if (17 <= n && n <= 19)
{
printf("Très bien\n");
}
else if (n == 20)
{
printf("Parfait\n")
}
else
{
printf("Quoi ?\n");
}
}
Notions de pointeurs
float moyenne(float *a, float *b, float *c)
{
float result = (*a + *b + *c) / 3
*a = 0;
*b = 0;
*c = 0;
return result;
}
void odd_even(int *value)
{
if (*value % 2 == 0)
{
printf("C'est pair\n");
}
else
{
printf("C'est impair");
}
}
void swap(int *a, int *b)
{
int tempo = *a;
*a = *b;
*b = tempo;
}
// Ou alors en mode bitwise expert sans avoir à créer une variable temporaire
void swap(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
Chaînes de caractères
unsigned int strlen(char *s)
{
unsigned int result = 0;
for (int i = 0; s[i] != '\0'; ++i)
{
++result;
}
return result;
}
void upper(char *str)
{
for (int i = 0; str[i] != '\0'; ++i)
{
if (is_uppercase(str[i])
{
str[i] = str[i] + 32;
}
}
}
void lower(char *str)
{
for (int i = 0; str[i] != '\0'; ++i)
{
if (is_lowercase(str[i])
{
str[i] = str[i] - 32;
}
}
}
Pourquoi addition ou soustraire par 32 ?
Si tu regardes le man ascii, tu peux voir que la lettre majuscule 'A' a la valeur 65 et que la lettre minuscule 'a' a la valeur 97. La différence entre 65 et 97 est 32. En additionant ou soustrayant par 32, on peut passer de l'intervalle minuscule à majuscule et inversement.
int vowels(char *str)
{
int result = 0;}
for (int i = 0; str[i] != '\0'; ++i)
{
if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u' || str[i] == 'y')
{
++result;
}
}
return result;
}
int is_num(char c);
{
return ('0' <= c && c <= '9');
}
int miniatoi(char *str)
{
int result = 0;
int sign = 1;
if (str[0] == '-')
{
sign = -1;
++str;
}
for (int i = 0; str[i] != '\0'; ++i)
{
if (is_num(str[i]))
{
result = result * 10;
result = str[i] - '0';
}
else
{
break;
}
}
return result * sign;
}
Décortiquons.
La variable result est créée en étant multipliée par 10 petit à petit puis on retourne le résultat multiplié par 1 ou -1.
Si j'envoie "1234", la variable result sera égale aux valeurs suivantes :
- 0 // ligne 13 et ligne 27
- 1 // ligne 28
- 10 // ligne 27
- 12 // ligne 28
- 120 // ligne 27
- 123 // ligne 28
- 1230 // ligne 27
- 1234 // ligne 28
Enfin, on retourne le résultat multiplié par 1 ou -1.
\[ 1234 * 1 = 1234 \]
Si j'envoie "-1234", on retient que le signe est négatif et on avance le pointeur après le signe '-'. On refait les mêmes caluls et on retourne 1234 multiplié par -1.
\[ 1234 * -1 = -1234 \]