TP de Programmation en C

n°2

Les pointeurs, les tableaux, les structures, les opérateurs %, <<, >>

http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c/

IUT GTR Sophia Antipolis

Nov 2000

Recommandations importantes :

Exercice 1 (fichier primPoin.c)

Cet exercice n'a pas vraiment de sens mais il permet de se familiariser avec les pointeurs de types primitifs.

Algorithme

Définir une variable var d'un type primitif

Déclarer deux pointeurs pVar1 et pVar2 de ce type primitif

Indiquer que pVar1 pointe sur var

Ajouter 2 à var (en utilisant pVar1 et non var)

Affecter pVar1 à pVar2

Ajouter 5 à la variable pointée par pVar2

Afficher les adresses des trois variables, puis leurs contenus et enfin les valeurs pointées par

pVar1 et pVar2

Exercice 2 (binToDec.c)

Ecrire un programme qui convertit une chaîne contenant la représentation binaire d'un nombre en un décimal non signé.

Indications

Modifier la constante indiquant la taille de la chaîne. Testez si votre programme fonctionne toujours.

Exercice 3 (decToBin.c)

Ecrire le programme inverse (i.e. conversion d’un décimal non signé en une chaîne contenant sa représentation binaire).

Indications

Exercice 4 (repTel.c)

Ecrire un programme permettant de gérer un répertoire non ordonné de numéros de téléphone.

Indications

Voilà des prototypes des fonctions à implanter

/* Remplit le tableau tab de caractères tapés au clavier jusqu'au caractère retour chariot exclus. Au maximum (taille-1) caractères sont mis dans le tableau tab. Le caractère null est ajouté à la fin pour en faire une chaîne.

Paramètres : tab un tableau de 'taille' éléments qui sera rempli avec les caractères saisis

taille le nombre d’éléments max du tableau tab

*/

void saisieChaine(char tab[], int taille) ;

/* Recherche dans le répertoire l'indice du tableau de la personne donnée.

Paramètres: nom, prenom (nom et prénom de la personne à rechercher)

Retour : l'indice de la personne si elle est dans le répertoire, -1 sinon

*/

static int getIndicePersonne(char * nom, char * prenom) ;

/* Ajoute la nouvelle personne au répertoire téléphonique. Si le répertoire est plein, affiche un message d'erreur pour l'indiquer et retourne FALSE.

Paramètre : pers (la personne à ajouter dans le répertoire)

Retour : TRUE si la personne a été ajoutée dans le répertoire, FALSE sinon.

*/

Boolean setPersonneDansRep(Personne pers) ;

/* Enlève la personne donnée du répertoire si elle est présente ; sinon affiche un message d’erreur pour avertir l’utilisateur.

Parametres : nom, prenom (nom et prenom de la personne dela enlever)

Retour : TRUE si la personne a pu être enlevée, FALSE sinon

*/

Boolean enlevePersonneDuRep(char * nom, char * prenom) ;

/* Saisie du nom, prénom et numéro de téléphone d'une personne (si le premier digit du numéro est zéro, il est enlevé).

Retour : les infos de la personne à ajouter au répertoire

*/

Personne saisiePersonne()

/* Retourne le numéro de téléphone (sur 9 chiffres normalement i.e. sans le digit indiquant l’opérateur téléphonique) de la personne donnée. Si la personne n'est pas dans le répertoire, retourne 0

Paramètres : nom, prenom (nom et prénom de la personne recherchée)

Retour : le numéro de la personne recherchée si présente dans le répertoire, 0 sinon.

*/

unsigned long getNumero(char * nom, char * prenom) ;

/* Affiche le contenu du répertoire i.e. la liste des personnes avec leur numéro de téléphone (ajoute le digit indiquant l’opérateur téléphonique présélectionné devant le numéro de téléphone).

Si le répertoire est vide, indique que le répertoire est vide.

*/

void afficherRepertoire() ;

  1. Récupérez le fichier repTelBase.c dans le répertoire commun v:\gtr\gtr1\courbis\tp2 ou /commun/gtr/gtr1/courbis/tp2
  2. Commencez par les fonctions setPersonneDansRep et afficherRepertoire, puis testez.
  3. Puis saisieChaine et saisiePersonne
  4. Puis les fonctions getIndicePersonne, getNumero et enlevePersonneDuRep. La fonction getIndicePersonne permet de factoriser le code utile pour rechercher une personne. Elle est utilisée dans les deux autres fonctions.

Il faudra utiliser la fonction strcmp de <string.h> pour comparer deux chaînes. Son prototype est int strcmp(char *, char *) ; Si l’entier retourné est égal à 0, les deux chaînes sont égales.