CONTROLESTRUCTUREN (DEEL 1)

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 26 januari Universiteit Leiden.
Advertisements


PSD Basisstructuren programmeren.
PSD Basisstructuren programmeren.

Programmeren met Alice
Hoofdstuk 8 Regels Ontdekken Sebnem YAPAR.
Gestructureerd programmeren in C
Practica Computerlinguistiek Tekst en uitleg:
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
VBA en VBS Een introductie.
Conditionele expressie

Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Elke 7 seconden een nieuw getal
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Numerieke Natuurkunde
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
SWI cursus: ‘Inleiding programmeren in Java’
Oefeningen Hoofdstuk 3.
Visual Basic.
Inkomen les t/m 75 plus Zelftest Kennisvragen.
Talstelsels, rekenen en rekenschakelingen
Algoritmiek Object-georiënteerd Programmeren
Algoritmiek Dataweergave en bewerking Hoorcollege 2 - Ma. 11 sept L.M. Bosveld-de Smet.
6.1 Inleiding HOOFDSTUK 6 METHODEN
Hoofdstuk 3: Inleiding tot Java Applets
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Chris Pollentier 18 / 12 / 2002 De LOGO taalwereld.
Hoofdstuk 9 havo KWADRATEN EN LETTERS
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Tircms02-p les 4 Preprocessor In- en uitvoer Diversen.
Het kwadraat van een getal
Inleiding tot programmeren
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
CONTROLESTRUCTUREN (DEEL 1)
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Hoofdstuk 3 - Conditionele logica
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
JAVA: een platformonafhankelijke taal
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Welkom! maandag 16 November 2015 Les B-2.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Loops en errors Array's Random try catch for loop while loop do while loop.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Informatie beoordelen If else Switch En Wiskunde.
Robby de Robot. Javascript Tot nu toe gebruikt: – document.write(" Hello World "); – alert("tekst") – Toon een waarschuwingsvenster – prompt("tekst",
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Variabelen, declaraties en toekenningen
Gameprogrammeren: Expressies
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Software Development fundamentals
Python – For loop + strings
Transcript van de presentatie:

CONTROLESTRUCTUREN (DEEL 1) HOOFDSTUK 4 CONTROLESTRUCTUREN (DEEL 1) 4.1.     INTRODUCTIE Waarom controlestructuren? principe van gestructureerd programmeren controlestructuren helpen om objecten op te bouwen en ze te manipuleren (zie hoofdstuk 8)

Een algoritme Programmacontrole 4.2. ALGORITMEN is een procedure om problemen op te lossen in termen van de opdrachten die uitgevoerd moeten worden de volgorde waarin ze moeten uitgevoerd worden Programmacontrole is de volgorde specifiëren in dewelke de acties uitgevoerd moeten worden in een programma  controlestructuren helpen hierbij

Pseudocode is … 4.3. PSEUDOCODE een informele taal om algoritmen te ontwikkelen GEEN taal die uitgevoerd wordt door computers een taal die softwareontwikkelaars helpt bij het “uitdenken” van algoritmen meestal beperkt tot de uitvoerbare statements, geen declaraties

Sequentiële uitvoering 4.4.     CONTROLESTRUCTUREN Sequentiële uitvoering De statements in een programma worden één voor één uitgevoerd in de volgorde waarin ze geschreven zijn. Overdracht van de controle Drie controleopdrachten kunnen de volgorde specifiëren: sequentiestructuur selectiestructuur herhalingsstructuur Flowchart Grafische representatie van een algoritme Lijnen geven de volgorde aan waarin de acties worden uitgevoerd.

FLOWCHART VAN EEN SEQUENTIESTRUCTUUR Lijnen Actiesymbolen Connectiesymbolen add grade to total total = total + grade; add 1 to counter counter = counter + 1 ; Fig 4.1 Flowchart van een sequentiestrructuur in Java.

    JAVA SLEUTELWOORDEN

CONTROLESTRUCTUREN IN JAVA Java heeft een “ingebouwde” sequentiestructuur Java voorziet drie selectiestructuren if if/else switch-case Java voorziet drie herhalingsstructuren while do/while for Elk van deze woorden is een Java-sleutelwoord

4.5. DE “IF” SELECTIESTRUCTUUR if (voorwaarde) statement Het statement wordt alleen uitgevoerd als de voorwaarde WAAR is (true). Structuur met één ingang en één uitgang.

Voorbeeld in pseudocode: Als de student 60/100 of meer behaalt dan druk "Geslaagd!" Decisiesymbool true grade >= 60 print “Geslaagd” false Fig 4.3 Flowchart van de enkelvoudige selectiestructuur if

Voorbeeld in pseudocode: Als de student 60/100 of meer behaalt dan druk "Geslaagd!" JAVA: if ( punten >= 60 ) System.out.println("Geslaagd");

4.6. DE “IF/ELSE” SELECTIESTRUCTUUR if (voorwaarde) statement1 else statement2 Het statement1 wordt enkel uitgevoerd wanneer de voorwaarde WAAR (true) is. Het alternatieve statement, namelijk statement2 wordt enkel uitgevoerd wanneer de voorwaarde VALS (false) is.

Voorbeeld in pseudocode: Als de student 60/100 of meer behaalt dan druk "Geslaagd!" anders druk "Niet geslaagd!" false true grade >= 60 print “niet geslaagd” print “geslaagd” Fig 4.4 Flowchart van de dubbele selectiestructuur if/else.

Voorbeeld in pseudocode: Als de student 60/100 of meer behaalt dan druk "Geslaagd!" anders druk "Niet geslaagd!" JAVA: if ( punten >= 60 ) System.out.println("Geslaagd"); else System.out.println("Niet geslaagd");

DE RELATIONELE OPERATOREN Operator In Java > > groter dan < < kleiner dan  >= groter dan of gelijk aan  <= kleiner dan of gelijk aan = = = exact gelijk  != verschillend

WAAROM LOGISCHE OPERATOREN? In sommige situaties hebben we meer nodig dan alleen maar relationele operatoren. Denk maar aan volgende situatie: als de variabele temp gelegen is tussen 22 en 25 dan hebben we een ideale zomertemperatuur.   We doen dit met volgende test: temp >= 22 en temp <= 25 Om deze test te kunnen uitschrijven hebben we de logische en-operator nodig. In JAVA schrijven we de gecombineerde voorwaarde als volgt : (temp >= 22 && temp <= 25)

DE LOGISCHE OPERATOREN Logische operator In Java en && of || niet !

DE LOGISCHE EN-OPERATOR De logische en-operator werkt met twee operanden die false of true kunnen zijn. (temp >= 22 && temp <= 25) 1ste operand 2de operand Een voorwaarde met de en-operator && heeft als resultaat true als beide operanden true leveren. Als één van beide operanden false levert, of beide leveren false, dan levert de en-operator && ook false op.  

DE LOGISCHE OF-OPERATOR De logische of-operator werkt ook met twee operanden die false of true kunnen zijn. (temp == 20 || temp == 30) Als temp de waarde 20 heeft dan levert de gecombineerde voorwaarde true op. Als temp de waarde 30 heeft dan levert de gecombineerde voorwaarde true op. Maar als temp bv. de waarde 25 heeft, dan levert de voorwaarde false op, omdat beide operanden nu de waarde false hebben.  

DE LOGISCHE NIET-OPERATOR De logische niet-operator werkt met één operand die false of true kan zijn. (!(temp == 20 || temp == 30)) De niet-operator keert de waarheidswaarde om: true wordt false en false wordt true. Als temp de waarde 20 of de waarde 30 heeft, dan levert de voorwaarde false op. In de andere gevallen levert de voorwaarde true op.  

DE CONDITIONELE OPERATOR In de conditionele operator komt altijd een vraagteken (?) en een dubbel punt (:) voor. voorwaarde ? expressie1 : expressie2  Indien de voorwaarde waar is wordt expressie1 uitgevoerd.  Indien de voorwaarde niet waar is wordt expressie2 uitgevoerd.

DE CONDITIONELE OPERATOR Voorbeeld: if (a < b) z = a + 1; else z = b – 1; is equivalent met z = ( a < b ? a + 1 : b - 1);  

DE CONDITIONELE OPERATOR Voorbeeld: if (a < b) System.out.println(a); else System.out.println(b); is equivalent met System.out.println(a < b? a : b);  

GENESTE IF/ELSE SELECTIESTRUCTUREN Voorbeeld: Drie getallen worden ingegeven. Het grootste getal wordt op het scherm weergegeven. if (getal1 > getal2) if (getal1 > getal3) System.out. println(getal1); else // getal1 <= getal3 System.out. println(getal3); else // getal1 <= getal2 if (getal2 > getal3) System.out. println(getal2); else // getal2 <= getal3

GENESTE IF/ELSE SELECTIESTRUCTUREN if (getal1 > 10) if (getal2 > 20) System.out. println(“getal1 > 10 en getal2 > 20”); else System.out. println(“ ??? ”); Behoort de else bij “if (getal1 > 10)” of bij “if (getal2 > 20)”?

false true getal1 > 10 false true getal2 > 20 print “???” if (getal1 > 10) if (getal2 > 20) System.out. println(“getal1 > 10 en getal2 > 20”); else System.out. println(“ ??? ”); false true getal1 > 10 false true getal2 > 20 print “getal1 > 10 en getal2 > 20” print “???”

GENESTE IF/ELSE SELECTIESTRUCTUREN We wensen de else bij “if (getal1 > 10)” en niet bij “if (getal2 > 20)”: if (getal1 > 10) { if (getal2 > 20) System.out. println(“getal1 > 10 en getal2 > 20”); } else System.out. println(“ getal <= 10 ”);

false true getal1 > 10 true getal2 > 20 false if (getal1 > 10) { if (getal2 > 20) System.out. println(“getal1 > 10 en getal2 > 20”); } else System.out. println(“ getal <= 10 ”); false true getal1 > 10 print “getal <= 10” true getal2 > 20 print “getal1 > 10 en getal2 > 20” false

4.7. DE HERHALINGSSTRUCTUUR “WHILE” while (voorwaarde) statement Het statement wordt herhaald zolang de voorwaarde WAAR blijft! Zorg ervoor dat de voorwaarde beïnvloed wordt in het statement, anders oneindige lus!

Voorbeeld in pseudocode: Herhaal zolang het product kleiner is of gelijk aan 1000 Verdubbel het product true product <= 1000 product = 2 * product false Fig 4.5 Flowchart van de while herhalingsstructuur.

Voorbeeld in pseudocode: Herhaal zolang het product kleiner is of gelijk aan 1000 Verdubbel het product JAVA: int product = 2; while ( product <= 1000 ) product = 2 * product;

4.8. ALGORITMEN FORMULEREN: VOORBEELD 1 (HERHALING MET EEN TELLER) variabele die het aantal keer dat een reeks statements wordt uitgevoerd, bijhoudt en controleert Average1.java is een programma dat het gemiddelde van de punten berekent gebruikt een teller om de herhaling bij te houden

ALGORITMEN FORMULEREN: VOORBEELD 1 PSEUDOCODE   Zet totaal op nul Zet puntenteller op nul Herhaal zolang puntenteller kleiner dan of gelijk is aan tien Voer volgende punten in Tel deze op bij het totaal Verhoog de puntenteller met één Zet het klasgemiddelde gelijk aan het totaal gedeeld door tien Druk het klasgemiddelde af Fig. 4.6 Pseudocode van het algoritme dat herhaling door middel van een teller gebruikt om het probleem van het bepalen van het gemiddelde van een klas op te lossen

Declareer variabelen; gradeCounter is de teller 1 // Fig. 4.7: Average1.java 2 // Programma voor klasgemiddelde met herhaling via teller 3 Declareer variabelen; gradeCounter is de teller 4 // Java extension packages 5 import javax .swing. JOptionPane ; 6 7 public class Average1 8 { 9 Average1.java // De uitvoering van de Java applicatie begint bij de “main” methode 10 public static void main( String args [] ) 11 { 12 int total, // som van de punten ingevoerd door de gebruiker Blijf herhalen zolang gradeCounter kleiner dan of gelijk is aan 10 13 gradeCounter , // aantal ingevoerde punten 14 gradeValue , // puntenwaarde 15 average; // gemiddelde van alle punten 16 String grade; // punten zoals ingetypt door de gebruiker 17 18 // Initialisatiefase 19 total = ; // het totaal initialiseren op nul 20 gradeCounter = 1 ; // voorbereiding op herhaling 21 22 // Verwerkingsfase 23 while ( gradeCounter <= 10 ) // herhaal 10 keer 24 { 25 // vraag om input en lees punten van gebruiker 26 grade = JOptionPane . showInputDialog ( 27 "Enter integer grade: " ); 28 29 // converteer punten van String naar integer 30 gradeValue = Integer. parseInt ( grade ); 31 32 // voeg de puntenwaarde toe aan het totaal 33 total = total + gradeValue ; 34

Average1.java vervolg 35 // voeg 1 toe aan teller gradeCounter 36 = gradeCounter + 1 ; 37 38 } // einde while structuur 39 40 // Eindfase 41 average = total / 10 ; // voer een gehele deling uit 42 43 Average1.java vervolg // laat het gemiddelde van de examenpunten zien 44 JOptionPane . showMessageDialog ( null , 45 "Class average is " + average, "Class Average" , 46 JOptionPane . INFORMATION_MESSAGE ); 47 48 System.exit( ); // beëindig het programma 49 50 } // einde methode main 51 52 } // einde klasse Average1

UITVOERING AVERAGE1.JAVA (vervolg)

declaratie van de teller “gradeCounter”. 12 int total, // som van de punten ingevoerd door de gebruiker 13 gradeCounter, // aantal ingevoerde punten 14 gradeValue, // puntenwaarde 15 average; // gemiddelde van alle punten 16 String grade; // punten zoals ingetypt door de gebruiker 17 18 // Initialisatiefase 19 total = 0; // het totaal initialiseren op nul 20 gradeCounter = 1; // voorbereiding op herhaling Lijn 12 declaratie van de teller “gradeCounter”. Lijn 20 de teller “gradeCounter” wordt op 1 geïnitialiseerd.

de teller “gradeCounter” wordt met één verhoogd. 23 while ( gradeCounter <= 10 ) // herhaal 10 keer 24 { 25 // vraag om input en lees punten van gebruiker 26 grade = JOptionPane.showInputDialog( 27 "Enter integer grade: " ); 28 29 // converteer punten van String naar integer 30 gradeValue = Integer.parseInt( grade ); 31 32 // voeg de puntenwaarde toe aan het totaal 33 total = total + gradeValue; 34 35 // voeg 1 toe aan teller gradeCounter 36 gradeCounter = gradeCounter + 1; 37 38 } // einde while structuur Lijn 23 zolang de voorwaarde “gradeCounter <= 10” waar is, wordt de body van de while-statement (lijn 24 t.e.m. 38) uitgevoerd. Lijn 36 de teller “gradeCounter” wordt met één verhoogd.

de gemiddelde waarde van de 10 ingegeven getallen wordt weergegeven. 39 40 // Eindfase 41 average = total / 10; // perform integer division 42 43 // laat het gemiddelde van de examenpunten zien 44 JOptionPane.showMessageDialog( null, 45 "Class average is " + average, "Class Average", 46 JOptionPane.INFORMATION_MESSAGE ); 47 48 System.exit( 0 ); // beëindig het programma 49 50 } // einde methode main 51 52} // einde klasse Average1 Lijn 44-46 de gemiddelde waarde van de 10 ingegeven getallen wordt weergegeven.

4.9. ALGORITMEN FORMULEREN: TOP-DOWN EN MET STAPSGEWIJZE VERFIJNING VOORBEELD 2 (HERHALING MET “SCHILDWACHT”) Sentinel of “schildwacht” waarde die het einde van de invoer van data aangeeft Average2.java is een programma dat een herhaling voor onbepaalde tijd bevat gebruikt de “schildwacht” waarde –1 om de herhaling te beëindigen

ALGORITMEN FORMULEREN: VOORBEELD 2 PSEUDOCODE Initialiseer totaal op nul Initialiseer de puntenteller op nul Voer de eerste punten in (mogelijk de “schildwacht”) Herhaal zolang de gebruiker de schildwacht niet ingevoerd heeft Tel de punten op bij het lopende totaal Verhoog de puntenteller met één Voer volgende punten in (mogelijk de “schildwacht”) Als de puntenteller niet gelijk is aan nul Zet het klasgemiddelde gelijk aan het totaal gedeeld door de puntenteller Druk het klasgemiddelde af anders Druk “Er werden geen punten ingevoerd” Fig. 4.8 Pseudocode van het algoritme dat een herhaling met gebruik van een “sentinel” of “schildwacht” bevat om het probleem van het gemiddelde van een klas op te lossen.

Average2.java 1 // Fig. 4.9: Average2.java 2 // Klasgemiddelde programma met herhaling met behulp van een “schildwacht” 3 4 // Java core packages 5 import java.text. DecimalFormat ; 6 7 // Java extension packages 8 import javax .swing. JOptionPane ; 9 Average2.java 10 public class Average2 11 { 12 // De uitvoering van een Java applicatie begint bij de main method 13 public static void main( String args [] ) 14 { 15 int gradeCounter , // aantal ingevoerde punten 16 gradeValue , // puntenwaarde 17 total; // som van de punten 18 double average; // gemiddelde van alle punten 19 String input; // punten zoals ingetypt door de gebruiker 20 21 // Initialisatiefase 22 total = ; // het totaal initialiseren 23 gradeCounter = ; // voorbereiding van de herhaling 24 25 // Verwerkingsfase 26 // vraag om input en lees de punten van de gebruiker 27 input = JOptionPane . showInputDialog ( 28 "Enter Integer Grade, - 1 to Quit:" ); 29 30 // converteer de punten van een String naar een integer 31 gradeValue = Integer. parseInt ( input ); 32

herhaal tot gradeCounter gelijk is aan “schildwacht” waarde (-1) 33 while ( gradeValue != - 1 ) 34 { herhaal tot gradeCounter gelijk is aan “schildwacht” waarde (-1) 35 // voeg puntenwaarde toe aan totaal 36 total = total + gradeValue ; 37 38 // voeg 1 toe aan teller gradeCounter 39 gradeCounter = gradeCounter + 1 ; 40 41 // vraag om input en lees punten van gebruiker Average2.java vervolg 42 input = JOptionPane . showInputDialog ( 43 "Enter Integer Grade, - 1 to Quit:" Rond getallen af tot op één honderdste ); 44 45 // converteer punten van een String naar een integer 46 gradeValue = Integer. parseInt ( input ); 47 } 48 49 // Eindfase 50 DecimalFormat twoDigits = new DecimalFormat ( "0.00" ); 51 52 if ( gradeCounter != ) 53 { average = ( double ) total / gradeCounter ; 54 55 // laat gemiddelde van de examenpunten zien 56 JOptionPane . showMessageDialog ( null , 57 "Class average is " + twoDigits .format( average ), 58 "Class Average" , JOptionPane . INFORMATION_MESSAGE ); 59 } 60 else 61 JOptionPane . showMessageDialog ( null , 62 "No grades were entered" , "Class Average" , 63 JOptionPane . INFORMATION_MESSAGE ); 64 65 System.exit( ); // beëindig de applicatie 66

VERVOLG CODE + UITVOERING AVERAGE2.JAVA 67 } // einde methode main 68 69 } // einde klasse Average2

15 int gradeCounter, // aantal ingevoerde punten 16 gradeValue, // puntenwaarde 17 total; // som van de punten 18 double average; // gemiddelde van alle punten 19 String input; // punten zoals ingetypt door de gebruiker 20 21 // Initialisatiefase 22 total = 0; // het totaal initialiseren 23 gradeCounter = 0; // voorbereiding van de herhaling 24 Lijn 22 “total” wordt op 0 geïnitialiseerd. De som van de ingegeven getallen zullen in “total” bijhouden worden. Lijn 23 “gradeCounter” wordt op 0 geïnitialiseerd. Deze variabele zal bijhouden hoeveel getallen de gebruiker heeft ingegeven.

Een eerste getal wordt aan de gebruiker gevraagd. 26 // vraag om input en lees de punten van de gebruiker 27 input = JOptionPane.showInputDialog( 28 "Enter Integer Grade, -1 to Quit:" ); 29 30 // converteer de punten van een String naar een integer 31 gradeValue = Integer.parseInt( input ); 32 33 while ( gradeValue != -1 ) 34 { Lijn 27-28 Een eerste getal wordt aan de gebruiker gevraagd. Lijn 33 Indien de gebruiker de waarde –1 heeft ingegeven (lijn 27-28), dan wordt de body van de while-statement niet uitgevoerd.

een nieuw getal wordt aan de gebruiker gevraagd. 33 while ( gradeValue != -1 ) 34 { 35 // voeg puntenwaarde toe aan totaal 36 total = total + gradeValue; 37 38 // voeg 1 toe aan teller gradeCounter 39 gradeCounter = gradeCounter + 1; 40 41 // vraag om input en lees punten van gebruiker 42 input = JOptionPane.showInputDialog( 43 "Enter Integer Grade, -1 to Quit:" ); 44 45 // converteer punten van een String naar een integer 46 gradeValue = Integer.parseInt( input ); 47 } Lijn 33 zolang de gebruiker de waarde –1 niet heeft ingegeven, wordt de body van de while-statement (lijn 34 t.e.m. 47) uitgevoerd. Lijn 42-43 een nieuw getal wordt aan de gebruiker gevraagd.

50 DecimalFormat twoDigits = new DecimalFormat( "0.00" ); 51 52 if ( gradeCounter != 0 ) 53 { average = (double) total / gradeCounter; 54 55 // laat gemiddelde van de examenpunten zien 56 JOptionPane.showMessageDialog( null, 57 "Class average is " + twoDigits.format( average ), 58 "Class Average", JOptionPane.INFORMATION_MESSAGE ); 59 } 60 else 61 JOptionPane.showMessageDialog( null, 62 "No grades were entered", "Class Average", 63 JOptionPane.INFORMATION_MESSAGE ); 64 65 System.exit( 0 ); // beëindig de applicatie 66 67 } // einde methode main 68 69} // einde klasse Average2 Lijn 52 Controleren indien de gebruiker al dan niet direct de waarde –1 heeft ingegeven (lijn 27-28).

4.10. ALGORITMEN FORMULEREN: TOP-DOWN EN MET STAPSGEWIJZE VERFIJNING VOORBEELD 3 (GENESTE CONTROLESTRUCTUREN) Nesting van controlestructuren Analysis.java een if-else-statement in een while-statement gebruiken.

ALGORITMEN FORMULEREN: VOORBEELD 3 PSEUDOCODE Initialiseer geslaagden op nul Initialiseer niet-geslaagden op nul Initialiseer aantal-studenten op één Zolang het aantal-studenten kleiner is dan tien Voer het volgende examenresultaat in Als de student geslaagd is Tel één op bij geslaagden anders Tel één op bij niet-geslaagden   Tel één op bij aantal-studenten Druk het aantal geslaagden af Druk het aantal niet-geslaagden af Als er meer dan acht studenten geslaagd zijn Druk“Raise tuition” Fig 4.10 Pseudocode voor examenresultaten probleem.

Herhaal tot student teller groter is dan 10 // Fig. 4.11: Analysis.java 2 // Analyse van examenresultaten. 3 4 // Java extension packages 5 import javax .swing. JOptionPane Herhaal tot student teller groter is dan 10 ; 6 7 public class Analysis 8 { 9 // De uitvoering van een Java applicatie begint bij de main methode Analysis.java 10 public static void main( String args [] ) 11 { 12 // initialiseren van de variablen in declaraties 13 int passes = 0, // aantal geslaagden 14 failures = 0, // aantal niet geslaagden 15 student = 1, // studententeller 16 result; // één examenresultaat 17 String input, // door de gebruiker ingetikte waarde 18 output; // uitvoerstring 19 20 // verwerk 10 studenten; herhaling met teller 21 while ( student <= 10 Geneste controlestructuur ) 22 { 23 // verkrijg resultaat van gebruiker 24 input = JOptionPane . showInputDialog ( 25 "Enter result (1=pass,2=fail)" ); 26 27 // converteer resultaat naar int 28 result = Integer. parseInt ( input ); 29 30 // verwerk resultaat 31 if ( result == 1 ) 32 passes = passes + 1 ; 33 else 34 failures = failures + 1 ;

VERVOLG CODE ANALYSIS.JAVA 35 36 student = student + 1 ; 37 } 38 39 // eindfase 40 output = "Passed: " + passes + 41 " \ nFailed : " + failures; 42 43 if ( passes > 8 ) 44 output = output + " \ nRaise Tuition" ; 45 46 JOptionPane . showMessageDialog ( null , output, 47 "Analysis of Examination Results", 48 JOptionPane . INFORMATION_MESSAGE ); 49 50 System.exit( ); // beëindig applicatie 51 52 } // einde methode main 53 54 } // einde klasse Analysis

UITVOERING ANALYSIS.JAVA 9 keer

De teller “passes” zal het aantal geslaagde studenten bijhouden. 12 // initialiseren van de variablen in declaraties 13 int passes = 0, // aantal geslaagden 14 failures = 0, // aantal niet geslaagden 15 student = 1, // studententeller 16 result; // één examenresultaat 17 String input, // door de gebruiker ingetikte waarde 18 output; // uitvoerstring 19 Lijn 13 De teller “passes” zal het aantal geslaagde studenten bijhouden. Lijn 14 De teller “failures” zal het aantal niet geslaagde studenten bijhouden. Lijn 15 De teller “student” wordt op 1 geïnitialiseerd. Deze teller zullen we in de while-voorwaarde gebruiken.

De body van het while-statement zal 10 keer uitgevoerd worden. 20 // verwerk 10 studenten; herhaling met teller 21 while ( student <= 10 ) 22 { 23 // verkrijg resultaat van gebruiker 24 input = JOptionPane.showInputDialog( 25 "Enter result (1=pass,2=fail)" ); 26 27 // converteer resultaat naar int 28 result = Integer.parseInt( input ); 29 30 // verwerk resultaat 31 if ( result == 1 ) 32 passes = passes + 1; 33 else 34 failures = failures + 1; 35 36 student = student + 1; 37 } Lijn 22-37 De body van het while-statement zal 10 keer uitgevoerd worden. Lijn 31-34 if-statement in de body van het while-statement.

38 39 // eindfase 40 output = "Passed: " + passes + 41 "\nFailed: " + failures; 42 43 if ( passes > 8 ) 44 output = output + "\nRaise Tuition"; 45 46 JOptionPane.showMessageDialog( null, output, 47 "Analysis of Examination Results", 48 JOptionPane.INFORMATION_MESSAGE ); 49 50 System.exit( 0 ); // terminate application 51 52 } // einde methode main 53 54 } // einde klasse Analysis Lijn 46-48 Het aantal geslaagde en het aantal niet geslaagde studenten worden weergegeven op het scherm.

4.11. TOEKENNINGSOPERATOREN Uitdrukkingen voor toekenningen afkorten Heel vaak willen we iets bij een variabele optellen. int teller = 1; teller = teller + 1; teller = teller + 3;   In JAVA bestaat er een kortere en meer efficiënte vorm teller += 1; teller += 3;

4.11. TOEKENNINGSOPERATOREN Algemeen : x = x + a kunnen we schrijven als x += a; De volgende expressies spreken nu voor zichzelf: x -= a; x *= a; x /= a; x %= a;

REKENKUNDIGE TOEKENNINGSOPERATOREN

4.12. INCREMENT- EN DECREMENT- OPERATOREN In het bijzonder komt het vaak voor, dat een telvariabele (bijvoorbeeld teller) met 1 moet verhoogd of verlaagd worden. In plaats van teller += 1; teller -= 1; kunnen we dit nog korter schrijven: teller++; teller--; of ++teller; --teller;

4.12. INCREMENT- EN DECREMENT- OPERATOREN Unaire increment operator (++) vermeerdert de waarde van de variabele met 1 Unaire decrement operator (--) vermindert de waarde van de variabele met 1

Wat is nu het verschil tussen teller++ en ++teller? int teller1, resul1, teller2, resul2; teller1 = 0; teller2 = 0; resul1 = (teller1++); resul2 = (++teller2); System.out.println("teller1 : " + teller1); System.out.println(" resul1 : " + resul1); System.out.println(" teller2  : " + teller2); System.out.println(" resul2 : " + resul2); De uitvoer van dit programma is: teller1 : 1 resul1 : 0 teller2 : 1 resul2 : 1

4.12. INCREMENT- EN DECREMENT- OPERATOREN resul1 = (teller1++); resul2 = (++teller2); Het statement “resul1 = (teller1++);” betekent, dat eerst de waarde van teller1 (=0) wordt toegekend aan de variabele resul1. Daarna wordt de waarde van variabele “teller1” met één verhoogd. Het statement “resul2 = (++teller2);” betekent, dat eerst de waarde van de variabele “teller2” met één wordt verhoogd (dus teller2 = 0 +1). Vervolgens wordt de waarde van teller2 (=1) toegekend aan de variabele resul2.

4.12. INCREMENT- EN DECREMENT- OPERATOREN teller++;  ++ is een post-increment operator ++teller;  ++ is een pre-increment operator teller--;  -- is een post-decrement operator --teller;  -- is een pre-decrement operator

INCREMENT EN DECREMENT OPERATOREN

1 // Fig. 4.14: Increment.java 2 // Preincrementing en postincrementing 3 public class Increment 5 { 6 // De uitvoering van de Java applicatie begint bij de main methode 7 public static void main( String args[] ) 8 { 9 int c; 10 11 c = 5; 12 System.out.println( c ); // print 5 13 System.out.println( c++ );//print 5 en vermeerder c dan met 1 14 System.out.println( c ); // print 6 15 16 System.out.println(); // sla een lijn over 17 18 c = 5; 19 System.out.println( c ); // print 5 20 System.out.println( ++c );//vermeerder c eerst met 1, print 6 21 System.out.println( c ); // print 6 22 23 } // end method main 24 25 } // end class Increment

Lijn 13 voert een postincrement uit op c 12 System.out.println( c ); // print 5 13 System.out.println( c++ );//print 5 en vermeerder c dan met 1 14 System.out.println( c ); // print 6 15 16 System.out.println(); // sla een lijn over 17 18 c = 5; 19 System.out.println( c ); // print 5 20 System.out.println( ++c );//vermeerder c eerst met 1, print 6 21 System.out.println( c ); // print 6 Lijn 13 voert een postincrement uit op c Lijn 20 voert een preincrement uit op c 5 5 6 5 6 6

PRECEDENTIE EN ASSOCIATIVITEIT VAN DE OPERATOREN We kennen nu wiskundige-, relationele-, logische-, conditionele-, increment- en decrement-operatoren. We zijn in staat om complexe voorwaarden samen te stellen. Veronderstel volgende complexe conditie: 5+25/12 > 6 && 33%11+1 < 2   Deze expressie bevat zowel wiskundige, relationele als logische operatoren. Mogen we gewoon de expressies evalueren van links naar rechts? Neen, bepaalde operatoren hebben voorrang op andere.

PRECEDENTIE EN ASSOCIATIVITEIT VAN DE OPERATOREN

PRECEDENTIE EN ASSOCIATIVITEIT VAN DE OPERATOREN Voorbeeld: 5+25/12 > 6 && 33%11+1 < 2 5+ 2 > 6 && 33%11 +1 < 2 5+ 2 > 6 && 0 +1 < 2 7 > 6 && 0 +1 < 2 7 > 6 && 1 < 2 (true) && 1 < 2 (true) && (true) (true)

PRECEDENTIE EN ASSOCIATIVITEIT VAN DE OPERATOREN Haakjes kunnen gebruikt worden om de prioriteiten te negeren. Alles wat tussen de haakjes staat wordt altijd het eerst uitgewerkt. Bij complexe voorwaarden is het soms aangewezen haakjes te gebruiken, om de lezer zonder meer duidelijk te maken hoe de expressie wordt uitgewerkt. Een belangrijke stelregel is: bij twijfel, gebruik altijd haakjes.

     4.13. PRIMITIEVE DATATYPES Primitieve types “bouwblokken” voor ingewikkeldere types Java is sterk getypeerd alle variabelen in een Java programma MOETEN een type hebben Primitieve types in Java zijn overdraagbaar over computerplatformen die Java ondersteunen

DE PRIMITIEVE DATATYPES IN JAVA

HET PRIMITIEVE DATATYPE : boolean Variabelen van het type boolean kunnen slechts twee waarden bevatten: true of false Voorbeeld: boolean gevonden; int teZoekenGetal, getal; String getalS; gevonden = false; teZoekenGetal = 20; while (!(gevonden)) { getalS = JOptionPane.showInputDialog( null, "Geef een getal"); getal = Integer.parseInt( getalS ); if (getal == teZoekenGetal) gevonden = true; }

HET PRIMITIEVE DATATYPE : char In variabelen van het type char kun je één letter of één ander teken opslaan. Nooit meer dan één. Zo’n teken moet je in het programma tussen apostrofs zetten, bijvoorbeeld de letter a als ‘a’, een punt als ‘.’, etc.   De reden dat je apostrofs moet gebruiken is dat we de compiler duidelijk willen maken dat het om een letter gaat, en niet om bijvoorbeeld een variabele die de naam a heeft. Voorbeeld: char letter1, letter2; letter1 = 'a'; letter2 = '*';

HET PRIMITIEVE DATATYPE : byte In een variabele van het type byte kun je gehele getallen van –128 t.e.m. 127 bewaren. Voorbeeld: byte getal1, getal2, getal3; getal1 = 50; getal2 = -128; getal3 = 127; System.out.println(--getal2); System.out.println(++getal3); Uitvoer: 127 -128

HET PRIMITIEVE DATATYPE : short In een variabele van het type short kun je gehele getallen van -32768 t.e.m. 32767 bewaren. Voorbeeld: short getal1, getal2; getal1 = -32768; getal2 = 32767; System.out.println(--getal1); System.out.println(++getal2); Uitvoer: 32767 -32768

HET PRIMITIEVE DATATYPE : int In een variabele van het type int kun je gehele getallen van –2 147 483 648 tot 2 147 483 647 opbergen. Voorbeeld: int getal1, getal2; getal1 = 20; getal2 = -450;

HET PRIMITIEVE DATATYPE : long In een variabele van het type long kun je gehele getallen van –9 223 372 036 854 775 808 tot 9 223 372 036 854 775 807 opbergen. Voorbeeld: long getal1, getal2; getal1 = 2147483647; //bovengrens van int getal2 = getal1 * 10; System.out.println(getal2); uitvoer: 21474836470

DE PRIMITIEVE DATATYPEN : float en double In veel gevallen waarin gerekend wordt, heb je reële getallen nodig, zoals bijvoorbeeld 24.75. Voor reële getallen kent het Engels de term floating-point getallen. Java heeft voor reële getallen twee verschillende primitieve typen: float (storing single-precision floating-point) en double (double-precision floating-point).

DE PRIMITIEVE DATATYPEN : float en double De nauwkeurigheid van getallen van het type float is 6 tot 7 cijfers. Dat lijkt misschien veel, maar leidt in de praktijk al gauw tot grote onnauwkeurigheden door afrondfouten. Getallen van het type double nemen meer geheugen in beslag dan float, maar hebben een nauwkeurigheid van 15 cijfers.

DE PRIMITIEVE DATATYPEN : float en double Voorbeeld: float float_getal; double double_getal; float_getal = 10; double_getal = float_getal; float_getal *= 12.123456789; double_getal *= 12.123456789; System.out.println("float : " + float_getal); System.out.println("double : " + double_getal); Uitvoer: float : 121.234566 double : 121.23456789000001

Oefeningen Hoofdstuk 4

Verbeter volgende stukjes code:      Verbeter volgende stukjes code: if ( age >= 65 ); System.out.println ( “Age greater than or equal to 65” ); else System.out.println ( “Age is less than 65 )”; int x = 1, total; while ( x <= 10 ) { total += x; ++x; }

Verbeter volgende stukjes code:      Verbeter volgende stukjes code: while ( x <= 100 ) total += x; ++x; while ( y > 0 ) { System.out.println( y ); ++y;

Welke output geeft volgende applicatie?      Welke output geeft volgende applicatie? public class Mystery { public static void main ( String args[] ) int y, x = 1, total = 0; while ( x <= 10 ) y = x * x; System.out.println( y ); total += y; ++x; } System.out.println ( “Total is “ + total );

Welke output geeft volgende applicatie?      Welke output geeft volgende applicatie? public class Mystery2 { public static void main ( String args[] ) int count = 1; while ( count <= 10 ) System.out.println( count % 2 == 1 ? “****” : “++++++++” ); ++count; }

Schrijf een applicatie die…      Schrijf een applicatie die… via een lus volgende tabel met waarden afdrukt N 10*N 100*N 1000*N 1 10 100 1000 2 20 200 2000 3 30 300 3000 4 40 400 4000 5 50 500 5000 drie gehele getallen, verschillend van 0, inleest, en bepaalt of deze de zijden van een rechthoekige driehoek zouden kunnen voorstellen