Fehler beim umrechnen (und ich finde ihn nicht)
-
Hi ich versuche einen Währungsumrechner zu erstellen, der Währung a in Währung b umrechnet.
Leider passen meine Ergebnisse nicht und ich finde den Fehler nicht*verzweifel*
Kann mir jamand nen Tipp geben damit ich wieder auf dem richtigen Weg bin?#include <cstdlib>
#include <iostream>
#include <istream>using namespace std;
int main(int argc, char *argv[])
{
int i, nr;// Werte auf Kommazahlen setzen
float FBetrag, betrag1, betrag2, trag1, trag2;
float kurs [13]={0.0, 1.0, 1.95583, 40.339, 1936.27, 2.20371, 6.55957, 13.7603, 166.386, 0.787564, 200.482, 340.740, 5.94573};
float kurs2 [13]={0.0, 1.0, 1.95583, 40.339, 1936.27, 2.20371, 6.55957, 13.7603, 166.386, 0.787564, 200.482, 340.740, 5.94573};
char waehrung [13][30]={" ", "EUR", "DEM", "BEF", "ITL", "NLG", "FRF", "ATS", "ESP", "IEP", "PTE", "GRD", "FIM"};
for(i=1; i<=13; i++);//dumme Tabelle anzeigen
cout <<"Waehrungsumrechnung" << endl;
cout <<"" <<endl;cout << " 1 EUR" <<endl;
cout << " 2 DEM" <<endl;
cout << " 3 BEF" <<endl;
cout << " 4 ITL" <<endl;
cout << " 5 NTL" <<endl;
cout << " 6 FRF" <<endl;
cout << " 7 ATS" <<endl;
cout << " 8 ESP" <<endl;
cout << " 9 IEP" <<endl;
cout << "10 PTE" <<endl;
cout << "11 GRD" <<endl;
cout << "12 FIM" <<endl;
cout << " 0 ENDE" <<endl;
cout <<"" <<endl;cout << "Bitte Nr. der erste Waehrung auswaehlen" << endl;
cin >> kurs[i];
//kurs[i] = betrag1;cout << "Btte Nr. der zweiten Waehrung auswaehlen"<< endl;
cin >> kurs2[i];
//kurs2[i] = betrag2;cout << "BItte Betrag eingeben: " << endl;
cin >> FBetrag;trag1 = (1.0 * FBetrag) / kurs[i];
trag2 = (trag1 * kurs2[i])/1.0;cout << "Das entspricht: " << trag2 << endl;
system("PAUSE");
return 0;
system("PAUSE");
return EXIT_SUCCESS;
}
-
In der for-Schleife erhöhst Du den Wert von i auf 14. Und anschließend greifst Du sowohl aus kurs[i] als auch auf kurs2[i] zu. Die Indizes in diesen Feldern dürfen aber nur von 0 bis 12 laufen.
Außerdem vermute ich, dass Du die Beträge besser in die Variablen 'betrag1' und 'betrag2' statt in Elemente der Währungsumrechnung einlesen solltest. Es mir nicht so ganz klar, wie das Programm funktionieren soll.Gruß
Werner
-
Also der Fehler ist. Schau selbst und änder mal den abschnitt so ab.
... cout << "BItte Betrag eingeben: " << endl; cin >> FBetrag; cout << kurs[i] << " " << kurs2[i] << " " << i << endl; trag1 = (1.0 * FBetrag) / kurs[i]; cout << trag1 << endl; trag2 = (trag1 * kurs2[i])/1.0; cout << "Das entspricht: " << trag2 << endl; ...Du gibst kurs[i] und kurs2[i] die werte mit cin.
Heisst wen du 1 und 4 eingibstkurs[14] = 1
kurs2[14] = 4und das
for(i=1; i<=13; i++);kannste löschen.
mfg
-
Und, kleiner Tip: Geldbeträge rechnet man nicht mit float oder double!
Nimm Fixkomma oder BCD oder sowas.
-
Danke für die vielen netten Antworten

@Werner Salomon ich verstehe nicht was du meinst leider:( Was das Programm machen soll ist:
Ich gebe die Nummer der ersten Währung ein z.B. 2 für DEM
Ich gebe die Nummer der Zielwährung ein z.B. 5 für NLG
Ich gebe den Betrag ein.
Das Programm soll sich dann aus Kurs und Kurs 2 die werte der Währungen suchen und den Betrag von Währung 2(DEM) in Währung 5(NLG) umrechnen.
Sprich 100DEM entsprechen XX Gulden@hustebaer Wenn ich nen EUR-Betrag mit Cent berechnen will wie mach ich das sonst? Kenne als Datentypen nur int,char, double, float bool, für Fixkomma find ich nichtmal nen Befehl in meinem PDF und bei Goggle nur das man es verwenden kann hier und dortfür, aber nicht wie

@isiprimax Er compilliert es ohne zu meckern (leider), sagt aber beim ausführen sobald man die erste Nr eingibt, daß das Programm einen Fehler verursacht hat und beendet werden müsse.
#include <cstdlib>
#include <iostream>
#include <istream>using namespace std;
int main(int argc, char *argv[])
{
int i, nr;// Werte auf Kommazahlen setzen
float FBetrag, betrag1, betrag2, trag1, trag2;
float kurs [13]={0.0, 1.0, 1.95583, 40.339, 1936.27, 2.20371, 6.55957, 13.7603, 166.386, 0.787564, 200.482, 340.740, 5.94573};
float kurs2 [13]={0.0, 1.0, 1.95583, 40.339, 1936.27, 2.20371, 6.55957, 13.7603, 166.386, 0.787564, 200.482, 340.740, 5.94573};
char waehrung [13][30]={" ", "EUR", "DEM", "BEF", "ITL", "NLG", "FRF", "ATS", "ESP", "IEP", "PTE", "GRD", "FIM"};
// for(i=1; i<=11; i++);//dumme Tabelle anzeigen
cout <<"Waehrungsumrechnung" << endl;
cout <<"" <<endl;cout << " 1 EUR" <<endl;
cout << " 2 DEM" <<endl;
cout << " 3 BEF" <<endl;
cout << " 4 ITL" <<endl;
cout << " 5 NTL" <<endl;
cout << " 6 FRF" <<endl;
cout << " 7 ATS" <<endl;
cout << " 8 ESP" <<endl;
cout << " 9 IEP" <<endl;
cout << "10 PTE" <<endl;
cout << "11 GRD" <<endl;
cout << "12 FIM" <<endl;
cout << " 0 ENDE" <<endl;
cout <<"" <<endl;// Soll sich aus Kurs den Wert der Währung Nr. X holen
cout << "Bitte Nr. der erste Waehrung auswaehlen" << endl;
cin >> kurs[i];
//kurs[i] = betrag1;// Soll sich aus Kurs2 den Wert der Währung Nr. X holen
cout << "Btte Nr. der zweiten Waehrung auswaehlen"<< endl;
cin >> kurs2[i];
//kurs2[i] = betrag2;cout << "BItte Betrag eingeben: " << endl;
cin >> FBetrag;cout << kurs[i] << " " << kurs2[i] << " " << i << endl;
// rechnet 1EUR*Betrag / Kurs Währung 1
trag1 = (1.0 * FBetrag) / kurs[i];
cout << trag1 << endl;trag2 = (trag1 * kurs2[i])/1.0;
cout << "Das entspricht: " << trag2 << endl;
system("PAUSE");
return 0;
system("PAUSE");
return EXIT_SUCCESS;
}
-
int main(int argc, char* argv[]) { double kurs[] = {0.0, 1.0, 1.95583, 40.339, 1936.27, 2.20371, 6.55957, 13.7603, 166.386, 0.787564, 200.482, 340.740, 5.94573}; string waehrung[] = {" ", "EUR", "DEM", "BEF", "ITL", "NLG", "FRF", "ATS", "ESP", "IEP", "PTE", "GRD", "FIM"}; cout << "Waehrungsumrechnung" << endl; cout << endl; for(int i = 1; i < 13; ++i) { cout << i << " " << waehrung[i] << endl; } cout << " 0 ENDE" << endl << endl; int waehrung1, waehrung2; do { cout << "Nr. der ersten Waehrung: "; cin >> waehrung1; }while(waehrung1 < 0 || waehrung1 > 12); if(waehrung1 == 0) return 0; do { cout << endl << "Nr. der zweiten Waehrung: "; cin >> waehrung2; }while(waehrung2 < 0 || waehrung2 > 12); if(waehrung2 == 0) return 0; double betrag; cout << endl << "Betrag: "; cin >> betrag; cout << endl << betrag << " " << waehrung[waehrung1] << " ergeben " << betrag / kurs[waehrung1] * kurs[waehrung2] << " " << waehrung[waehrung2] << endl; cin.ignore(); cin.get(); return 0; }
-
Hellz schrieb:
@Werner Salomon ich verstehe nicht was du meinst leider:( Was das Programm machen soll ist:
Ich gebe die Nummer der ersten Währung ein z.B. 2 für DEM
Ich gebe die Nummer der Zielwährung ein z.B. 5 für NLG
Ich gebe den Betrag ein.
Das Programm soll sich dann aus Kurs und Kurs 2 die werte der Währungen suchen und den Betrag von Währung 2(DEM) in Währung 5(NLG) umrechnen.
Sprich 100DEM entsprechen XX Guldenes ging mir nicht darum was das Programm machen soll, sondern wie das mit diesem Programm funktionieren soll - also im Detail:
Hellz schrieb:
int i, nr;hier wird i angelegt, aber nicht belegt - d.h. der Wert von 'i' ist nicht definiert.
Hellz schrieb:
cout << "Bitte Nr. der erste Waehrung auswaehlen" << endl; cin >> kurs[i];hier wird jetzt 'kurs[i]' - (welches 'i'?) - mit der Eingabe überschrieben, obwohl doch evt. dort der Faktor für die Umrechnugn drin seht.
Es müsste doch heißencin >> i;und bei der zweiten Währung
cin >> i2;Gruß
Werner
-
Danke euch vielmals jetzt klappts.
Habe noch viel zu lernen und hoffe daß das tiefere Verständnis noch einsetzt
-
Es gibt auch keinen vorgefertigten Typ der ideal zum Rechnen mit Geldbetträgen ist.
Fixkomma geht mit 64 bittigen Integers recht gut, aber skalieren muss man immer noch selbst.
Und es kann sein dass man für gewisse Rechnungen selbst mit int 64 nicht genug Headroom hat.