Cliquez ici pour retirer la feuille de style si vous souhaitez imprimer ce document (ou en cas de problème d'affichage).
Rappel : À partir de maintenant,
  • vous compilerez systèmatiquement avec la commande "make"
  • pour chaque exercice, vous creerez un fichier .h regroupant la déclarations des fonctions, des structures et les inclusion de bibliothèques externes
  • ce fichier sera protégé contre l'inclusion multiple à l'aide des instruction pré processeur #ifndef TRUC #define TRUC... #endif (voir cours)
  • vous écrirez sytèmatiquement la fonction main() dans un fichier séparé "test.c".

Complexes

  • Ecrire, dans un fichier complex.h, la définition d'un nombre complexe sous la forme d'un type structuré. Déclarer également les prototypes des fonctions suivantes :
    • new_complex qui crée un nombre complexe en prenant les parties réelle et imaginaire comme paramètres;
    • print_complex qui affiche, sur la sortie standard, un nombre complexe de la façon suivante : la partie réelle suivie d'un espace puis de la partie imaginaire;
    • sum qui calcule la somme de deux nombres complexes;
    • conjugate qui calcule le conjugué d'un nombre complexe;
    • norm qui calcule la norme d'un nombre complexe.
  • Implémenter dans un fichier complex.c, les fonctions précédentes. Tester votre code en créant un fichier main.c où seront implémentés des tests. Ne pas oublier de faire un Makefile pour compiler vos sources.

Chaînes de caractères

Rappel : une chaîne de caractères en C est le début d'un tableau de caractères, jusqu'à rencontrer le caractère spécial '\0'. Un tableau de caractères est l'adresse du premier caractère. Les suivants sont rangés de façon contigüe dans la mémoire.

  • Ecrivez une fonction qui prend deux chaînes de caractères et renvoit la plus petite selon l'ordre lexicographique (sans utiliser de fonctions de string.h).

Nous allons maintenant définir un nouveau type MutableString qui sera une structure contenant un tableau de caractères chars de taille MAX, une constante définie par exemple à 255 et contenant les caractères de la chaine (sans '\0'!), plus un entier length donnant le nombre de caractères. Vous allez réécrire quelques fonctions de string.h pour ce nouveau type.

Lisez toutes les questions avant de commencer.

  1. Dans un fichier mutable_string.h définir le type MutableString (rappel : un entier length et un tableau de caractères de taille MAX). Vous ajouterez au fur et à mesure dans ce fichier le prototype des fonctions que vous écrivez dans la suite.
  2. Dans un fichier mutable_string.c écrire une fonction MutableString newString(char * s);. Le paramètre s est une chaîne de caractères au sens du C (avec un '\0' pour délimiter la fin). La fonction:
    • Déclare une MutableString et initialise son champs length à la taille de la chaine s (nombre de caractères sans '\0' - vous pouvez faire une fonction intermédiaire pour calculer cette taille, interdiction d'utiliser strlen. Si vous faites une fonction intermédiaire, celle-ci ne devra pas apparaître dans le .h).
    • Copie la chaîne s dans le tableau (sans utiliser strcpy, car de toutes facons on ne veut pas copier le '\0')
    • Renvoit une copie de la MutableString (pourquoi pas son adresse ?)
    • Testez le code suivant :