kleines Mathematisches Problem mit Tabelle!

Anfängerfragen zum Programmieren mit PureBasic.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

kleines Mathematisches Problem mit Tabelle!

Beitrag 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?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

warum machst du eigendlich einen unterschied zwischen erade und ungerade wenn x sowieso immer 40 ist :?

Irgendwie kapier ich das nciht ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag 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
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag 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
Antworten