Avatar billede haolan Nybegynder
27. september 2006 - 21:02 Der er 7 kommentarer og
1 løsning

Tjek om året er et skudår

Hej eksperter..

jeg sidder med en skoleopgave hvor jeg skal lave et program der udregner om et indtastet årstal er et skudår..

Et skudår skal være deleligt med 4, men ikke med 100 dog gerne med 400 hvordan koder jeg det?

Jeg har PT følgene kode:

            int år;
            år = int.Parse(txtÅr.Text);

            if ((år %= 4) - (år / 4) == 0 && (år %= 100) - (år / 100) < 0)
            {
                lblResult.Text = "Det er et skudår";
            }
            else if((år %= 400) - (år / 400) == 0)
            {
                lblResult.Text = "Det er et skudår";
            }       
            else
                lblResult.Text = "Det er ikk et skudår";

Men hvis jeg indtaster et årstal der er deleligt med 100 skriver den at det er et skudår, hvilket det jo ikke er :S

Håber i kan hjælpe rimelig hurtigt :)
Avatar billede nielle Nybegynder
27. september 2006 - 21:09 #1
Du skal nok passe på med at skrive:

år %= 4

- i din kode.

Det betyder nemlig det samme som:

år = år % 4

- dvs. at din værdi i år er noget helt andet bagefter if'en som kalder den.
Avatar billede nielle Nybegynder
27. september 2006 - 21:10 #2
Det skal nok være:

år % 4 == 0

- i stedet.
Avatar billede md_craig Nybegynder
27. september 2006 - 21:37 #3
Ville også bruge en omvendt aproach, samt lave en metode til det:

public bool IsSkudAar(int aar)
{
  if(aar % 400 == 0)
    return true;

  if(aar % 100 == 0)
    return false;

  if(arr % 4 == 0)
    return true;
 
  return false;
}

Sådan lige lidt hurtigt seudokode... ingen garanti... men pointen er, hvis det er deleligt med 400, så er det skudår...
Og så stopper vi der og returnere true..

Ellers hopper vi videre, hvis det så er deleligt med 100, så er det ikke (da alle dem der er deleligt med 400 allerede er udelukket)... derfor returnere vi false...

Nu er både deleligt med 400 og 100 udelukket, så kan vi se om det er deleligt med 4, if so... så returnere vi true... og ellers returnere vi til sidst false da alle ovenstående er udelukket....
Avatar billede guidmaster Nybegynder
27. september 2006 - 22:59 #4
Hvorfor gøre det mere besværligt end det behøver:
bool skudår = System.DateTime.IsLeapYear(2006);
Avatar billede md_craig Nybegynder
27. september 2006 - 23:08 #5
guidmaster >>

Fordi det er en skole opgave... der er netop den slags meget brugt til at lærer...
dvs. at det ikke er "OK" bare at benytte hvad der er lavet i forvejen... man skal lærer at lave det selv
Avatar billede guidmaster Nybegynder
27. september 2006 - 23:25 #6
Jo jo - men som min gamle matematiklære sagde så var en god elev en doven elev (underforstået at man ikke gjorde opgaverne mere besværlige end de var) ;)
Avatar billede haolan Nybegynder
28. september 2006 - 07:25 #7
hehe vi er desværre ikke nået længere end til at kende craigs forslag og formålet med opgaven var at træne brugen af if-sætninger, return og operatorer :)

Men vil da skrive din sætning bag øret til en anden gang :)

Læg svar for points craig og tak for hjælpen :)
Avatar billede md_craig Nybegynder
28. september 2006 - 11:19 #8
np
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

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