Dualzahlumrechnungsalgorithmus

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dualzahlumrechnungsalgorithmus

    Hallo,

    ich habe folgende Aufgabe:

    Ich soll eine Zahl in das Dualzahlsystem umrechnen und dafür einen Algorithmus schreiben. Der genaue Wortlaut lautet:

    Eine positive ganze Zahl a im Dezimalsystem kann nach folgendem Algorithmus in eine Dualzahl umgewandelt werden:
    die erste Ziffer (ganz rechts) ergibt sich aus dem ganzzahligen Rest bei Divison durch 2, a muss für die Weiterrechnung durch 2 dividiert werden,
    die zweite Ziffer (zweite von rechts) ergibt sich aus dem ganzzahligen Rest der Division durch 2 angewandt auf das halbierte a,
    die dritte Ziffer . . . .
    Der Algorithmus endet, wenn a durch das fortwährende Halbieren 0 ist.

    Dieser Algorithmus soll in einem C++-Programm umgesetzt werden. Die umzuwandelnde natürliche Zahl a ist einzulesen. Die berechneten Dualziffern sind dabei sofort nach ihrer Berechnung mit cout auszugeben. Beachten Sie, dass die Ziffernfolge in umgekehrter Reihenfolge dargestellt wird.


    Ich habe schon angefangen zu programmieren, aber ich muss ehrlich zugeben, dass ich eigentilch absolut keine Ahnung von C+ habe. Hier erstmal mein Code:

    Quellcode

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a,b;
    6. cout << "Geben Sie eine Zahl ein: " << endl;
    7. cin >> a;
    8. do {
    9. if(a%2>0)
    10. {
    11. cout << "1" << endl;
    12. }
    13. else
    14. {
    15. cout << "0" << endl;
    16. }
    17. if (a/2%2>0)
    18. {
    19. cout << "1" << endl;
    20. }
    21. else
    22. {
    23. cout << "0" << endl;
    24. }
    25. }while (a<=0);
    26. system("PAUSE");
    27. return 0;
    28. }
    Alles anzeigen


    Aber der will das Ganze nicht wiederholen bis
    a<=0 Bzw. weiß ich nicht weiter, wie ich das hinkriegen soll, dass das Programm immer weiter durch 2 Teilt bis a Null oder kleiner als Null ist.
    Ähm... ich weiß das klingt jetzt alles sehr planlos, aber ich hoffe ihr wisst was ich meine und ihr könnte mir helfen. Danke.</iostream>
  • Hi,

    ich hoffe du weisst, dass das absolute Grundlagen sind, in vielen anderen Foren wäre damit der Thread geschlossen.
    Der Allgorithmus ist exakt beschrieben; du sollst schlicht die Anwendung einer einfachen Schleife üben; das kann for, while oder do-while sein.
    Alle Schleifen haben folgendes gemeinsam;
    -Initialisierung der Variable(n)
    -Anwendung der nötigen Arbeitsschritte
    -Weiterschaltung/Aktualisierung der Variable(n)
    -Bedingungsprüfung => weitermachen oder fertig

    das Ganze kostet bei mir in Java 8 übersichtliche Zeilen

    die erste Ziffer (ganz rechts) ergibt sich aus dem ganzzahligen Rest bei Divison durch 2,

    es gibt eine Zahl a; du stimmst mir sicher zu, dass int oder long passend wäre
    finde also raus wie man den ganzzahligen Rest ermittelt und tue das; gib das Ergibnis aus

    die zweite Ziffer (zweite von rechts) ergibt sich aus dem ganzzahligen Rest der Division durch 2 angewandt auf das halbierte a

    anders ausgedrückt: teile a durch 2 und wiederhole den Schleifenkörper, falls a noch grösser 0 ist


    Du wirst dann merken und mir sicher zustimmen, dass das Ergebnis richtig aber falsch herum ist; dafür fällt dir dann vlt eine Lösung ein oder melde dich nochmal hier.
    Grundgerüst also zB:

    Quellcode

    1. do {
    2. //ganzzahligen Divisionsrest durch 2 ermitteln
    3. //Ausgabe/Speicherung des Zwischenergebnises
    4. //a halbieren
    5. } while(a > 0);
  • Danke erstmal und mir ist natürlich klar, dass es sich um Grundlagen handelt. Ich hab ja auch was verstanden worum es geht und was ich machen soll, so ist es nicht. Ich habe den Code jetzt mal nach deinen Ideen um gestaltet:

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. int a;
    6. cout << "Geben Sie eine Zahl ein: " << endl;
    7. cin >> a;
    8. do {
    9. if(a%2>0)
    10. {
    11. cout << "1" << endl;
    12. }
    13. else
    14. {
    15. cout << "0" << endl;
    16. }
    17. a/2;
    18. }while (a > 0);
    19. system("PAUSE");
    20. return 0;
    21. }
    Alles anzeigen


    Das Problem ist, dass der Die Schleife bis ins unendliche wiederholt, obwohl ich doch angegeben habe, dass es nur wiederholt werden soll, solange a>0 ist....
  • Ahhh! Danke sehr gut! Es klappt. Ich hab mir schon gedacht, dass ich den halbiertem Wert von a noch mal neu zuweisen musste. Aber irgendwas hatte da doch noch nicht geklappt. Jetzt muss ich die Zahlen nur noch in die richtige Reihenfolge bringen ... mal schaun wie ich das hinkriege bzw ob mir dazu was einfällt. ;)