brauche hilfe zum lösen einer aufgabe



  • Ok, war wohl etwas missverständlich. Da fehlte das "sollte" 🙄

    Wie ezeugst du denn die Zahlen bzw. wie gibst du die Zahlen aus?



  • ich geb die zahlen ganz normal über printf aus und erzeug sie durch den rekursiven aufruf von myprintf



  • Zahlen gibt man normalerweise bei printf() mit %d oder %u aus.
    Da du aber ein ';' erhhälst, nimmst du %c. Das ist auch in Ordnung.

    printf("%c", Wert);
    

    Nur wie erzeugst du den Wert den du ausgeben willst.



  • Ich erzeuge den wert den ich ausgeben möchte in dem ich jedes zeichen des zielwertes einzeln berechne und diese dann aneinander füge
    also hier
    "11" "9" und das wäre dann ja im hexa
    "B" "9"



  • Zeig mal deinen Code. Zumindest die Zeilen wo du die 11 berechnest bis zur Ausgabe.

    Nebenbei ist "9" ein String, '9' ein Zeichen und 9 ein Zahlenwert.



  • void myprintf(int n, int b)
    {
      assert(n>=0);    // stellt sicher das n größer gleich 0 ist
      if(b==2||b==8||b==10||b==16)
      {
        int k;  
        k=(n%b);
        if(n!=0)
        {
          n=(n/b);
          myprintf(n,b);
          putchar('0'+k);
        }
      }
    


  • die " waren auch nur da um den wert zu verdeutlichen sorry hät ich vllt schreiben sollen



  • Wie musst du putchar('0'+k); anpassen, wenn du erstmal für die 0 ein 'A' haben möchtest. (und für die 1 ein 'B')

    Die endgültige Lösung klappt nicht mit einem Befehl.



  • Hmmm könnteste mir da nen ansatz zu geben? Vielleicht irgendwas in der richtung das ich da ne if verzweigung reinsetze?



  • habe jetzt ein bisschen rumprobiert etwas zu ändern und zu tauschen...
    finde aber keine Lösung was soll ich mit assert(n>=0) machen um meine gewünschte ausgabe zu bekommen...
    ich steh echt aufm schlauch und könnte hilfe gebrauchen...



  • Ein if ist für dich (als Anfänger) sicher am sinnvollsten*.
    Am besten ob k > 9 ist.
    Aber aufpassen: 'A' steht für 10. Wenn du dann zu k das 'A' addierst, bekommst du einen anderen Buchstaben.

    Und für das assert schau mal auf der 1. Seite des Threads nach. Da steht ein bisschen Code.

    *Es geht auch ohne if



  • Ok habs jetz über ne "brücke" geschafft
    vielen dank für deine hilfe DirkB 😋



  • wie soll mir der code auf der ersten seite weiterhelfen?...so hab ich es ja...
    aber dann kommt ja nicht die ausgabe die ich haben möchte...

    ich hab wirklich keine ahnung was du mir damit sagen willst bitte erklärs mir...



  • ok
    Hier noch die Version ohne if

    static char myprintf_numbers[] = "0123456789ABCDEF"; 
    
    void myprintf(int n, int b)
    {
      assert(n>=0);    // stellt sicher das n größer gleich 0 ist
      if(b==2||b==8||b==10||b==16)
      {
        int k;  
        k=(n%b);
        if(n!=0)
        {
          n=(n/b);
          myprintf(n,b);
          putchar(myprintf_numbers[k]);
        }
      }
    }
    


  • das ist natürlich bedeutent effizienter als das was ich mir überlegt hatt 😉
    danke nochmals



  • hast du bitte auch noch ein lösung für mein problem?



  • test89 schrieb:

    hast du bitte auch noch ein lösung für mein problem?

    Dann zeig doch mal deinen Code.



  • Ich weiß leider immmernoch nicht wie ich mein Problem lösen soll! Ich bekomme die Fehlermeldung immernoch angezeigt und die myprintf datei durch codeblocks hinzufügen das soll ich gerade nicht machen. ich muss nämlich alle dateien seperat abgeben und die benutzen da ganz andere programme.....bitte um Hilfe 😞
    ich saß jetzt taage lang an der aufgabe und komme einfach nicht weiter, wäre sehr sehr dankbar wenn mir einer einen lösungsweg zeigen könnte...

    und was die löfung des problems von test89 ist, würde mich auch interessieren, falls das jemand weiß. also was man an meinem programm verändern müsste, damit bei der ausgabe in der letzten zeile "n must be a natural number" ausgegeben wird???



  • das ist das Hauptprogramm:

    #include <stdio.h>
    #include "myio.h"
    
    int main(){
    unsigned n = 185;
    unsigned b = 2;
    myprintf(n,b);
    printf("\n");
    b = 7;
    myprintf(n,7);
    printf("\n");
    b = 8;
    myprintf(n,b);
    printf("\n");
    b = 10;
    myprintf(n,10);
    printf("\n");
    b = 16;
    myprintf(n,b);
    n = -37;
    b = 2;
    myprintf(n,b);
    printf("\n");
    }
    

    und der rest ist der selbe code wie schon gepostet



  • XDX schrieb:

    Ich weiß leider immmernoch nicht wie ich mein Problem lösen soll! Ich bekomme die Fehlermeldung immernoch angezeigt und die myprintf datei durch codeblocks hinzufügen das soll ich gerade nicht machen. ich muss nämlich alle dateien seperat abgeben und die benutzen da ganz andere programme.....bitte um Hilfe 😞
    ich saß jetzt taage lang an der aufgabe und komme einfach nicht weiter, wäre sehr sehr dankbar wenn mir einer einen lösungsweg zeigen könnte...

    und was die löfung des problems von test89 ist, würde mich auch interessieren, falls das jemand weiß. also was man an meinem programm verändern müsste, damit bei der ausgabe in der letzten zeile "n must be a natural number" ausgegeben wird???

    das kannst du aber machen als projekt bei codeblocks...die 3 dateien werden in dem project einzelnd gespeichert so das du trotzdem 3 dateien abgeben kannst...aber wenn du es nicht als project machst kannst du es nicht compilieren


Anmelden zum Antworten