===== Gestion de la mémoire ===== ==== Concaténation de chaines de caractères ==== Créez une fonction qui reçoit deux chaînes de caractères en argument, et qui retourne une chaîne de caractère constituée des deux chaînes mises bout à bout. ---- ==== Lecture d'un vecteur dans un tableau ==== Écrivez une fonction qui lit un tableau contenu dans un fichier. Cette fonction reçoit un nom de fichier comme argument, elle crée et renvoie un tableau. Le fichier doit contenir des valeurs numériques au format texte (une valeur par ligne). Le tableau créé (et renvoyé par la fonction) contiendra les valeurs du fichier au format //double//. Proposez une solution pour également connaître la taille du tableau. ---- ==== Saisie de liste ==== Dans cet exercice, nous allons créer un programme capable de demander la saisie d'une liste de noms (ou de données). Il est constitué de plusieurs étapes à remplir successivement. LA technique que nous allons mettre en oeuvre est assez brutale, nous verrons au semestre prochain comment faire plus subtil. Le programme demandera des noms tant que l'utilisateur en donnera. Il se terminera lorsque l'utilisateur aura entré une ligne vide. Tous les noms seront stockés dans un tableau de chaînes de caractères nommé //data//. Comme il n'est pas possible de retrouver la taille d'un tableau, nous identifierons la fin du tableau par la valeur NULL. S'il était possible d'anticiper la taille du tableau //data//, nous pourrions le déclarer comme suit (//n// étant la taille du tableau) : char *data[n]; Malheureusement, le nombre de noms à stocker va évoluer lors de l'éxécution du programme, il faudra donc régulièrement recréer un tableau plus grand pour ajouter des données. Data doit donc être un pointeur vers une zonne de données qu'il faudra régulièrement mettre à jour. Son type de données sera donc : char **data; - créez un programme qui déclare et initialisz le tableau //data//. Cela signifie qu'il faut réserver une zone de données qui sera pointée par //data// et que cette zone contiendra une seule valeur de type **char * **, initialisée à NULL. - créez une fonction qui reçoit un tableau de noms comme argument et qui renvoie le nombre de valeurs stockées dedans (le nombre de valeurs avant de lire NULL). Cette fonction doit renvoyer 0 si elle est utilisée sur //data// fraîchement initialisée. - créez une fonction //new_name// qui demande un nouveau nom à l'utilisateur et qui renvoie la chaîne de caractères correspondante. Si aucun nom n'a été donné par l'utilisateur, //new_name// renvoie NULL. - créez la fonction //add_value// qui reçoit un nouveau nom et un tableau de noms. //add_value// crée un nouveau tableau de noms dans lequel il recopie l'ancien tableau reçu et ajoute le nouveau nom. - utilisez les fonctions précédentes pour faire en sorte que //data// pointe vers un tableau contenant tous les noms déjà entrés. - Testez votre programme en affichant tous les noms entrés **après** la saisie du dernier nom. == pour le fun == Si vous avez le temps, vous pouvez d'abord trier les noms dans l'ordre alphabétique avant de les afficher.