33
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt. 2006 L.M. Bosveld-de Smet

Algoritmiek

  • Upload
    darryl

  • View
    22

  • Download
    0

Embed Size (px)

DESCRIPTION

Algoritmiek. Arrays : wat zijn dat en wat kun je ermee? Loops : hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt. 2006 L.M. Bosveld-de Smet. Datastructuren. Programs = Data Structures + Algorithms Data structure: definitions - PowerPoint PPT Presentation

Citation preview

Page 1: Algoritmiek

Algoritmiek

Arrays: wat zijn dat en wat kun je ermee?Loops: hoe hou je ze in bedwang?

Hoorcollege 6 - Ma. 9 okt. 2006L.M. Bosveld-de Smet

Page 2: Algoritmiek

Datastructuren

Programs = Data Structures + Algorithms Data structure: definitions

= ‘a group of related data items organised in the computer’ (in: A Glossary of Computer Terms)

= “collection of data items stored under a single name” (in: King)

Voorbeelden van datastructuren objects arrays lists, tables, trees, files, …

Page 3: Algoritmiek

Arrays en Objects

Enige datastructuren in Java Array is een subklasse van de klasse Object Arrays zijn objecten, maar van een bepaalde soort

in een object kunnen elementen van verschillend type zijn in een array zijn alle elementen van hetzelfde type

Array heeft length als instantievariabele Array kent een aantal voorgedefinieerde methoden Arrays “store a set of data in an order accessible

by index”

Page 4: Algoritmiek

Arrays en postvakjes

Page 5: Algoritmiek

Arrays

Page 6: Algoritmiek

Arrays met invullingen

Page 7: Algoritmiek

Een simpel Array voorbeeld

public class ArrayArgs {

public static void main (String[] args) {

for (int i=0, n=args.length; i<n; i++) {

System.out.println (“Arg “ + i + “ “ + args[i]);

}

}

}

array van string objecten

aantal strings in array args

de string op positie i in array

args

Page 8: Algoritmiek

ArrayArgs

java ArrayArgs Drink Hot Java

Arg 0 Drink

Arg 1 Hot

Arg 2 Java

Command-line

Screen display

Page 9: Algoritmiek

Array declaratie

Specificeer type elementen

int[] scores;

int scores[];

String[] names;

String names[];

Account[] accounts;

Account accounts[];

Arrayvariabelen worden gedeclareerd.

Net als bij object declaratie, zijn deze bedoeld voor

referenties

Page 10: Algoritmiek

Array aanmaken

Specificeer arraygrootte Geheugenruimte wordt toegekend

scores = new int[10];

names = new String[50];

accounts = new Account[1000];

scores

0

1

2

3

4

5

6

7

8

9

Page 11: Algoritmiek

Array opslag in computergeheugen

Page 12: Algoritmiek

Array initializers

int[] scores = {8, 5, 6, 6, 7, 9, 10, 6, 5, 8};

String[] names = {“Java”,“Pascal”,“Python”,“Logo”};

Page 13: Algoritmiek

Exceptions

NullPointerException

ArrayOutOfBoundsException

Page 14: Algoritmiek

Arrays: elementen bereiken en waarden toekennen

scores[0] = 8;

scores[i + 2] = 10;

sum = sum + scores[i];

names[i] = “Java”;

System.out.print (names[i]);

char firstLetter = names[i].charAt(0);

Page 15: Algoritmiek

Example: average temperature

double[] temperatures = {32.0, 30.8, 25.7, 26.1, 34.0, 31.5, 29.0};

double sum = 0.0;for (int i=0; i < temperatures.length; i++) {

sum = sum + temperatures[i];}System.out.println(“average temperature of this

week is “ + sum / temperatures.length);

Page 16: Algoritmiek

Test

Wat is de output?char[] vowel = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’};for (int i=0; i < vowel.length; i++) {

System.out.println( vowel [i] );}

OK?int[] b = new int[10];for (int i=1; i <= b.length; i++) {

b[i] = 5 * i;}

Page 17: Algoritmiek

Arrays als argumenten en als return waarde

Arrays kunnen gebruikt worden als argumenten van methoden Referentie wordt doorgegeven Verandert de methode de array inhoud, dan

‘verlaat de array de methode in veranderde vorm’

Een methode kan een array maken of veranderen en deze als resultaat afgeven Dit is mogelijk omdat ‘niet de hele array, maar

de referentie wordt afgegeven’

Page 18: Algoritmiek

Copiëren van arrays

public class DoubleArray {public static void main (String[] args) {

int array1[] = {1,2,3,4,5};int array2[] = {1,2,3,4,5,6,7,8,9};System.out.println(“Original size: “ + array1.length);System.out.println(“New size: “ +

doubleArray(array1).length;System.out.println(“Original size: “ + array2.length);System.out.println(“New size: “ +

doubleArray(array2).length;}

static int[] doubleArray(int[] original) {int length = original.length;int[] newArray = new int[length*2];System.arrayCopy(original, 0, newArray, 0, length);return newArray;

}

Page 19: Algoritmiek

Output

Original size: 5

New size: 10

Original size: 9

New size: 18

Page 20: Algoritmiek

Arrays clonen

static int[] cloneArray (int[] original) {

return (int[]) original.clone();

}

Page 21: Algoritmiek

Arrays vergelijken (1)

Button[] buttons = {

new Button(“0ne”),

new Button(“Two”),

new Button(“Three”)};

Component[] components = buttons;

boolean bln = (components == buttons);

Waarde bln?

true

Page 22: Algoritmiek

Arrays vergelijken (2)

String[] clone = (String[]) strArray.clone();

boolean isEqual = (strArray == clone);

isEqual = (Arrays.equals(strArray, clone);

false

true

Page 23: Algoritmiek

Loops

Essentiële onderdelen: Initialisatie Test Verandering

Belangrijke vragen: Welke loop kies je? Hoe controleer je de loop? Hoe ontwerp je een loop?

Page 24: Algoritmiek

Soorten loops

Counted loops Continuously evaluated loops Endless loops Iterator loops

Page 25: Algoritmiek

Varianten in diverse programmeertalen

Visual Basic: For-Next While-Wend Do-Loop-While For-Each

C, C++, C#, Java for while do-while foreach (C#)

Page 26: Algoritmiek

While-loop

Meest flexibel Te gebruiken als aantal herhalingen van

te voren onbekend is Keuze voor plaats van test

aan begin aan eind

Geschikt voor meer complexe loops

Page 27: Algoritmiek

Loop-with-exit loop (1)

score = 0;

getNextRating(ratingIncrement);

rating= rating + ratingIncrement;

while ((score < targetScore) && (ratingIncrement != 0)) {

getnextScore(scoreIncrement);

score = score + scoreIncrement;

getNextRating(ratingIncrement);

rating= rating + ratingIncrement;

}

Page 28: Algoritmiek

Loop-with-exit loop (2)

score = 0;

while (true) {

getNextRating(ratingIncrement);

rating= rating + ratingIncrement;

if (!((score < targetScore) && (ratingIncrement != 0))) {

break;

}

getnextScore(scoreIncrement);

score = score + scoreIncrement;

}

Vereenvoudig met De Morgan’s Laws

Page 29: Algoritmiek

Waarschuwing

Zet alle exit-voorwaarde op één plaats Voeg commentaar toe

Page 30: Algoritmiek

Endless loop

Geaccepteerde idiomen:

while (true)

for (;;)

Page 31: Algoritmiek

For-loop

Aantal herhalingen is gespecificeerd Geschikt voor simpele loops met

regelmatige verhogingen/verlagingen Waarschuwing: zet geen voorwaarde in

de loop body

Page 32: Algoritmiek

Wat kan er misgaan?

Initialisaties van bij loop betrokken variabelen zijn vergeten of incorrect

Niet correcte nesting Loop eindigt niet Controlevariabele wordt niet of verkeerd

veranderd Loop indiceert array elementen verkeerd …

Page 33: Algoritmiek

Adviezen

Verklein zoveel mogelijk de factoren die invloed hebben op de loop, oftewel zorg voor eenvoud

Behandel de loop body als een black box

while(!inputFile.EndOfFile()&& moreDataAvailable()) {

}

Controleer de voorwaarden die de loop beëindigen Test de loop met beginwaarde, tussenwaarde(n),

eindwaarde