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

Langage Pascal Discussion :

Problème d'affichage d'un tableau


Sujet :

Langage Pascal

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Problème d'affichage d'un tableau
    J'ai un petit problème dans l'affichage d'un Tableau.
    Le truc c'est :
    Si les données sont différentes dans le nombres de caractères, par exemple si une case a un mot avec 5 caractères et une autre case dans la meme colonne a 6 caractères, cela provoque un décalage.

    Ma question est : Existe-t-il un truc pour eviter les décalages du tableau ?

    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
    Program Foot;
    uses Crt;
    Type Score=record
         N,P,G,M,E,Ps:integer;
    end;
    Var Cpt,I,Min,Max,X:integer;
        T: array[1..6] of Score;
        Nom: array[1..6] of String;
    Begin
    randomize;
    clrscr;
    Nom[1]:=('Allemagne');
    Nom[2]:=('Angleterre');
    Nom[3]:=('Argentine');
    Nom[4]:=('Brésil');
    Nom[5]:=('Italie');
    Nom[6]:=('Mexique');
    For (I) := 1 to 2 Do
    Begin
    writeln ('L''equipe ',Nom[I]);
    write ('Donnez le nombre de match gagné‚ : ');
    read(T[I].G);
    write ('Donnez le nombre de match perdu : ');
    read(T[I].P);
    write ('Donnez le nombre de match nul : ');
    read(T[I].N);
    write ('Donnez le nombre de but marqué‚ : ');
    read(T[I].M);
    write ('Donnez le nombre de but encaissé : ');
    read(T[I].E);
    End;
    clrscr;
    writeln ('');
    write (' ╔════════════╦══════════╦══════════╦══════════╦══════════╦══════════╦═════════╗');
    write (' ║  Equipes   ║ Matchs G ║ Matchs P ║ Matchs N ║ Buts Mar ║ Buts Enc ║ Points  ║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╠════════════╬══════════╬══════════╬══════════╬══════════╬══════════╬═════════╣');
    write (' ║ ',Nom[X],' ║',T[I].G,'║',T[I].P,'║',T[I].N,'║',T[I].M,'║',T[I].E,'║',T[I].Ps,'║');
    write (' ╚════════════╩══════════╩══════════╩══════════╩══════════╩══════════╩═════════╝');
     
    Readln;
    Readln;
    end.
    Merci

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    Bonjour,

    adapte ton tableau dessiné à la longueur du mot le plus grand
    et complete les noms plus petits par des espaces.

    bien sûr le tout en Pascal pour arriver à cela si tu veux cadrer à droite..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nom[1]:=(' Allemagne'); 
    Nom[2]:=('Angleterre'); 
    Nom[3]:=(' Argentine'); 
    Nom[4]:=('    Brésil');
    Ps ça me parait bizarre que tu utilises Write à la place de Writeln pour le retour à la ligne ...
    Un bon exemple vaut mieux qu'une longue explication confuse...

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Re
    J'ai pas trop compris ton truc

    Excuse-moi, peut tu m'expliqué un peut plus car j'ai pas tout compris

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    En gros, il faut fixer la taille des colonnes, genre 10 caractères. C'est pas très simple pour le commun des mortels, mais tu devrais y arriver sans souci
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Re !!
    il faut fixer la taille des colonnes, genre 10 caractères
    Fixer la taille des colonnes !!!

    Commant cela se fait :

    Un truc
    Dans l'affichage du tableau il faut que les valeur mise dans le tableau soit toujours de meme nombre de caractere
    Du genre si la valeur mise dans le tableau est de 30
    La limite minimal est 10 et la limite maximal est 99


    Si je met une valeur differente un decalage se produira

    Si vous voyez ce que je veut dire
    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Oui c'est exactement ça. Si tu affiches des chiffres de 2 nombres, tous les chiffres que tu affiches doivent être de deux nombres sinon il y a un décalage. Même problèe avec des lettres, si tu affiches des mots de 8 huits lettres, tous les mots doivent être de huit lettres sinon il a un décalage. Pour éviter ça, tu prends le mot que tu dois afficher qui a le plus de lettre, et tu alignes tous les autres mots sur cette longueur.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Un truc
    Je pense que je dois ecrire le tableau avec la methode la plus longue
    Des condition avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ... Then Gotoxy ( , )
    En verifiant la donnée la plus longue comme vous l'avez dit
    C'est la seule methode a mon avis



    Juste un truc !!
    Le decalage que je connais moi c'est de diminué la taille des cases au minimum pour laissé l'utilisateur d'ecrire dedans
    Mais y'a un inconveniant moi je vais le fixer par example à 3 caracteres ce qui va faire aussi un decalege si l'utilisateur n'ecrit pas 3 caracteres
    Donc je revien au debut


    Merci

  8. #8
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 414
    Points
    59 414
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Si tu fixes comme valeur maximale 99 pour l'utilisateur, tu ne valides le nombre qu'il a encodé que s'il est compris entre 0 et 99, sinon tu lui dis de recommencer.

    Ensuite, le plus simple est de convertir le nombre en chaîne à l'aide de str(). Si le nombre est inférieur à 10, tu insères un espace blanc dans ta chaîne.

    Enfin, pour afficher le tableau, tu n'as plus qu'à considérer que tous les nombres à afficher font exactement 2 caractères, ce qui te simplifiera la vie.

    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]

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Pour vous Mr.Alcatîz

    Si tu fixes comme valeur maximale 99 pour l'utilisateur, tu ne valides le nombre qu'il a encodé que s'il est compris entre 0 et 99, sinon tu lui dis de recommencer.
    Si je fixe la valeur maximal a 9 c'est facile
    Je dois juste decalé d'un caractere
    Mais si je fixe a 99 je dois decalé de 2 caracteres
    Ce qui fait un decalage si l'utilisateur donne une valeur de moin 10

    Si vous voyez ce que je veut dire !!!


  10. #10
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 414
    Points
    59 414
    Billets dans le blog
    2
    Par défaut
    Ah oui, pardon, je raisonnais en décalage dans le nombre à afficher et pas en décalage au niveau du tableau.

    Ne serait-il pas plus simple d'afficher une ligne de tableau vierge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    writeln (' ║            ║          ║          ║          ║          ║          ║         ║');
                                ^
                                |
                                X
    puis de faire des GotoXY ?

    Pour aligner à droite, tu pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GotoXY(x + 1 - Nombre div 10,y);
    - Si le nombre est compris entre 0 et 9 : affichage en (x + 1,y);
    - Si le nombre est compris entre 10 et 99 : affichage en (x,y);
    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]

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci bcp Mr Alcatîz

  12. #12
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonjour,

    La procédure Write permet d'aligner du texte sur un nombre de caractères donnés.
    Ainsi, pour afficher un nombre sur 3 caractères, on écrira :
    Ca évite de faire des appels à GotoXY.

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Question
    Désolé mais je suis qu'un debutant en Pascal
    Donc je ne sais pas trop commant utilisé votre truc
    Un exemple ne serait pas de refus


  14. #14
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonsoir,

    Il faudrait lire des cours sur le langage Pascal. La syntaxe de la procédure Write doit y être décrite.
    Néanmoins, pour cette fois-ci, on va faire simple.

    Prenons l'exemple d'un programme demandant à l'utilisateur de saisir un nombre, que l'on veut encadrer. On pourrait calculer la "taille" du nombre (ie le nombre de caratcères nécessaire pour le représenter à l'écran), mais on va faire sans.
    Le programme s'effectue en trois étapes.
    1. Demander à l'utilisateur d'entrer un nombre
    2. Récupérer le nombre entré
    3. Afficher le nombre dans un cadre, sur une largeur de 10 caractères

    Ca donne 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
    23
    24
    program PadNumber;
     
    var
      i: Integer;  { Nombre a ecrire }
      e: Integer;  { Position de l'erreur de Val }
      S: string;  { Chaine entree par l'utilisateur }
    begin
      { Affiche le message d'accueil }
      WriteLn('Bonjour.');
      { Lis une chaine sur l'entree standard (clavier), et tente
        de la convertir en entier avec Val. e indique la position
        de l'erreur dans la chaine. Si e = 0, la conversion a
        reussi et i contient un entier valide }
      repeat
        WriteLn('Veuillez entrer un nombre entier :');
        ReadLn(S);
        Val(S, i, e);
      until e = 0;
      { Affichage de l'entier dans un cadre }
      WriteLn('############');
      WriteLn('#', i:10, '#');
      WriteLn('############');
      WriteLn;
    end.
    Code à tester avant de poser des questions (censées).

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 33
    Points : 26
    Points
    26
    Par défaut

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

Discussions similaires

  1. [JSP]affichage d'un tableau sur plusieurs pages
    Par MAJIK_ENIS dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 29/08/2005, 11h21
  2. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  3. Prob d'affichage d'un tableau resultant d'u...
    Par Yohips dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/12/2004, 17h23
  4. [MFC] Affichage d'un tableau
    Par SethPech dans le forum MFC
    Réponses: 7
    Dernier message: 23/02/2004, 15h48
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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