Algoritmiek
description
Transcript of 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
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, …
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”
Arrays en postvakjes
Arrays
Arrays met invullingen
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
ArrayArgs
java ArrayArgs Drink Hot Java
Arg 0 Drink
Arg 1 Hot
Arg 2 Java
Command-line
Screen display
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
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
Array opslag in computergeheugen
Array initializers
int[] scores = {8, 5, 6, 6, 7, 9, 10, 6, 5, 8};
String[] names = {“Java”,“Pascal”,“Python”,“Logo”};
Exceptions
NullPointerException
ArrayOutOfBoundsException
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);
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);
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;}
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’
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;
}
Output
Original size: 5
New size: 10
Original size: 9
New size: 18
Arrays clonen
static int[] cloneArray (int[] original) {
return (int[]) original.clone();
}
Arrays vergelijken (1)
Button[] buttons = {
new Button(“0ne”),
new Button(“Two”),
new Button(“Three”)};
Component[] components = buttons;
boolean bln = (components == buttons);
Waarde bln?
true
Arrays vergelijken (2)
String[] clone = (String[]) strArray.clone();
boolean isEqual = (strArray == clone);
isEqual = (Arrays.equals(strArray, clone);
false
true
Loops
Essentiële onderdelen: Initialisatie Test Verandering
Belangrijke vragen: Welke loop kies je? Hoe controleer je de loop? Hoe ontwerp je een loop?
Soorten loops
Counted loops Continuously evaluated loops Endless loops Iterator loops
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#)
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
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;
}
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
Waarschuwing
Zet alle exit-voorwaarde op één plaats Voeg commentaar toe
Endless loop
Geaccepteerde idiomen:
while (true)
for (;;)
For-loop
Aantal herhalingen is gespecificeerd Geschikt voor simpele loops met
regelmatige verhogingen/verlagingen Waarschuwing: zet geen voorwaarde in
de loop body
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 …
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