TP I20, semaines 8 et 9

Codes ASCII

Afficher la table des codes ASCII avec la boucle :
for (c = 32; c < 128; c++)
  printf ("%3d %c\n", c, c);

Ecrire ou lire un entier en base b

Soit les fonctions suivantes vues en cours :

int ecrire (long n, int chiffre[], int base) {
  int i;
  
  for (i = 0; n > 0; i++) {
    chiffre[i] = n % base;
    n = n / base;
  }
  return i;
}

long lire (int chiffre[], int p, int base) {
  int i;
  long n = 0;
  
  for (i = p - 1; i >= 0; i--)
    n = base * n + chiffre[i];
  return n;
}
Un caractère (type char) est représenté en C par l'entier qui est son code ASCII ; on peut aussi désigner un caractère en le plaçant entre apostrophes (pour le distinguer d'une variable du même nom).
  1. Montrer que si c est un nombre compris entre 0 et 9, le caractère correspondant est donné par la formule :
    c - '0'
  2. Montrer que si c est un nombre compris entre 10 et 15, le caractère hexadécimal correspondant est donné par la formule :
    c + 'a' - 10
  3. Modifier la fonction ecrire pour qu'elle place les chiffres de n dans un tableau de caractères :
    int ecrire (long n, char chiffre[], int base)
    
  4. Modifier la fonction lire pour qu'elle lise les chiffres de n dans un tableau de caractères.

Opérations sur les chaînes de caractères

  1. Ecrire et tester la fonction longueur analogue à la fonction de bibliothèque strlen.

    Par exemple, longueur ("ce texte") vaut 8.

  2. Ecrire et tester la fonction concatener analogue à la fonction de bibliothèque strcat.

    Par exemple, si message contient la chaîne "Erreur ", et si on exécute :

    concatener (message, "numéro 5")
    message contient la chaîne "Erreur numéro 5".

  3. Ecrire et tester la fonction comparer analogue à la fonction de bibliothèque strcmp. Cette fonction compare deux chaînes de caractères, dans l'ordre lexicographique, et retourne -1, 0 ou 1 selon que la première est inférieure, égale ou supérieure à la seconde.