Föreläsning 3. Föreläsning 3

Relevanta dokument
Föreläsning 3. Föreläsning 3

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Föreläsning 3. Iteration while-satsen

Iteration. Föreläsning 3. TDA540 - Objektorienterad Programmering

Föreläsning 3. Föreläsning 3. Iteration. while-satsen for-satsen do-satsen. while-satsen. do-satsen. Datatypen double

Objektorienterad programmering

Iteration while-satsen

Föreläsning 7. for-satsen Fält

Lösningsförslag: Instuderingsfrågor, del A

JAVAUTVECKLING LEKTION 4

for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

OOP Objekt-orienterad programmering

Föreläsning 2. Föreläsning 2. Primitiva datatyper Selektering. Primitiva datatyper Selektering. Operationer på datatypen double

Primitiva datatyper Selektering

Föreläsning 2. Primitiva datatyper Selektering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 3-4 Innehåll

Tentamen OOP

Primitiva datatyper och selektering

Instuderingsfrågor, del B

Föreläsning 2. Föreläsning 2

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

1 Iteration. 1.1 for-satsen

Objektorienterad programmering

Föreläsning 2. Föreläsning 2

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 2. Primitiva datatyper Selektering. Operationer på datatypen double. Motsvarande operationer finns för float. a + b addition double

OOP Objekt-orienterad programmering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Lösningsförslag till tentamen

F4. programmeringsteknik och Matlab

PROGRAMMERING-Java Omtentamina

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

PROGRAMMERING-Java TENTAMINA

Föreläsning 1 & 2 INTRODUKTION

Instuderingsfrågor, del A

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

"if"-satsen. Inledande programmering med C# (1DV402)

Metoder och top-down design

TENTAMEN OOP

Föreläsning 1 & 2 INTRODUKTION

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Lösningsförslag till tentamen

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen , Introduktion till Java, dtaa98, dtea53

Objektorienterad programmering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Inledande programmering med C# (1DV402) Summera med while"-satsen

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag till tentamen

Föreläsnings 9 - Exceptions, I/O

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning REPETITION & EXTENTA

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Malmö högskola 2012/2013 Teknik och samhälle

Föreläsning 9-10 Innehåll

Lösningsförslag till tentamen

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Föreläsning 2, vecka 8: Repetition

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Lösningsförslag till tentamen

Del A (obligatorisk för alla)

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Variabler och konstanter

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Malmö högskola 2008/2009 CTS

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Föreläsning 3: Booleans, if, switch

Klassen String Mer om fält Något om inläsning

Hur ser ett Java-program ut?

Programmeringsteknik I

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

JAVAUTVECKLING LEKTION 3

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

Transkript:

Datatypen De enkla datatyperna, som används för att lagra tal (t.ex. int och ), har en begränsad storlek och representerar således endast en delmängd av de verkliga talen. Föreläsning 3 Detta innebär att ett resultat eller ett mellanresultat från en beräkning av ett uttryck kan bli ett värde som inte kan lagras. Iteration -satsen for-satsen do-satsen Resulterar uttrycket i ett för stort värde uppstår overflow och om uttrycket resulterar i ett för litet värde uppstår underflow. underflow Föreläsning 3 Iteration Reella tal lagras med ett bestämt antal signifikanta siffror, vilket innebär att det vid beräkningar uppstår trunkeringsfel och kancellationsfel. kancellationsfel 2 Datatypen Exempel: Antag att vi lagrar decimala tal med 4 decimaler. Uttrycket 1.0/3.0 + 1.0/3.0 +1.0/3.0 -satsen for-satsen do-satsen När man handhar reella tal skall man kommer då att evalueras på följande sätt: 1.0/3.0 + 1.0/3.0 +1.0/3.0jämföra = aldrig på exakthet, utan istället 0.3333 + 0.3333 + 0.3333 = 0.9999 jämföra på tillräcklig noggrannhet. resultatet blir inte 1.0, som man kanske trott! Konsekvens: I en triangel kan man beteckna sidorna a, b och c. Om man känner till längden av sidorna a och b samt vinkeln mellan dessa sidor, kan man räkna ut längden av sidan c med hjälp av formeln: c= a 2 b2 2ab cos Skriv ett program som läser in längderna på två sidor i en triangel och vinkeln mellan dessa sidor (uttryckt i grader). Programmet skall avgöra om triangeln är liksidig (alla sidor lika långa), likbent (två sidor lika långa) eller oliksidig (inga sidor är lika långa). När man handhar reella tal skall man aldrig jämföra på exakthet, utan istället jämföra på tillräcklig noggrannhet. Programmet skall ge lämpliga utskrifter. 3 4

Indata: Längderna A och B på två sidor i triangeln, samt den mellanliggande vinkeln VG i grader. 1. Läs längderna på sidorna A och B, samt gradtalet VG av den mellanliggande vinkeln. 2. Beräkna VR som den mellanliggande vinkeln uttryckt i radianer. Utdata: Utskrift av huruvida triangeln är liksidig, likbent eller oliksidig. 3. Beräkna längden C av den den okända sidan i triangeln med hjälp av formeln C= A B 2AB cos VR vinkel, /* Programmet läser in längderna av två sidor i en triangel samt mellanliggande 4. Om A - B och A - C och B - C så I klassen Math skriver i Java angesut parametrarna till de trigonometriska * och huruvidatriangeln är liksidig, likbent eller oliksidig. */ skriv ut att triangeln är liksidig Varför måste vi funktionerna i radianer. Därför är en omvandling av vinkeln från grader till import javax.swing.joptionpane; annars om A - B eller A - C eller B - C så göra jämförn radianer nödvändig att göra. B C skriv ut att triangeln är likbent import java.util.scanner; Denna omvandling kan antingen göras genom att använda metoden annars toradians i klassen Math, eller genomatt använda formeln skriv ut att triangeln är oliksidig. class Triangle Datarepresentation: VR = VG /180static void main( [] arg) Längderna A, B och C samt vinklarna VG och VR är av datatypen. där VR är vinkeln uttryckt i radianer och VG är vinkeln uttryckt i grader. final EPS = 0.001; Konstanten PI, för att avbilda finns tillgänglig i klassen Math. För att två sidor skall betraktas som lika antas att sidornas längder skiljer Klassenav Math har ensidor klassmetod toradians för att omvandla från grader till radianer. = JOptionPane.showInputDialog("Ange längden två samt" sig med mindre än längdenheter. Konstanten EPS = 0.001, för att avbilda. + " mellanliggande vinkel: "); 5 Scanner sc = new Scanner(); a = sc.nextdouble(); b = sc.nextdouble(); anglegrades = sc.nextdouble(); angleradians = Math.toRadians(angleGrades); Styrstrukturerna i Java c = Math.sqrt(a*a + b*b - 2.0*a*b*Math.cos(angleRadians)); /* Programmet läser in längderna av två sidor i en triangel samt mellanliggande vinkel, * och skriver ut huruvidatriangeln är liksidig, likbent oliksidig. */ && (Math.abs(a - c) <= EPS) && (Math.abs(b - c) <= EPS)) if ((Math.abs(a - b)eller<= EPS) Sekvens: tilldelningssatsen selektionssatser "LIKSIDIG"); class Triangle iterationssatser static void main(if [] arg) ((Math.abs(a -b) <= EPS) (Math.abs(a - c) <= EPS) (Math.abs(b - c) <= EPS)) final EPS = 0.001; return-satsen = JOptionPane.showInputDialog("Ange längden av två sidor samt" "LIKBENT"); anrop av void-metod + " mellanliggande vinkel: "); Scanner sc = new Scanner(); programblock a = sc.nextdouble(); exception b = sc.nextdouble(); "OLIKSIDIG"); anglegrades = sc.nextdouble(); angleradians Selektion: if-satsen //main= Math.toRadians(angleGrades); c = Math.sqrt(a*a + b*b - 2.0*a*b*Math.cos(angleRadians)); switch-satsen if ((Math.abs(a - b) <= EPS) && (Math.abs(a - c) <= EPS) && (Math.abs(b - c) <= EPS)) //Triangle "LIKSIDIG"); 2 Diskussion: Iteration: if ((Math.abs(a -b) <= EPS) (Math.abs(a - c) <= EPS) (Math.abs(b - c) <= EPS)) "LIKBENT"); "OLIKSIDIG"); //main //Triangle 7 2 6 -satsen do-satsen for-satsen 8

Olika typer av iteration a) Iteration: -satsen tills ett visst villkor blivit uppfyllt ( villkorsloop) villkorsloop Upprepning av en sats: b) ett på förhand bestämt antal gånger ( räkneloop) räkneloop false evaluera villkor (villkor) true class Question Upprepning av ett programblock: Satser som kör Exempel: om villkoret är sant static void main( [] arg) (villkor) a) Rör om tills smöret har smält (villkorsloop). sats1; Scanner sc = new Scanner(System.in); b) Gå fem steg framåt (räkneloop) boolean done = false; satsn; Satser som kör efter -satsen (!done) System.out.print("Which language do we learn? "); answer = sc.next(); if (answer.equals("java"))9 done = true; Vad gör programmet? System.out.println("Nope, try again!"); class Question Antalet bakterier y i en bakterieodling efter t tidsenheter ges av static void main( [] arg) System.out.println("Well done!"); formeln Scanner sc = new Scanner(System.in); boolean done = false; //main (!done) y = y e1.386t System.out.print("Which language do we learn? "); //Question answer = sc.next(); 10 n n s där ys är antalet bakterier vid t = 0. if (answer.equals("java")) done = true; System.out.println("Nope, try again!"); Skriv ett program som beräknar hur många tidsenheter det tar innan en bakterieodling som innehåller en bakterie innehåller minst 1 miljard bakterier. System.out.println("Well done!"); //main //Question 11 12

Indata: Ingen Utdata: Hur lång tid det tar innan bakterieodlingen innehåller minst 1 miljard bakterier. class Bacteria static void main( [] arg) int time = 0; ystart = 1; ytotal = ystart; (ytotal < 1.0e9) time = time + 1; ytotal = ystart*math.exp(1.386*time); "Det tar " + time + " tidsenheter innan" + " odlingen innehåller 1 miljard bakterier."); //main //Bacteria class Bacteria static void main( [] arg) int time = 0; ystart = 1; 5. Skriv ut värdet av tid. Datarepresentation: ytotal = ystart; tid är av datatypen int. (ytotal < 1.0e9) ystart och ytotal är reella tal, dvs av datatypen. time = time + 1; 13 ytotal = ystart*math.exp(1.386*time); "Det tar " + time + " tidsenheter innan" + " odlingen innehåller 1 miljard bakterier."); for-satsen Iteration: for-satsen //main //Bacteria Upprepning av en sats: 1. Sätt tillväxttiden tid till 0. 2. Sätt ystart, antalet bakterier vid tiden 0, till 1. 3. Sätt totala antalet bakterier i odlingen ytotal till ystart. 4. Upprepa så länge som ytotal är mindre än 1000000000 4.1. Öka tid med 1. 4.2. Beräkna ytotal mha formeln ytotal = ystart * e1.386*tid initiering for (int i = 1; i <= 5; i = i + 1) System.out.println(i); for (initiering; villkor; ändring) false evaluera villkor true Satser som kör om villkoret är sant ändring Upprepning av ett programblock: for (char c = d ; c >= a ; c = (char) (c - 1)) System.out.println(c); for (initiering; villkor; ändring) sats1; satsn; for ( x = 0.5; x < 0.8; x = x + 0.1) System.out.println(x); Satser som kör efter for-satsen for-satsen är en villkorsloop, men använd for-satsen endast vid räkneloopar!!! 15 14 Ger utskriften: 1 2 3 4 5 Ger utskriften: d c b a Ger utskriften: 0.5 0.6 0.7 0.7999999999999999 Troligen inte förväntat resultat! Den styrande variabeln i en for-sats bör vara en uppräkningsbar datatyp. 16

Indata: Ingen Utdata: Att omvandla en temperatur angiven i grader Fahrenheit till grader Celsius sker med följande formel: C = (F -32) 5 / 9, där C anger grader Celsius och F grader Fahrenheit Skriv ett program som skriver ut en omvandlingstabell från grader Fahrenheit till grader Celsius i intervallet från -10.0 till +10.0 grader Fahrenheit, där var grad anges. Fahrenheit -10.0-9.0 9.0 10.0 En konverteringstabell från grader Fahrenheit till grader Celcius som anger varje grad i intervallet -10.0 till +10.0. 1. Skriv ut rubriken 2. För f = -10.0 till 10.0 stega 1 2.1. c = (f -32)*5/9 2.2. Skriv ut f och c Datarepresentation: f är av datatypen int och c är av datatypen. Celsius -23.3-22.8-12.8-12.2 class FahrenheitToCelsius static void main([] arg) System.out.printf("%15s%12s", "Fahrenheit", "Celsius\n"); for (int fahrenheit = -10; fahrenheit <= 10; fahrenheit = fahrenheit + 1) celsius = (fahrenheit -32) * 5.0 / 9.0; System.out.printf("%12.1f%13.1f\n", ( ) fahrenheit, celsius); //main //FahrenheitToCelsius 17 18 FahrenheitToCelsius Skriv ett program som läser in tvåclass heltal, som representerar antal rader respektive antal kolumner, och skriver ut nedanstående mönster i static void main([] arg) kommandofönstret: import javax.swing.*; import java.util.*; class WriteStars System.out.printf("%15s%12s", "Fahrenheit", "Celsius\n"); static void main([] args) ********** = JOptionPane.showInputDialog("Ange antal rader och antal kolumner: "); ********** for (int fahrenheit = -10; fahrenheit <= 10; fahrenheit = fahrenheit + 1) Scanner sc = new Scanner(); ********** antal rader int nrofrows = sc.nextint(); ********** celsius = (fahrenheit -32) * 5.0 / 9.0; int nrofcolumns = sc.nextint(); ********** for (int row = 1; row <= nrofrows; row = row +1) System.out.printf("%12.1f%13.1f\n", () fahrenheit, celsius); for (int col = 1; col <= nrofcolumns; col = col +1) antal kolumner System.out.print("*"); System.out.println(); //main //main 1. Läs antal rader r och//fahrenheittocelsius antal kolumner k //WriteStars 2. För varje rad 2.1. För varje kolumn 2.1.1. Skriv ut tecknet '*' 2.2. Skriv ut radslut 19 20

Iteration: do-satsen Exempel: Inläsningskontroll I en -satsen beräknas testuttrycket inför varje varv i loopen. class InspectInput static void main ([] arg) int number; do = JOptionPane.showInputDialog("Ange ett tal mellan 1 och 200:"); number = Integer.parseInt(); if (number < 1 number > 200) "Ogiltigt tal! Försök igen!"); (number <1 number > 200); "Det accepterade talet är " + number); //main //InspectInput I en do-satsen beräknas testuttrycket efter varje varv i loopen. En do-sats genomlöps minst en gång, medan en -sats kan genomlöpas noll gånger Upprepning av class InspectInput en sats: Satser som kör i static void main ([] arg) do do--satsen int number; (villkor); true do evaluera Upprepning av ett programblock: villkor =dojoptionpane.showinputdialog("ange ett tal mellan 1 och 200:"); false static void main ([] arg) satser number = Integer.parseInt(); Satser som (villkor); kör efter intdo--satsen number; if (number < 1 number > 200) "Ogiltigt tal! Försök igen!"); 21 (number <1 number > 200); "Det accepterade talet är " + number); //main //InspectInput Variablers räckvidd (scope) Evighetsloop och satsen break Konstruktionen En variabels räckvidd är det kodavsnitt inom vilket variabeln går att använda. (true) "Det accepterade talet är " + number); En variabel är synlig endast inom det programblock där satser variabeln deklarerats. //main number och innebär en evighetsloop. evighetsloop Grundprincip: static void main ([] arg) int number; 22 En evighetsloop uppkommer vanligtvis på grund av ett misstag hos programmeraren, men kan ibland vara avsiktlig. kända här! En loop kan när som helst lämnas med hjälp av satsen break: (villkor) Att lämna en loop via en break-sats, skall användas mycket restriktivt!!! if (villkor för att sluta) do = JOptionPane.showInputDialog("Ange ett tal mellan 1 och 200:"); number = Integer.parseInt(); if (number < 1 number > 200) "Ogiltigt tal! Försök igen!"); (number <1 number > 200); "Det accepterade talet är " + number); //main break; Varför??? Observera att vid nästlade loopar lämnas den loop i vilken break-satsen står! okänd här! En variabels räckvidd skall begränsas så mycket som möjligt. 23 (villkor) (villkor) if (villkor för att sluta) break; 24

Upprepad programkörning Upprepad programkörning Ett vanligt sätt att åstadkomma Tydligare än att använda en upprepad programkörning är en evighetsloop som avbryts via en class RepeatedExecution break-sats. static void main ([] arg) (true) = JOptionPane.showInputDialog("Ange cylinderns radie och höjd:"); if ( == null) break; Cancel-knappen Scanner sc = new Scanner(); returnerar null radius = sc.nextdouble(); height = sc.nextdouble(); volume = Math.PI * Math.pow(radius, 2) * height; output =.format("%s %.2f", "Volymen av cylindern är", volume); output); // //main //RepeatedExecution evighetsloop, som avbryts med break!! class RepeatedExecution static void main ([] arg) boolean done = false; (!done) = JOptionPane.showInputDialog("Ange cylinderns radie och höjd:"); if ( == null) done = true; Scanner sc = new Scanner(); radius = sc.nextdouble(); height = sc.nextdouble(); volume = Math.PI * Math.pow(radius, 2) * height; output =.format("%s %.2f", "Volymen av cylindern är", volume); output); // //main //RepeatedExecution Tydligare Ett vanligtän sätt attatt använda åstadkomma en upprepad programkörning evighetsloop, som avbryts med är en evighetsloop som avbryts via en break!! break-sats. class RepeatedExecution static void main ([] arg) (true) boolean done = false; (!done) = JOptionPane.showInputDialog("Ange cylinderns radie och höjd:"); if ( == null) = JOptionPane.showInputDialog("Ange cylinderns radie och höjd:"); if ( break;== null) 26 Scanner done =sctrue; = new Scanner(); 25 radius = sc.nextdouble(); Scanner height sc ==new sc.nextdouble(); Scanner(); volume radius= =Math.PI sc.nextdouble(); * Math.pow(radius, 2) * height; output height.format("%s = sc.nextdouble();%.2f", "Volymen av cylindern är", volume); for-, eller= do-satsen? volume = Math.PI * Math.pow(radius, output); 2) * height; -satsen är mest generella iterationssatsen, eftersom for- och do-satsen enkelt program som läser en indataserie bestående av N positiva heltal samt // output =.format("%s %.2f", "VolymenSkriv avettcylindern är", volume); kan simuleras med en -sats. beräknar och skriver ut medelvärdet av dessa tal. //main output); for (initiering; villkor; ändring) Räkneloop do //RepeatedExecution Indata: Antalet tal i dataserien samt själva dataserien. (villkor); // Utdata: Medelvärdet av talen i dataserien. initiering; //main (villor) Speciella åtgärder: Om inga tal ingår i dataserien kan inte medelvärdet beräknas. //RepeatedExecution (villor) ändring; Utkast till algoritm: använd for-satsen vid räkneloopar använd do-satsen om loopen skall gå minst ett varv använd -satsen i alla övriga fall 1. 2. 3. 4. är du osäker på vilken iterationssats som skall väljas, välj -satsen 27 Läs in antalet heltal som ingår i dataserien till variabeln antal. Läs talen och beräkna talens sammanlagda summa i variabeln summa. Beräkna medelvärdet medel mha formeln medel = summa / antal. Skriv ut medelvärdet, dvs värdet av variabeln medel. 28

Med användning av en for-sats Mer detaljerad algoritm: class AddValues static void main([] arg) = JOptionPane.showInputDialog("Ange antalet tal i serien:"); int number = Integer.parseInt(); for (int i = 1; i <= number; i = i + 1) = JOptionPane.showInputDialog("Ange tal nr " + i + ": "); int value = Integer.parseInt(); sum = sum + value; if (number > 0) mean = () sum / () number; "Medelvärdet av talen är "+ mean); "Inga tal ingick i serien!"); //main //AddValues 1. Läs in antalet heltal som ingår i dataserien till variabeln antal. 2. Sätt summa till 0. 3. Upprepa antal gånger import javax.swing.joptionpane; 3.2. Addera summa och tal ochclass spara resultatet i summa. AddValues2 4. Om antal > 0 så class AddValues static void main([] arg) 4.1. Beräkna medelvärdet medel mha formeln static main([] arg) void = JOptionPane.showInputDialog("Ange antalet tal i serien:"); medel = summa / antal = JOptionPane.showInputDialog("Ange antalet tal i serien:"); 4.2. Skriv ut medelvärdet int medel number = Integer.parseInt(); int number annars sum = 0;= Integer.parseInt(); 4.3. Skriv ut att inga värden ingick int sum i =i dataserien. 0;= 0; Datarepresentation: for (int(i i<=number) 1; i <= number; i = i + 1) antal, summa och tal är heltal av typen int. i = i +=1;JOptionPane.showInputDialog("Ange tal nr " + i + ": "); medel är ett reellt tal av typen. int value = Integer.parseInt(); = JOptionPane.showInputDialog("Ange tal nr " + i + ": "); 29 30 sumvalue = sum + value; int = Integer.parseInt(); sum = sum + value; if (number > 0) mean if (number > 0) = () sum / () number; Med användning av en -sats av talen är "+ mean); mean = () sum / () "Medelvärdet number; class AddValues2 "Medelvärdet av talen är "+ mean); static void main([] arg) = JOptionPane.showInputDialog("Ange antalet tal i serien:"); Skriv ett program som läsa och beräkna medelvärdet av ett okänt antal int number = Integer.parseInt(); "Inga tal ingick i serien!"); positiva heltal. Serien av heltalen avslutas med ett negativt heltal (vilket int i = 0; "Inga tal inte ingick ingår i serien). i serien!"); (i < number) i = i + 1; //main = JOptionPane.showInputDialog("Ange tal nr " + i + ": "); int value = Integer.parseInt(); //AddValues sum = sum +//main value; Indata: Talen i dataserien som skall läsas in, samt ett negativt tal som if (number//addvalues2 > 0) avbryter inläsningen. 3.1. Läs ett tal till variabeln tal. mean = () sum / () number; "Medelvärdet av talen är "+ mean); Utdata: Medelvärdet av talen som ingår i dataserien. "Inga tal ingick i serien!"); //main //AddValues2 Speciella åtgärder: Om inga tal ingår i dataserien kan inte medelvärdet beräknas. 31 32

1. Sätt summa till 0 och antal till 0. 2. Läs ett tal till variabeln tal. 3. Upprepa så länge som tal 0 3.1. Öka antal med 1. 3.2. Addera summa och tal och spara resultatet i summa. 3.3. Läs ett tal till variabeln tal. 4. Om antal > 0 så 4.1. Beräkna medelvärdet medel mha formeln medel = summa/antal 4.2. Skriv ut medelvärdet medel annars 4.3. Skriv ut att inga värden ingick i dataserien. class AddValues3 static void main([] arg) int number = 0; = JOptionPane.showInputDialog("Ange tal nr " + (number+1) + ":"); int value = Integer.parseInt(); duplicerad (value > 0) kod number = number + 1; sum = sum + value; = JOptionPane.showInputDialog("Ange tal nr " + (number + 1) + ": "); value = Integer.parseInt(); if (number > 0) mean = () sum / () number; "Medelvärdet av talen är "+ mean); "Inga tal ingick i serien!"); //main //AddValues3 class AddValues3 static void main([] arg) int number = 0; = JOptionPane.showInputDialog("Ange tal nr " + (number+1) + ":"); Datarepresentation: int value = Integer.parseInt(); antal, summa och tal är heltal av typen int. (value > 0) number = number + 1; 33 sum = sum + value; = JOptionPane.showInputDialog("Ange tal nr " + (number + 1) + ": "); value = Integer.parseInt(); if (number > 0) mean = () sum / () number; 1. Sätt summa till 0 och antal till 0. Skriv ett program som läsa och beräkna medelvärdet av ett okänt antal heltal. Upprepa "Medelvärdet2.av talen är "+ mean); 2.1. Gör en inläsning från dialogfönstret till variabeln indata. 2.2. Om indata == null gå till punkt 3. 2.3. Öka antal med 1. Diskussion: Nu kan alla heltal ingå i dataserien och hur skall vi då kunna 2.4. Konvertera indata till heltalet tal. markera slutet på serien? Ett sätt är att utnyttja Cancel-knappen Addera summa och tal och spara resultatet i summa. i dialogrutan. När man trycker på Cancel returneras värdet "Inga tal ingick 2.5. i serien!"); 3. Om antal > 0 så null. 3.1. Beräkna medelvärdet medel med hjälp av formeln medel = summa/antal Indata: Talen i dataserien som skall läsas in. Inläsningen avbryts genom att //main 3.2. Skriv ut medelvärdet medel trycka på Cancel-knappen i dialogrutan. //AddValues3 annars 34 3.3. Skriv ut att inga värden ingick i dataserien. Utdata: Medelvärdet av talen som ingår i dataserien. Datarepresentation: Speciella åtgärder: Om inga tal ingår i dataserien kan inte medelvärdet beräknas. antal, summa och tal är heltal av typen int. medel är ett reellt tal av typen. 35 36

class AddValues4 static void main( [] arg) int number = 0; boolean done = false; (!done) = JOptionPane.showInputDialog("Ange nästa tal i serien\n" + "Avsluta ned Cancel"); if ( == null) done = true; int value = Integer.parseInt(); number = number + 1; sum = sum + value; if (number > 0) mean = () sum / () number; "Medelvärdet av talen är "+ mean); "Inga tal ingick i serien!"); //main //AddValues4 class AddValues5 static void main( [] arg) int number = 0; boolean done = false; (!done) = JOptionPane.showInputDialog("Ange talen. Avsluta med Cancel!"); if ( == null) done = true; Scanner sc = new Scanner(); (sc.hasnext()) int value = sc.nextint(); number = number + 1; sum = sum + value; if (number > 0) mean = () sum / () number; "Medelvärdet av talen är "+ mean); "Inga tal ingick i serien!"); //main //AddValues5 importjava.util.scanner; javax.swing.joptionpane; import class class AddValues4 AddValues5 static void main( [] static void main( [] arg) arg) intint number = 0;= 0; number intint sumsum = 0;= 0; boolean done = false; boolean done = false; (!done) (!done) = JOptionPane.showInputDialog("Ange talen. Avsluta med Cancel!"); = JOptionPane.showInputDialog("Ange nästa tal i serien\n" + if ( == null) "Avsluta ned Cancel"); done = true; if ( == null) done sc = true; Scanner = new Scanner(); 37 (sc.hasnext()) intvalue value==sc.nextint(); Integer.parseInt(); int number==number number+ + number 1; 1; sum==sum sum+ +value; value; sum if (number > 0) if (number 0) = () sum / () number; > mean mean = () sum / () number; "Medelvärdet av talen är "+ mean); "Medelvärdet av talen är "+ mean); "Inga tal ingick i serien!"); "Inga tal ingick i serien!"); //main //main //AddValues4 //AddValues5 38