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 :

[LG]Traduction de 5 lignes de code


Sujet :

Langage Pascal

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut [LG]Traduction de 5 lignes de code
    Bonjour,

    Je suis developpeur C / C++ et Java, mais alors par contre le Pascal j'y connais rien ! Et la je traduis un driver du Pascal vers le C. Alors j'aurais aime que l'on me file un petit coup de main pour me dire ce que ces lignes font :

    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
     
    VAR
      pass, EOB, a, b    : BOOLEAN;
      l     : SListH;
      k : BYTE;
      st    : STRING;
     
    BEGIN
      l:=[h];
      st:=Char(l);
      IF Pass THEN k:=1
              ELSE k:=0;
      IF EOB  THEN k:=k OR 2;
      IF (Head IN PistesValid) THEN k:=K OR 4;
      IF rew THEN k:=k OR 8;
      IF ebs THEN k:=k OR $20;
      IF NoReplaceCard THEN k:=k OR $40;
      st:=st+Char(k)+' ';
    Au debut, je pense que l'on initialise la chaine de caracteres st, ensuite on fait diverses operations, mais je ne comprends riens aux OR qui sont effectues. En C il s'agit d'un OU bit a bit sur les valeurs.... Ets-ce le cas en Pascal ? Et dans ce cas la que veut dire $20 et $40 ?

    Mon but est de savoir combien de caracteres seront dans la chaine st a la fin, je pensais qu'il y aurait un truc du style "XXX", soit trois caracteres, mais quand je vois ce code on dirait qu'il n'y aura qu'un caractere...

  2. #2
    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 !

    Ce code en lui-même n'est pas très compliqué, mais il utilise des choses qui ne sont pas disponibles en C/C++ : les ensembles. Donc, ça peut sûrement freiner ta compréhension.
    Il aurait été intéressant d'avoir la définition de SListH. Elle doit ressembler à quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      SListH = (..., h, ...);
    De même, la variable PistesValid doit être d'un type ensemble, disons SPistes, dont la déclaration doit ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      SPistes = (..., Head, ...);
    Les ensembles pourraient être traduits approximativement en C avec des enum, mais ce n'est pas tout à fait ça, car un ensemble possède une gestion bit à bit que ne possèdent pas les enums.

    Je te propose la traduction suivante. Elle n'est sûrement pas la meilleure, et doit être adaptée à ton cas de figure, bien évidemment...

    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
     
    /* Les "?" correspondent à des identificateurs du type SListH : il faut des incrémentations binaires (par puissance de 2). J'ai pris 4 au hasard pour le "h" */
    #define SListH_? 1
    #define SListH_? 2
    #define SListH_h 4
    #define SListH_? 8
     
    /* Idem pour SPistes */
    #define SPistes_Head 1
     
    int FonctionQuelconque()
    {
      int Pass, EOB, a, b;
      int l = SListH_h;
      char k;
      char *st = NULL;
      /* Variable en plus, pour ajouter k à st à la fin */
      int len;
     
      /* Je suppose qu'il faut allouer st à un moment... Le Pascal le fait tout seul, lui ! */
      st = malloc(MAXSTLEN);
      if (st !=  NULL)
      {
        st[0] = (char)l;
        st[1] = '\0';
        if (Pass) k = 1
        else k = 0;
        if (EOB) k = k | 2;
        if (PistesValid & SPistes_Head != 0) k = k | 4;
        if (rew) k = k | 8;
        if (ebs) k = k | 0x20;
        if (NoReplaceCard) k = k | 0x40;
        
        /* k peut être nul, on n'utilise pas strcat, on ajoute manuellement */
        len = strlen(st);
        st[len] = k;
        st[len + 1] = ' ';
        st[len + 2] = '\0';
     
     
     
        ...
        /* Il faut libérer la mémoire asociée à la chaîne à un moment */
        free(st);
      }
    }

    En guise de compréhension : la syntaxe $ZZ correspond au nombre héxadécimal ZZ, soit en C 0xZZ. Le or est bien un ou logique, il n'y a pas de distinction en Pascal entre le ou conditionnel et le ou binaire, donc | et || se traduisent tous les deux par un simple or en Pascal.

    Les opérations effectuées sont des opérations binaires sur un caractère. Au final, la chaîne st possède 3 caractères : la valeur de "h", placée au début, puis la valeur de "k", et enfin un espace.

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

    Pour me joindre (aucune question technique, merci)

  3. #3
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup, je pense que cela va bien m'aider !

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

Discussions similaires

  1. Traduction en Scheme de deux lignes de code en C
    Par M3hdi dans le forum Scheme
    Réponses: 7
    Dernier message: 17/06/2009, 09h09
  2. [Debutant(e)]ligne de code sous eclipse
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/01/2005, 17h37
  3. [netbeans][Linux] Nombre de lignes de codes
    Par sylvain_neus dans le forum NetBeans
    Réponses: 5
    Dernier message: 13/08/2004, 10h09
  4. Calculeur de ligne de code
    Par Bernybon dans le forum Autres éditeurs
    Réponses: 9
    Dernier message: 05/03/2004, 16h29

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