1 / 33

Algoritmiek

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

darryl
Download Presentation

Algoritmiek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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, …

  3. 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”

  4. Arrays en postvakjes

  5. Arrays

  6. Arrays met invullingen

  7. 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

  8. ArrayArgs java ArrayArgs Drink Hot Java Arg 0 Drink Arg 1 Hot Arg 2 Java Command-line Screen display

  9. 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

  10. Array aanmaken • Specificeer arraygrootte • Geheugenruimte wordt toegekend scores = new int[10]; names = new String[50]; accounts = new Account[1000]; 0 1 2 3 4 5 6 7 8 9 scores

  11. Array opslag in computergeheugen

  12. Array initializers int[] scores = {8, 5, 6, 6, 7, 9, 10, 6, 5, 8}; String[] names = {“Java”,“Pascal”,“Python”,“Logo”};

  13. Exceptions NullPointerException ArrayOutOfBoundsException

  14. 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);

  15. 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);

  16. 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; }

  17. 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’

  18. 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; }

  19. Output Original size: 5 New size: 10 Original size: 9 New size: 18

  20. Arrays clonen static int[]cloneArray (int[] original) { return (int[]) original.clone(); }

  21. Arrays vergelijken (1) Button[] buttons = { new Button(“0ne”), new Button(“Two”), new Button(“Three”)}; Component[] components = buttons; boolean bln = (components == buttons); Waarde bln? true

  22. Arrays vergelijken (2) String[] clone = (String[]) strArray.clone(); boolean isEqual = (strArray == clone); isEqual = (Arrays.equals(strArray, clone); false true

  23. Loops • Essentiële onderdelen: • Initialisatie • Test • Verandering • Belangrijke vragen: • Welke loop kies je? • Hoe controleer je de loop? • Hoe ontwerp je een loop?

  24. Soorten loops • Counted loops • Continuously evaluated loops • Endless loops • Iterator loops

  25. 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#)

  26. 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

  27. 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; }

  28. 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

  29. Waarschuwing • Zet alle exit-voorwaarde op één plaats • Voeg commentaar toe

  30. Endless loop Geaccepteerde idiomen: while (true) for (;;)

  31. For-loop • Aantal herhalingen is gespecificeerd • Geschikt voor simpele loops met regelmatige verhogingen/verlagingen • Waarschuwing: zet geen voorwaarde in de loop body

  32. 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 • …

  33. 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

More Related