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. #101
    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
    Gua,
    Citation Envoyé par diden138
    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 @+
    Non.

    Un intervalle, au sens du Pascal, est un sous-ensemble d'un type scalaire.

    A ne pas confondre avec la capacité d'un type basique comme integer, ou byte..., qui ne sont limités que par la taille mémoire qu'on leur attribue, ce qui est très différent.
    Si les cons volaient, il ferait nuit à midi.

  2. #102
    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
    oui je sais ça mais cela nexplique toujour pas pourqoi pascal renvoie une valeur en faisseant type(position) exemple real(2)=2
    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) .

  3. #103
    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
    Fia,
    Citation Envoyé par diden138
    oui je sais ça mais cela nexplique toujour pas pourqoi pascal renvoie une valeur en faisseant type(position) exemple real(2)=2
    cordialement @+
    quand tu écris type(position), tu ne demandes pas la valeur de position dans le type en question, tu fais un transtypage de position dans le type.
    Et bien entendu, comme pour les valeurs numériques, tu obtiens tout simplement la valeur que tu as donnée à position.

    Il ne faut pas confondre les concepts.
    Si les cons volaient, il ferait nuit à midi.

  4. #104
    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
    ah ok !! je ne le savais pas me voila convaincu
    merci car pour etre franc je suivais la discution de loin faut dir que le sujet est assez enervant au sens que c'est une question que je me suis jamais posé

    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) .

  5. #105
    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
    Lio,
    Citation Envoyé par diden138
    ah ok !! je ne le savais pas me voila convaincu
    merci car pour etre franc je suivais la discution de loin faut dir que le sujet est assez enervant au sens que c'est une question que je me suis jamais posé

    cordialement @+
    C'est un truc qui pose assez souvent des problèmes, surtout si on passe un peu vite dessus.

    En fait, ça fait partie des problèmes posés par l'utilisation fréquente, par les langages de programmation, de termes qui existent également en mathématiques, avec des sens généralement différents, d'où confusion.
    Si les cons volaient, il ferait nuit à midi.

  6. #106
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Maxence45
    alors j'ai réalisé un programme qui est censé m'afficher la table ascii , mais le compilateur me dit qu'il y a une expression illégal quand j'utilise la fonction prédéfinie CHAR , alors que ya pas d'erreur particulière , regardez :
    <...>
    quelqu'un voit le problème ?
    En dehors de CHAR() (tu veux chr()), le problème est le format de l'affichage... Tu veux probablement 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
     
    program table;
     
    var
       c : char;
       k : INTEGER;
     
    begin
     
       k := 46;
     
       for k := 46 to 255 do
          begin
          CHAR(k);
       writeln(c:k);
          end;
     
    end.
    Pas de Wi-Fi à la maison : CPL

  7. #107
    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,
    Juste pour dire qu'il faudrait sauvgarder le résulta du transtypager éffectué:
    exemple ou sinon, procéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    writeln(CHAR(c):k);
    //c'est ainsi que j'ai procédé dans le code que j'ais proposé il y a quelque mois
    Donc, pour reprendre le code de Emmanuel Delahaye :
    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 table;
     
    var
       c : char;
       k : INTEGER;
     
    begin
     
       k := 46;
     
       for k := 46 to 255 do
          begin
          c:= CHAR(k);
       writeln(c:k);
          end;
     
    end.
    ma procposition :
    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
    program table;
     
    var
       k : INTEGER;
     
    begin
     
       k := 46;
     
       for k := 46 to 255 do
          begin
       writeln(CHAR(k)); // on retourne à la ligne à chaque fois
          end;
     
    end.
    L’opérateur de réservation d'espace :

    il me semble que l'opérateur deux points n'a rien à faire dans ce code puisqu'on retourne à la ligne à chaque fois.

    et si on ne retourné pas à la ligne:
    write(c:k) avec k = 255 est complètement absurde
    le plus raisonnable serait de mettre une constante,
    Ainsi on aurai;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const espace_reserve = 3;//un chiffre entre 1 et 3 me semble convenir
    ...
    for k := 46 to 255 do write(CHAR(k):espace_reserve);
    remarque, on aurait mettre directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for k := 46 to 255 do write(CHAR(k):3);

  8. #108
    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
    Jao,
    Citation Envoyé par Ultima
    ma procposition :
    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
    program table;
     
    var
       k : INTEGER;
     
    begin
     
       k := 46;
     
       for k := 46 to 255 do
          begin
       writeln(CHAR(k)); // on retourne à la ligne à chaque fois
          end;
     
    end.
    Comme k va servir de variable de contrôle pour une boucle for , l'initialisation est inutile.

    La ligne
    ne sert donc absolument à rien.

    Et pourquoi utiliser le transtypage avec CHAR(k), alors qu'il existe une fonction dédiée à cela Chr(k) ? (Ce n'est pas faux, bien entendu)

    Et leitmotiv, il faut prendre la peine de faire une indentation régulière et cohérente, et éviter de mettre des lignes vides quand ce n'est pas nécessaire pour aérer le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program table;
     
    var
      k : INTEGER;
     
    begin
      for k := 46 to 255 do
      begin
        writeln(Chr(k)); // on retourne à la ligne à chaque fois
      end;
     
      // ne pas oublier un petit ReadLn pour avoir le temps de voir le résultat
      ReadLn;
    end.
    Concernant le ReadLn pour avoir le temps de voir le résultat, ce n'est pas suffisant dans le cas présent, car, avec 1 seul caractère par ligne, on dépasse très largement la hauteur d'une fenêtre MS-DOS.
    Il vaudrait donc mieux prévoir d'afficher les données en une série de lignes, ou, pour le moins, faire une pause toutes les x lignes.
    Si les cons volaient, il ferait nuit à midi.

  9. #109
    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,
    Pourquoi faire [QUOTE ]Ultima[ /QUOTE]
    alors que le code est celui de Emmanuel Delahaye?
    (le code initial avait un comportement inattendu,
    j'ai donc proposé une solution pour que le programme fonctionne "correctement",
    j'ai fait un copier-coller du code initial, d'où l'indention et tout le reste).

  10. #110
    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
    Jiu,

    J'ai juste cité le dernier post.
    Si les cons volaient, il ferait nuit à midi.

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