Programmieren: Währungsumrechner in C?

4 Antworten

switch zu verschachteln ist überhaupt kein Problem. Das kann es also nicht sein.

Da Java und VBA Sprachen sind, die Pointer zwar kennen, sich dessen aber "schämen" (und es dem Programmierer "deshalb" soweit irgend möglich verschweigen), ist dies der erste Punkt wo ich in einem C- oder C++-Programm suchen würde.

Du hast in den Eingaben die Adressen "dereferenziert", in den switch-Ausdrücken aber nicht.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Mach es doch mit einer Funktion die als Variablen die Art der Währungen und die Zahl der Einheiten benötigt und einen Wert z zurückgibt je nach art als Zahl als oder String. In der Funktion wird erstmal geschaut ob die Eingaben des Nutzers überhaupt Korrekt sind (DAU-Prevention) und dann wird geschaut welche Währung es ist mit Switch und dann ist es eine simple If/Else Angelegenheit weil wenn alle Eingaben korrekt sind, kann es ja nur eine von 2 Möglichkeiten sein, wenn du aber mehrere Währung anbietest dann kann ein Switsch sinnvoll sein.

Du kannst switch-case ineinander verschachteln, doch wie dir bereits aufgefallen sein sollte, ist das nicht sonderlich schön. Die Übersicht geht schnell verloren.

Du könntest jede Währung mit einer Zahl belegen und nach Eingabe des Nutzers die beiden gegebenen Zahlen (Ausgangswährung, Zielwährung) miteinander verrechnen, sodass ein eindeutiger Index herauskommt.

Es wird also erst einmal eine Formel benötigt, die eine möglichst große Streuung garantiert.

Beispiel:

(ausgang + 4) * (ziel - 4)

Haben wir nun diese Währungen:

Euro = 1
Dollar = 2
Rubel = 3

kommen wir auf diese Indizes:

Euro > Euro = -15
Euro > Dollar = -10
Euro > Rubel = -5
Dollar > Dollar = -12
Dollar > Euro = -18
Dollar > Rubel = -6
Rubel > Rubel = -7
Rubel > Euro = -21
Rubel > Dollar = -14

Auf diese kannst du nun via switch-case prüfen:

switch (index) {
  case -15:
  case -12:
  case -7:
    // return same value as entered ...
    break;
  case -10:
    // convert euro > dollar ...
    break;
  case -5:
    // convert euro > rubel ...
    break;
  // etc. ...
}

Die jeweiligen Konversionen könntest du nun noch in eigene Funktionen auslagern. So bleiben deine cases kurz.

switch (index) {
  // ...
  case -10:
    convertEuroToDollar(value);
    break;
  case -5:
    convertEuroToRubel(value);
    break;
  // etc. ...
}

Mach doch hier mal ein kleines Experiment - versuche diese Aufgabenstellung, die du dir da gesetzt hast, in Java umzusetzen und wenn das Java-Programm steht, dann übersetzt du das Programm in C. Das sollte recht reibungslos laufen, abgesehen davon, dass hier und da mal ein Bezeichner anders heißt. Du kannst doch Java, oder?

Ganz spontan würde ich mir bei der Aufgabe alle Umrechnungsfaktoren in ein Objekt (Klasse oder Funktion) wegkapseln, der ich zwei Währungen übergebe und die mir dann den entsprechenden Umrechnungsfaktor gibt. Das ganze auch eher ohne Switche, sondern mit if-Verknüpfungen. Switche würde ich btw. auch auf keinen Fall miteinander verknüpfen, sondern Funktionen anlegen, und zwar idealerweise so, dass die Funktion ausschließlich den Switch enthält... das sind aber nur ein paar spontane Gedanken dazu.

Und möglicherweise machst du dich glücklicher, wenn du dir notepad++ abgewöhnst und dir eine richtige Entwicklungsumgebung (Visual Studio, Netbeans, Code::Blocks, Orwell C++, ...) installierst. Macht notepad++ dich überhaupt drauf aufmerksam, wenn du dich z.B. mal bei einem Variablennamen vertippst?