Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Delphi / pascal teller vraag

Pagina: 1
Acties:
  • 473 views

Verwijderd

Topicstarter
Beste Tweakers,

Ik ben bezig met mijn allereerste programma in Delphi.
Het betreft een Stableford berekening van de sport: Golf (mijn hobby).

Korte uitleg (voorbeeld):
Je hebt 9 holes, elke hole heeft een moeilijkheidsgraad (Stroke Index), je hebt een handicap (extra slagen per hole) en de PAR (Professional Average Rating).

Daar zit een ingewikkelde formule achter om alles te bereken, die heb ik al weggeschreven _/-\o_ , echter eerst even een korte uitleg:

Het probleem: 9 holes met 15 handicap is 1 handicappunt (extra slag) voor elke hole, waar je er 6 overhoud. Die 6 moeten verdeeld worden over de 6 MOEILIJKSTE (laagste waarde) banen en dat lukt me niet |:(

Note: De ingevulde Handicap word weer ergens anders berekend.
Note2: Lage Index Rating is moeilijker dan hoge (1 tot 18)
Note3: De tabel is natuurlijk uitgedunt om het niet nog onduidelijker te maken dan het al is 8)7

9 HolesStroke IndexAantal EXTRA slagen (handicap = 15)Het probleem:
19+1hier zou dus nog een +1 bij moeten
217+1
315+1
4131hier zou dus nog een +1 bij moeten
55+1hier zou dus nog een +1 bij moeten
63+1hier zou dus nog een +1 bij moeten
711+1hier zou dus nog een +1 bij moeten
817+1
91+1hier zou dus nog een +1 bij moeten


Zou iemand mij kunnen helpen of op gang helpen met dit stukje Delphi? _/-\o_

[ Voor 7% gewijzigd door Verwijderd op 19-07-2013 16:06 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:23

Creepy

Tactical Espionage Splatterer

Wat lukt er dan precies niet? Wat voor code heb je zelf al geschreven/bedacht om die 6 overgehouden punten te verdelen over de 6 laagste? Als je alle punten per baan hebt kan je die toch prima sorteren op aantal punten en de laagste 6 pakken om daar dan vervolgens 1 punt bij op te tellen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 16:21
Wat heb je zelf al geprobeerd?

--edit--
creepy is me voor

[ Voor 34% gewijzigd door PdeBie op 19-07-2013 09:57 ]


Verwijderd

Topicstarter
Ik heb nu als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TScorekaart.FormShow(Sender: TObject);
var teller:integer;
begin
  teller:=StrToInt(mainform.EditHandicap.text);
  while teller>0 do
    begin
      if par1.text<>'' then
        begin
          if teller>0 then
            begin
              hc1.text:=IntToStr(StrToInt(hc1.text)+1);
              teller:=teller-1;
            end;
~etc

herhaald tot 9 text velden, nu telt hij gewoon door tot hij leeg is, dus hij pakt nu hole 1 tot 6 zeg maar ipv te kijken naar welke hij moet hebben. Ik ben beginnend (supernoob dus) programmeur en kan het niet echt terugvinden op itnernet.

(sorry hij pakte inspring stukjes niet mee)

[ Voor 4% gewijzigd door Verwijderd op 19-07-2013 15:58 ]


  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 22-11 18:42

Rannasha

Does not compute.

Voor het inspringen (en uberhaubt nettere code-formatting) kun je de code-tag gebruiken. Bijvoorbeeld:
Delphi:
1
2
3
if foo = bar then
   bla := 2 * boo;
end;


Wat betreft je vraag: Ga eens aan de slag met het leren van arrays. Deze zijn geschikt voor jouw probleem.

|| Vierkant voor Wiskunde ||


  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
Kijk idd naar arrays en records. Probeer hiermee een datamodel van je probleem te maken en ga hier dan met een for lus doorheen om de handicaps uit te rekeken.
Probeer ook je UI van je datamodel/berekening te scheiden. Dus niet direct met mainform.EditHandicap.text werken als variabelen. De UI is alleen voor de invoer en de presentatie van je datamodel.

In je voorbeeld verdeel je de 6 slagen volgens mij over de makkelijkste holes (hoge Stroke Index??) dus daar klopt volgens mij iets niet met je uitleg.

Verwijderd

Topicstarter
Bedankt voor de feedback, inderdaad een foutje in de tabel, heb die alvast even recht gebreid 8)7
Hoop dat ik het voor maandag kan afronden.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Moet je niet gewoon sorteren op moeilijkheid en in dit geval de moeilijkste 6 extra punten toekennen? In een gesorteerde rij van moeilijk naar makkelijk zijn dit gewoon de eerste 6 ;)

Verwijderd

Topicstarter
Daos schreef op vrijdag 19 juli 2013 @ 16:04:
Moet je niet gewoon sorteren op moeilijkheid en in dit geval de moeilijkste 6 extra punten toekennen? In een gesorteerde rij van moeilijk naar makkelijk zijn dit gewoon de eerste 6 ;)
Hoe doe ik dit dan precies?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik ken geen Delphi, maar in C# kan het zo:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Golf
{
    class Hole
    {
        private int index;
        private int stroke;
        private int extra;

        public Hole(int index, int stroke) 
        {
            this.index = index;
            this.stroke = stroke;
        }

        public int GetIndex()
        {
            return index;
        }

        public int GetStroke() 
        {
            return stroke;
        }

        public void SetExtra(int extra)
        {
            this.extra = extra;
        }

        public override string ToString()
        {
            return index + "\t" + stroke + "\t" + extra;
        }

        public static string GetTitles()
        {
            return "Hole\tStroke\tExtra";
        }
    }

    class HoleComparer : IComparer<Hole>
    {
        public int Compare(Hole x, Hole y)
        {
            int diff = x.GetStroke() - y.GetStroke();
            if (diff == 0)
                diff = x.GetIndex() - y.GetIndex();
            return diff;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int extras = 15;

            Hole[] holes = {
                                new Hole(1, 9),
                                new Hole(2, 17),
                                new Hole(3, 15),
                                new Hole(4, 13),
                                new Hole(5, 5),
                                new Hole(6, 3),
                                new Hole(7, 11),
                                new Hole(8, 17),
                                new Hole(9, 1)
                           };

            // sort
            SortedSet<Hole> sorted = new SortedSet<Hole>(holes, new HoleComparer());
            
            // some calculations...
            int all_extra = extras / holes.Length;
            int difficult_extra = all_extra + 1;
            int remaining_extras = extras % holes.Length;

            // compute extra
            for (int i = 0; i < remaining_extras; i++)
            {
                sorted.ElementAt(i).SetExtra(difficult_extra); 
            }
            for (int i = remaining_extras; i < sorted.Count; i++)
            {
                sorted.ElementAt(i).SetExtra(all_extra);
            }

            // print
            Console.WriteLine(Hole.GetTitles());
            foreach (Hole hole in holes)
            {
                Console.WriteLine(hole);
            }

            // wait for key...
            Console.WriteLine();
            Console.WriteLine("Press any key...");
            Console.ReadKey();

        }
    }
}


Uitvoer:
Hole    Stroke  Extra
1       9       2
2       17      1
3       15      1
4       13      2
5       5       2
6       3       2
7       11      2
8       17      1
9       1       2

Press any key...

Verwijderd

Topicstarter
Dat is inderdaad precies wat ik bedoel!!
Is er iemand die dit kan vertalen naar Delphi? :9 :9 :9

Verwijderd

Met een lap code dumpen help je mensen niet echt iets te leren. Give a man a fish enzo ;)

Verwijderd

Topicstarter
Ik moet er wel bijzeggen dat ik mezelf heb leren programmeren binnen een maand, alleen ja ik vind dit dan wel heel erg moeilijk... Ook eerste keer dat ik om hulp vraag :P

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 17:52
Verwijderd schreef op vrijdag 19 juli 2013 @ 16:45:
Dat is inderdaad precies wat ik bedoel!!
Is er iemand die dit kan vertalen naar Delphi? :9 :9 :9
Ik zal er eens naar kijken deze avond :). Mijn Delphi kennis nog eens afstoffen (vond het altijd een leuke taal).

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:23

Creepy

Tactical Espionage Splatterer

Maar dan nog is om kant en klare code vragen hier simpelweg not done. Als je eerst wat over arrays's leert dan zou je probleem niet zo lastig meer moeten zijn. Bij deze sluit ik dan ook je topic. Ik snap dat er mensen zijn die je de kant en klare code willen geven, maar door het zelf te doen leer je echt een stuk meer. En dat volledig werkend C# voorbeeld is met een klein beetje Delphi kennis goed over te zetten. Probeer het in elk geval eerst zelf.

[ Voor 17% gewijzigd door Creepy op 19-07-2013 17:01 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.