Announcement

Collapse
No announcement yet.

Platzierung innerhalb einer Tabelle (Sport)

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Platzierung innerhalb einer Tabelle (Sport)

    Hi@all

    Ich benötige ein bischen Hilfe für eine Auswertungsberechnung.

    Aufgabe: Ich habe eine Tabelle mit mehreren Werten und möchte nun die Reihenfolge berechnen. (Sportwettkampf)

    |Name|W1|W2|W3|W4|W5|W6|W7|Punke|Platz|Min|Max|Ges amt|+|-|

    In W1-W7 werden Einzelpunkte eingegeben.
    MIN/MAX sind jeweils die MIN/Max Werte von W1-W7
    Punkte errechnen sich aus W1-W7 abzüglich Min und Max.

    Jetzt soll anhand der Punkte eine Platzierung ermittelt werden.
    Ich sortiere also die Tabelle nach Punkten und vergebe so Platzierungen.
    Höchste Punktzahl = Höchste Platzierung usw.

    Bis hierhin funktioniert alles prima.

    Problem: Wenn Punktgleichheit, soll bei den Punktgleichen die Gesamtsumme aller Punkte verglichen werden und die Platzierung entsprechend angepasst werden = höhere Gesamtwertung dann höherer Platz auf Basis des Platzes von Summe.
    Dafür soll ein +/- in einer zusätzliche Spalte abgelegt werden.
    Wenn immernoch Punktgleichheit nach Gesamtpunkten dann gleicher Platz und Nachfolgeplatz wird gestrichen.

    Ich hoffe das war verständlich.
    Zur verdeutlichung habe ich folgende Tabelle mal als Beispiel:
    http://www.concepts-multimedia.de/beispiel.jpg

    Ich arbeite mit BCB - ADO Komponenten (Connection/Table) - DBGrid.
    Wie gesagt, bis zur Berechnung der Punkte funktioniert alles.
    Ich brauche nur noch dieordentliche Platzierungsberechnung.
    Hier mal mein erster Ansatz.


    Code:
    void Platzierung(TObject *Sender, int lastData)
    {
     if(TADOTable* Table = dynamic_cast<TADOTable*>(Sender))
     {
      // aktuellen Datensatz ermitteln
      lastData = Table->RecNo;
      // Tabelle nach Punkten sortieren
      Table->Sort = "Punkte DESC";
      //Platz eintragen
      int platz=0;
      int count = Table->RecordCount;
      Table->First();
      for (int i=0; i<count; i++)
      {
       Table->Edit();
       Table->FieldByName("Platz")->Clear();
       int wert = Table->FieldByName("Punkte")->AsInteger;
       if (wert != 0 )
       {
     platz++;
     Table->FieldByName("Platz")->Value = platz; // Platz eintragen
     Table->Post(); // Speichern
     Table->Next(); // Nächster Datensatz
       }
      }
      Table->Close(); // Tabelle neu aufrufen wegen Originalsortierung
      Table->Open();
      //DBGrid1->Refresh();
      Table->RecNo = lastData; // zum letzten aktuellen Datensatz springen
     }
    }
    Was halt noch nicht klar ist, Platzierung bei Punktgleichheit unter Berücksichtigung oben beschriebener Kriterien.

    Vieln Dank für eine Hilfe.
    Thx@all

  • #2
    http://www.coding-board.de/board/sho...d.php?p=175537

    geschlossen
    Christian

    Comment

    Working...
    X