Hoppa till huvudinnehållet
Institutionen för informationsteknologi

Laboration 2

Efter denna laboration ska du behärska en enkel struktur på Javaprogram, med fokus på programspråkskonstruktioner för deklarationer och programflöde.

Programmen du kommer att skriva är inte "typiska" Java-program av två skäl: Dels är de små och okomplicerade, dels saknar de ett objektorienterat tänkesätt. Så gott som alla Java-program "i verkligheten" är uppbyggda på ett objektorienterat sätt. Det blir även era program på samtliga framtida labbar, men inte denna gång.

Labbarna ska genomföras och redovisas individuellt. Muntligt samarbete är tillåtet och rekommenderat.

Vi rekommenderar att du inför labben har skissat på papper på programkoden för de olika uppgifterna, eller att du har tänkt igenom uppgifterna i syfte att komma med förberedda frågor till Mayank.

Skriv så enkla program du kan, som uppfyller uppgiftsspecifikationen. Inga felkontroller på indata, rimlighetskontroller eller dylikt behövs.

Labbarna ska redovisas genom att programlistningar lämnas in till Jesper för de program du har skrivit. Ingen separat dokumentation, körningsexempel eller förklaringar till programmen behöver finnas med.

Följande regler gäller:

  • Varje program ska vara på en separat sida, eller om så behövs flera sidor. Programlistningarna för de tre programmen ska vara hophäftade till en bunt.
  • Varje program ska börja med tre kommentarrader (Skansholm s. 36 samt s. 613)
  • Den första raden ska innehålla ditt namn
  • Den andra raden ska innehålla deluppgiftens nummer
  • Den tredje raden ska innehålla en fullständig adress till programmet, läsbar för gruppen övriga. (Kolla gärna i ditt Unix-häfte)
  • Programkörning eller dylikt behöver inte visas upp för labhandledare.
  • I syfte att upptäcka eventuellt fusk, för den händelse sådant förekommer, förbehåller vi oss rätten att på olika sätt kontrollera att du själv har skrivit de program du lämnar in.

Genomförande

Alla uppgifter nedan bör lösas på följande sätt.

  1. För den här och kommande labbar kommer du att behöva ladda extra-paketet i BlueJ. Du kan hitta information om hur detta görs här.
  2. Skapa en klass för uppgiften genom att trycka på New Class...-knappen i BlueJ.
  3. Döp klassen till Uppgift1, Uppgift2 o.s.v..
  4. Dubbelklicka på den ruta som bildas för din klass för att få fram källkoden.
  5. Ta bort all kod i källkoden som ligger mellan { och } i koden för klassen. Det enda som ska finnas kvar är således kommentarerna högst upp (om du vill, du måste utöka dem med de ovan i så fall) och public class Uppgift(1/2/3) { }.
  6. Skapa en main-metod som gör det programmet ska göra. Vill du skapa hjälpfunktioner går det bra, men det kan vara bra att se till att de är privata private. De behöver alltså inte gå att anropa utanför klassen sig själva.
  7. När du har skrivit klart din kod så tryck på Compile-knappen. Rätta till alla fel.
  8. För att testa din kod, högerklicka på din klass i huvudfönstret och välj att köra main-metoden.
  9. Se om resultaten överensstämmer med det du förväntar dig.
  10. Om något är konstigt eller om du kör fast så fråga handledaren.

Uppgift 1

Skriv ett program som räknar ränta på räntan på ett kapital. Programmet ska fråga efter kapitalets storlek (ett flyttal), antal år (heltal), och räntesats (ett flyttal). Programmet ska i en tabell skriva ut den ränta beräknas för varje år, samt för det sista året, kapitalets storlek inklusive ränta.

Tips: En, av flera, enkla lösningar är att utföra beräkningarna i en for-loop. (Avsnitt 9.3)

Uppgift 2

Skriv ett program som beräknar antalet dagar mellan två datum efter Kristi födelse. De två datumen ska matas in såsom tre heltal (du avgör själv om det tidigare eller senare ska matas in först - ledtexter ska i denna fråga lotsa användaren). Resultatet ska anges som ett heltal.

Du behöver inte ta hänsyn till skottår, men måste ta hänsyn till att årets månader har olika många dagar. Om du vill kan du använda switch-satsen (Skansholm, avsnitt 18.3.1), men olika lösningar med if-satser fungerar lika bra, är förmodligen enklare och kanske även lärorikare för dig.

Tips: En enkel lösning kan vara att räkna ut ett "dagnummer" för varje datum, baserat på att ett år har 365 dagar och de olika månadernas längd. Subtrahera därefter dessa dagnummer. Du får naturligtvis lösa uppgiften på andra sätt.

Uppgift 3

Ett annuitetslån betalas med ett lika stort belopp varje månad. Detta belopp är till en viss del ränta och till en del avbetalning (amortering) på lånet. Om räntesatsen är fast (vilket vi antar i denna uppgift), innebär detta att räntekostnaden utgör en stor del av den månatliga betalningen i början, medan amorteringarna blir den större delen mot slutet av avbetalningstiden.

Lisa går nu i bilköpartankar. Hon är erbjuden annuitetslån av banken. Hon funderar på att låna belopp mellan 50 000 och 200 000, och är intresserad av att betala omkring 3000 per månad. Räntesatsen, som är fast under lånetiden, uppgår till 0,5% per månad. Notera att räntan beräknas månadsvis.

Din uppgift är nu att skriva ett program som kan hjälpa Lisa att beräkna hur många månader hon ska betala till banken, och hur stor den sista betalningen blir. Välj själv vad som ska matas in.

Tips: Beloppen som är angivna i uppgiften är till för att "ge kött på benen". Uppgiften går bra att lösa utan denna information.

En bra lösning, av flera, kan vara att skissa på ett program enligt nedanstående. Skissen är inte komplett, man kan vara en startpunkt för tankearbetet.

medan (skulden är större än ordinarie månadsbetalning) {

amortera

beräkna ränta

}

Uppdaterad  2005-04-07 09:56:53 av Jesper Bengtson.