HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE - PowerPoint PPT Presentation

slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE PowerPoint Presentation
Download Presentation
HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE

play fullscreen
1 / 79
HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE
158 Views
Download Presentation
plato-slater
Download Presentation

HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE • Vervolg discussie omtrent gestructureerd programmeren • Introductie van de overblijvende controlestructuren

  2. 5.2.     ESSENTIE VAN DE HERHALING GECONTROLEERD DOOR EEN TELLER • Voor een herhaling met een teller zijn nodig: • naam van een controlevariabele (de teller) • initiële waarde van de controlevariabele • increment/decrement van de controlevariabele • elke keer de lus doorlopen wordt • conditie, die test op de eindwaarde van de controlevariabele

  3. VOORBEELD • WhileCounter.java • is een programma (applet), dat een waaier van 10 lijnen gaat tekenen • gebruikt een while- herhalingsstructuur • gebruikt een teller om de herhaling bij te houden

  4. 1 // Fig. 5.1: WhileCounter.java 2 // Herhaling gecontroleerd door een teller 3 4 // Java core packages 5 import java.awt.Graphics; 6 7 // Java extension packages 8 import javax.swing.JApplet; 9 10 public class WhileCounter extends JApplet 11 { 12 // trek lijnen op de achtergrond van de applet lines on applet 13 public void paint( Graphics g ) 14 { 15 // roep de overgeërfde versie van de methode paint op 16 super.paint( g ); 17 18 int counter = 1;// initialisatie 19 20 while ( counter <= 10 )// conditie van de herhaling 21 { 22 g.drawLine( 10, 10, 250, counter * 10 ); 23 ++counter; // increment 24 }// einde while structuur 25 26 } // einde methode paint 27 28 } // einde klasse WhileCounter

  5. 18 int counter = 1;// initialisatie 19 20 while ( counter <= 10 )// conditie van de herhaling 21 { 22 g.drawLine( 10, 10, 250, counter * 10 ); 23 ++counter;// increment 24 }// einde while structuur • Lijn 18 • Naam van de controlevariabele is counter. • Initiële waarde van de controlevariabele is 1. • Lijn 20 • Conditionele test op de eindwaarde van counter. • Lijn 23 • Increment van de controlevariabele counter.

  6. 5.3.     DE “FOR” HERHALINGSSTRUCTUUR • for (expressie1;expressie2;expressie3 )statement • hanteert alle details van de herhalingsstructuur met teller

  7. VOORBEELD • ForCounter.java • is een programma (applet), dat een waaier van 10 lijnen gaat tekenen. • gebruikt een for-herhalingsstructuur.

  8. 1 // Fig. 5.2: ForCounter.java 2 // Herhaling gecontroleerd door een teller via een for-structuur 3 4 // Java core packages 5 import java.awt.Graphics; 6 7 // Java extension packages 8 import javax.swing.JApplet; 9 10 public class ForCounter extends JApplet 11 { 12 // teken lijnen op de achtergrond van de applet 13 public void paint( Graphics g ) 14 { 15 // roep de overgeërfde versie van de methode paint op 16 super.paint( g ); 17 18 // Initialisatie, herhalingsconditie and incrementeren 19 // zijn allemaal inbegrepen in de hoofding van de for structuur. 20 for ( int counter = 1; counter <= 10; counter++ ) 21 g.drawLine( 10, 10, 250, counter * 10 ); 22 23 } // einde methode paint 24 25 } // einde klasse ForCounter

  9. 18 // Initialisatie, herhalingsconditie and incrementeren 19 // zijn allemaal inbegrepen in de hoofding van de for structuur. 20 for ( int counter = 1; counter <= 10; counter++ ) 21 g.drawLine( 10, 10, 250, counter * 10 ); • Lijn 20 int counter = 1 • Naam van de controlevariabele is counter. • Initiële waarde van de controlevariabele is 1. • counter <= 10 • Conditionele test op de eindwaarde van counter. • counter++ • Increment van de controlevariabele counter.

  10. REGEL 20 UIT FORCOUNTER.JAVA Naam van de Eindwaarde van de for controlevariabele controlevariabele sleutelwoord for ( int counter = 1 ; counter <= 10 ; counter++ ) Beginwaarde Increment van de controlevariabele van de controlevariabele Conditie voor vervolg van de lus Fig. 5.3 Componenten van een typische hoofding van een “for” structuur.

  11. 5.3.     DE “FOR” HERHALINGSSTRUCTUUR (VERVOLG) for (expressie1;expressie2;expressie3 )statement kan herschreven worden als: { expressie1; while (expressie2 ) {statementexpressie3; } }

  12. FLOWCHART VAN EEN TYPISCHE “FOR” HERHALINGSSTRUCTUUR Fig. 5.4 Flowchart van een typische “for” herhalingsstructuur. Stel de counter <- 1 beginwaarde van de controle- variabele vast true g.drawLine( counter<- counter + 1 Bepaal of counter <= 10 10, 10, 250, de eindwaarde counter * 10 Incrementeer van de controle- ); de controle- variabele bereikt is. false “body” van de lus variabele. (dit kunnen meerdere Statements zijn)

  13. 5.4.     VOORBEELDEN DIE GEBRUIK MAKEN VAN DE “FOR” HERHALINGSSTRUCTUUR • Variërende controlevariabele in de for structuur • De controlevariabele varieert van 1 tot 100, • toenemend in stappen van 1 • for ( int i = 1; i <= 100; i++ ) • De controlevariabele varieert van 100 tot 1, • afnemend in stappen van –1 • for ( int i = 100; i >= 1; i-- ) • De controlevariabele varieert van 7 tot 77 in stappen van 7 • for ( int i = 7; i <= 77; i += 7 )

  14. VOORBEELD 1 • Sum.java • de som van de even gehele getallen van 2 t.e.m. 100 wordt weergegeven op het scherm. • gebruikt een for-herhalingsstructuur in stappen van 2.

  15. 1 // Fig. 5.5: Sum.java 2 // Herhaling gecontroleerd door een teller met de “for” structuur 3 4 // Java extension packages 5 import javax.swing.JOptionPane; 6 7 public class Sum 8 { 9 // de uitvoering van de Java applicatie begint bij de main method 10 public static void main( String args[] ) 11 { 12 int total = 0; 13 14 // sommeer de even gehele getallen van 2 tot en met 100 15 for ( int number = 2; number <= 100; number += 2 ) 16 total += number; 17 18 // toon het resultaat 19 JOptionPane.showMessageDialog( null, "The sum is " + total, 20"Sum Even Integers from 2 to 100", 21 JOptionPane.INFORMATION_MESSAGE ); 22 23 System.exit( 0); // beëindig de applicatie 24 25 } // einde methode main 26 27 } // einde klasse Sum

  16. 12 int total = 0; 13 14 // sommeer de even gehele getallen van 2 tot en met 100 15 for ( int number = 2; number <= 100; number += 2 ) 16 total += number; 17 18 // toon het resultaat 19 JOptionPane.showMessageDialog( null, "The sum is " + total, 20"Sum Even Integers from 2 to 100", 21 JOptionPane.INFORMATION_MESSAGE ); • Lijn 15 • number += 2 • incrementeer number met 2 bij elke iteratie

  17. VOORBEELD 2 • Interest.java • is een programma dat de samengestelde intrest berekent • a = p(1 + r)n • p = kapitaal (in ons vb. $1000) • r= jaarlijkse intrest (in ons vb. 5%) • n = aantal jaren • a = kapitaalna n jaar • Het kapitaal MET de samengestelde intrest wordt voor de eerste 10 jaar weergegeven. • gebruikt een for-herhalingsstructuur.

  18. 1 // Fig. 5.6: Interest.java 2 // Berekening van samengestelde interest 3 4 // Java core packages 5 import java.text. NumberFormat ; 6 import java.util.Locale; 7 8 // Java extension packages 9 import javax .swing. JOptionPane ; Interest.java 10 import javax .swing. JTextArea ; 11 12 public class Interest 13 { 14 // de uitvoering van de Java applicatie begint bij de main methode 15 public static void main( String args [] ) 16 { 17 double amount, principal = 1000.0 , rate = 0.05 ; 18 19 // creëer NumberFormat om floating point getallen 20 // met twee cijfers rechts van de decimale punt te formatteren 21 NumberFormat moneyFormat = 22 NumberFormat . getCurrencyInstance ( Locale. US ); 23 24 // creëer JtextArea om de uitvoer te laten zien 25 JTextArea outputTextArea = new JTextArea (); 26 27 // plaats de eerste lijn tekst in outputTextArea 28 outputTextArea . setText ( "Year \ tAmount on deposit \ n" ); 29 30 // bereken het bedrag in deposito voor elk van de tien jaren 31 for ( int year = 1 ; year <= 10 ; year++ ) 32{ 33 // bereken nieuw bedrag voor een specifiek jaar 34 amount = principal * Math. pow ( 1.0 + rate, year ); 35

  19. 36 // voeg één lijn tekst toe aan outputTextArea 37 outputTextArea .append( year + " \ t" + 38 moneyFormat .format( amount ) + " \ n" ); 39 40 } // einde for structuur 41 42 // toon het resultaat 43 JOptionPane . showMessageDialog ( null , outputTextArea , 44 "Compound Interest" , JOptionPane . INFORMATION_MESSAGE ); 45 46 System.exit( 0 ); // beëindig de applicatie 47 48 } // einde methode main 49 50 } // einde klasse Interest Interest.java vervolg code + uitvoer

  20. 12 public class Interest 13 { 14 // de uitvoering van de Java applicatie begint bij de main methode 15 public static void main( String args[] ) 16 { 17 double amount, principal = 1000.0, rate = 0.05; 18 • Lijn 17 • Java stockeert floating-point getallen in variabelen van het type double (of float)

  21. 19 // creëer NumberFormat om floating point getallen 20 // met twee cijfers rechts van de decimale punt te formatteren 21 NumberFormat moneyFormat = 22 NumberFormat.getCurrencyInstance( Locale.US ); 23 24 // creëer JtextArea om de uitvoer te laten zien 25 JTextArea outputTextArea = new JTextArea(); 26 27 // plaats de eerste lijn tekst in outputTextArea 28 outputTextArea.setText( "Year\tAmount on deposit\n" ); 29 • Lijn 21 • NumberFormat kan numerieke waarden als een valuta formatteren • Lijn 22: Locale.US • Toont geldbedragen met een dollarteken ($)

  22. 30 // bereken het bedrag in deposito voor elk van de tien jaren 31 for ( int year = 1; year <= 10; year++ ) 32 { 33 // bereken nieuw bedrag voor een specifiek jaar 34 amount = principal * Math.pow( 1.0 + rate, year ); 35 36 // voeg één lijn tekst toe aan outputTextArea 37 outputTextArea.append( year + "\t" + 38 moneyFormat.format( amount ) + "\n" ); 39 40 }// einde for structuur • Lijn 31-40 • Bereken amount (kapitaal) met een for structuur • amount = a = p(1 + r)n • Lijn 34 • Math.pow(1.0 + rate, year) • (1.0 + rate)year

  23. 41 42 // toon het resultaat 43 JOptionPane.showMessageDialog( null, outputTextArea, 44 "Compound Interest", JOptionPane.INFORMATION_MESSAGE ); 45 46 System.exit( 0 ); // beëindig de applicatie 47 48 } // einde methode main 49 50 } // einde klasse Interest

  24. 5.5.     DE “DO/WHILE” HERHALINGSSTRUCTUUR • do statement while (voorwaarde); • lijkt op de while structuur, MAAR test of de lus verder doorlopen moet worden • NADAT de body van de loop uitgevoerd is • dit betekent dat de lus altijd MINSTENS EENMAAL doorlopen wordt • Het statement wordt herhaald zolang de voorwaarde WAARblijft! • Zorg ervoor dat de voorwaarde beïnvloed wordt in het statement, anders oneindige lus!

  25. VOORBEELD • DoWhileControle.java • Er wordt gevraagd om een positief geheel getal, verschillend van nul in te voeren; de invoer wordt vervolgens gecontroleerd; indien deze niet voldoet, wordt een nieuwe waarde aan de gebruiker gevraagd. • Is de invoer in orde, dan wordt dit getal in een dialoogvenster getoond.

  26. // Dit voorbeeld staat niet in het boek!!! • 2 // Using the do/while repetition structure. • 3 • 4 // Java core packages • 5 import java.awt.Graphics; • 6 • 7 // Java extension packages • 8 import javax.swing.*; • 9 • 10 public class DoWhileControle • 11 { • 12 public static void main( String[] args ) • 13 { • 14 int getal; • 15 String input; • 16 • 17 do • 18 { • 19 input = JOptionPane.showInputDialog(“Geef een positief • 20 geheel getal,verschillend van nul in : “); • 21 getal = Integer.parseInt(input); • 22 } • 23 while ( getal <= 0 ); // einde do/while structuur • 24 JOptionPane.showMessageDialog(null,”Het ingevoerde getal = “ + getal); • System.exit(0); • } // einde methode main • } // einde klasse DoWhileControle

  27. do 18 { 19 input = JOptionPane.showInputDialog(“Geef een positief 20 geheel getal,verschillend van nul in : “); 21 getal = Integer.parseInt(input); 22 } 23 while ( getal <= 0 ); // einde do/while structuur • Lijn 19-23 • Een getal wordt ingevoerd en vervolgens wordt er getest op de waarde van getal. • Voldoet de waarde van getal niet, dan krijgt de gebruiker een tweede kans om een getal in te voeren. • Enz..., tot het ingevoerde getal voldoet aan de gestelde vraag. • Merk op: de lus wordt niet verlaten, zolang het ingevoerde getal niet voldoet!

  28. FLOWCHART VAN DE “DO/WHILE” HERHALINGSSTRUCTUUR actie(s) true conditie false Fig. 5.10 Flowchart van de do/while herhalingsstructuur.

  29. 5.6.     DE “SWITCH” MEERVOUDIGE SELECTIESTRUCTUUR • switchstructuur • wordt gebruikt voor meervoudige selecties: • switch (var) • { • case label1: statement1 • break; • case label2: statement2 • break; • default: statement3 • [ break;] • }

  30. VOORBEELD • SwitchTest.java (= applet) • de gebruiker geeft een getal in • 1 = een waaier van 10 lijnen tekenen • 2 = 10 vierkanten tekenen • 3 = 10 cirkels tekenen •  1, 2 en 3 = de tekst "Invalid value entered“wordt weergegeven.

  31. 1 // Fig. 5.7: SwitchTest.java 2 // Lijnen, rechthoeken of ovalen tekenen op basis van de input van de gebruiker. 3 4 // Java core packages 5 import java.awt.Graphics; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class SwitchTest extends JApplet 11 { private int choice;// keuze van de gebruiker welke vorm getekend moet worden 12 13 // initialiseeer de applet door de keuze van de gebruiker te verkrijgen 14 public void init() 15 { 16 String input; // input van de gebruiker 17 18 // verkrijg de keuze van de gebruiker 19 input = JOptionPane.showInputDialog( 20 "Enter 1 to draw lines\n"+ 21 "Enter 2 to draw rectangles\n"+ 22 "Enter 3 to draw ovals\n"); 23 24 // converteer de input van de gebruiker naar een int 25 choice = Integer.parseInt( input ); 26 } Verkrijg input van de gebruiker

  32. 28 // teken vormen op de achtergrond van de applet 29 public void paint( Graphics g ) 30 { 31 // roep de overgeërfde versie van de methode paint op 32 super.paint( g ); 33 34 //bepaal de te tekenen vorm op basis van de keuze van de gebruiker 35 36 switch ( choice ) 37 { 38 case1: 39 for ( int i = 0; i < 10; i++ )g.drawLine( 10, 10, 250, 10 + i * 10 ); 40 break; // gedaan met dit geval te verwerken 41 42 case2: 43 for ( int i = 0; i < 10; i++ ) 44 g.drawRect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); 45 break; // gedaan met dit geval te verwerken 46 47 case3: 48 for ( int i = 0; i < 10; i++ ) 49 g.drawOval( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 ); 50 break; // gedaan met dit geval te verwerken 51 52 default: 53 g.drawString( "Invalid value entered", 54 10, 20 + i * 15 ); 55 56 }// einde switch structuur 57 58 }// einde for structuur 59 60 }// einde paint methode 61 62 }// einde klasse SwitchTest

  33. SWITCHTEST.JAVA: OUTPUT

  34. 36 switch ( choice ) 37 { 38 case 1: 39 for ( int i = 0; i < 10; i++ )g.drawLine( 10, 10, 250, 10 + i * 10 ); 40 break; 41 42 case 2: 43 for ( int i = 0; i < 10; i++ ) 44 g.drawRect( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 ); 45 break; // gedaan met dit geval te verwerken 46 47 case 3: 48 for ( int i = 0; i < 10; i++ ) 49 g.drawOval( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 ); 50 break; // gedaan met dit geval te verwerken 51 52 default: 53 g.drawString( "Invalid value entered", 54 10, 20 + i * 15 ); 55 56 }// einde switch structuur input van de gebruiker (choice) is de controlerende expressie defaultcase voor ongeldige ingaven • Lijn 36 • de switch structuur bepaalt welk case label uitgevoerd moet worden, wat afhangt van de controlerendeexpressie.

  35. FLOWCHART VAN DE “SWITCH” MEERVOUDIGE SELECTIESTRUCTUUR true case a actie(s) case a break false true break case b case b actie(s) false true case z actie(s) case z break false default actie(s) Fig. 5.8 De switch meervoudige selectiestructuur.

  36. Zet de volgende geneste if-structuren om in een switch – case-structuur • int i, k; • // invoer van een waarde voor i • if (i == 1) k = 3; • else if (i == 2) k = 6; • else if ( i == 3 || i == 4) k = 10; • else k = 20; • } • int x, y = 0; • // invoer van een waarde voor x • if (x == 100 || x == 150 || x == 170 || x == 199) y++;

  37. OPLOSSINGEN • int i, k; • // invoer van een waarde voor i • switch (i) • { case 1 : k = 3; break; • case 2 : k = 6; break; • case 3 : case 4 : k = 10; break; • default : k = 20; • }

  38. OPLOSSINGEN • int x, y = 0; • // invoer van een waarde voor x • switch (x) • { • case 100 : case 150 : case 170 : • case 199 : y++; • }

  39. 5.7.     STATEMENTS “BREAK” EN “CONTINUE” • break/continue • veranderen de stroom van de controle • break statement • veroorzaakt een onmiddellijke exit uit de controlestructuur • wordt gebruikt in while, for, do/while en switch statements • continue statement • slaat de resterende statements in de body van de lus over • gaat verder naar de volgende iteratie • wordt gebruikt in while, for en do/while statements

  40. Voorbeeld met break statement 1 // Fig. 5.11: BreakTest .java 2 // Gebruik van het break statement in een for structuur 3 4 // Java extension packages 5 import javax .swing. JOptionPane ; 6 BreakTest.java 7 public class BreakTest 8 { 9 // de uitvoering van de Java applicatie begint bij de main methode 10 public static void main( String args [] ) 11 { 12 String output = "" ; 13 int count; 14 15 // herhaal 10 keer 16 for ( count = 1 ; count <= 10 ; count++ ) 17{ 18 // als count gelijk is aan 5, beëindig dan de lus 19 if ( count == 5 ) 20 break ; // onderbreek de lus enkel als count == 5 21 22 output += count + " " ; 23 24 } // einde for structuur 25 26 output += " \ nBroke out of loop at count = " + count; 27 JOptionPane . showMessageDialog ( null , output ); 28 29 System.exit( 0 ); // beëindig de applicatie 30 31 } // einde methode main 32 33 } // einde klasse BreakTest

  41. 16 for ( count = 1; count <= 10; count++ ) 17 { 18 // als count gelijk is aan 5, beëindig dan de lus 19 if ( count == 5 ) 20 break;// onderbreek de lus enkel als count == 5 21 22 output += count + " "; 23 24 } // einde for structuur • Lijn 16 • Herhaal 10 keer • Lijn 20 • ga uit de for structuur (break) wanneer count gelijk is aan 5

  42. Voorbeeld met continue statement 1 // Fig. 5.12: ContinueTest .java 2 // Gebruik van het continue statement in een for structuur 3 4 // Java extension packages 5 import javax .swing. JOptionPane ; 6 7 public class ContinueTest ContinueTest.java 8{ 9 // de uitvoering van de Java applicatie begint bij de main methode 10 public static void main( String args [] ) 11 { 12 String output = "" ; 13 14 // herhaal 10 keer 15 for ( int count = 1 ; count <= 10 ; count++ ) 16{ 17 // als count 5 is, ga verder met de volgende iteratie van de lus 18 if ( count == 5 ) 19 continue ; // sla de overblijvende code in de lus over 20 // enkel als count == 5 21 22 output += count + " " ; 23 24 } // einde for structuur 25 26 output += " \ nUsed continue to skip printing 5" ; 27 JOptionPane . showMessageDialog ( null , output ); 28 29 System.exit( 0 ); // beëindig de applicatie 30 31 } // einde methode main 32 33 } // einde klasse ContinueTest

  43. 15 for ( int count = 1; count <= 10; count++ ) 16 { 17 // als count 5 is, ga verder met de volgende iteratie van de lus 18 if ( count == 5 ) 19 continue;// sla de overblijvende code 20 // in de lus over enkel als count == 5 21 22 output += count +" "; 23 24 } // einde for structuur • Lijn 15 • Herhaal 10 keer • Lijn 19 • Sla lijn 22 over en ga verder naar lijn 15 als count5 is

  44. 5.8.     LOGISCHE OPERATOREN • Logische operatoren • zorgen ervoor dat complexere condities gevormd kunnen worden • combineren eenvoudige condities • Logische operatoren in Java • && (conditionele EN) • & (logische EN) • || (conditionele OF) • | (logische inclusieve OF) • ^ (logische exclusieve OF) • ! (logische NIET)

  45. WAARHEIDSTABEL CONDITIONELE EN (&&)

  46. WAARHEIDSTABEL CONDITIONELE OF (||)

  47. WAARHEIDSTABEL LOGISCHE EXCLUSIEVE OF (^)

  48. WAARHEIDSTABEL LOGISCHE EXCLUSIEVE OF (^) Deze operator heeft geen short-circuit evaluatie! Beide operands worden steeds geëvalueerd! Voorbeeld: Als x negatief is moet y positief zijn of omgekeerd, als y negatief is moet x positief zijn. if (x < 0 ^ y < 0) // (x < 0 en y >= 0) of // (y < 0 en x >= 0)

  49. WAARHEIDSTABEL LOGISCHE NIET (!)

  50. Short-circuit-operatoren • De logische AND (&) en de logische inclusieve OR (|) werken op dezelfde manier als de conditionele AND (&&) en de conditionele OF (||), mits één uitzondering: het zijn GEEN short-circuit-operatoren • de logische operatoren & en | evalueren steeds de beide operands • Voorbeelden: • geslacht == 1 & leeftijd >= 65 • verjaardag == true | ++ leeftijd >= 65