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 :

Utilisation des opérateurs 'shr' et 'and'


Sujet :

Langage Pascal

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Utilisation des opérateurs 'shr' et 'and'
    bonjour, on m'a donné le programme (en turbo pascal ) suivant a comprendre mais certaines instructions comprises dedans sont pour moi trop poussées:
    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
     
    function bin (n: byte): string;
    var
    cpt: byte;
    s: string[8];
    begin
    s:=' ';
    for cpt:=0 to 7 do
    begin
    if n and 1=1 then s:=s+'1'
     else s:=s+'1'
    n:=n shr 1;
    end;
    bin:=s;
    end;
    bon je suis vraiment débutant en language turbo pascal , mais par rapport a ce que j'ai cherché il y a quelques intructions "bizarre"
    .pourquoi met-il "shr" ici o lieu de "div" ?
    .quand il fait un ET logique de N avec 1 pouquoi ecrit -il "1=1" et tout simplement "1"?
    voila merci d'avance.

  2. #2
    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
    Il faut se pencher sur le côté binaire de la chose. n est un byte, codé sur 8 octets. Si tu compares bit à bit la valeur de n est la valeur de 1 avec un and (ET logique), tu fais en fait un test pour savoir si n est pair ou impair :

    n = xxxxxxxx en binaire (on ne connais pas sa valeur)
    1 = 00000001 en binaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        xxxxxxxx
    AND 00000001
    =   0000000x
    un AND 1 te retourne la valeur du dernier bit de n. Ce dernier bit, si il vaut 0, alors n est pair, si il vaut 1 n est impair.

    Pour le shr, cela signifie "SHift Right", suivi du nombre de rotations, ici 1. Donc tous les bits de n seront décalés de 1 vers la droite, ce qui correspond à une division par 2.

    Après, pour comprendre, il faut avoir un minimum de connaissances en binaire.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    merci pour les infos données..
    mais ce que je ne comprend pas c'est que :
    si on prend un chiffre en binaire au hazard
    11 = 0000 1011 (codé sur 8 bits)
    on fait le "shr" avec ce nombre
    cela reviens a ecrire
    1000 0101 et ce chiffre devient négatif!!

    merci d'avance

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    en fait tout simplement ce que je ne comprend pas c'est tout ce qui se passe a partir de la boucle FOR jusqu'au premier end;
    je sais qu'il recopie la valeur de n dans s de 0 jusqu'a 7 mais le reste.....

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par cicinho Voir le message
    merci pour les infos données..
    mais ce que je ne comprend pas c'est que :
    si on prend un chiffre en binaire au hazard
    11 = 0000 1011 (codé sur 8 bits)
    on fait le "shr" avec ce nombre
    cela reviens a ecrire
    1000 0101 et ce chiffre devient négatif!!

    merci d'avance
    c'est bon j'ai compris pour le "shr" le dernier bit disparait
    et on met un zéro o bit de poids fort

  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 les bits qui disparraissent sont remplacés par des 0. Sinon, il faudrait ROR (Rotate Right).
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    salut , merci pour le bout de code ça m'a permis de connaitre de nouvelles fonctions prédéfinies (shr et ror que je vais essayer). par contre je comprends pas cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if n and 1=1 then s:=s+'1'
     else s:=s+'1'
    il me semble que dans ce cas la partie else n'a aucun intérêt(même traitement) !
    que veux dire if n cette écriture est elle acceptée avec une variable autre que booléenne ?
    merci

  8. #8
    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
    Kei,
    Citation Envoyé par paskal++ Voir le message
    salut , merci pour le bout de code ça m'a permis de connaitre de nouvelles fonctions prédéfinies (shr et ror que je vais essayer). par contre je comprends pas cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if n and 1=1 then s:=s+'1'
     else s:=s+'1'
    il me semble que dans ce cas la partie else n'a aucun intérêt(même traitement) !
    que veux dire if n cette écriture est elle acceptée avec une variable autre que booléenne ?
    merci
    Effectivement, on peut directement écrire
    car faire la même chose dans le then et le else d'un if ... (peut être une erreur de recopie du code ?)

    Sinon, on voit là l'inconvénient de compter sur la priorité des opérateurs pour que le compilateur se débrouille.

    C'est pourquoi je conseille de toujours mettre des parenthèses dans les expressions, pour clarifier la lecture au premier coup d'oeil.

    if n and 1=1 then... avec des parenthèses tenant compte des caractéristiques de Pascal donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (n and 1) = 1 then...
    ce qui est immédiatement compréhensible
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Oui, sauf qu'il s'agit manifestement d'une erreur de recopie du code, puisqu'on a là une fonction servant manifestement à obtenir une chaîne de caractères contenant la représentation binaire d'un entier. Donc il faut corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (n and 1) = 1 the s := s + '1' else s := s + '0'

  10. #10
    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
    Hao,
    Citation Envoyé par CapJack Voir le message
    Oui, sauf qu'il s'agit manifestement d'une erreur de recopie du code, puisqu'on a là une fonction servant manifestement à obtenir une chaîne de caractères contenant la représentation binaire d'un entier. Donc il faut corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (n and 1) = 1 the s := s + '1' else s := s + '0'
    C'était ce que je laissais entendre.

    ET un jour, il faudra qu'on m'explique pourquoi on se retrouve avec tant de codes mal recopiés.

    Copier/coller existe, il faut être complètement maso pour retaper son code pour le publier sur un forum. D'une part pour le travail inutile que ça représente, et d'autre part, pour les petites erreurs qui sont presque systématiquement ainsi introduites.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hao,

    C'était ce que je laissais entendre.

    ET un jour, il faudra qu'on m'explique pourquoi on se retrouve avec tant de codes mal recopiés.

    Copier/coller existe, il faut être complètement maso pour retaper son code pour le publier sur un forum. D'une part pour le travail inutile que ça représente, et d'autre part, pour les petites erreurs qui sont presque systématiquement ainsi introduites.
    La reponse est qu' il n'existe pas de copier/coller depuis l' editeur de tp vers une fenetre windows. Pour le faire, il faut ouvrir le .pas avec un editeur de texte (bloc-note, pspad,...) pour ensuite faire le copier/coller du code contenu dans l' editeur.Un simple "click droit->ouvrir avec->choisir le programme->bloc-note" sur le fichier conserné permet d' ouvrir le .pas

  12. #12
    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 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !
    Citation Envoyé par darrylsite Voir le message
    La reponse est qu' il n'existe pas de copier/coller depuis l' editeur de tp vers une fenetre windows. Pour le faire, il faut ouvrir le .pas avec un editeur de texte (bloc-note, pspad,...) pour ensuite faire le copier/coller du code contenu dans l' editeur.Un simple "click droit->ouvrir avec->choisir le programme->bloc-note" sur le fichier conserné permet d' ouvrir le .pas
    Sans vouloir te froisser, il y a bien une méthode pour copier du texte depuis l'éditeur de TP vers le presse-papier Windows :
    • Il faut basculer en affichage fenêtré (Alt-Enter)
    • Aller dans le menu de la console (clic sur l'icône dans la barre de titre)
    • Menu Edition --> Marquer
    • Tracer un rectangle à la souris autour de la zone à copier
    • Presser Enter : c'est copié dans le presse-papier.

    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]

  13. #13
    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
    Hie,

    Et bien plus simple encore : dans la fenêtre d'édition de TP, sélectionner avec la souris le texte à copier, et faire un clic droit. Hop, c'est copié.

    Et quand bien même on ne pourrait pas copier directement de TP, ouvrir le fichier source dans un autre éditeur pour copier évite tout de même pas mal de boulot, et aussi, et surtout, évite toutes ces fameuses erreurs...
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hie,

    Et bien plus simple encore : dans la fenêtre d'édition de TP, sélectionner avec la souris le texte à copier, et faire un clic droit. Hop, c'est copié.

    Et quand bien même on ne pourrait pas copier directement de TP, ouvrir le fichier source dans un autre éditeur pour copier évite tout de même pas mal de boulot, et aussi, et surtout, évite toutes ces fameuses erreurs...
    Desolé, mais vos deux methodes ne marchent pas sous tp7. Comme je l' ai dit, c' est impossible de le faire directement. Tp7 utilise son propre clipBoard et non celui de windows. Je viens meme de l'essayer et ça ne marche pas.
    Si vous me dites que ça marche sur vos computers alors je dirai que le programme choisi des ordinateurs pour qu' il s' execute bien dessus.

  15. #15
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (n and 1) = 1 then s := s + '1' else s := s + '0'
    du coup je comprends mieux l'explication de wormful sickfoot.
    je vais essayer d'implémenter le code pour voir ce que ça donne.
    bravo messieurs et merci beaucoup

  16. #16
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Desolé, mais vos deux methodes ne marchent pas sous tp7. Comme je l' ai dit, c' est impossible de le faire directement. Tp7 utilise son propre clipBoard et non celui de windows. Je viens meme de l'essayer et ça ne marche pas.
    Si vous me dites que ça marche sur vos computers alors je dirai que le programme choisi des ordinateurs pour qu' il s' execute bien dessus.
    J'ai pas bien compris quel programme?

    La démarche donnée par Alcatîz marche chez moi (TP7=>Win Xp Sp3)

    Citation Envoyé par droggo Voir le message
    Hie,

    Et bien plus simple encore : dans la fenêtre d'édition de TP, sélectionner avec la souris le texte à copier, et faire un clic droit. Hop, c'est copié.
    Copié ou? dans Tp7 oui mais pas dans windows on l'a pas dans le presse papier....
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  17. #17
    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 krachik Voir le message
    J'ai pas bien compris quel programme?

    La démarche donnée par Alcatîz marche chez moi (TP7=>Win Xp Sp3)


    Copié ou? dans Tp7 oui mais pas dans windows on l'a pas dans le presse papier....
    Non, bel et bien dans le presse-papier.

    J'utilise ça chaque fois que je dois copier d'une console dans le presse-papier, et ça marche parfaitement avec TP, qui n'est jamais qu'une console pour l'ordi.
    Si les cons volaient, il ferait nuit à midi.

  18. #18
    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 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Droggo a raison, ça marche effectivement depuis Windows 2000.
    La manière dont je procède date de Windows NT 4.0, je n'avais jamais essayé de faire autrement
    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]

  19. #19
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Bonjour !

    Sans vouloir te froisser, il y a bien une méthode pour copier du texte depuis l'éditeur de TP vers le presse-papier Windows :
    • Il faut basculer en affichage fenêtré (Alt-Enter)
    • Aller dans le menu de la console (clic sur l'icône dans la barre de titre)
    • Menu Edition --> Marquer
    • Tracer un rectangle à la souris autour de la zone à copier
    • Presser Enter : c'est copié dans le presse-papier.

    ok ça marche.
    Merci pour la leçon

  20. #20
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut autre aide au turbo pascal
    merci pour vos différentes réponses,
    par rapport au copier coller, c'est que l'on m'a fournit le programme sur feuille papier.

    dans la suite de mon programme...
    je me retrouve avec cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s:= '0' + copy(s,1,127);
    je voudrais juste savoir si le zéro entre parenthèse signifiait la valeur du zéro en ASCII ou non car si ce n'est pas le cas je ne comprend pas cette ligne de code.

    merci d'avance.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/12/2009, 14h34
  2. Réponses: 3
    Dernier message: 02/07/2007, 17h32
  3. [SQL] Utilisation des opérateurs SQL plutôt que PHP
    Par php_newbie dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2006, 11h38

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