brauche hilfe zum lösen einer aufgabe



  • 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??



  • Nein, die .h Dateien brauchst du nicht hinzufügen



  • Der Compiler übersetzt jeweils eine einzelne .c Datei. Dabei läuft zuerst der Präprozessor über den Code. Dabei wird bei einem #include die jeweilige Datei in den C-Code eingefügt.
    Dann wird der Code compiliert und daraus ein Objektdatei (.o oder .obj)

    Wenn das Projekt aus mehreren C-Dateien besteht, müssen diese alle übersetzt werden.

    Am Schluss werden die verschiedenen Objektdateien mit den Bibliotheken (Libraries) zu einer ausführbaren Programm (.exe) gebunden (gelinkt).

    Damit das alles einfach geht, bieten die Compiler/IDE das Projektmanagement an.

    Nochmal: das include ist reiner Textersatz. Statt der Zeile #include <headere.h> steht dann in der (temporären) C-Datei die komplette Datei header.h
    Daher gehören die Header quasi zu den C-Dateien.
    Nur die verschiedenen C-Dateien wissen nichts voneinander.

    Bei make kann man sogar die Abhängigkeiten mit angeben.
    Dann werden nur die Quellen neu übersetzt, die abhängig voneinander sind.



  • mal eine frage nebenbei, wenn ich diese 3 dateien eh so einzeln abgebe. mache ich das ganze mit dem compilieren ja jetzt nur für mich, das machen die dann selber nochmal um es zu überprüfen, oder? also muss ich eigentlichn icht machen?!!
    ich komme nämlich wirklich nicht mehr klar.
    mal führt er mein main programm aus und gibt einfach nur HELLO WORLD wieder, obwohl ich MEINE MAINDATEI also die Quellcode da eingefügt und gespeichert habe, die ich hier gepostet hatte, und da ist nichts mit HELLO WORLD oder sooo, und mal zeigt er als Fehler an dass myio.h nicht existiert oder sowas, es passieren einfach merkwürdige dinge ich komme nicht mehr klar :SSSSS



  • Dann fang doch mit einem neuen Project an.

    In Code::Blocks machst du

    Im Menü File -> New -> Project ...
    Doppelklick auf "Console Application"
    [Next]
    C auswählen dann [Next]
    Namen eintragen z.B. myprinf , evtl. noch den Pfad ändern. [Next]
    [Finish]

    Dann ist links in der Managementansicht: - Workspace - myprintf + Sources
    Da klickst du auf das + vor Sources. Dann erscheint main.c Doppelklick darauf.
    Dann hast du im Editorfenster main.c Da kannst du die main von hier kopieren.

    Dann im Menü: File -> New -> Empty File
    Auf die Frage ob die neue Datei dem Projekt zugefügt werden soll sagst du JA
    und benennst die Datei myprintf.c
    Das gleiche machst du für myprintf.h

    In die Fenster im Editor fügst du den entsprechenden Code ein.
    Dann drückst du noch F9

    Fertig.



  • Hallo,
    bei mit ist nach dem erstellen des neuen Projektes links nur die Zeilennummerirung 😞



  • Dann geh mal auf das View-Menü und aktiviere Manager.



  • DirkB schrieb:

    Du musst auch bedenken, das bei Ziffer-Werten über 9, Buchstaben genommen werden.
    Also myprintf(10,16); ergibt ein 'A' und keinen ':'

    also vieeeelen vielen Dank. Nun funktioniert alles super!!! Mein einziges Problem ist jetzt, das mit dem : statt B, wie könnte ich diesen "Fehler" denn beheben?



  • Besser heißt es:
    Also myprintf(10,16); soll ein 'A' ergeben und keinen ':'

    Ab Seite 3 in diesem Thread gibt es Hinweise.


Anmelden zum Antworten