Laboration nr 1, Veckodagar
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 den på en egen dator. (Du måste då förstås ha installerat Javasystemet.)
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 avsnitt 2.12 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
Skriv ett nytt program (förstör inte programmet från steg 2) som fungerar på samma sätt som programmet i steg 2, fast istället för att visa dagnumret för ett inmatat datum skall det tala om på vilken veckodag datumet inträffar. Den andra dialogrutan kan då se ut på följande sätt:
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.
Dokumentation
Lämna in filerna (.java-filerna) för de tre programmen.