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 :

Type caractère


Sujet :

Langage Pascal

  1. #81
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Pour revenir à ta question précédente, quand tu te demandes si quelques chose est utile dans un programme, demande toi ce qui se passerait si ça n'y était pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure asc(c : char); 
    var k : INTEGER; // tu déclares k
    begin
      k := ord(c); // tu lui donnes la valeur du code ascii de c
      if k <= 31 then // tu compares à 31, si tu ne met pas la ligne au dessus, k n'a pas été initialisé, on ne sait pas ce qu'il contient, donc il y aura une erreur de compilation
        begin
          writeln('NO');
        end
      else
        begin
          writeln(c);
        end;
    end; { asc }
    Développeur écolo, je suis pour le développement durable.

  2. #82
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    par contre je vois vraiment pas comment formater l'affichage , j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BEGIN
     
       const
          COL = 8;
          LIGN = 16;
     
       for i := 0 to 255 do
       begin
          j := CHAR(i);
          asc(j);
       end;
    end.
    vous avez pas un indice pour rendre l'affichage sur 8 colonnes ?

  3. #83
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Tu pourrais utiliser 2 boucles for imbriquées et jouer avec write et writeln.
    Développeur écolo, je suis pour le développement durable.

  4. #84
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    j'ai déjà une boucle dans le programme principal , çà va m'en faire 3...et meme dans les 2 autres boucles je vois vraiment pas quoi indicer...

  5. #85
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    En fait il faudrait que tu remplaces la boucle du programme principal par 2 boucles.
    Développeur écolo, je suis pour le développement durable.

  6. #86
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    oui mais même en faisant çà , dans ma procédure il n'est spécifié aucun formatage d'affichage à part celui qu'on a fait , donc çà servirait à rien.

  7. #87
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Je t'explique l'idée:

    Dans ta procédure tu changes les writeln en write, donc tous les caractères s'affiche les uns à côté des autres.
    Et dans le programmes principales tu controles qu'après 8 caractères, on passe à la ligne.

    C'est difficile de t'en dire + sans te donner la réponse.
    Je viens de tester et il faut utiliser une boucle for dans une boucle while.
    Développeur écolo, je suis pour le développement durable.

  8. #88
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    dans ce cas je vois vraiment pas à quoi servent les constantes que je suis obligée de définir...

  9. #89
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Citation Envoyé par Maxence45
    dans ce cas je vois vraiment pas à quoi servent les constantes que je suis obligée de définir...
    Qui a dit que tu étais obligée?

    Et c'est vrai qu'elles ne servent à rien.
    Développeur écolo, je suis pour le développement durable.

  10. #90
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    l'exercice l'exige donc j'y suis obligée

  11. #91
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    si quelqu'un a la réponse il peut poster car j'abandonne , je vois pas comment faire , même l'ago est introuvable...

  12. #92
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Constantes ou pas ça ne change rien à l'algorithme donc ce n'est pas un problème de remplacer une valeur de contrôle par une constante une fois que l'algo est correct.

    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
     
    program table;
     
    procedure asc(c : char); 
    var k : INTEGER;
    begin
      k := ord(c);
      if k <= 31 then
        begin
          write('NO',ord(c):3,'  ')
        end
      else
        begin
          write(c,ord(c):4,'  ');
        end;
    end; { asc }
     
    var i,k:integer;
    begin
      k := 0;
      while k <= 255 do
        begin
          for i:= k to k+7 do
            asc(chr(i));
          writeln; // après avoir affiché 8 caractères on passe à la ligne
          k := k + 8; // on démarre le prochain tour avec les 8 caractères suivants
        end;
      readln;
    end.
    Développeur écolo, je suis pour le développement durable.

  13. #93
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    ok çà marche , mais ce que j'ai du mal à saisir c'est quels roles ont tes variables k et i , on dirait que c'est la même chose , je ne sais plus si k c'est le caractère de la table ascii ou sa valeur numérique...

  14. #94
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    k:= 0;
    donc k est la valeur numérique, on ne "transforme" k en son caractère correspondant qu'au moment où on appele la procédure asc.
    Développeur écolo, je suis pour le développement durable.

  15. #95
    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
    Hi,
    Citation Envoyé par Mushroom7
    Qui a dit que tu étais obligée?

    Et c'est vrai qu'elles ne servent à rien.
    Bien sûr qu'elles servent.

    Il faut programmer en évitant les "nombres magiques", comme les 7 et 8 dans ton programme.

    Imagine que tu veuilles ensuite passer l'affichage sur 6 colonnes au lieu de 8.
    Sans définir de constante, tu es obligé d'aller changer manuellement toutes les valeurs qui lui correspondent, d'autant plus génant dans le cas présent, que ces références se font avec 2 valeurs différentes, alors qu'avec une constante, tu n'as qu'à changer une valeur.

    Pas de problème, c'est un petit programme ?

    Bien sûr, mais il faut prendre les bonnes habitudes le plus tôt possible, et définir des constantes pour les valeurs fixées en fait partie.

    Au fait, on peut faire beaucoup plus simple qu'une boucle for imbriquée dans une boucle while
    Si les cons volaient, il ferait nuit à midi.

  16. #96
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Je suis tout à fait d'accord; en fait je parlais surtout de la constante pour le nombre de rangées puisqu'elle n'est pas utilisée.

    Il y a toujours plusieurs moyens d'arriver au même résultat en programmation mais ce que j'ai utilisé me parait pas trop dur à comprendre et franchement au bout de 7 pages j'ai voulu en finir .
    Une boucle for et un if dans la boucle pour passer à la ligne serait pas mal par exemple.

    Edit: voici pour info une version améliorée qui utilise le moins de variable possible et une constante.
    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
     
    program tableAscii;
     
    procedure asc(c: char);
    begin
      if ord(c) <= 31 then write('NO',ord(c):3,'  ')
      else write(c,ord(c):4,'  ');
    end; { asc }
     
    const NBCOL = 8;
    var i:integer;
    begin
      for i:= 0 to 255 do
        begin
          asc(chr(i));
          if (i + 1) mod NBCOL = 0 then writeln;
        end;
      readln;
    end.
    Développeur écolo, je suis pour le développement durable.

  17. #97
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonsoir,
    Bravo à Mashroom qui nous propose un très bon code, mais pour faire un truc un peux plus modulable comme le propose droggo, voici une version qui utilise tois constantes NBC le nombre de colonne et NBL le nombre de ligne.
    J'ais rajouté NAF parce que les codes ascii ne sont pas les mêmes selon qu’on utilise Unix ou Win32, ainsi l'utilisateur peut aussi définir les caractères non affichables.

    Ma version est un peux différente, c'est juste pour montrer à Maxence qu'on peut coder cet exercice d'une autre façon.

    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
    const NBC = 8;            // Nombre de Colonnes
          NBL = 256 div NBC;  // Nombre de Lignes
          NAF = [0,7..10,13]; // Caractères Non-Affichables
     
    var i,k,code : BYTE;
     
    begin
      For i:= 0 to (NBL-1) do
      begin
        for k:= 0 to (NBC-1) do
        begin
          code:= i+NBL*k;
          write(code:5,':');
          If code in NAF then write('NA')
          Else Write(chr(code):2);
        end;
        writeln;
      end;
    end.
    J'ai aussi une version qui permet d'afficher la table en mode texte semi-graphique, mais cette version est moins facile à rendre modulable.
    Pour l'instant je n'ai pas le courage de faire un tableau modulable.

    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
    //=============WINDOWSXP====================
    const NBC = 8;            // Nombre de Colonnes
          NBL = 256 div NBC;  // Nombre de Lignes
          NAF = [0,7..10,13]; // Caractères Non-Affichable
     
    //==========================
    procedure Affiche(b : BYTE);  // affiche chr(b)
    begin
      Write(#186'  ',b :3);     // #186 = double barre verticale
      If b in NAF then write('NA':3)
      Else Write(chr(b):3);
    end {Affiche};
    //======================================
    function MultChar(c : CHAR; k : CARDINAL) : STRING;
    var
      i :   CARDINAL;
      res : STRING;
    begin
      res:= '';
      for i:= 1 to k do res:= res+c;
      MultChar:= res;
    end {MultChar};
     
    //===========================================
     
    var
      i,k : BYTE;
     
    begin
      write(#201); // #201= coin supérieur droit
      for k:= 0 to 6 do
        write(MultChar(#205,8),#203);
      writeln(MultChar(#205,9),#187);  // #187= coin sup gauche
     
      For i:= 0 to (NBL-1) do
      begin
        for k:= 0 to (NBC-1) do affiche(i+NBC*k);
        Writeln(' '#186);
      end;
     
      write(#200);  // #200= coin inférieur droit
      for k:= 0 to 6 do
        write(MultChar(#205,8),#202);
      writeln(MultChar(#205,9),#188);   // #188= coin inf gauche
    End.
    Remarque: Programme compilé avec FreePascal sur WindowsXP (invité de commande en Unicode)
    ci-jointe, une image de ce que j'obtiens avec la version semi-graphique.
    Images attachées Images attachées  

  18. #98
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Motivé Ultima !
    Développeur écolo, je suis pour le développement durable.

  19. #99
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut correction
    Bonjour,
    Il y avait un erreur dans mon code, j'ai interverti les indices i et k ;
    Concrètement, j'ai écrit affiche(i+NBC*k) au lieu de affiche(k+NBC*i)
    (Presque rien dans le code, mais grosse différence lors de l'exécution).
    Revoici le code (corrigé).
    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
    //========== VERSION SEMI-GRAPHIQUE POUR WINDOWS
     
    const NBC = 8;            // Nombre de Colonnes
          NBL = 256 div NBC;  // Nombre de Lignes
          NAF = [0,7..10,13]; // Caractères Non-Affichable
     
    //==========================
     
    procedure Affiche(b : BYTE);  // affiche chr(b)
    begin
      Write(#186'  ',b :3);     // #186 = double barre verticale
      If b in NAF then write('NA':3)
      Else Write(chr(b):3);
    end {Affiche};
     
    //======================================
     
    function MultChar(c : CHAR; k : CARDINAL) : STRING;
    var
      i :   CARDINAL;
      res : STRING;
    begin
      res:= '';
      for i:= 1 to k do res:= res+c;
      MultChar:= res;
    end {MultChar};
     
    //===========================================
     
    var
      i,k : BYTE;
     
    begin
      write(#201); // #201= coin supérieur droit
      for k:= 0 to 6 do
        write(MultChar(#205,8),#203);
      writeln(MultChar(#205,9),#187);  // #187= coin sup gauche
     
      For i:= 0 to (NBL-1) do
      begin
        for k:= 0 to (NBC-1) do affiche(k+NBC*i);
        Writeln(' '#186);
      end;
     
      write(#200);  // #200= coin inférieur droit
      for k:= 0 to 6 do
        write(MultChar(#205,8),#202);
      writeln(MultChar(#205,9),#188);   // #188= coin inf gauche
    End.

  20. #100
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re
    je crois que je vais mettre l'huile sur le feu mais je crois effectivement que tous les types en pascal sont défini comme étant des intervalle la preuve
    writeln(char(65)) renvoi un caractére
    writeln(int(2)) =2
    .
    .
    etc
    Voila
    cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

Discussions similaires

  1. dbChart et un champ type caractère
    Par karim15 dans le forum Bases de données
    Réponses: 0
    Dernier message: 30/11/2008, 15h26
  2. Réponses: 0
    Dernier message: 30/07/2008, 14h45
  3. Réponses: 14
    Dernier message: 26/03/2007, 16h52
  4. Traduction de données de type caractère dans Hibernate
    Par dev-man dans le forum Hibernate
    Réponses: 6
    Dernier message: 20/11/2006, 12h48

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