Husk at oppgave 2,3 og 6 (pkt a. og b.) fra Java Programmering 2 (uke 36) skal gjøres i grupper og demonstreres for underviser eller lab-assistent.
Husk også Java quiz'en som har frist i slutten av uke 37.
Oppgave 6 og 7 på denne programmeringslab er relevant for programmeringsprosjektet som begynner i uke 38. De to oppgavene kan gjøres i de gruppene dere har etablert for programmeingsprosjektet.
Programmet nedenfor inneheld fire deler. Først studerer kvar student programmet nøye for å finne ut kva som blir skrive ut. Deretter diskuterer gruppen kva som blir skrive ut. Til slutt utfører de programmet og ser om de har rett svar.
public class Oppgave1 {
public static void main(String[] args) {
System.out.println("Del 1");
int i = 1;
while (i < 1) {
System.out.println("Nr 1, i = " + i);
}
System.out.println("Del 2");
for (int j = 1; j < 8; j = j * 2) {
System.out.println("Nr 2, j = " + j);
}
System.out.println("Del 3");
String s = "Test";
for (int k = s.length() - 1; k > 0; k = k - 1) {
System.out.println("Nr 3, k = " + s.charAt(k));
}
System.out.println("Del 4");
int tall = 7569;
int hjelp = tall;
int aS = 0;
do {
hjelp = hjelp / 10;
aS = aS + 1;
} while (hjelp > 0);
System.out.println(tall + " <fyll inn> " + aS + " <fyll inn>");
}
}
Kva berekning gjer løkka i Del 4? Prøv gjerne med andre tal enn i eksemplet. Fyll inn i print-setningen slik at utskrifta gir meining.
Før du løser oppgavene nedenfor anbefales det å se igjennom dokumentasjon for String-klassen tilgjengelig via: http://docs.oracle.com/javase/8/docs/api/index.html
Lag en klasse med en main-metode som leser antall ord og oppretter en strengtabell (String-array) med den gitte størrelsen. Les deretter ordene fra brukeren og plasser dem i tabellen. Skriv ut tabellen for å se at ordene er kommet inn.
Utvid main-metoden så den leser inn et mønster (streng) fra tastatur (terminal). Tell hvor mange ord i tabellen fra pkt. a) som inneholder mønsteret og skriv ut svaret.
Se om der finnes en metode for å teste om en streng inneholder en gitt sekvens av tegn (char).
Gå gjennom tabellen og skriv ut de midterste tegnene i hver streng der du bruker følgende regler. Dersom strengen inneholder bare ett tegn, skrives hele strengen ut. Dersom lengden er partall, skal de to midterste tegnene skrives ut. Dersom strengen har odde lengde (odde antall tegn), skal de 3 midterste tegnene skrives ut om strengen inneholder 3 tegn eller mer.
Ved å bruke Math-klassen får du tilgang til matematiske funksjoner som sinus og cosinus ved å bruke Math.sin(x)
og Math.cos(x)
i koden. Når du f.eks. skal regne ut verdien y = sin(x)
, må x være i radianer.
Omregning mellom grader og radianer gjør du ved formelen:
vinkel i radianer = (π * vinkel i grader) / 180
Verdien π finst i Math-klassen som konstanten Math.PI
.
Alternativ kan du bruke en innebygd metode i Math-klassen for dette. Se dokumentasjonen for Math-klassen (http://docs.oracle.com/javase/8/docs/api/index.html) for å finne metoden for omregning mellom grader og radianer.
Lag en enkel klasse der du i main-metoden skriver ut en tabell over sinus og cosinus til alle vinkler mellom 0 og 180 grader, i steg på 15 grader.
Utskriften kan f. eks. se slik ut:
x i grader x i radianer sin(x) cos(x)
------------------------------------------------
0 0.000 0.000 1.000
15 0.262 0.259 0.966
.. .. .. ..
180 3.142 0.000 -1.000
------------------------------------------------
Du skal lage et program for å lese inn temperaturen i Bergen for et bestemt klokkeslett for alle dager i en bestemt uke (dvs. 7 temperaturer). Temperaturer skal lagres i en tabell.
Programmet skal videre finne og skrive ut gjennomsnittet av disse verdiene og den høyeste temperaturen for hele uken.
Skjermdialogen kan se ut som eksempelet nedenfor:
Analyse av temperaturer
***********************
Skriv inn temperaturene:
1. dag: 22.2
2. dag: 21.5
3. dag: 26.5
..
7. dag: 18.3
Gjennomsnittstemperaturen var 22.1
Maksimum for denne uken var 26.5 grader
Først du løser oppgavene nedenfor anbefales det å se igjennom API-dokumentasjon for String-klassen tilgjengelig via: http://docs.oracle.com/javase/8/docs/api/index.html
Metodane nedanfor skal vere klassemetodar (static). Plasser dei ein eigen klasse og lag eit main-program som testar metodane.
Lag ein metode som skriv ut ein streng baklengs.
Lag ein metode for å avgjere om ein array (tabell) av heiltal er sortert stigande (dvs. at alle tal skal vere større enn det forrige).
Lag ein metode som gitt ein tabell av tekststrengar, returnerer den strengen i tabellen som kjem først i (Unikode) alfabetet.
Implementer sjølv en metode svarande til metoden frå String-klassen brukt i c). Du skal bruke løkke.
Gjør oppgave 18, side 78 i Java boken.
Oppgaven er relevant som oppvarming til programmeringsprosjektet. Husk at EasyGraphics koordinatsystemet går x bortover og y nedover (se side 71 i Java boken).
Et GPS punkt (Global Positioning System) inneholder bla. en breddegrad (engelsk: latitude) og en lengdegrad (engelsk: longitude) som angir en posisjon på jordkloden.
Nedenfor skal du implementere noen metoder som gjør beregninger på GPS posisjoner. Legg inn metoderne i en klasse GPSUtils.java
. Skriv også en main-metode i klassen som kaller metoderne i deloppgave a) - d) og sjekk om resultat fra metoderne er korrekt.
Avstanden d i meter mellom to punkter (lattitude1,longtitude1) og (lattitude2,longitude2) angitt ved bredde og lengdegrad kan beregnes ved bruk av Haversine-formlen
Implementer en metode
static double distance(double latitude1, double longitude1,
double latitude2, double longitude2)
som beregner avstand mellom to GPS punkter der R = 6371000 m er jordens gjennomsnittsradius.
Hint Math-klassen: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html inneholder de metoder som trengs inkl. atan2 funksjonen.
Implementer en metode
static double speed(int secs,
double latitude1, double longitude1,
double latitude2, double longitude2)
som beregninger gjennomsnittshastighet i km/t om man beveger seg fra punktet gitt ved (latitude1,longitude1) til punktet (latitude2,longitude2) på det antall sekunder som er gitt med parameteren secs.
Implementer en metode
static String printDouble(double d)
som runder av et flyttall til to desimaler, setter resultat inn i en streng og fyller på med mellomrom foran i strengen slik at lengden på strengen blir 10.
Implementer en metode
static public static String printTime(int secs)
som returnerer en streng der tiden i sekunder fra midnatt gitt av parameteren secs skrives på formatet hh:mm:ss
der hh
er antall timer, mm
er antall minutter og ss
er antall sekunder.