Wie könnte ich diesen Code anders schreiben? - Lotto Programm

  • C#

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von TheFatTurtle.

    Wie könnte ich diesen Code anders schreiben? - Lotto Programm

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace Lotto
    7. {
    8. class _6Aus49
    9. {
    10. /* Werte festlegen */
    11. static int counter = 0;
    12. static int max_kombinationen = 13983816;
    13. static int ErsteZahl = 45;
    14. static int ZweiteZahl = 46;
    15. static int DritteZahl = 46;
    16. static int VierteZahl = 48;
    17. static int FünfteZahl = 49;
    18. static int SechsteZahl = 50;
    19. /* Hauptteil des Programmes */
    20. public static int main()
    21. {
    22. Console.Title = "Lotto: 6 Aus 49";
    23. /* Try-Catch Block */
    24. try
    25. {
    26. for(int a = 1; a < ErsteZahl; a++)
    27. {
    28. for(int b = a + 1; b < ZweiteZahl; b++)
    29. {
    30. for (int c = b + 1; c < DritteZahl; c++)
    31. {
    32. for (int d = c + 1; d < VierteZahl; d++)
    33. {
    34. for (int e = d + 1; e < FünfteZahl; e++)
    35. {
    36. for (int f = e + 1; f < SechsteZahl; f++)
    37. {
    38. counter++;
    39. Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " -> " + counter);
    40. if(counter == max_kombinationen)
    41. {
    42. Console.ForegroundColor = ConsoleColor.Green;
    43. Console.WriteLine($"Es wurden {counter} Kombinationen wurden erstellt!");
    44. Console.ReadKey();
    45. }
    46. }
    47. }
    48. }
    49. }
    50. }
    51. }
    52. }
    53. catch(Exception ex)
    54. {
    55. Console.ForegroundColor = ConsoleColor.Red;
    56. Console.WriteLine("Fehler: " + ex);
    57. Console.ReadKey();
    58. }
    59. return 0;
    60. }
    61. }
    62. }


    Ich habe es jetzt so gemacht erstmal, gibt es aber auch noch eine Möglichkeit das irgendwie anders zu machen?
    Habt ihr eine Idee wie ich diesen Code auch anders schreiben könnte?
    @CodingCore

    Gibt es einen Grund, warum du zuerst alle Kombinationen auflisten möchtest?
    Für Zufallszahlen gibt es die Klasse Random oder RNGCryptoServiceProvider.

    Hier habe ich was über die Cryptosicheren Zufallszahlen geschrieben, die für dein Vorhaben wahrscheinlich zu Umfangreich ist. Zeigt aber wie man so was machen kann.
    Einfacher cryptosicherer RandomGenerator für verschiedene Datentypen

    Freundliche Grüsse

    exc-jdbi
    @exc-jdbi
    Wir haben in der Schule eine Aufgabe bekommen, wo wir ein Programm schreiben sollten, welches alle möglichen Kombinationen von 6 aus 49 ausgibt.
    Und als ich das soweit hatte, hat der Lehrer mir gesagt ich solle nun versuchen das anders schreiben.

    Nur leider habe ich absolut keine Ahnung wie ich das noch anders machen könnte :/
    Man könnte über die Kombinatorik alle Kombinationen auflisten, also alle Zahlen von 1 - 49. Ich seh aber nicht den Sinn für diesen Aufwand.

    Ein Lotto-Generator ist sehr einfach zu bewerkstelligen. Da kannst du eine Schleife für alle 6 Zahlen nehmen, mittels z.B. die Random-Klasse.

    Es gibt sicher Beispiele sogar hier im Forum. Sehr einfache Beispiele, die genau das machen.

    Das wäre eine Möglichkeit

    C#-Quellcode

    1. private static Random rand = new Random();
    2. private static int[] Lotto(int cnt, int _min, int _max)
    3. {
    4. return Enumerable.Range(_min, _max).OrderBy(x => rand.Next()).Take(cnt).ToArray();
    5. }


    Weitere Möglichkeiten wären z.B.
    en.wikipedia.org/wiki/Fisher–Yates_shuffle

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „exc-jdbi“ ()

    CodingCore schrieb:

    ...hat der Lehrer mir gesagt ich solle nun versuchen das anders schreiben.
    Ich liebe es, mich über Lehrer aufzuregen.
    Alles Idioten, hat man manchmal den Eindruck.
    Also wenn dein Lehrer möchte, dass du es anders schreibst, dann musser auch erklären, was ihm an deiner Lösung nicht gefällt.
    (Vorrausgesetzt, deine Lösung tut was sie soll)

    Sonst schreib den ganzen Sch... halt in Großbuchstaben, dann isses auch anders.

    Klar kann man sich jetzt Gedanken machen, was er wohl gemeint haben mag.
    Aber genau das sollte man als Programmierer tunlichst unterlassen. Sondern, wenn eine Aufgabe unklar ist, diese erst (hinreichend) klären - bevor man auch nur die erste Zeile Code schreibt.

    Guck:
    Ich zB. könnte mir vorstellen, er möchte von dir eine allgemeinere Implementation, mit der man auch "5 aus 33" ausgeben könnte, oder "8 aus 55".
    Einigen anderen hier im Thread scheint etwas anneres vorzuschweben, irgendwas mit Zufallszahlen generieren - ich finde, so kann man die Aufgabe nicht verstehen, aber sei's drum - ich will ja nur aufzeigen, dass auf dieser "Basis" garnet gearbeitet werden kann/sollte.


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Sonst schreib den ganzen Sch... halt in Großbuchstaben, dann isses auch anders.
    Oder wir könnten uns hier eine übertrieben komplizierte/unsinnige Variante ausdenken, die @CodingCore mitgeben, und ihn das seinem Lehrer zeigen lassen damit jener lernt, dass nicht nur sein Weg nach Neapel führt. Oder war es Venedig? Vielleicht auch Rom. Keine Ahnung.
    @CodingCore Was soll denn Dein Code machen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich denke dein Lehrer wollte Iterationen oder selbstaurufungen.
    Dazu musst du eine Function ertellen die sich dann nochmal aufruft.
    Um eine endlos schleife zu vermeiden musst du der function noch einen Parameter mitgebe.

    VB.NET-Quellcode

    1. Public function iteration(i as integer) as boolean
    2. if iteration < 0 then
    3. return true
    4. else
    5. iteration(i - 1)
    6. end if
    7. end function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheFatTurtle“ ()

    TheFatTurtle schrieb:

    selbstaurufungen
    = Rekursion
    de.m.wikipedia.org/wiki/Rekursion
    Und das denke ich auch.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Jo, in die Richtung täten auch meine Gedanken gehen, wenn ich es für sinnvoll hielte, anstelle dieses Lehrers zu denken.
    Ich hab mich ausführlich mit programmierter Kombinatorik beschäftigt, und kann sagen, es geht mit Rekursion, aber mit Iteration gehts noch deutlich besser.
    Nur ist es so oder so eine sehr anspruchsvolle Aufgabe: Will man eine Lösung nach Stand der Technik erstellen muss man auch mathematische Grundlagen recherchieren, sowie mindestens den Permutations-Algo von Dijkstra.

    Aber wie gesagt: Diese vorauseilend - vertretungsweise Denkerei müssen wir uns verbieten:
    Der Lehrer ist gefordert, zu sagen, was er sich dabei denkt - das kann man ihm nicht abnehmen, auch wenn man fast möchte.
    Wenn ihr über etwas in der art gesprochen hättet und dies das thema der stunde war würde ich es verstehen.
    Sonst fände ich es sehr kreativ vom Lehrer, denn schüler keinen expliziten Arbeitsauftrag zu geben und einfach zu sagen, Ja los machs anders.
    The fatest turtle in worlds history