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

Pascal Discussion :

Saisir, trier et afficher le contenu d'un tableau à l'écran


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Saisir, trier et afficher le contenu d'un tableau à l'écran
    Bonjour,

    Soit ANNUAIRE, une structure de tableau à une dimension contenant des enregistrements, les cases du tableau étant numérotées de 1 à MAX. Chaque enregistrement de ce tableau est un article contenant les données d’un étudiant de la promotion et composé des rubriques suivantes :
    - Le matricule de l’employé (Matricule de type entier)
    - Le nom de l’employé (Nom de type chaîne de caractères)
    - L’âge de l’employé (Age de type entier dans l’intervalle AGES=12..30)
    - Salaire de base de l’employé (Salaire de type entier dans l’intervalle SALAIRES=150000..750000)
    La structure de tableau ANNUAIRE va permettre de simuler le fonctionnement du fichier des employés d’une société. On appellera MEMBRE, la structure enregistrement définie ci-dessus. ANNUAIRE sera donc définie comme étant une structure tableau dont les cases seront de type MEMBRE.

    Voilà mon algorithme en pascal :

    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
    CONST
         MAX=4;
    Type
        MEMBRE=Record
        MATRICULE:Integer;
        NOM : Char;
        AGE : 12..30;
        MOYENNE : 0..20;
        End;
        ANNUAIRE=array[1..MAX] of MEMBRE;
    Var
        ETUDIANT:MEMBRE;
        FICHIER:ANNUAIRE;
        temp:Char;
        i,j:Integer;
    BEGIN
        Writeln('Entrez les données');
        For i:=1 To MAX DO
            Begin
                 Write('MATRICULE : ');
                 Readln(FICHIER[i].MATRICULE);
                 Write('NOM : ');
                 Readln(FICHIER[i].NOM);
                 Write('AGE : ');
                 Readln(FICHIER[i].AGE);
                 Write('MOYENNE : ');
                 Readln(FICHIER[i].MOYENNE);
            End;
         For i:=1 To MAX-1 Do
             Begin
             For j:=i+1 To MAX Do
                 Begin
                 If FICHIER[j].NOM>FICHIER[i].NOM Then
                    Begin
                         temp := FICHIER[i].NOM;
                         FICHIER[i].NOM := FICHIER[j].NOM;
                         FICHIER[j].NOM := temp;
                    End;
                 End;
              End;
           For i:=1 To MAX Do
               Begin
                    Writeln('MATRICULE : ', FICHIER[i].MATRICULE);
                    Writeln('NOM : ', FICHIER[i].NOM);
                    Writeln('AGE : ', FICHIER[i].AGE);
                    Writeln('MOYENNE : ', FICHIER[i].MOYENNE);
               End;
    END.
    Pièce jointe 562146

    Le problème est le suivant : j'ai défini la variable MAX en constante car on me disait que l'identifiant n'était pas reconnu, je me dis qu'il y a peut-être une autre manière de le faire sans toutefois utiliser la constante ensuite quand je compile on me dit aucune erreur j'exécute donc l'algorithme et après avoir fini de saisir les données au clavier le programme s'arrête sans aller jusqu'au bout.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,

    Tu as indenté ton code, c'est bien, MAIS il faut le faire pour tout, y compris pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        MEMBRE=Record
            MATRICULE:Integer;
            NOM : Char;
            AGE : 12..30;
            MOYENNE : 0..20;
        End;
    D'autre par, le champ NOM : Char, ne pourra contenir qu'un caractère, ce qui n'est pas voulu.

    Et donc, quand tu entres les données au clavier, ça fait un peu n'importe quoi en mémoire, d'où plantage tôt ou tard (et habituellement, on préfère que ça se produise tôt, ce qui évite de perdre du temps à pianoter, mais on n'a pas la main là-dessus.

    Et plus général : les noms en majuscules sont habituellement réservés aux constantes (même si Pascal s'en moque éperdument).

    Ce problème de majuscules n'est pas une lubie des programmeurs, mais est due au fait qu'on les lit plus lentement que les minuscules, notre système visuel n'y étant pas habitué.

    D'autre part, mais là ce n'est pas de ta faute : âge des employés de 12 à 30 ans ... il faudra prévenir les services sociaux !!!!

    Pour ton problème avec MAX, j'ai un trou de mémoire (plus de 30 ans que je ne fais plus de Pascal ...)

    Malgré mes remarques un peu acides, continue, tu as déjà certaines bonnes habitudes, les autres viendront plus tard, car on finit par voir les petits défauts de nos programmes.

    Bon courage.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bonjour Fae Kiseki,

    Il y a quelques soucis dans ce script

    Déjà pour y voir plus clair, rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write('Appuyer sur une touche pour terminer le programme ...');readln;
    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i:=1 To MAX Do
               Begin
                    Writeln('MATRICULE : ', FICHIER[i].MATRICULE);
                    Writeln('NOM : ', FICHIER[i].NOM);
                    Writeln('AGE : ', FICHIER[i].AGE);
                    Writeln('MOYENNE : ', FICHIER[i].MOYENNE);
               End;
    write('Appuyer sur une touche pour terminer le programme ...');readln;
    ça permettra au programme d'afficher ce qu'on lui demande et ... SURTOUT d'attendre une action utilisateur avant de sortir/rendre la main ...

    Sinon le code ci-dessous va trier uniquement les noms dans l'annuaire et pas le reste (Matricule, Age et Moyenne)
    ça serait donc un GROS problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If FICHIER[j].NOM>FICHIER[i].NOM Then
                    Begin
                         temp := FICHIER[i].NOM;
                         FICHIER[i].NOM := FICHIER[j].NOM;
                         FICHIER[j].NOM := temp;
                    End;
    Ainsi pour donner un coup de main, la variable temp doit être déclarée de type MEMBRE et pas char ...
    C'est toutes les données du membre que l'on veut mouvementer

    Le "if" est bon (tri des noms MAIS par ordre décroissant, est-ce voulu ?)
    Le reste entre Begin et End doit être modifié (une fois que le type MEMBRE est rectifié bien sûr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If FICHIER[j].NOM>FICHIER[i].NOM Then
                    Begin
                         temp := FICHIER[i];
     
                         etc. à adapter ...
     
                    End;

    Pour l'histoire de MAX, on peut imaginer demander le nombre d'étudiants à saisir entre 1 et MAX
    ou alors poser une question dans une boucle while (voulez vous continuer la saisie ?)
    ou encore tester une valeur précise ex : matricule entre 1 et 5000 et si la valeur est > MAX alors je sors etc.

    En espérant que ça aide ...

    Laurent
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par vttman Voir le message
    J'ai pris en compte toute les remarques que vous avez fait et voici l'algorithme que j'ai rédigé.
    Pièce jointe 562312
    Pour la partie du tri il nous a été demandé de trier uniquement les noms par ordre alphabétique et non tout le tableau.
    Pour la variable MAX j'ai préféré l'utiliser en constante (j'ai mis 2 juste pour pouvoir tester facilement le programme).
    Merci pour votre aide, à votre avis (vu que vous êtes plus expérimenté que moi) ce programme est il correct et apte à résoudre le problème posé?

    Citation Envoyé par droggo Voir le message
    Merci beaucoup pour vos remarques un algorithme bien rédigé est très appréciable à regarder.

  5. #5
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par Fae Kiseki Voir le message
    Pour la partie du tri il nous a été demandé de trier uniquement les noms par ordre alphabétique et non tout le tableau.
    ...
    ce programme est il correct et apte à resoudre le problème posé?
    Curieux ça
    ...
    Je n'ai pas l'énoncé sous les yeux alors impossible de répondre !
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par vttman Voir le message
    Curieux ça
    ...
    Je n'ai pas l'énoncé sous les yeux alors impossible de répondre !
    Pour la partie du tri oui vous avez raison je viens de relire.
    Je corrige et je vous envois mon travail.
    Pièce jointe 562320

    Pour l'énoncé il se trouve dans mon premier message mais je vous l'envoi aussi
    Pièce jointe 562324

  7. #7
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    ça me semble mieux ainsi ...

    Attention, dans l'énoncé je vois qu'on parle de salaire et pas de moyenne ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2007, 09h45
  2. Afficher le contenu d'un tableau
    Par Laurent149 dans le forum Pascal
    Réponses: 2
    Dernier message: 03/11/2006, 17h11
  3. Réponses: 3
    Dernier message: 03/07/2006, 13h45
  4. Afficher le contenu d'un tableau
    Par hayam_kin dans le forum C
    Réponses: 9
    Dernier message: 25/04/2006, 21h16
  5. [Tableaux] afficher le contenu d'un tableau php
    Par moons dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2006, 15h12

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