IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Gestion d'annuaire téléphonique


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut Gestion d'un carnet d'adesse
    Bonjour à tous,
    Je dois faire un carnet d'adresse. Mais voilà je n'y arrive vraiment pas.
    • La première fonction doit ajouter une personne et les trier par ordre alphabétique.
    • La seconde doit pouvoir supprimer une personne.
    • La troisième en rechercher une.
    • Et la quatrième doit afficher toutes les personnes dans l'ordre alphabétique.

    Mon code ne fonctionne pas du tout. Enfin il n'y a pas d'erreur mais ça ne fonctionne pas et j'ai du mal à voir ou se situe le problème. Peut-être dans chaque fonction que ça ne m'étonnerai pas.

    Je dois faire ce programme uniquement avec des boucles while..do (donc pas de for ni d'until) et je ne peux pas utiliser des case...of ni de procédure.

    merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
     
    Program carnetdadresse;
    Type personne=record
            nom: string;
            prenom: string;
            tel: word;
         End;
     
    Var choix, nbr: byte;
        tab: array [0..19] of personne;
     
    Function menu_add():integer;
    Var info: personne;
        i: byte;
    Begin
     i:=0; nbr:=0;
     Write ('Nom: ');
     ReadLn (info.nom);
     Write ('Prenom: ');
     ReadLn (info.prenom);
     Write ('Telephone: ');
     ReadLn (info.tel);
     WriteLn;
      While (i<nbr) AND (tab[i].nom<=info.nom) do
        Begin
           i:=i+1;
        End;
      While (nbr<i) do
        Begin
           tab[i]:=tab[i+1];
        End;
     tab[i]:=info;
     nbr:=nbr+1;
     WriteLn ('La personne ci-dessus a ete ajoute...');
     WriteLn;
    End;
     
    Function menu_delete():integer;
    Var i: byte;
        nom: string;
    Begin
     i:=0;
     Write ('Nom: ');
     ReadLn (nom);
     While (i<nbr) do
        Begin
           If (tab[i].nom=nom) then
              Begin
                 WriteLn('Prenom: ',tab[i].prenom);
                 WriteLn('Telephone: ',tab[i].tel);
                 WriteLn;
                 WriteLn ('Vous avez supprimer le contact ci-dessus');
                 WriteLn;
             End
           Else
              Begin
                 WriteLn ('Aucune personne ne correspond a votre recherche...');
                 WriteLn;
              End;
          i:=i+1;
       End;
    End;
     
    Function menu_search():integer;
    Var nom: string;
        i: byte;
    Begin
     i:=0;
     Write ('Nom: ');
     ReadLn (nom);
     While (tab[i].nom<>nom) do
        Begin
           i:=i+1;
        End;
     If (tab[i].nom=nom) then
        Begin
           WriteLn('Prenom: ',tab[i].prenom);
           WriteLn('Telephone: ',tab[i].tel);
        End
     Else
        Begin
           WriteLn ('Aucune personne ne correspond a votre recherche...');
           WriteLn;
        End;
     WriteLn;
    End;
     
    Function menu_read():integer;
    Var i: byte;
    Begin
     i:=0;
     If (nbr>0) then
       Begin
          While (i<nbr) do
             Begin
               WriteLn('Nom: ',tab[i].nom);
               WriteLn('Prenom: ',tab[i].prenom);
               WriteLn('Telephone: ',tab[i].tel);
               WriteLn;
               i:=i+1;
             End;
       End
     Else
       Begin
         WriteLn ('Il n''y a personne...');
         WriteLn;
       End;
     WriteLn ('Pressez ENTER pour revenir au menu principal');
     ReadLn;
     clrscr;
    End;
     
     
    Begin
     While (choix<>5) do
        Begin
           choix:=0;
           WriteLn ('1) Ajouter une personne');
           WriteLn ('2) Supprimer une personne');
           WriteLn ('3) Rechercher une personne');
           WriteLn ('4) Afficher toutes les personnes');
           WriteLn ('5) Quitter');
           WriteLn;
           Write ('Que voulez vous faire? ');
           ReadLn (choix);
     
           If (choix=1) then menu_add
           Else
           If (choix=2) then menu_delete
           Else
           If (choix=3) then menu_search
           Else
           If (choix=4) then menu_read
           Else
           If (choix<>5) then
             Begin
                WriteLn ('Veuillez entrer un chiffre valide');
                WriteLn;
             End;
         End;
    End.

  2. #2
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour
    Par exemple ça compile ça une fonction avec cette entete la?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function menu_add():integer;

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Ce qui ne va pas dans ton programme, c'est que le nombre d'éléments du carnet d'adresses n'évolue pas au cours de l'exécution du programme. Il faut que tu passes la variable nbr comme paramètre à toutes les fonctions.
    Et à propos de fonctions : si elles ne doivent pas renvoyer de valeur, autant les déclarer comme procédures.

    Ainsi, menu_add pourrait ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Procedure menu_add (var nbr : byte);
    Var info: personne;
    Begin
      if nbr = NbElements
         then
           WriteLn('Carnet d''adresses rempli !')
         else
           begin
             nbr := nbr + 1;
             Write ('Nom: ');
             ReadLn (info.nom);
             Write ('Prenom: ');
             ReadLn (info.prenom);
             Write ('Telephone: ');
             ReadLn (info.tel);
             tab[nbr] := info;
             WriteLn;
             WriteLn ('La personne ci-dessus a ete ajoute...');
             WriteLn;
           end;
    End;
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut
    La variable nbr est enfaite déclaré dans mon code comme variable globale et non locale. Je dois donc mettre cette variable en locale dans chaque fonction et la retiré de variable globale? Et pour le NBelement, je dois ajouter cette variable? En temps que variable locale de la fonction?

    En ce qui concerne les procédures, je ne peux pas les utilisées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function menu_add():integer;
    Et pour ça, dois je mettre quelque chose entre ()? Parce que j'avoue que je suis un peu perdu de ce côté là...

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nicolasg8 Voir le message
    La variable nbr est enfaite déclaré dans mon code comme variable globale et non locale. Je dois donc mettre cette variable en locale dans chaque fonction et la retiré de variable globale?
    Non, elle doit rester globale et être passée comme paramètre aux différentes routines.
    Exemple de l'appel de la routine menu_add :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If (choix=1) then menu_add(nbr)
           Else
    A la sortie de menu_add, la valeur de nbr est changée (augmentée de 1 en l'occurence).
    Ce qui te trouble peut-être est que la variable globale et le paramètre passé aux routines aient le même nom nbr. A l'intérieur de la routine menu_add, nbr n'est pas l'identificateur de la variable globale mais celui du paramètre local.
    On aurait très bien pu nommer autrement le paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Procedure menu_add (var NbActuel : byte);
    Var info: personne;
    Begin
      if NbActuel = NbElements
         then
           WriteLn('Carnet d''adresses rempli !')
         else
           begin
             NbActuel := NbActuel + 1;
             Write ('Nom: ');
             ReadLn (info.nom);
             Write ('Prenom: ');
             ReadLn (info.prenom);
             Write ('Telephone: ');
             ReadLn (info.tel);
             tab[NbActuel] := info;
             WriteLn;
             WriteLn ('La personne ci-dessus a ete ajoute...');
             WriteLn;
           end;
    End;
    Ensuite,
    Citation Envoyé par nicolasg8 Voir le message
    Et pour le NBelement, je dois ajouter cette variable? En temps que variable locale de la fonction?
    Là, c'est de ma faute : en travaillant sur ton code, j'ai créé cette constante au début du programme et j'ai omis d'en parler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const NbElements = 19;
    Var tab: array [0..NbElements] of personne;
    Il est préférable d'utiliser des constantes, surtout à la place de nombres qui sont répétés plusieurs fois dans le code. Je m'explique : si, au lieu de 19 éléments, tu décides par exemple de travailler sur un tableau de 30 éléments, tu vas devoir remplacer tous les "19" dans ton code par "30". Tandis qu'avec la constante NbElements, tu n'as qu'à modifier sa déclaration au début du programme :
    et tu n'as rien d'autre à faire (et tu ne risques pas d'oublier un "19" dans un recoin).

    Citation Envoyé par nicolasg8 Voir le message
    En ce qui concerne les procédures, je ne peux pas les utilisées.
    Voilà qui est interpellant : ce n'est que grâce à la syntaxe étendue qu'une fonction peut être appelée comme une procédure, c'est-à-dire comme si elle ne retournait aucune valeur. Cela n'a rien à voir avec le Pascal standard, c'est absolument anti-pédagogique.

    Citation Envoyé par nicolasg8 Voir le message
    Et pour ça, dois je mettre quelque chose entre ()? Parce que j'avoue que je suis un peu perdu de ce côté là...
    Tout dépend du compilateur : Free Pascal, par exemple, tolère parfaitement les parenthèse vides.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut
    merci de ta réponse.
    Mais enfaite dans les consignes de mon programme, je ne peux pas utilisé de procédure simplement parce que je ne les ais pas encore appris. Donc pour remplacer cette procédure par une fonction il suffit de faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function menu_add ():integer;;
    Var info: personne;
          nbr:byte;
    Begin
      if NbActuel = NbElements
         then
           WriteLn('Carnet d''adresses rempli !')
         else
           begin
             NbActuel := NbActuel + 1;
             Write ('Nom: ');
             ReadLn (info.nom);
             Write ('Prenom: ');
             ReadLn (info.prenom);
             Write ('Telephone: ');
             ReadLn (info.tel);
             tab[NbActuel] := info;
             WriteLn;
             WriteLn ('La personne ci-dessus a ete ajoute...');
             WriteLn;
           end;
    End;

    J'ai refait un code source en plus de ça. Je dois avouer que je suis un peu désespéré parce que je dois rendre ce travail lundi. Le code qui suis ne fonction toujours pas mais on sait jamais lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    Program carnetdadresse;
    Uses crt;
    Type personne=record
            nom: string;
            prenom: string;
            cp: word;
            localite: string;
         End;
     
    Var choix, nba: byte;
        t: array [0..19] of personne;
     
    Function menu_add():integer;
    Var info: personne;
        nba, i: byte;
    Begin
     i:=0;
     WriteLn ('                                - - - - - - - - - - - ');
     WriteLn ('                               |                     |');
     WriteLn ('                               |                     |');
     WriteLn ('                               | Ajout d''une personne|');
     WriteLn ('                               |                     |');
     WriteLn ('                               |                     |');
     WriteLn ('                                - - - - - - - - - - - ');
     WriteLn;
     IF (i<nba) then
        Begin
           nba:=nba+1;
           Write ('Nom:             '); ReadLn (info.nom);
           Write ('Prenom:          '); ReadLn (info.prenom);
           Write ('Code postal:     '); ReadLn (info.cp);
           Write ('Localite:        '); ReadLn (info.localite);
           t[nba]:=info;
           t[i]:=t[nba];
           While(t[nba].nom<info.nom) do
              Begin
                 t[i]:=t[i-1];
              End;
           WriteLn;
           WriteLn ('Ce contact a ete correctement ajoute');
        End
        Else WriteLn ('Le carnet d''adresse est plein');
     WriteLn;
     WriteLn ('Pressez ENTER pour revenir au menu principal');
     ReadLn;
     clrscr;
    End;
     
    Function menu_delete():integer;
    Var nba,i: byte;
        nom: string;
    Begin
     i:=i+1;
     WriteLn ('                              - - - - - - - - - - - - - - ');
     WriteLn ('                             |                           |');
     WriteLn ('                             |                           |');
     WriteLn ('                             | Suppression d''une personne|');
     WriteLn ('                             |                           |');
     WriteLn ('                             |                           |');
     WriteLn ('                              - - - - - - - - - - - - - - ');
     Write ('Nom:             '); ReadLn (nom);
     If (i<nba) then
        Begin
           While (t[nba].nom<>nom) do
              Begin
                 i:=i+1;
              End;
           WriteLn ('Prenom:          ',t[nba].prenom);
           WriteLn ('Code postal:     ',t[nba].cp);
           WriteLn ('Localite:        ',t[nba].localite);
           WriteLn;
           WriteLn ('Votre contact a bien ete supprime');
           t[nba]:=t[nba-1];
        End
     Else WriteLn ('Il n''y a pas de contact');
     WriteLn;
     WriteLn ('Pressez ENTER pour revenir au menu principal');
     ReadLn;
     clrscr;
    End;
     
    Function menu_search():integer;
    Var nom: string;
        i, nba: byte;
    Begin
     i:=0;
     WriteLn ('                              - - - - - - - - - - - - - - ');
     WriteLn ('                             |                           |');
     WriteLn ('                             |                           |');
     WriteLn ('                             | Recherche d''une personne  |');
     WriteLn ('                             |                           |');
     WriteLn ('                             |                           |');
     WriteLn ('                              - - - - - - - - - - - - - - ');
     Write ('Nom:             '); ReadLn (nom);
     While (t[i].nom<>nom) do
         Begin
            i:=i+1;
         End;
      If (t[i].nom=nom) then
         Begin
           WriteLn ('Prenom:          ',t[nba].prenom);
           WriteLn ('Code postal:     ',t[nba].cp);
           WriteLn ('Localite:        ',t[nba].localite);
         End
      Else WriteLn ('Aucune personne ne correspond a votre recherche...');
     WriteLn;
     WriteLn ('Pressez ENTER pour revenir au menu principal');
     ReadLn;
     clrscr;
    End;
     
    Function menu_read():integer;
    Var i: byte;
    Begin
     i:=0;
     WriteLn ('                              - - - - - - - - - - - - ');
     WriteLn ('                             |                       |');
     WriteLn ('                             |                       |');
     WriteLn ('                             |  Liste des personnes  |');
     WriteLn ('                             |                       |');
     WriteLn ('                             |                       |');
     WriteLn ('                              - - - - - - - - - - - - ');
     If (nba>0) then
        Begin
           While (i<nba) do
              Begin
                WriteLn ('Nom:             ',t[i].nom);
                WriteLn ('Prenom:          ',t[i].prenom);
                WriteLn ('Code postal:     ',t[i].cp);
                WriteLn ('Localite:        ',t[i].localite);
                WriteLn;
                i:=i+1;
              End;
         End
     Else WriteLn ('Il n''y a aucun contact');
     WriteLn;
     WriteLn ('Pressez ENTER pour revenir au menu principal');
     ReadLn;
     clrscr;
    End;
     
     
    Begin
     nba:=0;
     While (choix<>5) do
        Begin
           choix:=0;
           WriteLn ('                                - - - - - - - - - - -');
           WriteLn ('                               |                     |');
           WriteLn ('                               |                     |');
           WriteLn ('                               |  Carnet d''adresse   |');
           WriteLn ('                               |                     |');
           WriteLn ('                               |                     |');
           WriteLn ('                                - - - - - - - - - - -');
           WriteLn ('1) Ajouter une personne');
           WriteLn ('2) Supprimer une personne');
           WriteLn ('3) Rechercher une personne');
           WriteLn ('4) Afficher toutes les personnes');
           WriteLn ('5) Quitter');
           WriteLn;
           Write ('Que voulez vous faire? ');
           ReadLn (choix);
           clrscr;
     
           If (choix=1) then menu_add
           Else
           If (choix=2) then menu_delete
           Else
           If (choix=3) then menu_search
           Else
           If (choix=4) then menu_read
           Else
           If (choix<>5) then
             Begin
                WriteLn ('Veuillez entrer un chiffre valide');
                WriteLn;
                WriteLn ('Pressez ENTER pour revenir au menu principal');
                ReadLn;
                clrscr
             End;
         End;
    End.

Discussions similaires

  1. créer une gestion d'annuaire
    Par maguy27 dans le forum Modélisation
    Réponses: 6
    Dernier message: 27/07/2019, 18h39
  2. Gestion annuaire téléphonique
    Par mano2003 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/05/2012, 05h59
  3. construire un annuaire téléphonique
    Par batalich dans le forum C
    Réponses: 7
    Dernier message: 13/03/2007, 23h41
  4. [Access] Gestion de standard téléphonique
    Par Fiorentina dans le forum WinDev
    Réponses: 4
    Dernier message: 14/04/2006, 12h01
  5. [MCD] Modéliser un annuaire téléphonique
    Par allowen dans le forum Schéma
    Réponses: 9
    Dernier message: 20/10/2005, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo