Piscine 42 C01 : les exercices corrigés

Le projet C01 te plonge dans l’utilisation des pointeurs et tu vas comprendre comment manipuler les adresses de mémoire et les variables de manière plus directe. Découvres ci-dessous les solutions détaillées et commentées pour le projet C01 de la Piscine de l’école 42. 

C01 ex00 : ft_ft

🎯 Objectif de ft_ft

L’objectif de cet exercice c’est d’écrire une fonction qui prend un pointeur sur un entier (int *) en paramètre et modifie la valeur pointée pour lui donner la valeur 42.

🎓 Notions essententielles

  • Les pointeurs en C : comprendre ce qu’est un pointeur, comment il fonctionne, et comment manipuler la valeur à laquelle il pointe.
  • Les opérations de déréférencement : utiliser l’opérateur * pour accéder et modifier la valeur pointée par un pointeur.

💻 Fonctionnement de ft_ft

Prototype de la fonction :

La fonction doit être déclarée comme suit : void ft_ft(int *nbr);. Elle prend un seul paramètre, un pointeur sur un entier, et ne retourne rien.

Manipulation du pointeur :

La valeur pointée par le pointeur doit être modifiée pour devenir 42. Pour y arriver, il faut utiliser l’opérateur de déréférencement *, qui permet d’accéder à la valeur pointée par le pointeur.

Le code de la fonction :

				
					void ft_ft(int *nbr)
{
    *nbr = 42;
}
				
			

💡Fonction Main pour tester ft_ft

				
					#include <stdio.h>

int	main(void)
{    
	int a;
	ft_ft(&a);
	printf("%d\n", a);
}
				
			

C01 ex01 : ft_ultimate_ft

🎯 Objectif de ft_ultimate_ft

Dans cet exercice, l’objectif est d’écrire une fonction qui prend un pointeur sur un pointeur sur un pointeur (et ainsi de suite, jusqu’à neuf niveaux) sur un entier (int) en paramètre, et qui modifie la valeur de cet entier pour qu’elle devienne 42.

🎓 Notions essententielles

  • Les pointeurs multiples en C : Comprendre ce qu’est un pointeur de pointeur et comment accéder à la valeur finale en suivant plusieurs niveaux de déréférencement.
  • Le déréférencement : Utilisation de l’opérateur * plusieurs fois pour accéder à la valeur à laquelle pointe un pointeur de pointeur.

💻 Fonctionnement de ft_ultimate_ft

Prototype de la fonction :

La fonction doit être déclarée comme suit : void ft_ultimate_ft(int *********nbr);. Elle prend un seul paramètre, un pointeur sur un pointeur sur un pointeur (neuf fois) sur un entier, et ne retourne rien.

Accès à la valeur finale :

Pour assigner la valeur 42 à l’entier pointé, il faut déréférencer le pointeur neuf fois, en utilisant l’opérateur * successivement jusqu’à accéder à la valeur finale.

✅ Le code de la fonction :

				
					void ft_ultimate_ft(int *********nbr)
{
    *********nbr = 42;
}
				
			

💡Fonction Main pour tester ft_ultimate_ft

				
					#include <stdio.h>

int main()
{
	int n;
	int *nbr8;
	int **nbr7;
	int ***nbr6;
	int ****nbr5;
	int *****nbr4;
	int ******nbr3;
	int *******nbr2;
	int ********nbr1;
	int *********nbr;

	n = 21;
    
	nbr8 = &n;
	nbr7 = &nbr8;
	nbr6 = &nbr7;
	nbr5 = &nbr6;
	nbr4 = &nbr5;
	nbr3 = &nbr4;
	nbr2 = &nbr3;
	nbr1 = &nbr2;
	nbr = &nbr1;
    
	ft_ultimate_ft(nbr);
	printf("%d", n);    
	return 0;
}
				
			

C01 ex02 : ft_swap

🎯 Objectif de ft_swap

Dans cet exercice, l’idée est d’écrire une fonction qui échange les valeurs de deux entiers. La fonction prend en paramètre les adresses de ces entiers, ce qui permet de modifier directement les valeurs dans la mémoire.

🎓 Notions essententielles

  • Les pointeurs en C : comprendre comment passer des adresses de variables à une fonction pour manipuler directement leurs valeurs.
  • Le déréférencement : utiliser l’opérateur * pour accéder et modifier la valeur pointée par un pointeur.
  • Les variables temporaires : utiliser une variable temporaire pour effectuer l’échange des valeurs.

💻 Fonctionnement de ft_swap

Prototype de la fonction :

La fonction doit être déclarée comme suit : void ft_swap(int *a, int *b);. Elle prend en paramètres deux pointeurs sur des entiers, représentant les adresses des deux entiers dont les valeurs doivent être échangées.

Échange des valeurs :

Pour échanger les valeurs, on doit utiliser une variable temporaire pour stocker la valeur d’une des variables pendant l’échange. Les étapes sont les suivantes :

  1. Stocker la valeur pointée par a dans une variable temporaire.
  2. Assigner la valeur pointée par b à la variable pointée par a.
  3. Assigner la valeur stockée dans la variable temporaire à la variable pointée par b.
    1.  

✅ Le code de la fonction :

				
					void ft_swap(int *a, int *b)
{
    int temp;

    temp = *a;
    *a = *b;
    *b = temp;
}
				
			

💡Fonction Main pour tester ft_swap

				
					int main(void)
{
    int x = 5;
    int y = 10;

    ft_swap(&x, &y);
    // Ici, x devrait avoir la valeur 10 et y la valeur 5
    printf("x = %d, y = %d\n", x, y);
    return (0);
}
				
			

C01 ex03 : ft_div_mod

🎯 Objectif de ft_div_mod

Le fonction ft_div_mod doit prendre deux entiers en paramètres ainsi que deux pointeurs sur entiers. La fonction doit :

  1. diviser le premier entier par le second,
  2. stocker le résultat dans le premier pointeur,
  3. stocker le reste (modulo) de la division dans le second pointeur.

🎓 Notions essententielles

  • Les opérations arithmétiques : Comprendre comment effectuer une division entière et un calcul de modulo en C.
  • Les pointeurs en C : Savoir passer des adresses de variables à une fonction pour stocker les résultats directement en mémoire.
  • Le déréférencement : Utiliser l’opérateur * pour accéder aux adresses des résultats et y stocker les valeurs calculées.

💻 Fonctionnement de ft_div_mod

Prototype de la fonction :

La fonction doit être déclarée comme suit : void ft_div_mod(int a, int b, int *div, int *mod);. Elle prend en paramètres deux entiers (a et b) ainsi que deux pointeurs sur entiers (div et mod).

Division et modulo :

La fonction doit effectuer la division entière de a par b et stocker le résultat dans la variable pointée par div. Ensuite, elle doit calculer le reste de la division (modulo) de a par b et stocker ce reste dans la variable pointée par mod.

✅ Le code de la fonction :

				
					void ft_div_mod(int a, int b, int *div, int *mod)
{
    *div = a / b;
    *mod = a % b;
}
				
			

💡Fonction Main pour tester ft_div_mod

				
					#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 3;
    int div;
    int mod;

    ft_div_mod(x, y, &div, &mod);
    // Ici, div devrait être 3 et mod devrait être 1
    printf("Division = %d, Modulo = %d\n", div, mod);
    return (0);
}
				
			

📋 Les exercices de C01 :

Les projets C de la piscine 42 :

Retour en haut