Felder vergleichen
Übersicht

BluejuceBetreff: Felder vergleichen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo erstmal,
Um mich besser mit BlitzBasic vertraut zu machen, hatte ich mir gedacht, versuche ich mich an einem Lottoprogramm, da ich versuche den Umgang mit Schleifen , Vergleichen, Feldern und Dateien besser zu verstehen und zu lernen. Mein Problem: Bei jedem Programmstart, werden vom Nutzer 6 Zahlen eingegeben. Diese werden mit 49 anderen Zahlen aus einem Feld, die vorher aus einer Datei eingelesen wurden, verglichen. Bei gleichen Zahlen wird der Häufigkeitswert um 1 erhöht und in der Datei wieder abgespeichert. Bis hier klappt alles sehr gut. Jetzt soll aber das Programm alle 49 Felder miteinander Vergleichen und die 6 Zahlen mit dem höchsten Häufigkeitswert ausgeben, ohne das zweimal die gleiche Zahl vorkommt. Bis jetzt ist mir keine Lösung dazu eingefallen. Ich hatte es mit einer For/Next Schleife probiert. Bei den ersten Durchgängen klappte auch das. Aber später wurden nur noch zwei und dann keine Zahl mehr angezeigt. Ich hoffe, jemand kann mir weiterhelfen. Grüsse |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Code glaube ich, wird dir hier niemand helfen können.
Hier im Forum gibts Leute die programmieren können, aber hellsehen können wir nicht^^ Lg, M0rgenstern |
||
Bluejuce |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh natürlich, tut mir Leid.
Hier der Code: Code: [AUSKLAPPEN] Dim feld(98) datei = OpenFile("C:\lotto\lottozahlen.txt") Global top1$=0 Global top2$=0 Global top3$=0 Global top4$=0 Global top5$=0 Global top6$=0 For i=1 To 49 zeile$=ReadLine(datei) zahl1 = zahlausstring(zeile$, 1) zahl2 = zahlausstring(zeile$, 2) feld(i)= zahl1 feld(i+49)= zahl2 Next For i=1 To 9 Print feld(i) + " " + feld(i+49) + " " + "mal gezogen" Next WaitKey:Cls:Locate 0,0 Print "Möchtest du neue Lottozahlen eintragen?: (j/n)" WaitKey If KeyHit (36) Then nzahl1$=Input("Zahl 1:") nzahl2$=Input("Zahl 2:") nzahl3$=Input("Zahl 3:") nzahl4$=Input("Zahl 4:") nzahl5$=Input("Zahl 5:") nzahl6$=Input("Zahl 6:") EndIf For i=1 To 49 If nzahl1 = feld(i) Then feld(i+49)=feld(i+49)+1 If nzahl2 = feld(i) Then feld(i+49)=feld(i+49)+1 If nzahl3 = feld(i) Then feld(i+49)=feld(i+49)+1 If nzahl4 = feld(i) Then feld(i+49)=feld(i+49)+1 If nzahl5 = feld(i) Then feld(i+49)=feld(i+49)+1 If nzahl6 = feld(i) Then feld(i+49)=feld(i+49)+1 Next SeekFile datei,0 For i = 1 To 49 WriteLine datei, feld(i) +"," +feld(i+49) Next CloseFile datei Cls:Locate 0,0 Print "Die besten Zahlen:" For i=1 To 49 If feld(i+49)< feld(i+49) Then Print feld(i) Next WaitKey If KeyHit (49) Then Color 255,0,0 Print "Press Return" WaitKey EndIf End Function zahlausstring(zahlstring$, stelle) anzahl = 1 letzteskomma = 1 For i = 1 To Len(zahlstring$) If Mid(zahlstring$, i, 1) = "," Or i = Len(zahlstring$) Then If anzahl = stelle Then zahl = Mid(zahlstring$, letzteskomma, i) letzteskomma = i + 1 anzahl = anzahl + 1 EndIf Next Return zahl End Function |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
ALso, ich muss ehrlich sagen, dass ich teilweise wirklich nicht weiß, was du mit deinem Code bezwecken willst.
Achso, und die Abfrage Code: [AUSKLAPPEN] Print "Möchtest du neue Lottozahlen eintragen?: (j/n)"
WaitKey If KeyHit (36) Then ist irgendwie schlecht gewählt. Denn wenn man ne andere Taste drückt, dann springt er sofort zur For SChleife. Dann: Warum deklarierst du Variablen, die du nicht benutzt? Code: [AUSKLAPPEN] Global top1$=0
Global top2$=0 Global top3$=0 Global top4$=0 Global top5$=0 Global top6$=0 Also, mal ne Lösung wie ichs machen würde, mit Pseudocode (Zufallszahlen. Also ohne ne Datei auszulesen und jetzt einfach alle Zahlen von 0 bis 100): Code: [AUSKLAPPEN] Dim Gezogen(48) Dim Spielerwahl(5) Dim Haeufigkeit(5, 1) for i = 0 to 48 Gezogen(i) = rand(0,100) next for a = 0 to 5 Print "Bitte gib deine " + a + ". Zahl ein: " Spielerwahl(a) = Input$() Haeufigkeit(a, 0) = Spielerwahl(a) Haeufigkeit(a, 1) = 0 next for a = 0 to 5 for i = 0 to 48 If Spielerwahl(a) = Gezogen(i) then Haeufigkeit(a,1) = Haeufigkeit(a,1) + 1 next next Als Denkanstoß^^ |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
wenn du schon weißt, welche Zahl, welche Häufigkeit hat, dann musst du diese doch nur noch der Häufigkeit nach Sortieren. Such mal nach Suchalgorithmen Quicksort soll ganz gut sein, von Bubblesort ist eher abzuwenden. SuFu hilft dabei auch ![]() Hoffe ich konnte dir helfen. Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn es nur darum geht, aus einem Feld mit 49 Elementen, die 6 herauszupicken, die am häufigsten vorkommen, ist es einfach dadurch möglich, dass ein bereits "auserwähltes Feld" in seiner Häufigkeit auf -999 gesetzt wird und dann bei der nächsten Suche nicht mehr "stört". War es das, was Dir Schwierigkeiten bereitst hatte? Ganz klar ist mir nicht, wieso bei den weiteren Durchgängen nicht mehr 6 Ergebnisse angezeigt werden konnten. Hab ich die Frage verstanden?
Beispiel: Du kopiert zuerst das Original-Feld auf ein 2.Feld, damit du eines zum kaputtmachen hast. Dann durchsuchst Du das 2. Feld und zerstörts immer den max-Wert. So durchläufst Du das ganze 6x: Code: [AUSKLAPPEN] ' zufalls-häufigkeiten simulieren deine Datei: For i%=1 To 49 OriginalFeld%[i]=Rand(0,100) Next 'jetzt geht es los ' Schritt 1: Kopie auf ein 2.Feld For i%=1 To 49 Feld%[i]=OriginalFeld%[i] Next ' Schritt 2 : Durchsuchen For I%=1 To 6 Maxi=-1 For J%=1 To 49 'suchlauf nach der größten zahl If Feld[j]>Maxi Then Maxi=Feld[j] Wo=j EndIf Next ' jetzt merken WieOftWarEs[i]=Maxi WoWarEs[i]=Wo 'Dieses Feld heruntersetzen Feld[Wo]=-999 Print "Platz " + i + " ist die Zahl " WoWarEs[i] + " mit " + WieOftWarEs[i] + " mal" Next |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group