BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang
Kursusintroduktion: rammer Forudsætninger: Indledende Programmering (IP) eller tilsvarende Tidligere afholdtes BRP parallelt med IP, men nu forudsættes dette kendt ved kursusstart Formiddag: læreroplæg, eftermiddag: øvelser (som tommelfingerregel) Eksamen: 2 timers skriftlig eksamen Lærebog: Cay Horstmann. Big Java (2. udgave) eller Java Concepts (4. udgave) Jørgen Villadsen. Notes on Data Structures and Algorithms. (Fås i Bogladen til 30 kr.) BRP IP ISP
Kursusindhold Redskaber betyder fagelementer som støtter programmeringsaktiviteten algoritmer (fx til søgning og sortering) (x) datastrukturer (fx lister, træer) (x) kompleksitetsteori (fx lineær og eksponentiel kompleksitet) grammatik (fx syntaks af java kildetekst-fil) repræsentation af data (fx tal) Begreber betyder at fagelementerne er overvejende teoretiske Også programmering (i Java) Arbejde med begreberne i praksis Nye måder at programmering på (fx rekursion) Også redskaber af praktisk karakter Fagelementer fra software engineering (fx test) Håndkøring af programmer
Eksempel på (søge-) algoritme (Horstmann kap 19.6) Problem 1: Du har en telefonbog, og vil finde navnet på en person hvis nummer du kender. Algoritme: start fra enden af, undersøg hvert enkelt post i telefonbogen (lineær søgning) Problem 2: Du har en telefonbog, og vil finde nummeret på en person, du kender navnet på. Basis for forbedret algoritme: posterne er sorteret efter navn. Algoritme: Veldefineret metode til løsning af et givet problem (cirka, der findes ingen kanonisk definition, men mange gode)
Formål med at studere algoritmer Algoritme-begrebet er centralt i datalogien - faget rummer en række kendte, afprøvede algoritmer - vigtigt at anvende kendte metoder isf. at genopfinde dem - vigtigt at kunne analysere (finde svagheder i) anvendte algoritmer (tids- og pladsforbrug, kompleksitetsteori) - teorien om algoritmer siger også noget om computerens begrænsninger (Turings stopproblem) Specifikt er søgning centralt i mange typer software, blandt andet i databaser.
Datastrukturer Array hurtigt opslag/læs Hægtet liste ikke-destruktiv indsæt Træ hurtig, ikkedestruktiv indsæt
Tal, logaritme-funktion log 2 = 1 log 4 = 2 log 8 = 3 log 16 = 4.. log 64 = 6.. log 1024 = 10.. Hvor mange sammenligninger ved lineær søgning? Svar: n/2 Ved normal telefonbogssøgning? Svar: log n (log n betyder her totals-logaritmen af n, dvs. med grundtal 2)
Algoritmer + datastrukturer + logaritmer + kompleksitetsanalyse En algoritme er ofte knyttet til en bestemt datastruktur, fx en søgealgoritme der er knyttet til et binært søgetræ Logaritme-funktionen er bl.a. vigtig at forstå for at forstå tidsforbruget af visse søgealgoritmer Kompleksitetsanalyse er studiet af algoritmers tids- og pladsforbrug m.v.
Kursets teoretiske/begrebslige del versus programmeringsdelen Kurset er primært begrebsligt orienteret Programmering indgår begreber illustreres helst med program-eksempler øget træning i programmering er en vigtig sidegevinst ved kurset kursets begreber omfatter også meget programmeringsnære begreber, fx rekursion Vi arbejder eksemplarisk og praktisk med udvalgte algoritmer og datastrukturer m.v.
Eksamen To timers skriftlig eksamen hjælpemidler: skriftlige, ikke elektroniske Opgave 1, vinter 2005/2006. Betragt følgende program: Public class LinkedList {.. Delopgave 1.1. Håndkør programmet med henblik på at angive indholdet af den hægtede liste x til slut.
Eksamen Formål BRPs læringsmål kan til en vis grad måles på denne måde Kræver at færdigheder indøves som en form for rutine, bl.a. ved at regne mange opgaver. Det kan give en god forståelse for stoffet. Generelt vigtigt at datalogi har forskellige former for eksamen, at ikke alle eksamener er afleveringsopgaver Giver en form for objektiv feedback til studerende
BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang
Java-oversigt: formål At vi i dag får berørt det centrale Java-stof, som forudsættes som startniveau for kurset For at I derved får lejlighed til at genopfriske det teste om I kan det, så I kan afgøre om I selv skal arbejde yderligere med det Horstmann: 1.1, 1.3-1.8, 2.1-2.4, 2.6-2.7, 3.1-3.2, 3.4-3.5, 3.8-3.9, 4, 6, 7, 8.1-8.2, 8.4-8.7, 9.1-9.4, 9.6-9.9.
Horstmann opgave P4.4 Write a program that prompts the user for two numbers, then prints the sum the difference..
Kapitel 1: bl.a. om oversættelse Man kan oversætte filer med tomme klasse-erklæringer. Pair.java public class Pair { PairTest.java public class PairTest { XP-agtig udvikling: Incremental udvikling, problem-opdeling
PairTest.java Kapitel 2: Using objects - bl.a. om test-programmer (s. 47) package brp.scanning; import java.util.scanner; public class PairTest { public static void main(string[] args) { System.out.println("Skriv to reelle tal:"); Scanner sc = new Scanner(System.in); Pair p = new Pair(sc.nextDouble(),sc.nextDouble()); System.out.println("Summen er:"); System.out.println(p.getSum()); System.out.println("Differencen er:"); System.out.println(p.getDifference());
Pair.java Kapitel 3: Implementing classes - overordnet design af en klasse public class Pair { public Pair(double d1, double d2) {.. private double d1, d2; public double getsum() {.. public double getdifference() {.. Offentlige tilgangs metoder Private instans variable
Kapitel 4: Fundamental data types - bl.a. om input og class Scanner PairTest.java import java.util.scanner; public class PairTest { public static void main(string[] args) { System.out.println("Skriv to reelle tal:"); Scanner sc = new Scanner(System.in); Pair p = new Pair(sc.nextDouble(),sc.nextDouble()); System.out.println(..);..
class java.util.scanner (se Horstmann Appendix C) Scanner(InputStream in) Scanner(String s).. boolean hasnext() boolean hasnextdouble() // og int o.s.v. boolean hasnextline().. String next() Double nextdouble() // og int o.s.v. String nextline()..
BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang
Omvendings -opgave Skriv et program, der beder brugeren om en sætning, og derefter skriver sætningen ud i omvendt rækkefølge. Det sunde vink: Skab et genbrugeligt program med samme programstruktur som i P4.4. Sæt et grænse for antal ord. Alternativt vink: Lav et hack med et kort, rekursivt program.
class Strings public class Strings { public Strings(String s) { Scanner sc = new Scanner(s); while (sc.hasnext()) {add(sc.next()); private ArrayList strings = new ArrayList(); public void add(string s) { strings.add(s); public String get(int i) { if (0 <= i && i <= size()) return (String) strings.get(i); else return null; public int size() { return strings.size();
class StringsTest import java.util.scanner; public class StringsTest { public static void main(string[] args) { /* get sentence */ System.out.println("Skriv en sætning:"); Scanner sc = new Scanner(System.in); String s = sc.nextline(); /* store sentence */ Strings strings = new Strings(s); /* print reverse sentence */ System.out.println("Her kommer sætningen i omvendt rækkefølge:"); for (int i=strings.size() 1; i>=0; i ) System.out.print(strings.get(i) + " "); System.out.println();
class Hack import java.util.scanner; public class Hack { public static void main(string[] args) { System.out.println("Skriv en sætning:"); Scanner sc = new Scanner(System.in); String s = sc.nextline(); System.out.println("Her kommer sætningen i omvendt.. ); print(new Scanner(s)); System.out.println(); private static void print(scanner sc) { if (sc.hasnext()) { String s = sc.next(); print(sc); System.out.print(s + " ");
Rekursion i class Hack Metoden print() kalder sig selv rekursivt. Metodens krop: 1. Udtag det forreste ord. 2. Kald rekursivt. 3. Udskriv det forreste ord. Foretag håndkørsel: 1. Udtag forreste ord. (Hej) 2. Kald rekursivt 1. Udtag forreste ord. (med) 2. Kald rekursivt... 3. Udskriv forreste ord (med) 3. Udskriv forreste ord (Hej)
BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny opgave om omvending af sætning. 4. Introduktion til næste kursusgang
Næste gang: 13.9. Tal. Computerrepræsentation og -manipulation af tal. Logaritmer. Litteratur: 1. Jørgen Villadsens noter, s. 5-14. 2. Horstmann: Hvis du har Big Java: Appendix L og M Hvis du har Java Concepts: Download Appendix L og M fra http://www.wiley.com/college/horstmann
Opgaver Forudsætningsstof: Lav en udgave af omvendings -programmet uden øvre grænse for antal ord. Vink: Brug ArrayList. Talstof: Løs Problem 2 i Exercise 2 (E1.pdf) (tidsangivelsen på 20 min. er optimistisk) E1.pdf er skrevet af Jørgen Villadsen og kan downloades fra resources/opgaver på ecampus.