Laboration 1

Syftet med denna laboration är dels att göra dig bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva enkla Javaprogram och få övning i att nyttja if- och while-satserna.

Uppgifterna i del A av denna laboration behöver inte redovisas, men bör (skall) göras under första läsveckan. Uppgifterna i del B skall inlämnas i Fire. Deadlinen för inlämning finns i Fire.

Del A

Uppgift1

  1. Logga in
  2. Skapa en ny mapp med namnet TDA540 (i din filarea på fileservern):
    • Klicka med höger mus -> Nytt -> Mapp
    • Döp den nya mappen till TDA540
  3. Skapa en ny mapp Lab1 i mappen TDA540:
    • Gå till mappen TDA540 genom att dubbelklicka på mappen
    • Klicka med höger mus -> Nytt -> Mapp
    • Döp den nya mappen till Lab1
  4. Starta IntelliJ och skapa ett nytt projekt via File -> New -> Project. Det första gången när IntelliJ öppnas måste du konfigurera en Java-SDK. Hur man gör det kan man läsa här. Det här konfigurationssteget behöver man göra bara en gång. Efter det ska du klicka två gånger på ‘Next’. I sista steget väljer du ett namn för projektet och var du ska spara projektet. Navigera till mappen du nyss skapade i steg 3. Slutför handlingen med att klicka pa ̊ ‘Finish’.
  5. Ladda ner zip-filen lab1.zip. Packa upp zip-filen och kopiera Uppgift1.java till src mappen i projektets mapp
  6. Kompilera programmet:
    • Om allt gick bra finns filen Uppgift1.java nu i src mappen som man kan se i vänster spalten
    • Dubbelklicka på Uppgift1.java filen, då öppnas denna i editorn
    • Högerklicka på Uppgift1.java fliken och sedan välja ‘(Re)Compile…’-optionen
  7. Kör programmet genom att välja ‘Run…’-optionen
  8. Studera programkoden och försök förstå varför programmet gör vad det gör

Uppgift 2

När man skriver ett program kan man naturligtvis göra fel. En typ av fel är s.k. kompileringsfel vilka uppstår då man inte följer de språkregler som finns för det programspråk man använder. Denna typ av fel upptäcks av kompilatorn när man försöker kompilera programmet och man erhåller felmeddelanden från kompilatorn. Dessa felmeddelanden kan, särskilt för den ovane, ofta vara svåra att tyda. Denna uppgift går ut på att lära sig tyda felutskrifter från kompilatorn för att lokalisera och korrigera felen i ett program.

Inför nedanstående fel i programmet Uppgift1.java och kompilera om programmet efter varje fel som införs och se vilka felutskrifter som erhålls. Återställ programmet till sitt ursprungliga utseende inför varje förändring.

Fel:

Tips I felutskriften anger kompilatorn på vilken rad i programmet den upptäckt felet.

Uppgfit 3

Nedanstående Javaprogram som innehåller ett antal fel finns med i zip-filen.

public class TExFel {
    public static void main(String[] arg) {
        int tal1, tal2;
        double tal3
        indata = JOptionPane.showInputDialog("Ange första talet");
        tal1 = parseInt(indata);
        indata = JOptionPane.showInputDialog("Ange andra talet);
        Tal2 = Integer.parseInt(indata);
        tal3 = tal1 / tal2;
        JOptionPane.showMessageDialog(null, "Resultatet blev" + tal3);
    }
}

Uppgift 4

Anmäl er laborationsgrupp i Fire-systemet. Får ni problem så fråga handledarna om hjälp. Observera att båda medlemmarna i en grupp måste anmäla sig samtidigt. Om någon inte hittat en laborationspartner är det dags att söka efter en sådan.

Uppgift 5

Kopiera filen Triangel.java som finns med i zip-filen och lagra detta i src mappen. Kör programmet och försök förstå vad det gör.

Utgå sedan från programmet Triangel och försök skriv ett nytt program som via dialogrutor läser in värdena på de båda katetrarna i en rätvinklig triangel samt beräknar hypotenusan och skriver ut resultatet i en dialogruta. Döp ditt nya program till t.ex. Triangel2.

Uppgift 6

Kopiera programmet Circle.java som finns med i zip-filen och lagra detta i ditt eget bibliotek Lab1. Kör programmet och försök förstå vad det gör.

Utgå från programmet Circle.java och försök skriv ett nytt program som förutom ytan också beräknar och skriver ut cirkelns omkrets. Döp ditt nya program till t.ex. Circle2.java.

Uppgift 7

Kopiera programmet Pris.java. Kör programmet och försök förstå vad det gör.

Utgå sedan från programmet Pris och försök skriv ett nytt program som ger 5 procents rabatt om totala priset är större än 750 kronor, 10 procents rabatt om totala priset är större än 1500 kronor och 15 procent om totala priset är större än 3000 kronor. Ändra också utskriften på så sätt att uppgifter om bruttopris, rabatt och nettopris skrivs ut. Döp ditt nya program till t.ex. Pris2.java.

Del B

Uppgift 8

Skriv ett program som läser in dels den gällande växelkursen mellan Euro och svenska kronor, dels ett antal svenska kronor, samt beräknar och skriver ut hur många Euro detta motsvarar. Antalet erhållna Euro skall skrivas ut med exakt två decimaler. Observera att det är inte meningen att ditt program ska hämta växelkursen från nätet, bara läsa in från kommandofönstret.

Uppgift 9

Skriv ett program som läser utgångshastigheten \(v\) i \(\frac{m}{s}\) och en kastvinkel \(\alpha\) i grader och sedan beräknar banhöjden \(h\) och kastlängden \(d\) enligt nedanstående formler för kast utan luftmotstånd: \[ h = \frac{v^2 \sin^2 \alpha}{2g} \] och \[ d = \frac{v^2 \sin 2 \alpha}{g} \] där tyngdkraftsaccelerationen \(g = 9.82 \frac{m}{s^2}\). Utskriften av banhöjd och kastlängd skall göras med ett lämpligt antal decimaler.

Tips I Java finns en standardklass Math. På ‘Resurser’ sida finns en länk till ‘Dokumentation av Java API’ som leder till en sida där alla standardklasser i Java finns beskrivna. Leta upp klassen Math och se efter vad det finns för `matnyttigt’. Vilken enhet används i de trigonometriska funktionerna?

Testdata

En utgångshastighet på 20 \(\frac{m}{s}\) och en kastvinkel på 45 grader ger en banhöjd på ca 10.18 meter och en kastlängd på ca 40.73 meter.

Uppgift 10

För att en båt skall klassas som en 12:a får inte nedanstående uttryck avvika från värdet 12 med mer än 0.05: \[ \frac{2d + \sqrt{A} + L - f}{2.37} \] I formeln betecknar \(d\) båtens omfång, \(A\) båtens segelyta, \(L\) båtens längden och \(f\) båtens fribordshöjd. Skriv ett Javaprogram som läser in värden på \(d\), \(A\), \(L\) och \(f\) och avgör om båten uppfyller villkoret för att klassas som en 12:a.

Läs in samtliga indatavärden via en och samma dialogruta, dvs använd ett objekt av klassen Scanner för att avkoda de enskilda indatavärdena.

Testdata

Följande värden ger att båten är en 12:a: \[\begin{align*} d &= 6.3 \\ A &= 63.7 \\ L &= 8.85 \\ f &= 1.02 \end{align*}\] OBS! När ni använder Scanner måste ni ge decimala tal med decimalkomma (inte decimalpunkt), annars kastas en exception.

Uppgift 11

Skriv ett program som läser ett datum på formen yymmdd (t.ex 161021) och skriver ut datumet på den amerikanska formen mm/dd/yy (t.ex 10/21/16). Använd dialogrutor för inmatning och utskrifter. Utforma programmet på så sätt att körningen upprepas tills man trycker på Cancel-knappen i inmatningsrutan. Du får anta att den indata som ges till programmet är ett korrekt datum på formen yymmdd. Uppgiften skall lösas med användning av heltalsdivision och rest vid heltalsdivision.

Tips Vad blir resultaten av följande uttryck 1234/100 och 1234%100?

Testdata

Resultatet av indatasträngen 990131 skall bli 01/31/99.

Uppgift 12

Den berömde matematikern Gottfried Leibniz gav följande formel för \(\pi\): \[ \frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \ldots \]

Observera att metoden Math.pow får inte användas i lösningen för den här uppgiften!

Uppgift 13

I Scientific American, Februari 1981, fanns följande algoritm för att beräkna vilket datum påskdagen infaller under åren mellan 1900 och 2099:

Alla variabler i algoritmen är heltal och alla operationer är heltalsoperationer.

Skriv ett program som använda kommandofönstret för att upprepade gånger läsa in ett årtal, samt (med användning av ovan beskrivna algoritm) beräknar och skriver ut när påskdagen infaller för det inlästa årtalet. Exekveringen av programmet avbryts genom att användaren trycker på CTRL-D (på Linux och Mac är det CTRL-C när man kör i kommandofönstret). Programmet skall kontrollera att det inlästa årtalet ligger mellan 1900 och 2099. Om felaktigt årtal ges skall en felutskrift göras.

Testdata

Menu