Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdBram Abbink Laatst gewijzigd meer dan 9 jaar geleden
1
Hoofdstuk 7 Herhaling Nieuw!
2
while ( x<1000 ) x = 2*x; public void paint (Graphics gr) { int x; x = 1; gr. drawString( “” + x, 10, 10); } Opdrachten herhalen body wordt steeds opnieuw uitgevoerd zolang de voorwaarde geldig is X12481632641282565121024
3
Meer opdrachten herhalen int x, t; x=1; t=0; while ( x<1000 ) { x = 2*x; t = t+1; } return t; } n private static int naam ( ) { accolades smeden twee opdrachten tot één body teller telt hoe vaak er wordt verdubbeld (int n)tweeLog
4
Herhalen met een teller public void paint (Graphics gr) { int t; t=0; while ( t<10 ) { gr.drawString( “:-)”, 0, 20*t ); t = t+1; } teller bepaalt het aantal herhalingen en komt goed van pas in de body
5
Publieksvraag nSchrijf een methode driewerf met een String-parameter, die 3 herhalingen ervan oplevert nSchrijf een methode veelwerf met een String-parameter, en een getal n die n herhalingen van de String oplevert this.driewerf(“Hoera!”)“Hoera!Hoera!Hoera!”
6
while ( t<n ) { t = t+1 ; } t = 0; private static String veelwerf (String x, int n) { Veelwerf-methode return result; result = result + s ; result = “”; int t; String result; }
7
Publieksvraag nMaak een methode macht met twee parameters ugrondtal (reëel getal) uexponent(natuurlijk getal) die de waarde oplevert van grondtal exponent
8
while ( t<n ) { t = t+1 ; } t = 0; private static double macht (double x, int n) { Machtsverhef-methode return result; result = result * x ; result = 1; int t; double result; }
9
Vergelijk-operatoren n<kleiner dan n<=kleiner dan of gelijk aan n>groter dan n>=groter dan of gelijk aan n==gelijk aan n!=ongelijk aan x=5 x wordt 5 ! x==5 is x gelijk aan 5 ?
10
Expressies nExpressie met een getal als waarde nExpressie met een tekst als waarde nExpressie met een waarheid als waarde 2 * (lengte + breedte) “Hallo ” + persoon teller < exponent type int type boolean type String primitief object- primitief
11
Boolean expressies nVergelijken van waarden nCombineren van andere boolean expressies met logische operatoren u&&and u||or u !not x <= y x 0 ! (x==0 && y==0)x!=0 || y!=0 George Boole (1815-1864)
12
Syntax van opdrachten while)(expressieopdracht =variabeleexpressie; opdracht object.(), ;expressie methode naam returnexpressie; blok
13
Constanten nConstanten met een getal als waarde nConstanten met een tekst als waarde nConstanten met een waarheid als waarde 2 “Hallo” true -5137 “@#$%”“123”“” false “true”
14
Gebruik van boolean expressies nAls voorwaarde van een while-opdracht nRechts van een toekenningsopdracht nAls resultaat van een methode while (x<10)... boolean b; b = x<10 ; return x<10 ;
15
Publieksvraag nSchrijf een methode deelbaar, die antwoordt of x deelbaar is door d private static boolean deelbaar (int x, int d) { } x%d == 0return ; waarheidswaarde als resultaat
16
Publieksvraag nSchrijf een methode kleinsteDeler, die antwoordt wat de kleinste deler is van x private static int kleinsteDeler (int x) { } int d; d = 2; while ( x%d != 0) d = d+1; return d ; probeer ze één voor één
17
Variabelen aanpassen nAfgekorte notaties: x = x * 2 ; oude waarde wordt nieuwe waarde x = x * 2 ; x *= 2 ; x = x + 5 ; x += 5 ; x = x + 1 ; x += 1 ; x ++ ; wordt vermenigvuldigd met wordt vermeerderd met wordt opgehoogd
18
Herhaling met een teller int t ; t = 0; while ( t<x ) t ++ ; } { // doe iets nuttigs // met t for ( t=0 ; t<x ; t++ ) for t ++ ; t = 0;
19
for-opdracht eenmalige initialisatie int t ; for ( t=0 ; t<x ; t++ ) voorwaarde om door te gaan stap naar de volgende gr.drawString( “#”, 0, t*10 ); for ( t=1 ; t<=x ; t++ )for ( t=x ; t>=0 ; t -- )for ( t=2 ; !deelbaar(x,t) ; t++ )
20
Syntax van opdrachten for)(expropdrachtexpr ;; while)(expressieopdracht =variabeleexpressie; opdracht object.(), ;expressie methode naam returnexpressie; blok
21
Syntax van opdrachten for)(expropdrachtexpr ;; while)(expressieopdracht returnexpressie; blok
22
Herhaalde herhaling nBody van een for-opdracht is een opdracht dat kan zelf ook een for-opdracht zijn! int x, y; for (y=0; y<10; y++) for (x=0; x<10; x++) gr.drawString( “+”, 10*x, 10*(y+1) ); y + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
23
Extreme gevallen nNul keer herhalen for (y=0; y<0; y++) gr.drawString(“hoi”, 10, 10); nOneindig vaak herhalen while (true) audio.play( ); gr.drawString(“hoi”, 10, 10); deze opdracht komt nooit aan de beurt!
24
Onbedoelde oneindigheid x=1; aantal = 0; while (aantal<10) x = x*2; aantal = aantal+1; {}{} accolades vergeten...
25
Compiler-meldingen nFoutmeldingen uvariabele niet gedeclareerd upuntkomma vergeten u... nWaarschuwingen uunreachable code ustatement has no effect uwhile-statement doesn’t terminate deze waarschuwing is theoretisch onmogelijk!
26
Het Halting-problem is onoplosbaar boolean stopt (String filenaam) {.... } void gemeen (String filenaam) { while ( stopt(filenaam) ) x++; } Ha! En dit dan? Nietes! Deze methode lost het op: stopt( “Gemeen.java” ) wat komt er dan uit: ?
27
Het Halting-problem is onoplosbaar void gemeen (String filenaam) { while ( stopt(filenaam) ) x++; } stopt( “Gemeen.java” ) Twee mogelijkheden: n“Gemeen” stopt wel n“Gemeen” stopt niet...dus stopt levert true op...dus gemeen bijft hangen!...dus stopt levert false op...dus gemeen stopt direct! tegenspraak! dus stopt kan helemaal niet bestaan
28
Andere Halting -achtige problemen nWordt een opdracht ooit uitgevoerd? nIs een programma een virus? en hoe werkt een virus-checker dan? nòf te streng: keurt teveel af nòf te coulant: laat sommige door lastig gevaarlijk
29
Voorbeeldprogramma: Renteberekening door de gebruiker in te vullen TextField -objecten TextField-objecten hebben een ActionListener
30
public class Rente extends Applet implements ActionListener { TextField startT, renteT; public void init ( ) {...} public void paint (Graphics gr) {... } public void actionPerformed (...) { this.repaint(); } Overzicht van klasse Rente object-variabelen her-definities Applet-methoden nakomen van implements-belofte
31
public void init ( ) { startT = new TextField(“100”, 8 ); renteT = new TextField(“5”, 4 ); this. add(startT); this. add(renteT); startT. addActionListener (this); renteT. addActionListener (this); } Rente ’s methode init creëren van interactie- objecten opbouw van user-interface koppelen van event-listeners
32
public void paint (Graphics gr) { } Rente ’s methode paint startT.getText() renteT.getText() start = Integer.parseInt( ); rente = Integer.parseInt( ); for (jaar=0; jaar<=10; jaar++) { gr.drawString( “ jaar: ”+jaar + “ bedrag: ”+kapitaal,... ); } kapitaal = start; kapitaal *= (1 + 0.01*rente) ; int start, rente,jaar; double kapitaal;
33
Publieksvraag nSchrijf een methode wortel, die de wortel trekt van een niet-negatieve double nZonder Math.sqrt te gebruiken! nGebruik de Newton-benadering: als y een benadering is van sqrt(x), dan is het gemiddelde van y en x/y een betere benadering
34
private static double wortel (double x) { } Worteltrek-methode double y; y = 1; return y; y = (y + x/y) / 2 ; while ( y*y != x ) stopt dit? wiskundige: nee, gelijkheid geldt pas in limiet programmeur: ja, want reken- precisie is beperkt informaticus: nee, want afrond- fouten verhinderen bereiken limiet while ( Math.abs (y*y - x) <0.000001 ) veiliger:
35
Opbouw herhaling nInitialisatie nHerhaalde aanpassing nGebruik van het resultaat kap=start;y=1;tot=0; kap*=(1+0.01*rente); y=(y+x/y)/2;tot+=x; gr. drawString (“”+kap); return y; sb. setValue ( tot ); res=“”; res+=“|”; return res;
36
Tekenen of opleveren? ngr.drawString (x,...) resultaat komt meteen op het scherm nreturn x; resultaat wordt teruggegeven aan de aanroeper, die zelf kan beslissen wat hij ermee doet flexibeler handig voor “simpele” resultaten handig voor “ingewikkelde” tekeningen
37
Overzicht programma- constructies Opdrachten nToekenning nAanroep void-methode nreturn-opdracht nwhile-opdracht nfor-opdracht n{... } - bundeling Expressies n Constante n Variabele n Aanroep methode n Expressie met operatoren n Expressie met haakjes n new-expressie kun je doenkun je uitrekenen
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.