Regne med struct i C

Tags:    c

Hej guys!

Jeg sidder med en opgave hvor jeg har indlæst alle 198 kampe fra superligaen 2012-2013 i structs. Kampene er skrevet i en tekstfil på denne måde:

1 13.07.2012 kl. 18.30 AGF - AAB 1 - 1 9.728

Og min struct ser således ud:

Fold kodeboks ind/udC kode 


Nu skal jeg så:

"Find de hold, som vinder flere kampe på udebane end på hjemmebane."

Men jeg mangler lidt inspiration til at tage hul på den. Er der nogen som har nogle gode idéer eller forslag til hvordan jeg skal gribe den an?

Jeg skal vel først udregne målforskellen på alle kampene, og hvis
hjemmebane_scoring < udebane_scoring
Så har udehold[] vundet, og hvis omvendt så har hjemmehold vundet.

Alle råd eller tips er velkomne :)

/Thomas



7 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 21 karma
Sorter efter stemmer Sorter efter dato
Der er flere tilgange man kan bruge.

Du kan køre alle kampene igennem for hvert hold og så lægge til 1 til en variabel, 'udekampe_vundet', hvis de vandt en udekamp, og trække 1 fra hvis de vandt en hjemmekamp. Hvis variablen er positiv til sidst har holdt vundet flere udekampe end hjemmekampe.

En anden måde er at lave en struktur som indeholder statistikker for hvert hold:
Fold kodeboks ind/udC kode 


For hver kamp kan du så opdatere statistikkerne for de hold der spillede. Efter du er gået igennem alle kampe har du nu en masse info der kan hjælpe med at besvare andre spørgsmål.



Indlæg senest redigeret d. 25.11.2013 20:25 af Bruger #14645
Hvorfor har du to felter til antallet af tilskuere?

Istedet for at have to felter til dato/tid vil det være enklere at konvertere dato og tid til et timestamp, som er ét tal.

Hvis du har et array af dine strukturer vil det være ret enkelt at rende dem igennem og finde alle holdnavne. Derefter kan du lave et gennemløb for alle hold og finde antallet af vundne kampe, hvor holdet var på udebane.
Betingelsen der vil være: udebanemål > hjemmebanemål && strcmp(hold, udehold) == 0



Se her:
Fold kodeboks ind/udC kode 


Output:
Fold kodeboks ind/udKode 


Det er altid værd at gøre sine strukturer så simple som muligt.



Indlæg senest redigeret d. 25.11.2013 21:21 af Bruger #2695
Tusind tak for forslagene Søren!

Umiddelbart virker din første løsning som den mest enkle, og den jeg har mest lyst til, men får måske brug for et stuct af holdene alligevel i en senere opgave, så kunne være jeg bare skulle bide det i mig, og lave den løsning!

Robert, det er fordi tekst filen er skrevet med punktum således 10.352, 9.232 osv - Min første tanke var at indlæse som double og så gange med tusind, men det er ikke alle kampe som har over 1.000 hvilket resulterede i at nogle kampe eksempelvis fik 875000 tilskuere ;-) Denne måde var det eneste jeg kunne komme i tanke om.





Hmm, det var faktisk smart Robert :)
Det ville da også være lidt nemmere end først at gange den ene med 1000, og så addere den anden. Tak! :)

Nu har jeg siddet og rodet lidt med opgaven, efter Sørens råd, men det virker stadig ikke helt. Nogle forslag til hvad der er galt?

Mine 2 structs:
Fold kodeboks ind/udC kode 


min funktion lav_hold():
Fold kodeboks ind/udC kode 


Min funktion flere_udekampe_sejre()
Fold kodeboks ind/udC kode 


Lige nu skriver den dette output :(
AAB har vundet flere kampe paa udebane end paa hjemmebane
AAB har vundet flere kampe paa udebane end paa hjemmebane
AAB har vundet flere kampe paa udebane end paa hjemmebane
AAB har vundet flere kampe paa udebane end paa hjemmebane
AAB har vundet flere kampe paa udebane end paa hjemmebane

/Thomas



Indlæg senest redigeret d. 26.11.2013 13:20 af Bruger #17772
Prøv at simplificere funktionerne så de kun gør én ting.

Hav f.eks. en funktion, som tager et holdnavn som parameter og som tæller antallet af vundne udekampe.
Og en funktion som tager et holdnavn som parameter og som tæller antallet af vundne hjemmekampe.

Og så en funktion som render igennem alle hold og vha. de to førnævnte funktioner tjekker om holdet er bedst på udebane.




Der er et par problematikker med de variabler du indekserer dine arrays med. F.eks. i den første løkke hvor 'n' er en af kampene bruger den til at indeksere ind i holdene på alle_hold[n], som der kun er 'k' af. Du er 'heldig' at den ikke segfaultede.

Samme i den nederste løkke hvor du itererer over 'k' men skriver holdt som ligger på 'm' som aldrig ændrer sig fra 0. Det er os derfor den udskriver samme (det første) holdnavn.

Følg Roberts forslag med at lave flere funktioner som hver gør en bestemt ting, på den måde undgår du en stor kompleks funktion, og får flere mindre komplekse funktioner, og de er nemmere at arbejde med.



t