Malmö högskola
CTS
2008/2009
Laboration 5
Avsikten med laborationen är att du ska träna på att använda iterationer i dina program. I
vanlig ordning placerar du dina lösningar i paketet laboration5. Uppgifterna är lätt
matematiska till sin natur men det är inte matematiken som ska övas. Den är bara tacksam att
använda i mindre uppgifter.
Lösningar till uppgifterna och extrauppgifterna finns i slutet av laborationen. Ta inte del av
dessa lösningar förrän du har gjort en egen.
Iterationerna som ska tränas i laborationen är:
•
for-sats
•
while-sats
•
do-while-sats
Program1
Skriv klassen Intervall1 vilken ska innehålla metoden intervall. Metoden intervall ska utföra
följande:
• låter användaren mata in två intervallgränser (heltal)
• skriver ut intervallet
• skriver ut heltalen i intervallet
• skriver ut summan av talen i intervallet. Intervallgränserna ska ingå i summan.
Du ska använda en for-loop när du löser
uppgiften.
Till höger ser du ett körresultat.
Startklassen ska se ut så här:
package laboration5;
public class StartP1 {
public static void main(String[] args) {
Intervall1 p1 = new Intervall1();
p1.intervall();
}
}
DA101A, Programmering med Java, del 1
1
Malmö högskola
CTS
2008/2009
Program2
Skriv en klass Intervall2, med metoden
public void intervall(int min, int max)
Om du sedan startar programexekveringen i StartP2 så ska programmet fungera på samma
sätt som i Program1. Klassen StartP2 ser ut så här:
package laboration5;
import javax.swing.*;
public class StartP2 {
public void program() {
Intervall2 p2 = new Intervall2();
int min,max;
min = Integer.parseInt( JOptionPane.showInputDialog( "Ange undre
intervallgränsen" ) );
max = Integer.parseInt( JOptionPane.showInputDialog( "Ange övre
intervallgränsen");
p2.intervall(min,max);
}
public static void main(String[] args) {
StartP2 prog = new StartP2();
prog.program();
}
}
Program 3
Du ska utgå från klassen StartP2 när du skriver StartP3 (även StartP3 använder Intervall2).
Skillnaden mellan programmen är att det är inmatningskontroll vid inmatningen av det andra
heltalet. Det andra heltalet måste var minst lika stort som det första heltalet. Om t.ex. det
första inmatade talet är 15 så ska programmet endast acceptera 15 och uppåt som värde i det
andra heltalet. Om användaren matar in ett för litet tal ska användaren uppmanas att mata in
ett värde på nytt.
Du ska göra denna kontroll med en do-while-loop.
Nedan ser du ett körresultat:
2
Malmö högskola
CTS
2008/2009
Program 4
Program 4 ska undersöka hur många tal det behövs i en serie för att uppnå en viss summa. I
serien ökar alltid värdet med ett från ett tal till nästa. Exempel på serier är
• 7 8 9 10 11 12
• 19 20 21 22 23 24 25 26 27
Exempel på körresultat:
Om en serie börjar med 7 och summan 30 ska uppnås krävs 4 tal: 7+8+9+10 (= 34)
Om en serie börjar med 13 och summan 100 ska uppnås krävs 7 tal: 13+14+15+16+17+18+19
Du sak utgår från main-metoden i klassen StartP4 när du loser uppgift 4:
package laboration5;
import javax.swing.*;
public class StartP4 {
public static void main( String[] args ) {
Termer te = new Termer();
int startvärde = Integer.parseInt( JOptionPane.showInputDialog(
"Ange startvärde" ) );
int summa = Integer.parseInt( JOptionPane.showInputDialog( "Ange
lägsta summa" ) );
int antal = te.antalTermer( startvärde, summa );
// Steg 1
String res = te.serie( startvärde, antal );
// Steg 2
JOptionPane.showMessageDialog( null, "Det krävs " + antal +
" termer: " + res );
}
}
Programmet StartP4 löser uppgiften i två steg, nämligen genom att först anropa metoden
antalTermer och sedan anropa metoden serie. Din uppgift är att skriva dessa metoder.
Var god vänd!
3
Malmö högskola
CTS
2008/2009
Steg 1 – antalTermer
Skriv metoden
public int antalTermer(int startvärde, int summa)
vilken ska beräkna det antal termer som behövs för att minst komma upp i en summa.
I det första körresultatet ovan ska metoden returnera 4 och i det andra körresultatet ska
metoden returnera 7.
Du kan använda nedanstående program när du testar metoden:
package laboration5;
import javax.swing.*;
public class StartP4a {
public static void main(String[] args) {
Termer p4 = new Termer();
int termer1, termer2, termer3, termer4;
termer1 = p4.antalTermer(7,30);
termer2 = p4.antalTermer(13,100);
termer3 = p4.antalTermer(13,93); // krävs exakt 6 termer
termer4 = p4.antalTermer(13,94); // krävs 7 termer
JOptionPane.showMessageDialog( null, termer1 + ", " + termer2 +
", " + termer3 + ", " + termer4);
}
}
Steg 2 – serie
Skriv metoden
public String serie(int startvärde, int antalTermer)
vilken ska returnera en sträng på formen ”[7,8,9,10,11,12,13,14]”, dvs med hakparenteser och
talen uppräknade med komma emellan.
Anrop
Resultat
p4.serie(4,11)
p4.serie(10,3)
”[4,5,6,7,8,9,10,11,12,13,14]” (11 tal med start på 4)
”[10,11,12]” (3 tal med start på 10)
Tillverka på egen hand en testklass, StartP4b, och testkör tills du är nöjd med din lösning.
Testning
Nu kan du testköra StartP4.java.
4
Malmö högskola
CTS
2008/2009
Program5
Du ska skriva ett program vilket låter användaren mata in ett antal utgifter (t.ex. efter en
inköpsrunda). När användaren är klar matar hon in värdet 0. Då berättar programmet följande:
•
Antal inköp
•
Total kostand för inköpen
Inmatningsproblematiken kan du lösa med en while-loop. Strukturen kan vara följande:
Inmatning av belopp
while(belopp>0) {
// nödvändig kod
Inmatning av belopp
}
Exempel på programkörning
5
Malmö högskola
CTS
2008/2009
Program 6
Du ska skriva ett program vilket är menystyrt. Användaren ska presenteras följande meny:
1. Intervallsumma
Funktion som den i Program3
2. Seriesumma
Funktion som i Program4
3. Inköp
Funktion som i Program5
4. Avsluta
programmet avslutas
Exempel på programkörning
Efter valet av 2 kommer samma sak hända som vid körning av Program 4. Vad som krävs för
detta är dessa två rader med kod:
StartP4 prog = new StartP4();
prog.program();
6
Malmö högskola
CTS
2008/2009
Lösningar
Program 1
package laboration5;
import javax.swing.*;
public class Intervall1 {
public void intervall() {
int min,max,summa=0;
String res;
min = Integer.parseInt( JOptionPane.showInputDialog( "Ange undre
intervallgränsen" ) );
max = Integer.parseInt( JOptionPane.showInputDialog( "Ange övre
intervallgränsen" ) );
res = "Intervall: [" + min + "," + max + "]\n" +
"Tal i intervallet:";
for(int i=min; i<=max; i++) {
summa += i;
res += " " + i;
}
res += "\nTalens summa: " + summa;
JOptionPane.showMessageDialog( null, res );
}
}
Program 2
package laboration5;
import javax.swing.*;
public class Intervall2 {
public void intervall(int min, int max) {
int summa=0;
String res= "Intervall: [" + min + "," + max + "]\n" +
"Tal i intervallet:";
for( int i = min ; i <= max; i++ ) {
summa += i;
res += " " + i;
}
res += "\nTalens summa: " + summa;
JOptionPane.showMessageDialog( null, res );
}
}
Program 3
package laboration5;
import javax.swing.*;
public class StartP3 {
public void program() {
Intervall2 p2 = new Intervall2();
int min,max;
min = Integer.parseInt( JOptionPane.showInputDialog( "Ange undre
intervallgränsen" ) );
do {
max = Integer.parseInt( JOptionPane.showInputDialog( "Ange övre
intervallgränsen, lägst " + min ) );
} while( max < min );
p2.intervall( min, max );
}
public static void main(String[] args) {
StartP3 prog = new StartP3();
prog.program();
}
}
7
Malmö högskola
CTS
2008/2009
Program 4
package laboration5;
public class Termer {
public int antalTermer(int min, int summa) {
int antal=0;
while(summa>0) {
antal++;
summa -= min;
min++;
}
return antal;
}
public String serie(int start, int antal) {
String res = "[";
while(antal>0) {
res += start;
start++;
antal--;
if(antal>0)
res += ",";
}
return res + "]";
}
}
--------------------------------------------------------------------package laboration5;
import javax.swing.*;
public class StartP4b {
public static void main(String[] args) {
Termer p4 = new Termer();
String intervall1,intervall2,intervall3;
intervall1 = p4.serie(4,11);
intervall2 = p4.serie(10,3);
intervall3 = p4.serie(20,0);
JOptionPane.showMessageDialog( null, "intervall1: " + intervall1 + "\n"
"intervall2: " + intervall2 + "\n" +
"intervall3: " + intervall3);
}
}
8
+
Malmö högskola
CTS
2008/2009
Program 5
package laboration5;
import javax.swing.*;
public class Program5 {
public void program() {
double belopp, summa=0, antal=0;
JOptionPane.showMessageDialog( null, "Programmet beräknar kostnaden för ett
antal inköp." );
belopp = Double.parseDouble( JOptionPane.showInputDialog( "Ange en utgift (0
för att avsluta)" ) );
while(belopp>0) {
summa += belopp;
antal++;
belopp = Double.parseDouble( JOptionPane.showInputDialog( "Ange en utgift (0
för att avsluta)" ) );
}
JOptionPane.showMessageDialog( null, "Antal inköp: " + antal +"\nTotal kostnad:
" + summa );
}
}
---------------------------------------------------------------------package laboration5;
public class StartP5 {
public static void main(String[] args)
Program5 p5 = new Program5();
p5.program();
}
}
{
Program 6
package laboration5;
import javax.swing.*;
public class Program6 {
public void programLoop() {
StartP3 p3 = new StartP3();
StartP4 p4 = new StartP4();
Program5 p5 = new Program5();
String meny = "ALTERNATIV\n\n1. Intervallsumma\n" +
"2. Seriesumma\n3. Inköp\n4. Avsluta\n\nVälj alternativ";
int val = Integer.parseInt( JOptionPane.showInputDialog( meny ) );
while((val!=4) && (val!=0)) {
switch(val) {
case 1 : p3.program(); break;
case 2 : p4.program(); break;
case 3 : p5.program(); break;
}
val = Integer.parseInt( JOptionPane.showInputDialog( meny ) );
}
}
}
---------------------------------------------------------package laboration5;
public class StartP6 {
public static void main(String[] args)
Program6 p6 = new Program6();
p6.programLoop();
}
}
9
{