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. #61
    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
    Encore une fois c'est une question de préférence personnelle mais moi je trouve que ça alourdi la lecture du code.
    Si on oublie de les ajouter lors de l'ajout d'une instruction et qu'on tente de compiler on se rendra tout de suite compte que c'est de là que vient l'erreur.
    Alors qu'est-ce qui prend plus de temps? Ne pas les mettre et les ajouter apres une eventuelle erreur de compilation ou les écrire automatiquement à chaque fois?

    Surtout en pascal, "begin" et "end" ça se remarque, alors que dans d'autres langages c'est sur qu'un "{" sera moins facilement repérable.

    Mais bon c'est sur que c'est pas le plus important.

    A part ça j'ai une question existentielle tant qu'on y est , pense-tu qu'il y a une différence de performance entre "x < 32" et "x <= 31" ? Autrement dit est-ce que "<=" utilise + d'instructions processeur qu'un "<" ?
    J'imagine que non car "<=" doit avoir été codé dans l'UAL du processeur mais on ne sait jamais.

    @Maxence: tu declares j mais tu ne l'utilises pas, tu envois i à la procédure, qui est un nombre. Fais plutot ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var c: char;
    begin
    for c := chr(0) to chr(255) do
      asc(c);
    readln;
    end.
    Développeur écolo, je suis pour le développement durable.

  2. #62
    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
    voilà le code final :

    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
    program table;
     
    procedure asc(c : char);
     
    var
       k : INTEGER;
     
    begin
     
       k := 0;
     
    if k < 31 then
    begin
       writeln('NO');
    end
    else
       begin
          writeln(c);
    end;
    end; { asc }
     
    BEGIN
       var
          i : INTEGER;
          j : char;
     
       for i := 0 to 255 do
       begin
          j := CHAR(i);
          asc(i);
       end;
    end.

  3. #63
    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 déclares des variables entre le begin et end du prog principal, ce qui n'est pas autorisé. Et tu as mis asc(i) au lieu de asc(j). Mais tu peux faire ça avec une seule variable comme ici:

    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
    program Project2;
     
    procedure asc(c : char);
    begin
      if byte(c) <= 31 then
        writeln('NO',ord(c):3))
      else
        writeln(c,ord(c):4);
    end;
     
    var c: char;
    begin
      for c := chr(0) to chr(255) do
        asc(c);
      readln;
    end.
    Développeur écolo, je suis pour le développement durable.

  4. #64
    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
    je comprends rien j'abandonne , t'as complètement changer mon code , autant pomper , merci .

  5. #65
    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
    Hol,
    Citation Envoyé par Maxence45
    voilà le code final :

    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
    program table;
     
    procedure asc(c : char);
     
    var
       k : INTEGER;
     
    begin
     
       k := 0;
     
    if k < 31 then
    begin
       writeln('NO');
    end
    else
       begin
          writeln(c);
    end;
    end; { asc }
     
    BEGIN
       var
          i : INTEGER;
          j : char;
     
       for i := 0 to 255 do
       begin
          j := CHAR(i);
          asc(i);
       end;
    end.
    Il reste toujours à corriger la ligne
    Et surtout, tu initialises k à 0, alors qu'il faut lui donner la valeur du code du caractère c que tu passes à la procédure, paramètre que tu n'utilises jamais.

    Citation Envoyé par Mushroom7
    Tu déclares des variables entre le begin et end du prog principal, ce qui n'est pas autorisé.
    +1.
    et ton j, qui est initialisé comme devrait l'être k dans la procédure asc, ne te sert à rien, littéralement : tu l'initialises, et rien d'autre.

    N'oublions pas le leitmotiv : soigne l'indentation, tu verras mieux la structure de ton programme.
    Si les cons volaient, il ferait nuit à midi.

  6. #66
    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
    Ton code était bon à part les 2 petites erreurs dont je t'ai parlé.
    Je n'ai pas complètement changer ton code, je l'ai juste optimisé. J'ai supprimé des variables là où on peut s'en passer.

    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
     
    program Project2;
     
    procedure asc(c : char); // reçoit le caractère à afficher
    begin
      if byte(c) <= 31 then // on fait un transtypage pour obtenir le code du caractère
        writeln('NO',ord(c):3)) // on affiche NO suivi du code du symbole
      else
        writeln(c,ord(c):4); // on affiche le symbole suivi de son code
    end;
     
    var c: char;
    begin
      for c := chr(0) to chr(255) do // une boucle for peut être controlé par des caractère, par exemple on peut faire for k:= 'a' to 'z', donc ici reçoit chaque fois le caractère correspondant à la valeur de c.
        asc(c); // et on passe ce caractère a la procedure
      readln;
    end.
    Développeur écolo, je suis pour le développement durable.

  7. #67
    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 code qu'est ce qui ne va pas , moi drogoo je sais pas changer ta ligne je comprends 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    program table;
     
    procedure asc(c : char);
     
    var
       k : INTEGER;
     
    begin
     
       k := ord(c);
     
    if k < 31 then
    begin
       writeln('NO');
    end
    else
       begin
          writeln(c);
       end;
    end; { asc }
     
    var
       j : char;
     
    BEGIN
     
       for i := 0 to 255 do
       begin
          asc(i);
       end;
    end.

  8. #68
    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
    Il faut juste changer le k < 31 en k <= 31.

    A part ça lis mon message juste au dessus, j'ai commenté le code pour t'expliquer.
    Développeur écolo, je suis pour le développement durable.

  9. #69
    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
    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
    program table;
     
    procedure asc(c : char);
     
    var
       k : INTEGER;
     
    begin
     
       k := ord(c);
     
    if k <= 31 then
    begin
       writeln('NO');
    end
    else
       begin
          writeln(c);
       end;
    end; { asc }
     
    var
       j : char;
       i : INTEGER;
     
    BEGIN
     
       for i := 0 to 255 do
       begin
          asc(i);
       end;
    end.
    Free Pascal Compiler version 2.0.4 [2006/08/20] for i386
    Copyright (c) 1993-2006 by Florian Klaempfl
    Target OS: Linux for i386
    Compiling ascii1.pas
    ascii1.pas(30,12) Error: Incompatible type for arg no. 1: Got "SmallInt", expected "Char"
    ascii1.pas(34,2) Fatal: There were 1 errors compiling module, stopping
    ascii1.pas(34,2) Fatal: Compilation aborted

  10. #70
    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
    mushroom je veux garder ton code , meme si le tien est mieux je ne veux pas le lire et je veux travailler sur le mien , j'ai pas ton niveau et je dois pas utiliser de byte...

  11. #71
    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
    mon*

  12. #72
    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
    ok alors met juste ça dans le programme principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i := 0 to 255 do
       begin
          j := CHAR(i);
          asc(j);
       end;
    L'erreur te disait que tu passes un integer là où un char est attendu.
    C'est parce que tu passais i au lieu de j.
    Développeur écolo, je suis pour le développement durable.

  13. #73
    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 ya juste un petit problème d'affichage , moi je veux un résultat du genre :

    NO : 1
    NO : 2
    .
    .
    .
    A : 46

    au passage , dans le code de ma procédure j'ai initialisé k en écrivant k := ord(c) , mais j'ai absolument rien compris du pourquoi de çà , c'est la 1ère fois où j'écris un programme où je comprends aucune ligne .

  14. #74
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if k <= 31 then
        writeln('NO :',ord(c):2)
      else
        writeln(c,':',ord(c):4);
    au passage , dans le code de ma procédure j'ai initialisé k en écrivant k := ord(c) , mais j'ai absolument rien compris du pourquoi de çà , c'est la 1ère fois où j'écris un programme où je comprends aucune ligne.
    k := ord(c)
    k est de type integer, c est de type char.
    Tu dois comparer le code du caractère avec 31.
    Pour obtenir le code du caractère tu dois utiliser ord(c).
    Développeur écolo, je suis pour le développement durable.

  15. #75
    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 je vais aller dormir car là ma concentration baisse et comme je suis plus du tout dans le coup ...juste une petite interrogation avant de dormir :

    l'initialiisation k := ord(c) dans ma procédure est elle utile ?

    si oui concrètement elle sert à quoi ?

    PS : demain en me levant je relirai le code au calme et j'essayerai de le commenter moi même pour conclure car là je suis à la masse .

  16. #76
    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
    Bien sur qu'elle est utile. Parce que "c" est un caractère donc tu ne peux pas comparer c à 31 ( if c = 31 renverrait une erreur).

    Tu dois donc comparer 31 avec le code du caractère et la fonction ord() te donne ce code.

    Tu aurais aussi pu écrire: if c = chr(31) car là 31 aurait été transformé en son caractère correspondant.
    Développeur écolo, je suis pour le développement durable.

  17. #77
    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
    Parce que "c" est un caractère donc tu ne peux pas comparer c à 31 ( if c = 31 renverrait une erreur).
    oui mais dans monce code j'ai pas écrit if c <= 31 mais if k <= 31 , donc je vois quand meme pas l'utilité de k := ord(c)

  18. #78
    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 Maxence45
    oui mais dans monce code j'ai pas écrit if c <= 31 mais if k <= 31 , donc je vois quand meme pas l'utilité de k := ord(c)
    En le faisant, k prend la valeur numérique du code ASCII du caractère c, ce qui permet ensuite de tester if k <= 31 pour savoir si c est un caractère affichable ou non.
    Si les cons volaient, il ferait nuit à midi.

  19. #79
    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
    alors , alors dernière petite chose , j'aimerais par exemple que l'affichage se fasse sur 6 colonnes , donc je définis 2 constantes :

    COL ( çà c'est le nombre de colonnes ) et LIGN ( çà le nombre de lignes ) .

    ALors ma 1ère question est : les instructions d'affichages avec ces nouvelles constantes , on doit les mettre dans le programme principal ou le code de la procédure ?

    merci

  20. #80
    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:
    à propos des constante tu peux les déclarer ou tu veux soit dans le prgramme principale soit à l'intérieur de la procédure .
    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