brauche hilfe zum lösen einer aufgabe



  • 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



  • @test89
    Sorry, ich hatte deine Fehlerbeschreibunf falsch verstanden.

    Du brauchst das assert nicht.
    Statt dessen musst du überprüfen ob n eine natürliche Zahl ist.
    - wenn ja, machst du die Wandlung.
    - wenn nein, gibst du die geforderte Meldung aus.

    Im Originalcode von der ersten Seite gibt es das schon für b.



  • DirkB schrieb:

    @test89
    Sorry, ich hatte deine Fehlerbeschreibunf falsch verstanden.

    Du brauchst das assert nicht.
    Statt dessen musst du überprüfen ob n eine natürliche Zahl ist.
    - wenn ja, machst du die Wandlung.
    - wenn nein, gibst du die geforderte Meldung aus.

    Im Originalcode von der ersten Seite gibt es das schon für b.

    hab jetzt ne if verzweigung eingebaut in deinen code:

    //#include <assert.h>
    #include <stdio.h>
    
    static char myprintf_numbers[] = "0123456789ABCDEF";
    
    void myprintf(int n, int b)
    {
      //assert(n>=0);    // stellt sicher das n größer gleich 0 ist
    if(n==(int)n)
    {
      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]);
        }
      }
      else
      {
        printf("base %d not supported",b);
      }
    }
      else
      {
          printf("n must be a natural number");
      }
    }
    

    in der ausgabe kommt dann aber B9 00 0
    also das ist die letzte zeile die zeilen davor stimmen ja...



  • Mit ein bisschen Überlegung wirst du feststellen, das die Bedingung (n==(int)n) immer wahr ist. 🙄

    Was ist eine Natürliche Zahl?
    Du darfst gerne auch in Wikipedia nachschlagen.
    Und wie sieht die Bedingung dafür aus?



  • DirkB schrieb:

    Mit ein bisschen Überlegung wirst du feststellen, das die Bedingung (n==(int)n) immer wahr ist. 🙄

    Was ist eine Natürliche Zahl?
    Du darfst gerne auch in Wikipedia nachschlagen.
    Und wie sieht die Bedingung dafür aus?

    ok mein fehler 🙂

    jetzt funktionierts danke für deine tipps...



  • wenn ich die dateien dem projekt hinzufüge, kann ich doch aber nur c dateien hinzufügen oder? muss aber auch die header-datei hinzufügen, wie denn das??


Anmelden zum Antworten