Hilfe: Arabische Zahl in römische Zahl umwandeln
-
Hallo erstmal ,
Ich muss einige Programme für die Schule schreiben...
Die Programmbeispiele sind Wiederholungen und ich hätte ne Frage zu einem Programm ,das ich machen muss.
"Schreibe ein Programm das eine arabische Zahl in eine römische Zahl umwandelt.
M ... 1000 D ... 500 C ... 100 L ... 50 X ... 10 V ... 5 I ... 1
900 ... CM 400 ... CD 90 ... XC 40 ... XL 9 ... IX 4 ... IV"Ich hab keine Ahnung wie ich das umsetzen soll da wir bis jetzt nur Programme zu Abfragen gemacht haben...
Wär echt nett wenn mir jemand helfen könnte..
Danke im vorraus,
Mario
-
is hier im forum schonmal öfter behandelt worden, einfach mal die suche bemühen
-
find nur den hier : http://www.c-plusplus.net/forum/viewtopic.php?t=89936&highlight=arabische+r�mische+umwandeln
aber der ist nich so wie mein beispiel.....
vll doch hilfe oder kann mir irgendwer nen link zu nem ähnlich thread wie hier geben ?
-
hier wurde das mal mit den maya-zahlen realisiert, stell den code einfach um
-
kein plan wie das gehn soll... da sind auch gar keine schleifen drinnen oder so...
aber ich muss es mit for oder so machen.... es geht ja um wiederholungen.... ich blick echt gar nicht durch
-
post 9 angucken...
http://www.fun-soft.de/showtopic.php?threadid=4293
-
DANKE, das du dich bemüht hast mir das raus zu suchen , echt vielen dank!!
nur noch paar fragen (sorry, aber es muss sein...)
#include <string> std::string arab2roman(int x) { if(x < 1 || x > 3999) throw(x); //nicht darstellbar static const char *rom_strings[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; static const int rom_values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; std::string ret; for(int i = 0; x != 0; ++i) while(x >= rom_values[i]) { x -= rom_values[i]; ret += rom_strings[i]; } return ret; }
kannst du mir erklären was sstring ,die zeile unter include, throw (x), die zeile unter if bis zum "=" zeichen, x -= rom_values[i],ret += rom_strings[i]; return ret , bedeutet ?!
das ist mir echt ALLES nee
-
*neu wollte ich schreiben...
noch mal genau und übersichtlicher die fragen
- wieso muss ich include string machen und nicht wie ich immer gemacht habe iclude iostream.h ?
- was bedeutet diese zeile : " std::string arab2roman(int x) { "
- was bedeutet " throw(x) "
-static const vor char und int muss man das machen ?!
- was bedeuten diese zwei ausdrücke : " *rom_strings[] rom_values[] "
- was bedeutet " ret " und am ende das " return ret" .. ?
wie schon gesagt das ist mir alles neu
-
DANKE, das du dich bemüht hast mir das raus zu suchen , echt vielen dank!!
einmal auf suchen klicken und da römisch einzugeben war nicht so der aufwand
zu deiner anderen frage... er schmeisst ne exception wenn die zahl kleiner 1 ist... (das ist halt nicht ohne weiteres sinnvoll darstellbar, kann man sich sicher drüber streiten ob man dann ein ggf ein - vorschreiben will und die 0 hinzunimmt)
wenn die zahl grösser als 3999 tillt er auch ist weil er dann in dem falle nichts definiertes hat... bei 4000 wären es ja MMMM und nicht wie erwartet ein M vor einem 5000er symbol... das müsstest du dann selber schreiben aber wenn du versuchst zu verstehen was der algo macht solltest du das hinbekommen...an sonsten nimmt der einfach nur einen string und packt da halt in abhänigkeit davon was für ein buchstabe als nächstes kommen soll einen nach den anderen in den string rein...
das ret ist der returnvalue der funktion also das was die funktion am ende zurückliefert
-
es geht darum das die professorin das checkt das ich das nicht gemacht hab...
deswegen kann ich das so nicht schreiben....
deswegen auch die ganzen fragen... ich muss es nämlich irgendwie anders schreiben
nur ich weiß nich wie...
-
du bist aber auch experimentierfreudig...
probier mal so ich hab noch ne ausgabezeile reingepackt die dir zwsichenergebnisse ausgibt dann solltest du den algo auch von hand mal nachvollziehen können...
#include <iostream> #include <string> std::string arab2roman(int x) { if(x < 1 || x > 3999) throw(x); //nicht darstellbar static const char *rom_strings[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; static const int rom_values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; std::string ret; for(int i = 0; x != 0; ++i) while(x >= rom_values[i]) { x -= rom_values[i]; ret += rom_strings[i]; std::cout<<"Bisher ermittelter String: "<<ret<<"\tRestwert:"<<x<<std::endl; } return ret; } int main(){ std::cout<<arab2roman(3918)<<std::endl; }
-
#include <iostream> #include <string> std::string arab2roman(int x) { if(x < 1 || x > 3999) throw(x); //nicht darstellbar static const char *rom_strings[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; static const int rom_values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; std::string ret; for(int i = 0; x != 0; ++i) while(x >= rom_values[i]) { x -= rom_values[i]; ret += rom_strings[i]; std::cout<<"Bisher ermittelter String: "<<ret<<"\tRestwert:"<<x<<std::endl; } return ret; } int main(){ std::cout<<arab2roman(3918)<<std::endl; }
muss ich da nichts eintippen ? sollte da nicht irgendwo cin>> stehen ?
-
Sagtest du nicht was von schule und dann prof. ?
schule ist bei mir FH. und wir haben Semesterferien
dann hattest du ja anscheinend 1 Semester Programmieren. Und da habt ihr anscheinend nicht mal ein array durchgenommen? ne, oder?
oder mal ne funktion????Also du hast da ja dein main programm
int main(){ std::cout<<arab2roman(3918)<<std::endl; // hier gibts du ja deinen wert ein z.b. die 3918. In der art reicht das den profs schon }
oder du gibts dir "mühe" und machst dein cin davor
int eingabe; cout << "Liebe Proffesorin, bitte fragen Sie mich nicht! wie das Prog. fkt.!! Einfach ne zahl kleiner 4000 eingeben, danke! "; cin >> eingabe; cout << endl; //endtweder std::cout<<arab2roman(eingabe)<<std::endl; // oder besser cout<<arab2roman(eingabe)<<endl; // musst dann halt meistens "using namespace std;" oben eingeben nach include //sonst frägt die dich warum du immer std:: davorschreibst, und dann wirds peinlich ;)
PS: entweder schau dir tutorials an und/oder bücher oder hör auf zu studieren! die aufgaben werden nicht leichter. waa studierst du? programmieren als nebenfach oder hauptfach?
immer hausaufgaben posten is nicht
next time frage luigi, der weiss es maybe
-
ä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.