Geld Wechsel Automat :)
- C#
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.
-
-
Die geschweifte Klammer am Schluss muss bleiben. Weglassen könnte man sie wenn die For-Schleife nur einen Befehl auszuführen hätte (wie der if-Einzeiler). Momentan sind's aber zwei..xD
In Java könnte man alles in eine Zeile quetschen. Ob das in C# auch geht weiß ich nicht. Ist aber auch nicht Sinn der Sache. Vllt statt der Zeilen die Zeichen zählen? xD -
-
-
-
-
Beim if kann man die geschweiften Klammern einfach weglassen, ist ja nur eine Zeile.
Außerdem kann man 100.0 zu 1E3 abkürzen. Dann noch die String.Format-Schreibweise in WriteLine benutzen und den Variablennamen kürzen:
Und in minified:
EDIT:Man kann die Integer noch in Hexadezimalform aufschreiben.Ist nicht kürzer, wegen 0x. -
Vorweg:
Solche Optimierungen sind in 95% der Fälle sinnlos. Der Compiler optimiert meistens besser. Auch das Reduzieren von Whitespace bringt absolut nichts. Dass ein Code kürzer ist, heißt lange nicht, dass er schneller ist(!).
Trotzdem kann man Spaß daran haben, Code so kurz wie möglich zu formulieren.
Ich habe mich an einem anderen Ansatz (for statt foreach) versucht und bin hier gelandet:
Minified:
Kommt aber nicht an das von Serials ran.
@SeriTools:
Console.WriteLine -> Console.Write("...\n")
(Oder Debug.Write, wenn man den Namespace hat)
Wäre dann (mit unnötigen Klammern weggelassen + Benutzung von Typeinference beim Array):
Minified: Kürzer bekomm ich es (glaube ich) nicht.Von meinem iPhone gesendet
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()
-
-
@diylab: Schau mal genau hin;)
Der zu wechselnde Betrag muss jetzt in Cent angegeben werden!
(also einfach die Dezimalzahl * 100 übergeben)
EDIT:
Ich finde nikeees Ansatz schön, aber trotzdem scheinen hier alle die 2€-Stücke unterzubewerten
also so ist es realistischer :
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „da-kid“ ()
-
da-kid schrieb:
@diylab: Schau mal genau hin;)
Der zu wechselnde Betrag muss jetzt in Cent angegeben werden!
(also einfach die Dezimalzahl * 100 übergeben)
Huch!
Man sollte erst den Kaffee trinken und dann das Forum anschmeißen - nicht anders herum :D.
Also hier noch einmal zusammengefasst:
C#-Quellcode
- using System;
- using System.Text.RegularExpressions;
- namespace wechselstube
- {
- class Program
- {
- static void Main()
- {
- // Eingabe
- Console.Write("Geldbetrag eingeben und Enter drücken: ");
- decimal Betrag;
- decimal.TryParse(Regex.Replace(Console.ReadLine(), "[^0-9.,]", "").Replace(".", ","), out Betrag);
- int b = (int)(Betrag * 100);
- // FOREACH Version
- //foreach (int x in new int[] { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 })
- //{
- // if (b >= x) Console.WriteLine("{0}x {1} EUR", (b / x), (x / 1E2));
- // b %= x;
- //}
- // FOR Version
- var s = new int[] { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 };
- for (int i = 0; i < 15; b %= s[i++])
- if (b >= s[i])
- Console.Write("{0}x {1} EUR\n", b / s[i], s[i] / 1E2);
- }
- }
- }
Man könnte jetzt also folgendes beim Input eingeben: "Susann möchte 1778,93 Euro gewechselt haben"
Schönen Tag wünscht
BrunoDieser Beitrag wurde bereits 3 mal editiert, zuletzt von „diylab“ ()
-
diylab schrieb:
"Susann möchte 1778,93 Euro gewechselt haben"
Weil ihr habt da keinen Wechsel-Automaten programmiert, sondern einen Geld-Ausgabe-Automaten.
/klugscheiß -
ErfinderDesRades schrieb:
Weil ihr habt da keinen Wechsel-Automaten programmiert, sondern einen Geld-Ausgabe-Automaten.
Yepp.
Aber wir haben das Rad erfunden :D! -
Wenns jemanden interessiert: der Ansatz mit Linq- und Lambda-Expressions.
-
da-kid schrieb:
scheinen hier alle die 2€-Stücke unterzubewerten
So hat man dies:
Es ist immer 5, 2 und 1 mit jeweils einer 0 mehr/weniger dran. Mit einer Funktion, die bei dies jeder Iteration macht (*10 bzw. /10) könnte man das Array auch noch rausschmeissen. Ohne das 2€-Stück wäre das nicht so ohne weiteres (einfach) möglich. Das wäre zwar bestimmt nicht schneller, aber könnte aber "kompakter" sein, falls Ihr noch auf der Suche nach der kürzesten Lösung seid.Von meinem iPhone gesendet
-
Ähnliche Themen
-
SkriptKing - - Sonstige Problemstellungen
-
Frage bezüglich eines "Sprung's"
Sendo - Takeshi - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- Gast (15)
- nafets (8)
- Artentus (8)
- nikeee13 (2)
- SeriTools (1)
- ErfinderDesRades (1)