C Anänger hat eine Frage



  • Hallo Gemeinde

    Ich habe nun seid ca. 3 Wochen Informatik in der FH. Auf einem vom Prof. ausgeteilten Übungsblatt soll ein Programm geschrieben werden, das eine ganze Dezimalzahl in die entsprechende Dualzahl umwandelt.

    Die Festkommazahlen sind einzulesen und umzuwandeln,
    bis die Eingabe -1 erfolgt. Eine Bereichüberschreitung kommt nicht in betracht.

    Die eingelesene Dezimalzahl soll laufend durch 2 dividiert werden, so dass die entstehenden Reste
    0 oder 1 ergeben, also die Dualstellen.

    Beispiel: 19 : 2 = 9 Rest 1
    9 : 2 = 4 Rest 1
    4 : 2 = 2 Rest 0
    2 : 2 = 1 Rest 0
    1 : 2 = 0 Rest 1
    Die Dualzahl lautet 10011

    In betracht sollte nach meinen Recherchen zufolge eine Schleife in Kombination mit dem Modulo Operanten sein. Leider aber finde ich bis auf das einlesen der Dezimalzahl keinen rechten Ansatz.

    Gruß Cye



  • Probier halt mal herum was herauskommt wenn du eine eingelesene Zahl %2 oder /2 rechnest.
    Du kannst ja eine Zahl wählen...z.b. 63 und testen was da herauskommt wenn du es schrittweise dividierst oder modulo rechnest...

    Tipp: Schau dir mal an was bei einer ungeraden Zahl hinter dem Komma stehen bleibt. Was musst du tun um die tatsächliche Zahl ohne den Rest zu bekommen? 😉


  • Administrator

    1. Das ist eine extrem triviale Aufgabe. Wie man zwei Zahlen dividiert, wie eine For-Schleife aussieht und wie der Modulooperator funktioniert, steht sicher in den Vorlesungsunterlagen.
    2. Wir machen dir sicher nicht deine Hausaufgaben, die machst du gefälligst selbst.
    3. Du hast es sogar tatsächlich geschafft im falschen Forum zu posten. Hier ist C++, C ist da drüben: http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html

    Grüssli



  • Das glaube ich in der Tat ohne mit der Wimper zu zucken, dass diese Aufgabe für manche von euch äußerst Trivial wirkt - für mich ist Sie es leider nicht.
    Es scheint wohl als würdet ihr hier mit sehr vielen Hausaufgaben belagt, dass man hier so aggressiv wirkende Antworten bekommt. 🙄 Es handelt sich um eine Übungsaufgabe um es nochmals zu betonen. Für die falsche Forenwahl muss ich mich allerdings entschuldigen.

    @ kuldren
    Mit dem Modulooperanten habe ich bereits etwas rumprobiert in Form von printf("7:2= %i ",7%2); z.B.
    Allerdings finde ich keinen rechten Ansatz wie ich wie hier im Beispiel von der 7 diese in eine Dualzahl interpretiere. Ich müsste ja erst 7:2 == 3 Rest 1 3:2==1 usw. rechnen. Also folglich das ganze mit einer Schleife verknüpfen, oder? 😕

    Gruß



  • Cye schrieb:

    Also folglich das ganze mit einer Schleife verknüpfen, oder? 😕

    Ja...du musst jeweils einmal dividieren und modulo rechnen

    Probier mal ein wenig herum und poste dann was du hast 😉


  • Administrator

    Cye schrieb:

    Es scheint wohl als würdet ihr hier mit sehr vielen Hausaufgaben belagt, dass man hier so aggressiv wirkende Antworten bekommt. 🙄

    Im allgemeinen, täglich, mehrere. Allerdings ist das Hauptproblem eher dies, dass du keinen Ansatz selber zeigst. Das Problem ist so elend trivial, das man mit jeder Codehilfe, gleich die Lösung hinschreiben kann. Sowas ist in 2 - 4 Zeilen lösbar! Und die Informationen dafür stehen bei solchen Übungsaufgaben immer irgendwo in der Theorie! Man muss es nur nachlesen.

    Aber ok, ich geb dir eine Hilfestellung ... Die ist aber so einfach, dass sie sich in nichts unterscheidet, was wir schon geschrieben haben, einfach nur als Code:

    int var;
    
    // Eingabe, siehe Link unten.
    
    // ... was kommt wohl hierhin?
    
    putchar(var % 2 ? '1' : '0'); // Modulo und 0 oder 1 ausgeben.
    var /= 2; // Durch 2 rechnen.
    
    // ... und was hier?
    

    Für die Eingabe empfehle ich das hier:
    http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html

    Und weiter kann man echt nicht mehr helfen. Sonst musst du ganz konkrete Fragen stellen oder das Fach Informatik aufgeben :p

    Grüssli


Anmelden zum Antworten