De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

SWI cursus: ‘Inleiding programmeren in Java’

Verwante presentaties


Presentatie over: "SWI cursus: ‘Inleiding programmeren in Java’"— Transcript van de presentatie:

1 SWI cursus: ‘Inleiding programmeren in Java’
5e college Ma 5 februari 2001 drs. F. de Vries

2 Programma vandaag Voortgangsadvies Deitel 4 & 5 Priemgetallen
Datum/klok

3 Deitel hoofdstuk 4 (4.1 - 4.4) introductie controle structuren
( ) if en if - else ( ) while ( ) assignment (4.13) primitieve datatypen

4 Drie samenwerkende controlestructuren
Sequentie: stuk voor stuk statements uitvoeren Selectie: statement(s) alleen onder bepaalde conditie uitvoeren Iteratie: herhaling van uitvoeren van statement(s)

5 1. Sequentie In aangegeven volgorde uitvoeren
Een schijnbaar eenvoudige structuur Probleemgebieden: volgorde ontwerp aansluiting globale-locale volgordes multi-threading Voorbeeld: aanpak datum/klok

6 Voorbeeld datum/klok Welke volgorde ontwerpen?
Het totaal uitsplitsen van onderaf (ms) of van bovenaf (jaar)? Restdagen in een jaar: beginnen bij januari of bij december? Vaststellen schrikkeljaar: vroeg of laat? Konklusie: volgorde is een probleem

7 2. Selectie En nu een echte vork: if - else Een vork in een vork:
Gevaar: dangling else probleem

8 Dangling else Hoort else bij 1e of 2e if statement? if <expr>
if <expr> <statement> ; else <statement> ; Oplossing: { …. } om binnenste if Geneste sequentie: compound statement

9 Ontwerpen van selectie
Net als bij volgorde is het ontwerpen van selectie niet triviaal Bepalende factoren: overzichtelijkheid kans op fouten efficiëncy Voorbeeld

10 Vaststellen maand Vergelijk 3 alternatieven:
1. Meest eenvoudige sequentie 2. Een diepe uitsplitsing 3. Een binaire uitsplitsing (omslachtig, maar correct ge-nest if - else statement)

11 Meest eenvoudig If (maand ==1) label=“januari”;
If (maand ==2) label=“februari”; If (maand ==3) label=“maart”; If (maand ==4) label=“april”; If (maand ==5) label=“mei”; If (maand ==6) label=“juni”; If (maand ==7) label=“juli”;

12 Een diepe uitsplitsing
if (maand ==1) label=“januari”; else if (maand ==2) label=“februari”; else if (maand ==3) label=“maart”; else if (maand ==4) label=“april”; else if (maand ==5) label=“mei”; else if (maand ==6) label=“juni”; else if (maand ==7) label=“juli”; else if (maand ==8) label=….

13 Een binaire uitsplitsing

14 Een binaire uitsplitsing
<=6 <=3 <=2 = 1 = 2 > 2 = 3 > 3 >= 5

15 Herhaling Lus-structuren in diverse vormen hoofdstuk 4:
while <expr> <statement> hoofdstuk 5: do <statement> while < expressie> for (<expr1 ; expr2 ; expr3>) <statement>

16 Een enkele while lus Fig. 4.7: Average1 Fig. 4.9: Average2
Fig. 4.11: Analysis In hoofdstuk 4, opdracht 1

17 Is een willekeurig getal deelbaar?
Zonder lus constructie niet uitvoerbaar kritieke ontwerppunten: starten en stoppen van de lus uiterste waarden gevaar: oneindige lus inefficiënte lus

18 Kritieke ontwerppunten
Starten-stoppen: beginwaarde expressie, wijziging expressie Uiterste waarden minimale, maximale stuurwaarden Oneindige lus: while (true) <statement>

19 Aanpak Uitschrijven: testGetal % 2 == 0, ja of nee? testGetal % 3 == 0
…... testGetal % testGetal == 0 ?

20 Aanpak - 2 Voorwerk: controle testGetal Herhaal na de herhalingslus
conditie ?? start teller ? test print ? ophogen teller na de herhalingslus

21 Een lus binnen een lus Komt veel voor in algoritmen
Dubbel gevaar, dubbel lastig extra probleem: terugzetten waarden binnenste lus Voorbeeld: hoofdstuk 4, opdracht 2

22 Zoek priemgetallen in interval
Binnenste lus uit vorige opdracht kleinste = 2 grootste = max int ? (of max long) ondergrens interval = 2 bovengrens = max int (of max long)

23 Lus in een lus Hier: de binnenste lus krijgt van de buitenste lus steeds een nieuwe waarde aangereikt Andere vorm: binnenste lus doorloopt steeds dezelfde waarden, bv lezen van een matrix (hfst 7)

24 Binnenlus: van 2 tot (n-1)

25 Afwerking belangrijk Interval niet correct
er zijn geen priemgetallen gevonden gevonden priemgetallen zijn correct nummering van gevonden getallen minimum interval correct: [ ] maximum interval?

26 Speciale assignments c += 1 , ++c en c++ zijn slechts verkorte schrijfwijzen van c = c + 1 Komt de duidelijkheid van het programma niet altijd ten goede

27 Primitieven boolean char byte - short - int - long float - double
dit zijn géén objecten ‘wrapper’ klassen hiervoor

28 Boolean Declaratie: Assignment: Bewerking: Gebruik: boolean stoppen;
stoppen = false; Bewerking: if (n ==10) stoppen = true; Gebruik: if (stoppen) <statement> ;

29 Datum/klok - 3 constanten declareren gebruik van switch

30 7 variabelen berekenen jaar, maand, weekdag, dag, uur, minuten, seconden 1 seconde verschil kan alle 6 andere wijzigen 1 uur zomertijd? 1 dag van een schrikkeljaar?

31 magic numbers elke constante wordt ook alszodanig gedeclareerd
betekenisvolle naam kiezen zie Java conventies

32 Aanpak schrikkeldagen - 1
bereken hele dagen totaal begin bij jaar = 1970 herhaal is ‘jaar’ een schrikkeljaar? (4, 100, 400) ja, trek 366 af, hoog ‘schrikkeldagen’ op nee trek 365 af, ‘schrikkeldagen’ gelijk tel 1 bij jaar op totdat ‘dagen over’ < 365? [of 366 ?!]

33 Aanpak schrikkeldagen - 2
let op: expressie schrikkeljaar na afloop 1. hele jaren bekend 2. overige dagen bekend 3. aantal schrikkeldagen bekend zijn de schrikkeldagen nog wel nodig?

34 Aanpak zomertijd - 1 alleen 2001 wat wordt anders?
24/25 mrt 2:00 uur + 1 uur 27/28 okt 3:00 uur - 1 uur wat wordt anders? verspringing van uren, evt dagen/ weekdag/ maand niet: jaar

35 Aanpak zomertijd - 2 3 manieren: 1. Terugrekenen vanaf breekpunten:
op welke seconde 1 uur erbij? op welke seconde 1 uur eraf 2. eerst wintertijd berekenen 3. zelfde berekening voor twee tijden behoefte aan ‘methode’

36 De stof van vandaag Deitel & Deitel, hoofdstuk 5: niet zo veel nieuws

37 Hoofdstuk 5 1. Herhalingslus 2: for 2. Selectie: switch statement
3. Herhalingslus 3: do - while 4. Break en continue 5. Logische operatoren Samenvatting gestructureerd programmeren

38 For - lus Wordt veel gebruikt voorbeeld fig 5.6

39 Switch statement Een overzichtelijk alternatief voor een serie if statements efficiënt? Nadeel: geen range test Let op: break

40 switch ( (int) maand ) { case 1: { maandTekst = "Januari" ; break; } case 2: { maandTekst = "Februari" ; break; } case 3: { maandTekst = "Maart" ; break; } case 4: { maandTekst = "April" ; break; } case 5: { maandTekst = "Mei" ; break; } case 6: { maandTekst = "Juni" ; break; } case 7: { maandTekst = "Juli" ; break; } case 8: { maandTekst = "Augustus" ; break; } case 9: { maandTekst = "September" ; break; } case 10: { maandTekst = "October" ; break; } case 11: { maandTekst = "November" ;break; } case 12: { maandTekst = "December" ;break; } default: { maandTekst = "onbekend" ; } }

41 Do - while herhaling Body wordt altijd een keer uitgevoerd
Conditie test achteraf Niet zo interessant

42 Break en continue Niet zulke mooie constructies
vgl. Edsgar Dijkstra’s beroemde artikel: ‘GOTO statement harmfull’

43


Download ppt "SWI cursus: ‘Inleiding programmeren in Java’"

Verwante presentaties


Ads door Google