Seite 2 von 3

Verfasst: 24.10.2006 15:47
von NicTheQuick
Hi Hermann!

Ich hab deinen Code mal fast komplett geändert.

Schau mal, ob du damit zurecht kommst und du es genauso einfach findest
wie ich.

Code: Alles auswählen

; in der Variablen "zaehlertaxi" steht die Anzahl der Datensätze aus denen die Top 3 ermittelt werden soll
; in dem Arry "taxi_haltestelle(n)" jeweils ein Name der Haltestelle, dieser NAme kommt z.T. mehrfach vor

zaehlertaxi = 9
Dim taxi_haltestelle.s(zaehlertaxi)

taxi_haltestelle(0) = "Friedrichstraße" ;3
taxi_haltestelle(1) = "Hubertusweg"     ;4
taxi_haltestelle(2) = "Obere Allee"     ;2
taxi_haltestelle(3) = "Hubertusweg"
taxi_haltestelle(4) = "Sauerlandgasse"
taxi_haltestelle(5) = "Friedrichstraße"
taxi_haltestelle(6) = "Obere Allee"
taxi_haltestelle(7) = "Hubertusweg"
taxi_haltestelle(8) = "Friedrichstraße"
taxi_haltestelle(9) = "Hubertusweg"

;Struktur für Haltestellemname und Häufigkeit
Structure Haltestelle
  Name.s
  Anzahl.l
EndStructure

;Liste mit allen verschiedenen Haltestellen
NewList liste.Haltestelle()

For i = 0 To zaehlertaxi
  
  ja = 1
  ForEach liste()
    If liste()\Name = taxi_haltestelle(i) ;Wenn Haltestelle schon in liste() ist, erhöhe die Anzahl
      liste()\Anzahl + 1
      ja = 0
      Break
    EndIf
  Next
  
  If ja ;Wenn Haltestellen nicht gefunden wurd, dann erstelle sie
    AddElement(liste())
    liste()\Name = taxi_haltestelle(i)
    liste()\Anzahl = 1
  EndIf
Next

;Sortiere die Liste (liste()) absteigend (1) nach der Häufigkeit (OffsetOf(Haltestelle\Anzahl))
SortStructuredList(liste(), 1, OffsetOf(Haltestelle\Anzahl), #PB_Sort_Long)
  
Debug "Es gibt " + Str(CountList(liste())) + " verschiedene Haltestellen."

;Ordne die Top 3 den passenden Variablen zu
Define top1s.s, top2s.s, top3s.s
If FirstElement(liste()) ;Pass auf, dass die Liste nicht leer ist...
  top1s = liste()\Name
  top1  = liste()\Anzahl
EndIf
If NextElement(liste())  ;...und auch das nächste...
  top2s = liste()\Name
  top2  = liste()\Anzahl
EndIf
If NextElement(liste())  ;...und übernächste Element existiert.
  top3s = liste()\Name
  top3  = liste()\Anzahl
EndIf

;Gib die Top 3 aus
MessageRequester("test", top1s + "    " + Str(top1))
MessageRequester("test", top2s + "    " + Str(top2))
MessageRequester("test", top3s + "    " + Str(top3)) 

Verfasst: 24.10.2006 15:58
von Hermann
Hi Nic.......

..... erstmal "Danke"......... ich werde mal schauen ob ich durchblicke.......

Wenn nicht...... ich kann ja zum Glück schreiben....... lach......

Auf jeden Fall werde ich dadurch wieder etwas lernen.....

Verfasst: 24.10.2006 16:11
von Tafkadasom2k5
nutze Smileys und Absätze- und schweige nicht so schüchtern mit den Punkten vor dich
(Bitte... die Punkte sind anstrengend zu lesen, und du brauchst dich hier nicht vor dich hin Schämen...)

Verfasst: 24.10.2006 16:44
von AND51
Habe nicht alles gelesen... Aber warum macht ihr das nicht mit SortArray() bzw. SortStructuredArray() und geht dann davon aus, dass je nach Sortierrichtung die drei ersten oder letzen Elemente die "Top 3" sind?

Verfasst: 24.10.2006 16:56
von DataMiner
... ist nicht so schön wie NTQ's Lösung, aber für einen Anfänger bestimmt leichter zu durchschauen:

Code: Alles auswählen

; PB4

zaehlertaxi = 10
Dim taxi_haltestelle.s(zaehlertaxi)
Dim topname.s(zaehlertaxi)

taxi_haltestelle(0) = "Friedrichstraße" ;3
taxi_haltestelle(1) = "Hubertusweg"     ;4
taxi_haltestelle(2) = "Obere Allee"     ;2
taxi_haltestelle(3) = "Hubertusweg"
taxi_haltestelle(4) = "Sauerlandgasse"
taxi_haltestelle(5) = "Friedrichstraße"
taxi_haltestelle(6) = "Obere Allee"
taxi_haltestelle(7) = "Hubertusweg"
taxi_haltestelle(8) = "Friedrichstraße"
taxi_haltestelle(9) = "Hubertusweg" 
SortArray(taxi_haltestelle(), 1)

counter=1
i=0
Repeat
  While taxi_haltestelle(i)=taxi_haltestelle(i+1)
    counter+1
    If i<zaehlertaxi
      i+1
    Else
      Break
    EndIf
  Wend
  If counter > 1
    j+1
    topname(j)=Str(counter) + " x " + taxi_haltestelle(i-1)
    counter=1
  EndIf
  i+1
Until i=zaehlertaxi

For i=1 To j
  Debug topname(i)
Next

Verfasst: 24.10.2006 18:35
von Hermann
Hi Nic......

..... ich bekomme bei deinem Code immer die Fehlermeldung

`top` is not a valid operater

Bezieht sich auf die Zeile :

Define top1s.s, top2s.s, top3s.s

Verfasst: 24.10.2006 19:43
von NicTheQuick
@Hermann:
Hast du nicht PB 4.0?

Dann ersetz die Zeile durch

Code: Alles auswählen

DefType.s top1s, top2s, top3s

Verfasst: 26.10.2006 08:24
von Hermann
Hi Nic.......

.... nein, ich bin noch auf 3.94..... hatte die 4 installiert aber durch meine mangelnde Programmierkunst hatte ich zu viele Fehler ........ wenn ich mal etwas mehr Zeit habe werde ich wohl mal umstellen und dann weiter sehen.....

Erstmal danke........ es hat super geklappt und ich komme endlich weiter.......

Bis dann...

Verfasst: 26.10.2006 09:19
von Kiffi
Hallo.................. Hermann,

bitte.......... nicht....................... so..................... viele..............
Punkte............. in..............Deinen................. Beiträgen.......................
verwenden!...................

Danke..................... Kiffi..................

Verfasst: 27.10.2006 10:26
von Hermann
Hallo Kiffi

lieber 30 Punkte mit Verstand, als 10 Worte sinnlos Aber ich werde versuchen mich in Zukunft zu bremsen ( obwohl will ich das ? )

Hermann , diesmal ganz ohne Punkt :D