Laboration nr 1, "Uppmjukning"

Avsikten med denna laboration är att du skall bli bekant med hur man skriver, kompilerar och kör enkla Javaprogram.  För att kunna göra laborationen bör du ha läst det första kapitlet i kursboken. Du bör också ha läst avsnitt  2.4.1 som handlar om numeriska uttryck, avsnitt 2.4.2 som beskriver hur man bildar logiska uttryck samt avsnitt 2.12 som handlar om standardklassen String. Det är i första hand tänkt att man skall utföra laborationen på en dator i någon av  laborationssalarna, men det går även att utföra laborationen på en egen dator. (Du måste då förstås ha installerat Javasystemet på din dator.)

Laborationen handlar om tideräkning, närmare bestämt om skottår, dagars nummer inom året och veckodagar. Eftersom vi i Sverige inte övergick till den nuvarande s.k. Gregorianska kalendern förrän år 1753 behöver de beräkningar vi skall göra i denna laboration bara gälla fr.o.m. år 1754.
(Den som är intresserad av mer detaljer hänvisas till artikeln Tideräkning i Sverige.)

Steg 1

Skriv ett program som undersöker om ett år är ett skottår eller inte. När man kör programmet skall det visa en dialogruta med följande utseende:

När man har skrivit in ett årtal skall programmet visa en ny dialogruta, där det anger om det inmatade årtalet är ett skottår eller inte:

Programmet skall utformas så att detta upprepas gång på gång tills användaren klickar på knappen Avbryt.

Följande regel gäller för skottår (i Sverige fr.o.m. år 1754): Skottår är sådana år som är en jämn multipel av 4, med undantag för sådana år som är jämnt delbara med 100. Dock är sådana år som är jämnt delbara med 400 skottår.

Tips: Du skall använda delar av detta program i Steg 2 och 3. Försök därför att utföra testen om det är ett skottår i ett enda logiskt uttryck. I programmet skall det alltså finnas en sats med formen

  if ( logiskt uttryck )
    // visa en dialogruta som säger att det är ett skottår
    ...
  else
    // visa en dialogruta som säger att det inte är ett skottår
    ...

Om du hunnit lära dig  hur man konstruerar klassmetoder kan det rekommenderas att du placerar denna test i en separat klassmetod som får ett årtal som parameter och som returnerar ett värde av typen boolean.
 

Steg 2

Skriv ett nytt program (förstör inte programmet från steg 1) som beräknar en dags nummer inom året, dvs. ett tal mellan 1 och 365, eller mellan 1 och 366 om dagen infaller under ett skottår. När man kör programmet skall det visa en dialogruta med  utseendet:

Därefter skall programmet beräkna dagen nummer inom året och visa det i en ny dialogruta:

Även detta program skall utformas så att det upprepas tills användaren klickar på knappen Avbryt.

Tips. Läs in hela det inmatade datumet till en variabel av typen String. Använd sedan metoden substring (se sidan 80 i kursboken) för att välja ut årtal, månad och dag. Dessa omvandlas sedan var för sig till typen int med hjälp av metoden Integer.parseInt. Beräkna dagnumret genom att summera antalet dagar i månaderna före den aktuella och addera summan till dagens datum. Lägg sedan till 1 om året är ett skottår och det aktuella datumet infaller i mars eller senare. För att se om ett årtal är ett skottår använder du förstås samma test som i steg 1.

Om du hunnit lära dig  hur man konstruerar klassmetoder kan det även här rekommenderas att du gör en sådan. Du skriver i så fall en klassmetod som får tre heltal (år, månad och dag) som parametrar och som ger ett heltal (dagnumret) som resultat. Om du har hunnit lära dig hur man skapar och använder fält kan det rekommenderas att du använder ett fält för att hålla reda på hur många dagar det ingår i de olika månaderna.

Steg 3

Du skall nu utöka programmet i steg 2, så att det istället för att visa dagnumret för ett inmatat datum talar om på vilken veckodag datumet inträffar. Den andra dialogrutan kan då se ut på följande sätt:

Tips. Tag en kopia av programmet från steg 2 och sätt en kommentarmarkering // i början på den rad där den andra dialogrutan visas. Lägg sedan till de ytterligare satser som behövs.

Eftersom programmet bara behöver fungera för år 1754 och framåt kan man utgå från detta år och beräkna hur många dagar det gått sedan den 1 januari 1754. Antag t.ex. att det inmatade årtalet är n. Då kan man löpa igenom åren 1754 till n-1 och summera antalet dagar för dessa år. Vissa av dessa år är skottår och det måste man förstås ta hänsyn till. Därefter kan man lägga till dagnumret för det inmatade datumet. Dagnumret har redan beräknats i steg 2, så det bör inte vålla några bekymmer. När man har det total antalet dagar kan man, för att få reda på veckodagen, dividera med 7 och se vilken rest man får. Den 1 januari 1754 var en tisdag. Detta innebär att om resten blir 0 så är det inmatade datumet en måndag, om resten blir 1 så är det en tisdag, osv.

Det kan nämnas att det i Unix/Linux finns ett kommando med namnet cal. Detta skriver ut en kalender för ett viss år. Följande kommando skriver t.ex. ut en kalender för år 1996:

  cal 1996

Du kan använda kommandot cal för att kontrollera att ditt program har räknat ut rätt veckodag.

Det går också bra att gå till webbsidan medlem.spray.se/veckodagar.