Seite 1 von 1

kleines Mathematisches Problem mit Tabelle!

Verfasst: 20.05.2007 15:27
von D4uS1
Ich habe eine Tabelle gemacht. In dieser Tabelle sind Linked Lists Aufgelistet. Die Tabelle fasst 29 einzelne Felder. D.H. Wenn mehr als 29 Teile der Liste existieren, muss eine neue Seite gemacht werden. Bis dahin ist alles kein Prolem. Doch wenn die dritte Seite beginnt, werden die teile nicht mehr Aufgelistet, weil die Position ausserhalb des Bildschirms ist. Ich versuche das ganze kurz mal in code-form zu zeigen.

Code: Alles auswählen

   ForEach film()
   film()\ID = ListIndex(Film())

       If film()\ID < 29   ;Wenn die Position des Films kleiner als der einer Maximalen Anzahl einer Seite entspricht
        Film()\Seite = Film()\ID/29+1 ;Dann ist die Seite = 1
       Else ;Ist sie größer
        Film()\Seite = Film()\ID/29*Seite\Anzahl ;Dann entspricht sie der Position des Films geteilt durch die Seitenzahl
       EndIf

      film()\x = 40 ;Die x Position in der Tabelle
      If film()\ID < 29 ;Wenn die  ID kleiner ist als der Anzahl der Abschnitte einer tabelle
       Film()\y = Film()\ID*20 ;Dann ist die y Position mit 20 zu Multiplizieren(20 ist die Höhe einer Pazelle)
      ElseIf Film()\ID >= 28 And Not Film()\seite%2 ;Ist die ID größer und ist die Seite durch 2 Teilbar
       Film()\y = (film()\ID   -  (Film()\Seite -1)*29)*20 ;dann tritt diese Rechnung in Krafkt
      ElseIf Film()\Position >= 28 and Film()\Seite%2  ;Ist sie nicht durch 2 Teilbar, also ungerade
       Film()\y = (film()\ID   -  (Film()\Seite*29))*20 ;dann diese
      EndIf
   next
So das sieht auf den ersten Blick kompliziert aus und ich bin mir auch sicher es geht auch einfacher. Aber ich habe herausgefunden das wenn die Seitenazahl gerade ist, einfach alles mit der Pazellengröße multiupliziert werden muss, aber wenn sie ungerade ist(ausser 1) erst die Seite -1 gerechnet werden muss. Nun wird mir aber ab der Seite 3 nichts mehr angezeigt, woran liegt das?

Verfasst: 20.05.2007 15:49
von STARGÅTE
warum machst du eigendlich einen unterschied zwischen erade und ungerade wenn x sowieso immer 40 ist :?

Irgendwie kapier ich das nciht ^^

Verfasst: 20.05.2007 15:59
von Kaeru Gaman
> Aber ich habe herausgefunden das wenn die Seitenazahl gerade ist, einfach alles mit der Pazellengröße multiupliziert werden muss, aber wenn sie ungerade ist(ausser 1) erst die Seite -1 gerechnet werden muss.

da muss ein denkfehler drin sein, dass ergibt nämlich keinen sinn.

btw: deine 29, die du überall als zahl reingeschrieben hast...
wenn du das mal ändern willst, schreibste dirn wolf...
mach da lieber auch ne konstante draus...

Verfasst: 20.05.2007 18:07
von Little John
2St@ndFurz:
Aus Deiner Beschreibung werde auch ich nicht ganz schlau. Ich kann raten, dass vielleicht Round und Modulo das ist, wonach Du suchst:

Code: Alles auswählen

;-- PB 4.02
EnableExplicit

Define.l MaxAnzahlProSeite, GesamtAnzahl, Id, Seite, PositionAufDieserSeite

;-- Beispielwerte
MaxAnzahlProSeite = 7
GesamtAnzahl = 20

;-- allgemeiner Algorithmus
For Id = 1 To GesamtAnzahl
   Seite = Round(Id/MaxAnzahlProSeite, 1)            ; aufrunden
   PositionAufDieserSeite = Id % MaxAnzahlProSeite   ; Rest berechnen
   If PositionAufDieserSeite = 0
      PositionAufDieserSeite = MaxAnzahlProSeite
   EndIf
   Debug "Id " + Str(id) + ": " + Str(Seite) + ", " + Str(PositionAufDieserSeite)
Next
Gruß, Little John

Verfasst: 26.05.2007 23:31
von D4uS1
ich hab den Fehler gefunden. Er lag in der Sortierung. Zu dem Thema ungerade und gerade. Der Taschenrechner hat mir da wohl irgentwelche rundungsfehler aufgejubelt. War wohl n Missverständnis. Sry.

Aber trotzdem Danke für die Antworten