Avatar billede xing Novice
11. juni 2007 - 22:44 Der er 7 kommentarer

svær array opgave

Jeg er igang med at lave et program til et stafet løb

Der er 13 hold og de skal allesammen løbe 12 runder, det giver 4 mand på hver hold.

Hvordan holder jeg styr på hvem der føre?

Jeg har prøvet noget i stil med dette

omgange,plads,hold: array[1..13] of integer;
tel,op:integer;

tel:=tel+1;
om[strtoint(Holdnr.Text)]:=om[strtoint(Holdnr.Text)]+1;

for op:=1 to 13 do
begin
  if om[strtoint(Holdnr.Text)]>plads[op] then
  begin
    plads[op]:=om[strtoint(Holdnr.Text)];
    hold[op]:=strtoint(Holdnr.Text);
  end;
end;

Men jeg kan ikke rigtig komme videre, hmmm
Avatar billede bauerdata Nybegynder
12. juni 2007 - 08:33 #1
Du vil kunne registrere alle resultaterne ?
Når du har registreret resultaterne efter hver runde vil du sortere efter nuværende pladsering ?
eller hva :-?
Avatar billede hrc Mester
12. juni 2007 - 09:40 #2
Var det ikke bedre om du lave det som objekter og lister så du kunne proppe de oplysninger og logik ind i objekterne som du ønskede:

TLapData = class
private
  fTicks : longint;
public
  constructor Create(aTicks : longint); // ms
  property Ticks : longint read fTicks;
end;

TTeamData = class(TObjectList);
public
  constructor Create(const aID : integer; const aName : string);
  property ID : integer read fID;
  property Name : string read fName;
  property Items[const aIndex : integer] : TLapData read GetLapData; default;
  function TicksCount : longint; // Total for this team
  function Compleeted : boolean; // Finished race?
end;

TTeamList = class(TObjectList)
public
  property Items[const aIndex : integer] : TTeamData read GetTeamData; default;
  function WinnerTeam : TTeamData; // Returnerer vinderholdet (eller nil)
end;

Det jeg godt kan lide ved den tilgang er eksempelvis, at logikken der tæller et holds omgang er en det af Hold-objektet. En anden fordel er, at det er ufølsomt overfor ændringer i antal hold og antal omgange.

Uden jeg synes det er kanoner efter gråspurve er det måske noget at prøve?
Avatar billede xing Novice
12. juni 2007 - 11:10 #3
Ja, jeg vil gerne have en liste på skærmen som viser hvem som føre løbet, og hvem som er på anden pladsen osv...

hrc, puhaa det ser svært ud, hvordan virker det?
Avatar billede hrc Mester
13. juni 2007 - 14:03 #4
Det er en ret simpel løsning hvor jeg bruger TObjectList.

Der er en Teamliste der indeholder Team, der igen indeholder omgangene, deres tider.

Humlen er at logik er tæt pakket med objektene, f.eks. tickcount der er en funktion der gennemløber omgangene og tæller omgangstiderne sammen. Fordi den findes i team-objektet (en liste af omgange) er alle de registrerede omgange kun for det pågældende hold. Der er derfor ikke brug for "if team.id = x then ticks := ticks + xx" eller lignende. Man tæller det bare sammen.

Det er mit forsøg på et stringent eksempel på anvendt objektorientering. Her er nedarving og polimorfi uden det ellers bliver for avanceret. Men jeg kan da godt prøve om jeg kan lave det færdigt - der er jo kun klassedefinitionerne ovenfor.
Avatar billede xing Novice
13. juni 2007 - 18:34 #5
Det ville være super fedt hvis du vise mig det...

Det metode kan man jo bruge til alt muligt andet også :-)
Avatar billede skovjuul Nybegynder
21. juni 2007 - 13:19 #6
Hej hrc
Fik du nogensinde lavet ovenstående eksempel? Hvis ja må du også meget gerne sende det til mig da jeg kunne bruge et godt eksempel på alle de metoder du nævner :)

Mange tak
Jesper
Avatar billede xing Novice
21. juni 2007 - 23:58 #7
Nej, jeg venter :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester