Année universitaire 2002-2003
espace

Licence d'informatique
Module 4 - partie "C / shell"



Travaux pratiques 4 :

  • 1. Taille d'un objet.
  • 2. Structure conditionnelle à choix multiple.
  • 3. Exercice : gestion d'un agenda.

  • 1. Taille d'un objet.

    On peut connaître la taille occupée par un objet obj en utilisant l'une des deux expressions suivantes :

    La valeur de ces deux expressions est le nombre d'octets occupés par l'objet obj dans la mémoire. Elle est utile principalement pour réserver un espace mémoire de la taille souhaitée par le programmeur, à l'aide de la fonction malloc.

    L'objet obj peut être :

    Exemple :

    ...
    struct exemple
    {
    char *chaine;
    struct exemple *p_suivant;
    };
    ...
    struct exemple *p_ex;
    char ch[20]="beta";
    ...
    p_ex=malloc(sizeof(struct exemple)); /* Ligne a. */
    p_ex->chaine=malloc(sizeof(ch));/* Ligne b. */
    ...

    2. Structure conditionnelle à choix multiple.

    Lorsqu'une action dépend de la valeur d'une expression, il peut être utile d'utiliser une instruction switch plutôt que des instructions if.

    Exemple :

    ...
    switch (compte(m_ancien,i,j))
    {
    case 0 :
    case 4 :   m[i][j]='B';
    break;
    case 2 :   m[i][j]='N';
    break;
    default :  m[i][j]=m_ancien[i][j];
    }
    ...

    L'instruction break; signale que la prochaine instruction à exécuter se trouve après la prochaine accolade fermante }. Si l'expression passée en paramètre à l'instruction switch apparaît dans un des cas (case) spécifiés, alors la séquence d'instructions qui suit (jusqu'à la prochaine instruction break; ou jusqu'à l'accolade fermante de l'instruction switch) est exécutée. Dans le cas contraire (si l'expression passée en paramètre à l'instruction switch n'apparaît dans aucun des cas spécifiés), alors la séquence d'instructions qui suit default est exécutée.

    Remarque :

    3. Exercice.

    On désire écrire un programme permettant la gestion d'un agenda. Pour cela, on va créer une liste chaînée, dans laquelle chaque cellule, de type struct fiche, contiendra les informations concernant une personne. On utilisera par conséquent les directives d'inclusion et les définitions suivantes :

    La principale difficulté de cet exercice sera l'allocation dynamique de mémoire (cf. la séance 5 de travaux dirigés) pour toute nouvelle cellule de la liste chaînée. Il est demandé de n'utiliser aucune variable globale. On propose de procéder de la manière suivante :

    1) Dans le programme principal main, on effectue la déclaration et l'initialisation suivantes :

    Cette variable, qui pointera sur le premier élément de la liste chaînée, sera passée en paramètre aux différentes fonctions, soit par valeur, soit par adresse (auquel cas un des paramètres formels sera de type struct fiche **).

    2) Dans le programme principal, on affiche le menu suivant en boucle :

    jusqu'à ce que l'utilisateur tape le caractère 0. On gérera les différentes réponses possibles à l'aide d'une instruction d'aiguillage à choix multiple (mot-clé switch, cf. le paragraphe 2).

    3) Écrire les fonctions suivantes :

    Contrôle des allocations dynamiques :

    Questions subsidiaires :


    Ces pages ont été réalisées par A. Crouzil, J.D. Durou et Ph. Joly.
    Pour tout commentaire, envoyer un mail à crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.