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

Algorithmes et structures de données Discussion :

[Algobox] Additions en binaire


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Octobre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2015
    Messages : 1
    Points : 6
    Points
    6
    Par défaut [Algobox] Additions en binaire
    Bonour,

    je fais comme option isn en terminale et j'ai comme consigne de programmer un algoritme sur algobox permettant d'effectuer des additions en binaire.
    Je n'y arrive pas du tout, pouvez vous m'aider ?

    Merci

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Fabrique un demi-additionneur, c'est-à-dire un additionneur de 1 bit. Ça peut prendre la forme de 2 fonctions: une pour le résultat, et une pour la retenue.

    Résultat:
    0+0->0
    0+1->1
    1+0->1
    1+1->0
    (Tiens, ça ressemble à la fonction logique XOR, "ou exclusif")

    Retenue:
    0+0->0
    0+1->0
    1+0->0
    1+1->1
    (Tiens, ça ressemble à la fonction logique ET)

    Ensuite, il suffit de les enchaîner. N'oublie pas qu'à chaque étape (chiffre de A et B), il y a ai, bi mais aussi ri, retenue de la demi-addition précédente.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 948
    Points
    3 948
    Par défaut
    Citation Envoyé par camjea Voir le message
    Bonour,

    je fais comme option isn en terminale et j'ai comme consigne de programmer un algoritme sur algobox permettant d'effectuer des additions en binaire.
    Je n'y arrive pas du tout, pouvez vous m'aider ?

    Merci
    Quel rapport avec Pascal ? Je ne suis pas sûr qu'il y ait beaucoup de spécialistes AlgoBox ici. Cela a l'air assez verbeux.
    Tu veux faire une addition en binaire ? comment la ferais-tu en décimal ? Ben, c'est la même chose mais avec moins de chiffres, il te faut additionner les chiffres un à un en tenant compte de la retenue, en partant de l'unité (je parle de nombres entiers) jusqu'à l'ordre de grandeur le plus grand des tes nombres.

    Il faut ramener les deux nombres à la même longueur, en complétant le plus petit avec des 0 à gauche. Tu initialises la retenue à 0.

    Pour chaque rang de chiffres, tu applique la règle suivante :

    Retenue Chiffre 1 Chiffre 2 Somme Nouvelle retenue
    0 0 0 0 0
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 0 0 1 0
    1 0 1 0 1
    1 1 0 0 1
    1 1 1 1 1

    Du fait du report de la retenue, la taille de ton nombre binaire résultat doit être égale à celle du plus grand des deux nombre + 1.

    Avec cela je pense que tu peux déjà avancer.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Pour illustrer les explications d'e-ric, une proposition en Pascal. Au lieu de choisir un type plus grand pour le résultat, j'ai prévu une variable "erreur".

    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
    50
    51
    52
    53
    54
    55
    56
    program AdditionBinaire;
    {$MODE OBJFPC}
     
    {
           111 
        10101010
      + 00001111
      ----------
        10111001
    }
     
    procedure Addition(const aNombre1, aNombre2: byte; var aResultat: byte; var aErreur: boolean);
    var
      lRetenue: boolean;
      i, j: integer;
    begin
      aResultat := 0;
      aErreur := FALSE;
      lRetenue := FALSE;
     
      for i := 1 to 8 do
      begin
        j := 0;
     
        if lRetenue then Inc(j);
        if aNombre1 and (1 shl (i - 1)) > 0 then Inc(j);
        if aNombre2 and (1 shl (i - 1)) > 0 then Inc(j);
     
        if j in [1, 3] then
          aResultat := aResultat or (1 shl (i - 1));
     
        lRetenue := j >= 2;
     
        if i = 8 then
          aErreur := lRetenue;
      end;
    end;
     
    procedure Test(const aNombre1, aNombre2, aResultatAttendu: byte; const aErreurAttendue: boolean);
    var
      lResultat: byte;
      lErreur: boolean;
    begin
      Addition(aNombre1, aNombre2, lResultat, lErreur);
      if (lErreur = aErreurAttendue) or (lResultat = aResultatAttendu) then
        WriteLn('OK');
    end;
     
    begin
      Test(%00000001, %00000001, %00000010, FALSE);
      Test(%00000001, %00000010, %00000011, FALSE);
      Test(%10101010, %00001111, %10111001, FALSE);
      Test(%11111111, %00000001, %00000000, TRUE);
     
      ReadLn;
    end.
    AlgoBox en soi, c'est un produit très bien fait, on ne dit pas le contraire, mais c'est un peu comme faire du vélo sur un vélo d'appartement. On ne risque pas de tomber, mais on ne risque pas non plus de s'amuser. Au lieu d'apprendre à utiliser AlgoBox, on pourrait apprendre à utiliser un compilateur Basic, ou C, ou Pascal... Un vrai vélo.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 948
    Points
    3 948
    Par défaut
    Salut Roland,

    Je n'ai pas approfondi le sujet d'Algobox, je ne veux pas me dissiper avec cela et je pense que ce genre d'outil n'apporte pas grand chose.
    Tôt ou tard, il faut passer à un outil "sérieux" et perdre une partie de l'expérience acquise avec ce genre d'ersatz... mais camjea n'a sans doute pas trop le choix. Les profs sont comme tout le monde, ils ne font pas toujours des choix judicieux.

    Sur le site d'Algobox, j'ai adoré les arguments de "vente" (je blague, c'est gratuit):
    - "L'utilisateur n'a donc pas à apprendre toute une syntaxe complexe", il suffit de regarder l'exemple pour douter, Python et Pascal ont des syntaxes bien plus légères.
    - "un logiciel centré sur l'algorithmique (et pas sur l'apprentissage d'une syntaxe spécifique à un langage particulier);" il faut néanmoins apprendre la syntaxe de ce langage algorithmique qui n'a pas d'autre finalité que les programmes de l'Education Nationale, on est en plein délire marketing.

    Plus une perte de temps qu'un réel atout... Le seul avantage est le grapheur intégré, c'est toujours amusant.

    Pour débuter, j'aurais privilégié Python, syntaxe moderne et simple, des constructions pratiques qui boostent la vitesse de codage. L'environnement interprété permet de tester rapidement des bouts de code. Les mots-clés sont en anglais mais en petit nombre, ce qui ne devrait pas gêner des lycéens. On va me reprocher de ne pas promouvoir Pascal, je le pratique toujours (un peu moins depuis quelques temps) et j'aime bien cela.

    Pour ton exemple, tu aurais dû éviter de passer par des opérateurs binaires, camjea risque de trouver cela compliqué, vue sa question. J'aurais utilisé des chaînes de caractères.

    Bon, on va attendre la suite avec camjea, il pourra peut-être donner des précisions sur le type de données à mettre en oeuvre.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Octobre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2015
    Messages : 1
    Points : 6
    Points
    6
    Par défaut Suite
    Merci beaucoup pour toutes vos réponses,
    En fait en fin de cours le prof nous a donné comme consigne de faire un algorithme sur l'addition binaire et le programmer soit dans Algobox, soit en Python, soit sur notre calculatrice. Cependant je ne comprends pas encore très bien python j'ai plus utilisé allo px pour l'instant
    je sais comment additionner en binaire "manuellement", sans programme mais je n'arrive pas a programmer un algorithme pour cela..

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 948
    Points
    3 948
    Par défaut
    Salut,

    Entre Python et AlgoBox, Python sans hésitation. Ce langage est bien implanté et sa communauté est très vivante, il évolue constamment et possède énormément de bibliothèques pour des besoins très variés. Des outils comme AlgoBox sont trop limités. Python te demandera un effort au début mais on s'y fait très vite, le fait qu'il soit un interpréteur est d'une grande aide pour les débutants. En outre, ce que tu auras appris sur Python pourra toujours te servir plus tard même si tu ne deviens pas informaticien, c'est toujours pratique pour faire des calculs. Je te conseille les tutoriels du site pour commencer dont le réputé Swinnen.

    Si tu choisis Python, il faudra passer cette discussion dans le forum python. Avec AlgoBox, le mieux serait de passer dans le forum http://www.developpez.net/forums/f60...algorithmique/.

    Pour revenir à ton problème, il te faut déjà déterminer avec quel type de donnée tu vas travailler, de là découleront les opérations (fonction, opérateur) que tu pourras utiliser pour résoudre ton problème. Cela peut être :
    - une chaîne de caractères
    - une liste ou un tableau de chiffre
    - ou un nombre en accédant à ses bits comme l'a fait Roland

    Ecris en français sur papier ensuite la méthode pour additionner, trouves ensuite les instructions qui remplaceront les mots en français dans le langage choisi.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    C'est vrai qu'avec des caractères le code est plus parlant.

    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
    50
    program AdditionBinaire2;
    {$MODE OBJFPC}
     
    type
      octet = array[1..8] of '0'..'1';
     
    procedure Addition(const aNombre1, aNombre2: octet; var aResultat: octet; var aErreur: boolean);
    var
      lRetenue: boolean;
      i, j: integer;
    begin
      aResultat := '00000000';
      aErreur := FALSE;
      lRetenue := FALSE;
     
      for i := 1 to 8 do
      begin
        j := 0;
     
        if lRetenue then Inc(j);
        if aNombre1[9 - i] = '1' then Inc(j);
        if aNombre2[9 - i] = '1' then Inc(j);
     
        if j in [1, 3] then
          aResultat[9 - i] := '1';
     
        lRetenue := j >= 2;
     
        if i = 8 then
          aErreur := lRetenue;
      end;
    end;
     
    procedure Test(const aNombre1, aNombre2, aResultatAttendu: octet; const aErreurAttendue: boolean);
    var
      lResultat: octet;
      lErreur: boolean;
    begin
      Addition(aNombre1, aNombre2, lResultat, lErreur);
      if (lErreur = aErreurAttendue) or (lResultat = aResultatAttendu) then
        WriteLn('OK');
    end;
     
    begin
      Test('00000001', '00000001', '00000010', FALSE);
      Test('00000001', '00000010', '00000011', FALSE);
      Test('10101010', '00001111', '10111001', FALSE);
      Test('11111111', '00000001', '00000000', TRUE);
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. addition fichiers binaires
    Par nikus44 dans le forum C++
    Réponses: 13
    Dernier message: 13/04/2012, 10h13
  2. Addition binaire
    Par mguinot dans le forum Langage
    Réponses: 1
    Dernier message: 24/02/2006, 10h22
  3. [XPATH] Addition, multiplication binaire
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/04/2005, 07h32

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