Hilfe: Arabische Zahl in römische Zahl umwandeln



  • ähm ich wohne in österreich und gehe jetzt hmm wie läuft das noch mal in deutschland, 10te klasse glaub ich...

    ich studiere noch lange nicht und wenn dann sicher nicht informatik 🙂

    stimmt wir haben kein array durchgenommen...

    prof hat mir gesagt ich soll es mit for oder mit vielen whiles etc machen kein plan, sie hat gemeint es ist lang aber nicht schwer, naja ich checks nich



  • -Mario- schrieb:

    - wieso muss ich include string machen und nicht wie ich immer gemacht habe iclude iostream.h ?

    iostream.h ist sowieso schon mal falsch. Der ISO-C++98-Standard definiert keinen Header iostream.h, der heißt iostream. iostream.h war vor dem Standard üblich, inzwischen ist es aber Bogus.
    #include <string> bewirkt, dass der Header "string" eingebunden wird, in dem die Klasse string definiert wird. Du brauchst es, um std::string zu benutzen.

    -Mario- schrieb:

    - was bedeutet diese zeile : " std::string arab2roman(int x) { "

    Das ist die Funktionssignatur. Die Funktion nimmt einen integer entgegen und gibt einen String zurück, außerdem heißt sie arab2roman. Was ne Funktion ist, weißt du aber schon, oder?

    -Mario- schrieb:

    - was bedeutet " throw(x) "

    Im Fall eines Fehlers schmeiß ich den Integer raus, der den Fehler verursacht hat. Wenns dir nicht gefällt, du kannst auch nen speziellen Wert zurückgeben, um auf Fehler zu prüfen. Zum Beispiel könntest du return ""; statt throw(x); schreiben oder so.

    -Mario- schrieb:

    -static const vor char und int muss man das machen ?!

    Prinzipiell nicht, aber es spart Rechenzeit und Speicher, wenns static ist. Außerdem sind die Werte im Array konstant, also macht es Sinn, sie auch const zu deklarieren.

    -Mario- schrieb:

    - was bedeuten diese zwei ausdrücke : " *rom_strings[] rom_values[] "

    static char const *rom_strings[] = { ... }; definiert ein statisches Array mit Namen rom_strings, das Zeiger auf konstante chars enthält. In C war das der übliche Weg, Strings zu behandeln, in C++ benutzt man eigentlich eher std::string, aber an dieser Stelle war das nicht nötig, und rohe Pointer sind halt etwas performanter. Statisch bedeutet, dass das Array nur einmal zu Programmbeginn angelegt wird, und nicht bei jedem Funktionsaufruf wieder neu auf dem Stack. (btw, mir fällt grad auf, dass hier static char const *const rom_strings[] { ... }; richtiger wäre, dann wärs ein Array von konstanten Pointern auf konstante chars).
    static int const rom_values[] = { ... }; definiert dementsprechend ein statisches Array von konstanten Integern.

    -Mario- schrieb:

    - was bedeutet " ret " und am ende das " return ret" .. ?

    ret wird am Anfang der Funktion als std::string deklariert, das ist eine Variable. return ret; bedeutet, dass der Wert dieser Variable von der Funktion zurückgegeben wird. Die Funktion endet damit.

    Das sind alles Grundlagen. Ich schlage vor, dass du dir mal ein C++-Tutorial deines Vertrauens suchst und den Kram nachschlägst, sonst wirst du nachher bei kompliziertem Code einfach eingehen.



  • @beefy
    wurde ja auch zeit das du deine funktion selber erklärst...
    wo warst du so lange? 😃



  • Hallo Leute,

    glaubt ihr tatsächlich, dass die, die die aufgaben stellen, nicht auch hier reingucken? Vor einiger Zeit war ein Beitrag hier, da hat ein anderer Teilenehmer haargenau gesagt, an welcher FH die Aufgabe gestellt wurde.

    Übrigens: Selbst ist der Mann.

    Das ist wohl zu bequem, die Arbeit anderen hinzulegen und auf Ergebnisse zu warten - mit grosser Ahnungslosigkeit.

    Nix für ungut.
    🕶 😋



  • Hallo Leute,

    glaubt ihr tatsächlich, dass die, die die aufgaben stellen, nicht auch hier reingucken? Vor einiger Zeit war ein Beitrag hier, da hat ein anderer Teilenehmer haargenau gesagt, an welcher FH die Aufgabe gestellt wurde.

    Übrigens: Selbst ist der Mann.

    Das ist wohl zu bequem, die Arbeit anderen hinzulegen und auf Ergebnisse zu warten - mit grosser Ahnungslosigkeit.

    Nix für ungut.
    🕶 😋



  • Hallo Leute,

    glaubt ihr tatsächlich, dass die, die die aufgaben stellen, nicht auch hier reingucken? Vor einiger Zeit war ein Beitrag hier, da hat ein anderer Teilenehmer haargenau gesagt, an welcher FH die Aufgabe gestellt wurde.

    Übrigens: Selbst ist der Mann.

    Das ist wohl zu bequem, die Arbeit anderen hinzulegen und auf Ergebnisse zu warten - mit grosser Ahnungslosigkeit.

    Nix für ungut.
    🕶 😋



  • 10te Klasse und dann so ne Aufgabe, kann ich einfach nicht glauben!

    So eine Aufgabe sollten wir mal an der Uni in Scheme schreiben.



  • ich lüge euch nicht an 1988 jahrgang bin ich...



  • ich hab nen kleinen ansatz.. hier:

    void main()
    {int Zahl,a;

    cout<<"Zahl eingeben:";
    cin>>Zahl;
    a=Zahl/1000;
    ...

    so und jetzt wenn ich für Zahl 1000 zum Beispiel eingetippt hätte
    würde a = 1 sein... dann könnte ich 1 M ausgeben(da ja M für 1000 steht)

    ...if (a=1)
    cout<<"M"; ...

    aber da mann ja auch z.B 4000 eintippen kann muss ich das ja irgendwie zählen
    also kann dieser ansatz nicht ganz stimmen...

    könnt ihr mir vll bissl weiterhelfen ? wär nett



  • wie es geht steht doch schon im thread musst du dir nur mal angucken...

    also erstes guckst du wieviele M's du schreiben musst...

    also zahl/1000 mal ein M ausgeben...

    dann rechnest du mit zahl%1000 weiter

    danach guckst du ob du ein CM schreiben musst (also wenn die zahl grösser gleich 900 ist) wenn ja 900 abziehen

    dann guckst du ob du eine D schreiben musst (wenn die zahl grösser also 500 ist) wenn ja 500 abziehen...

    dann das spiel nochmal mit CD

    dann zahl/100 mal C schreiben und weiter gehts... das ganze hat 0xdeadbeef mittels eines lookuptables in eine schleife gepackt aber wenn du das nicht willst kann du das auch einzeln durchackern...



  • Windalf schrieb:

    wie es geht steht doch schon im thread musst du dir nur mal angucken...

    also erstes guckst du wieviele M's du schreiben musst...

    also zahl/1000 mal ein M ausgeben...

    ja das ist es ja
    nur wie macht ich das?

    wie schreib ich das so das so und so viel mal das M kommt ?



  • windalf noch da ?:)

    kann mir sonst noch vielleicht jemand meine frage über dem post hier beantworten ?



  • wie schreib ich das so das so und so viel mal das M kommt ?

    int i;
    for(i=0;i<zahl/1000;++i)putchar("M");
    


  • Windalf schrieb:

    wie schreib ich das so das so und so viel mal das M kommt ?

    int i;
    for(i=0;i<zahl/1000;++i)putchar("M");
    

    danke windalf noch ne kleine frage und zwar kann ich das auch so machen :

    for(i=0;i<zahl/1000;++i)
    cout<<"M";
    denn putchar... haben wir nicht durchgenommen die prof wird wieder rumheulen wenn ich was benutze was wir nicht durchgenommen haben das hat sie
    nämlich auch getan als ich versucht habe arrays zu benutzen 😞



  • Teste doch mal beides... was merkst du? Es macht keinen Unterschied, oder? putchar('M'); ist "C-Style". Soweit ich weiß heißt die C++-Funktion cout.put('M'); cout.put('M'); ist jedoch aquivalent zu cout << 'M'; wenn keine Manipulatoren verwendet wurden.
    D.h wenn dann cout.put('M'); oder cout << 'M';

    Caipi



  • Caipi schrieb:

    Teste doch mal beides... was merkst du?

    Caipi

    genau das ist ja das problem :D:(

    ich hab zu hause kein c++ und kann nicht probieren...

    danke für eure hilfe ist echt sehr nett von euch!



  • blsiek schrieb:

    10te Klasse und dann so ne Aufgabe, kann ich einfach nicht glauben!

    Warum nicht?



  • ich hab zu hause kein c++ und kann nicht probieren...

    danke für eure hilfe ist echt sehr nett von euch!

    *kopfklatsch* oh man warum lädst du dir nicht einfach nen compiler runter... abgesehen von traffic hast du keine weiteren kosten



  • hmmm http://www.bloodshed.net/dev/devcpp.html sowas zum beispiel ?



  • irgendwie funktioniert der nicht naja...

    kann irgendwer mal für mich nachsehn ob der code geht ? wär nett.

    //2HEE, PESIC Mario,26.2.05
    //PGM-Nr.: 12
    
    #include <iostream.h>
    void main()
    
    {int Zahl,n,i;
     char Antwort;
    
      do
      {cout<<"Zahl eingeben:";
       cin>>Zahl;
       n=Zahl/1000; 
       for(i=1;1<=n;i++)
       cout<<"M";
       n=(Zahl%1000)/100;
       if(n==9)
       cout<<"CM";
       if(n==5);
       cout<<"D";
       if(n==4)
       cout<<"CD";
       if(n<4)
       { for(i=1;i<=n;i++)
         cout<<"C";
       } if(n>5&&n<9)
         {cout<<"D";
          n=n-5;
          for(i=1;i<=n;i++)
          cout<<"C";
         } n=((Zahl%1000)%100)/10;
           if(n==9)
           cout<<"XC";
           if(n==5);
           cout<<"L";
           if(n==4)
           cout<<"XL";
           if(n<4)
           { for(i=1;i<=n;i++)
             cout<<"X";
           } if(n>5&&n<9)
             {cout<<"L";
              n=n-5;
              for(i=1;i<=n;i++)
              cout<<"X";
             } n=((Zahl%1000)%100)%10;
                      if(n==9)
                      cout<<"IX";
                      if(n==5);
                      cout<<"V";
                      if(n==4)
                      cout<<"IV";
                      if(n<4)
                      { for(i=1;i<=n;i++)
                        cout<<"I";
                      } if(n>5&&n<9)
                        {cout<<"V";
                         n=n-5;
                         for(i=1;i<=n;i++)
                         cout<<"I";
                        } cout<<"Wollen Sie das Programm beenden? (J/N)";
                          cin>>Antwort;
      }while(Antwort=='J');
    }
    

Anmelden zum Antworten