Lazarus Programm "Fußballturnier"

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
kaeferlie
Beiträge: 4
Registriert: Di 26. Mai 2015, 16:58

Lazarus Programm "Fußballturnier"

Beitrag von kaeferlie »

Hallo, ich bin gerade dabei ein Programm erstellen, womit man aus einer Liste von Fußballspielern (12 Mann) den Besten Torschützen und Torhüter ermittelt wird.

Folgenden Quelltext habe ich:

Code: Alles auswählen

 
var i,n,BS1,BS2,BT1,BT2:integer;
begin
  i:=1;
  n:=11;
  for i:=1 to n do
  begin
     BS1:=StrToInt(StringGrid_team1.cells[2,i]);
     BS2:=StrToInt(StringGrid_team1.cells[2,i+1]);
 
     Edit_bester_schuetze_teameins.text:=StringGrid_team1.cells[1,i];
 
     if BS1<BS2 then
     begin
     Edit_bester_schuetze_teameins.text:=StringGrid_team1.cells[1,i+1];
     end
 
end;
  for i:=1 to n do
  begin
    BT1:=StrToInt(StringGrid_team1.cells[3,i]);
    BT2:=StrToInt(StringGrid_team1.cells[3,i+1]);
 
     Edit_bester_torhueter_teameins.text:=StringGrid_team1.cells[1,i];
 
      if BT1<BT2 then
     begin
     Edit_bester_torhueter_teameins.text:=StringGrid_team1.cells[1,i+1];
      end;
  end;
end;
Dateianhänge
Das ist das Problem dass Spieler k nicht der beste Torhüter/Schütze ist. Was kann man ändern ?
Das ist das Problem dass Spieler k nicht der beste Torhüter/Schütze ist. Was kann man ändern ?
Zuletzt geändert von kaeferlie am Di 26. Mai 2015, 17:37, insgesamt 3-mal geändert.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Lazarus Programm "Fußballturnier"

Beitrag von Komoluna »

Erstmal willkommen im Forum.
Wenn du Code Highlighter(über dem Posteditor) benutzen könntest, wäre der Code viel leserlicher.

Zu deinem Problem: Kein Wunder, dass das nicht funktioniert. Du iterierst durch alle Zeilen deiner Tabelle und Schreibst den Text der Zelle(oder der darunter) in dein Edit. Wie soll da jemals der erste Eintrag als Ergebnis rauskommen.

MFG

Komoluna

(P.S.: Du kannst deinen Post auch bearbeiten)
Zuletzt geändert von Komoluna am Di 26. Mai 2015, 17:36, insgesamt 1-mal geändert.
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

kaeferlie
Beiträge: 4
Registriert: Di 26. Mai 2015, 16:58

Re: Lazarus Programm "Fußballturnier"

Beitrag von kaeferlie »

Komoluna hat geschrieben:Erstmal willkommen im Forum.
Wenn du Code Highlighter(über dem Posteditor) benutzen könntest, wäre der Code viel leserlicher.

MFG

Komoluna

(P.S.: Du kannst deinen Post auch bearbeiten)


Erledigt :-)

kaeferlie
Beiträge: 4
Registriert: Di 26. Mai 2015, 16:58

Re: Lazarus Programm "Fußballturnier"

Beitrag von kaeferlie »

Komoluna hat geschrieben:Erstmal willkommen im Forum.
Wenn du Code Highlighter(über dem Posteditor) benutzen könntest, wäre der Code viel leserlicher.

Zu deinem Problem: Kein Wunder, dass das nicht funktioniert. Du iterierst durch alle Zeilen deiner Tabelle und Schreibst den Text der Zelle(oder der darunter) in dein Edit. Wie soll da jemals der erste Eintrag als Ergebnis rauskommen.

MFG

Komoluna

(P.S.: Du kannst deinen Post auch bearbeiten)


Könntest du mir vielleicht erklären was damit gemeint ist ? ich habe erst seit kurzem mit Lazarus im Rahmen des Informatikunterrichtes angefangen und ja

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Lazarus Programm "Fußballturnier"

Beitrag von wp_xyz »

Zum Suchen eines Maximums speicherst du dir in einer Hilfsvariablen eine sehr kleine Zahl, die auf jeden Fall kleiner ist als alle zu prüfenden; bei "Toren" wäre die Null ein sinnvoller Wert. Das ist das temporäre Maximum.

Dann gehst du die Daten Wert für Wert durch und vergleichst den aktuellen Wert mit dem aktuellen Wert des Maximums. Wenn die Zahl größer ist, nimmst du sie als nees temporäres Maximum. Dann machst du mit der nächsten Zahl weiter, bis alle Zahlen abgearbeitet sind.

In deinem Code machst du den Fehler, dass das temporäre Maximum (gespeichert in dem Edit-Feld) bei jedem Schleifendurchlauf IMMER geändert wird.

Ich möchte bewusst keinen Code präsentieren, damit du üben kannst.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Lazarus Programm "Fußballturnier"

Beitrag von Komoluna »

Du hast eine Schleife:

Code: Alles auswählen

for i:=1 to 11 do
begin
  DeinEdit.Text := DeineStringrid.Cells[1,i];
  {...}
end;

Du schreibst also 11 Mal den Text aus einer Zelle deiner Stringgrid in dein Editfeld.
d.h. beim 2. Durchlauf der Schleife wird der Text aus dem ersten Durchlauf wieder überschrieben.

In deinem Code konnte im Editfeld enweder der Text aus der letzen oder vorletzten zeile stehen

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

kaeferlie
Beiträge: 4
Registriert: Di 26. Mai 2015, 16:58

Re: Lazarus Programm "Fußballturnier"

Beitrag von kaeferlie »

wp_xyz hat geschrieben:Zum Suchen eines Maximums speicherst du dir in einer Hilfsvariablen eine sehr kleine Zahl, die auf jeden Fall kleiner ist als alle zu prüfenden; bei "Toren" wäre die Null ein sinnvoller Wert. Das ist das temporäre Maximum.

Dann gehst du die Daten Wert für Wert durch und vergleichst den aktuellen Wert mit dem aktuellen Wert des Maximums. Wenn die Zahl größer ist, nimmst du sie als nees temporäres Maximum. Dann machst du mit der nächsten Zahl weiter, bis alle Zahlen abgearbeitet sind.

In deinem Code machst du den Fehler, dass das temporäre Maximum (gespeichert in dem Edit-Feld) bei jedem Schleifendurchlauf IMMER geändert wird.

Ich möchte bewusst keinen Code präsentieren, damit du üben kannst.


Ich hätte jetzt so umgeändert:

Code: Alles auswählen

 
  var i,n,BS1,BS2,BT1,BT2:integer;
begin
  i:=1;
  n:=11;
  BS1:=0;
  for i:=1 to n do
  begin
     BS2:=StrToInt(StringGrid_team1.cells[2,i]);
 
     Edit_bester_schuetze_teameins.text:=StringGrid_team1.cells[1,i];
 
     if BS1<=BS2 then
     begin
     Edit_bester_schuetze_teameins.text:=StringGrid_team1.cells[1,i];
     end
      BS1:=BS2;
end;
  BT1:=0;
  for i:=1 to n do
  begin
    BT2:=StrToInt(StringGrid_team1.cells[3,i]);
 
     Edit_bester_torhueter_teameins.text:=StringGrid_team1.cells[1,i];
 
      if BT1<=BT2 then
     begin
     Edit_bester_torhueter_teameins.text:=StringGrid_team1.cells[1,i];
      end;
       BT1:=BT2;
  end;
end;                                                         
 


Nur leider funktioniert es so immer noch nicht...

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Lazarus Programm "Fußballturnier"

Beitrag von wp_xyz »

Löse dich mal von dem Fussballbeispiel: Finde das Maximum der Zahlen 10, 2, 20.

Gehe jetzt das Verfahren durch:
(1) temporäres Maximum annehmen: 0 (oder -1000), auf jeden Fall kleiner als alle Zahlen
(2) 1.Zahl nehmen, das ist die 10. Ist größer als das temporäre Maximum und wird zum neuen temporären Maximum (10).
(3) 2.Zahl nehmen, das ist die 2. Ist kleiner als das aktuelle temporäre maximum (10) --> nicht verändern
(4) 3. Zahl nehmen, das ist die 20. Ist größer als das temporäre Maximum (10) --> neues temporäres maximum (20)
(5) Alle Zahlen sind abgearbeitet, das aktuelle temporäre Maximum (20) ist das "echte" Maximum.

Versuche das als Pseudocode oder auch als Pascal-Code umzusetzen (letzteres hätte den Vorteil, dass du es testen könntest).

Überlege dir für deinen fall: In welcher Variablen speicherst du das temporäre Maximum? Wie erhältst du die damit zu vergleichenden Zahlen?

[EDIT]
Ich habe mir deinen Code jetzt genauer angesehen - ist etwas verwirrend, weil du seltsame Bezeichner benutzst: statt "BS1" würde ich "max" nehmen, und statt "BS2" würde ich "tore" nehmen. Die Zuweisung des neuenMaximums ist noch an der falschen Stelle.

Seltsam ist an deiner Tabelle, dass jeder Spieler sowohl Torschütze als auch Torhüter ist. Ist das so beabsichtigt?

Antworten