Blitz-Arrays
Übersicht

PhloxBetreff: Blitz-Arrays |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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] 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ mpmxyz
ja das hat was ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group