Blitz-Arrays

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Phlox

Betreff: Blitz-Arrays

BeitragMo, Aug 10, 2009 7:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Ich schreibe gerade ein Programm, das mit Arrays arbeitet und ich wollte fragen, wie man, wenn man z.B. ein Array hat

BlitzBasic: [AUSKLAPPEN]
Global Array[3]
Array[1]=5
Array[2]=8
Array[3]=5


berechnet, welcher Wert am häufigsten vorkommt, in diesem Fall 5. Und wenn es mehrere gibt soll einer per Zufall ausgewählt werden. Wie mache ich das am besten?

TIA

mpmxyz

BeitragMo, Aug 10, 2009 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es nicht zu stark optimiert werden muss und der Wertebereich nicht bekannt ist, dann würde ich einen Type erstellen:
BlitzBasic: [AUSKLAPPEN]
Type Funde
Field Zahl
Field Häufigkeit
End Type

Wenn eine noch nicht erfasste Zahl gefunden wird, wird eine neuer Eintrag erstellt.
"Zahl" ist dabei die gefundene Zahl und Häufigkeit entspricht, wie oft sie gezählt wurde.
Wenn die Zahl schon bekannt ist, dann wird "Häufigkeit" um 1 erhöht.

Nachdem das ganze Array durchgearbeitet wurde, wird nach den Zahlen mit der höchsten Häufigkeit gesucht und die anderen werden gelöscht.
Nun muss nur noch eine der übriggebliebenen Zahlen ausgesucht werden.

P.S.: Bei Arrays fängt man bei 0 an.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

ozzi789

BeitragMo, Aug 10, 2009 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

ich hätte es so gemacht
Code: [AUSKLAPPEN]
For i = 1 To anzahlarray
   temp=Array[i]
   For temp = 1 To anzahlarray
      zahlen(temp)=zahlen(temp)+1
   Next
Next


Jetzt ist zmb in zahlen(5) der Wert der vorkommenden fünfen

Dann das Dim Feld der grösse nach sortiert...
Sortierungs algorythmen gibt es viele, kannst mal nach quicksort googlen.

Nun gehst du zmb die ersten 5 einträge durch, wenn einer (oder mehrere) gleich gross sind, nimmst du rand und wählst einen davon aus


mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

mpmxyz

BeitragMo, Aug 10, 2009 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
@Lösung von ozzi789
Das ist die Möglichkeit, wenn man den Wertebereich kennt. (ASCII-Werte, Bytes, Shorts)
Man muss aber nicht irgendeinen "umständlichen" Sortierungsalgorithmus nutzen.
Man muss nur die meistgezählten Werte zählen und einen von diesen auswählen.
Das sind nur 2 Schritte, die auch schneller ablaufen.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

ozzi789

BeitragMo, Aug 10, 2009 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@ mpmxyz
ja das hat was Very Happy
aber wie weist du nun welche Zahl am häufigsten vorkommt, musst die ja trotzdem der grösse nach sortieren, oder?
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

mpmxyz

BeitragMo, Aug 10, 2009 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Man geht den Array durch und hat eine "Maximum-Variable".
Wenn man nun eine Zahl findest, deren Häufigkeit größer ist als die "Maximum-Variable", dann setzt man die "Maximum-Variable" auf diesen Wert.
Da man einen Zufall haben möchte, braucht man ja auch die "Anzahl an Maximal-Zahlen".
Wenn man die "Maximum-Variable" setzt, dann setzt man die "Anzahl an Maximal-Zahlen" auf 1.
Wenn man nun eine Zahl findet, die genau so oft, wie die häufigste der geprüften Zahlen, gefunden wurde, dann erhöht man die "Anzahl an Maximal-Zahlen" um 1.
Mit dieser Anzahl kann man einen Zufallswert bestimmen und die entsprechende Zahl, die so oft wie die häufigste Zahl vorkommt, bestimmen.
Die Zufallszahl ist aber nicht wie bei deiner Methode ein Eintragsindex im Array sondern sie wäre der Index eines Arrays der "Maximal-Zahlen".
Daher muss man einen zweiten Suchlauf starten.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group