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

 C Discussion :

microprocesseurs langage C


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut microprocesseurs langage C
    Bonjour,
    Ecrire un programme e langage C pour additione deux grands nombres (>255) [sous la forme (x,y) dans le brouillant pas dans le programme,donc (x,y) +(x',y') et il va nous donner le resultat (x+x',y+y')],on suppose que le pc connait pas les grands nombres (additioner deux tableaux)
    c'est ce que fait le systeme d'exploitation
    voila un exemple:
    on fait entrer (1,44) et on sait qu'elle signifie 300
    et (1,144) signifie 400
    1,44+1,144=2,584 qui doit etre 700
    si le nombre apres la vergule (584) est superieur a 255 on doit le placer dans la case qui suit
    (1,44)=300=100101100=(sur 16 bits) 0000000100101100
    (1,144)=400=110010000=0000000110010000
    s'il vous plait aidez moi,j'arrive pas a comprendre cet exercice

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par souzen Voir le message
    s'il vous plait aidez moi,j'arrive pas a comprendre cet exercice
    Ce n'est pas très difficile. Apparement, tu dois faire un programme qui gère des entiers de longueur arbitraire. Comme l'unité de base en informatique est l'octet, et que celui-ci peut prendre 256 valeurs différentes (de 0 à 255), et bien, tu vas les manipuler un par un.

    On va en fait considérer que tu travailles en base 256, où chaque octet correspond à un chiffre. Du coup, ton (1,44) = 300 s'explique par le fait qu'il s'agit en fait de 1 x 256 + 44 x 1 = 256 + 44 = 300.

    Ensuite, tu procèdes à une addition ordinaire, comme si tu la posais sur papier.

    Donc, tu fais deux tableaux de n cases (ici, deux cases chacun), plus un pour le résultat et tu commences par les cases les plus à droite (poids faible). Tu additionnes leur contenu, et tu stockes le résultat dans la case la plus à droite, également, du tableau de sortie. Toutefois, si ton résultat dépasse 256, ben tu poses les 8 bits de poids faible - autrement dit, ton résultat modulo 256 - et tu retiens les huit autres - soit le résultat divisé par 256 -.

    Bon courage.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Toutefois, si ton résultat dépasse 256, ben tu poses les 8 bits de poids faible - autrement dit, ton résultat modulo 256 - et tu retiens les huit autres - soit le résultat divisé par 256 -.
    (je me permet de finir la brillante explication): puis tu propage la retenue sur l'addition de la case suivante.

    Soit quelque chose comme ça:
    case=case la plus à droite
    retenu=0
    Faire:
    Additionner case courante de nombre1, case courante de nombre2 et retenu
    Si résultat courant<256, case courante de resultat est résultat courant et retenu est 0
    Sinon
    case courante de resultat est résultat courant modulo 256
    retenu est résultat courant /256
    passer à la case suivante
    Tant qu'on n'a pas épuisée toutes les cases de nombre1, nombre2: ne pas oublier la dernière retenue et ne pas oublier de gérer un nombre de cases différentes entre nombre1 et nombre2.

    Bon courage.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut microprocesseurs(langage C)
    merci a vous deux pour votre aide
    mais j'arrive pas a faire l'exercie parceque on pas fait le cours encore,et je comprends pas bien,le professeur nous a dit de le faire apres il vas nous expliquer la lecon,on va le corriger demain,et je l'ai pas encore fait,si vous pourriez m'aider a le faire s'il vous plait et merci beaucoup

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut Arithmétique de primaire (geek)
    Citation Envoyé par souzen
    1,44+1,144=2,584 qui doit etre 700
    Non. C'est faux. Relis l'énoncé. {1;44} + {1;144}, ça donne {2;188}.
    Cela signifie que dans cet exemple, il n'y a pas de retenue. Tu devras quand même la gérer pour que ça marche avec tous les nombres.

    Citation Envoyé par souzen Voir le message
    merci a vous deux pour votre aide
    mais j'arrive pas a faire l'exercie parceque on pas fait le cours encore
    On te fait faire des exercices avant le cours ? Curieux.
    Si c'est le cas, c'est que le prof veut que tu ponde l'algorithme d'abord. L'écrire ensuite, c'est facile.

    et je comprends pas bien,le professeur nous a dit de le faire apres il vas nous expliquer la lecon,on va le corriger demain,et je l'ai pas encore fait,si vous pourriez m'aider a le faire s'il vous plait et merci beaucoup
    Si tu t'y prends à la dernière minute, il ne faut pas t'étonner de ne pas y arriver (bon, d'accord, tout le monde a fait pareil un jour, moi le premier).

    En tout état de cause, on ne va pas te pondre ton exercice à ta place, mais avec un tableau, c'est plus parlant. On va passer par l'hexadécimal. C'est un détour, mais ça t'aidera peut-être à comprendre. Donc, 300 en décimal, ça fait 012C en hexadécimal (base 16). Donc 01--, ça fait bien 1 en décimal, et --2C, ça fait 44. Tu t'y retrouves ? De même, 400 en décimal donne 0190 en hexa, soit 01-- qui fait 1, et --90 qui fait 144.

    D'autre part, deux chifres hexa permettent de faire 256 combinaisons différentes, donc tiennent exactement dans un octet (tout l'intérêt de l'hexadécimal en informatique se trouvant ici). Par conséquent, si les cases de ton tableau font un octet chacune, ça donnerait à peu près ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                   case 1 case 2
                    +----+----+
                    | 01 | 2C |   
                    +----+----+
                    +----+----+
                  + | 01 | 90 |   
                    +----+----+
                 -----------------
                    +----+----+
                  = | 02 | BC |   
                    +----+----+
    Admettons maintenant que je veuille additionner 300 + 506, ce qui ferait 012C + 01FA. Là, en hexa, il y aura une retenue, car --2C + --FA font 0126. Tu poseras donc 26 et retiendra 01 :

    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
                   case 1 case 2
                    +----+----+
                    | 01 | 2C |   
                    +----+----+
                    +----+----+
                  + | 01 | FA |   
                    +----+----+
                 -----------------
                      01 <- Je retiens 1 ici.
                    +----+----+
                  = | 02 | 26 |   
                    +----+----+
                 -----------------
                    +----+----+
                  = | 03 | 26 | Total final.
                    +----+----+

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut microprocesseurs(langage C)
    mais j'arrive pas a faire lalgorithme je peux traduire l'algorithme en langage C,c'est difficile pour moi

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par souzen Voir le message
    mais j'arrive pas a faire lalgorithme je peux traduire l'algorithme en langage C,c'est difficile pour moi
    L'algorithme, je viens de te le donner. Il s'agit de faire une addition chiffre par chiffre, comme tu le ferais sur papier, en considérant que chaque chiffre est un octet.

    Comment tu fais quand tu additionnes deux nombres sur papier ? Tu commences par additionner les chiffres de la colonne de droite, tu poses le résultat sur un chiffre, et tu passes à la colonne suivante en tenant compte de la retenue. Ben là, tu fais pareil : tu as deux fois deux nombres, nombres qui peuvent être compris entre 0 et 255 (parce qu'ils reflètent en fait le contenu d'un octet).

    Il te faut sept cases en tout : deux pour stocker le premier doublet {1;44}, deux autres pour le second {1;144}, encore deux pour stocker le résultat {x,y}, et une dernière pour la retenue (qui servira également, de fait, à recevoir le chiffre de poids fort du résultat).

    Tu additionnes les deux cases de droites (44 et 144), et tu stockes le résultat dans la case de droite du résultat. Si le résultat dépasse 256, tu stockes « résultat modulo 256 » et tu retiens la partie entière de « résultat divisé par 256 ».

  8. #8
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut microprocesseurs(langage C)
    merci beaucoup pour votre aide

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

Discussions similaires

  1. Exercices en langage assembleur du microprocesseur 8086
    Par lorye dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 10/01/2009, 18h04
  2. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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