Föreläsning 9-10 Innehåll

Relevanta dokument
EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Föreläsning 3-4 Innehåll

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning REPETITION & EXTENTA

Saker du ska kunna Föreläsning 13 & 14

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E>

Föreläsning 13 Innehåll

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Föreläsning 7-8 Innehåll

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 2, vecka 8: Repetition

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Föreläsning 6: Metoder och fält (arrays)

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

DAT043 Objektorienterad Programmering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 14. Filhantering

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Del A (obligatorisk för alla)

Föreläsnings 9 - Exceptions, I/O

JAVAUTVECKLING LEKTION 4

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen OOP

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen , Introduktion till Java, dtaa98, dtea53

JAVAUTVECKLING LEKTION 8

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Typkonvertering. Java versus C

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Del A (obligatorisk för alla)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

"if"-satsen. Inledande programmering med C# (1DV402)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen, EDAA10 Programmering i Java

Föreläsning 5 Innehåll

Grundläggande programmering med C# 7,5 högskolepoäng

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 1-2 innehåll

2D1339 Programkonstruktion för F1, ht 2003

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

OOP Objekt-orienterad programmering

Iteration while-satsen

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

F4. programmeringsteknik och Matlab

Repetition av viktiga begrepp inom objektorienterad programmering

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Chapter 4: Writing Classes/ Att skriva egna klasser.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 3. Iteration while-satsen

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Tentamen i Objektorienterad programmering

Tentamen, EDA501 Programmering M L TM W K V

1 Repetition av viktiga begrepp inom objektorienterad programmering

Transkript:

Föreläsning 9-10 Innehåll Inläsning från textfil, utskrift från textfil Vektorer med objekt Matriser Datavetenskap (LTH) Föreläsning 9-10 HT 2018 1 / 41

Klassen Scanner Läsa från System.in Vi har tidigare skapat Scanner-objekt som läser data som användaren skriver när programmet exekveras: Exempel på ett program som läser heltal och summerar dem. public class SumNumbers { public static void main(string[] args) { Scanner scan = new Scanner(System.in)); int sum = 0; while (scan.hasnextint()) { sum = sum + scan.nextint(); System.out.println("Summa: " + sum); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 2 / 41

Klassen Scanner Läsa en sträng eller från en fil Det finns flera konstuktorer i klassen Scanner. Man kan t.ex. skapa ett Scanner-objekt som läser från en sträng: String s = "1 2 3 4 5"; Scanner scan = new Scanner(s); Man kan också skapa Scanner-objekt som läser från en fil (här från en fil med namnet numbers.txt): Scanner scan = new Scanner(new File("numbers.txt")); File är en färdig klass i Java som representerar en fil. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 3 / 41

try catch-sats När ett program exekveras som ska öppna en fil för läsning kanske det inte finns någon sådan fil. Detta fel (och andra liknande fel som är utanför programmerarens kontroll) måste man ta hand om i Java. Man kan använda en try catch-sats för detta. I exemplet nedan görs ett försök att öppna filen numbers.txt. Om det inte går avbryts exekveringen av satserna i try-blocket och satserna i catch-blocket kommer att utföras. try { // Här försöker vi öppna filen numbers.txt scan = new Scanner(new File("numbers.txt")); catch (FileNotFoundException e) { // Här kan man skriva vad som ska hända om // filen inte kan öppnas. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 4 / 41

Läsa indata från fil Exempel public class SumNumbers { public static void main(string[] args) { Scanner scan = null; try { scan = new Scanner(new File("numbers.txt")); catch (FileNotFoundException e) { System.out.println("Filen kunde inte öppnas"); System.exit(1); int sum = 0; while (scan.hasnextint()) { sum = sum + scan.nextint(); System.out.println("Summa: " + sum); scan.close(); // stäng filen Datavetenskap (LTH) Föreläsning 9-10 HT 2018 5 / 41

Utskrift på fil Klassen PrintWriter public class PrintWriterExample { public static void main(string[] args) { PrintWriter out = null; try { out = new PrintWriter(new File("utdata.txt")); catch (FileNotFoundException e) { System.out.println("Filen kunde inte öppnas"); System.exit(1); // utskrifter med out.print hamnar på filen utdata.txt out.close(); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 6 / 41

Utskrift på fil Exempel public class PrintSquareRoots { public static void main(string[] args) { PrintWriter out = null; try { out = new PrintWriter(new File("utdata.txt")); catch (FileNotFoundException e) { System.out.println("Filen kunde inte öppnas"); System.exit(1); for (int i = 1; i <= 100; i++) { out.println(math.sqrt(i)); out.close(); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 7 / 41

Vektorer Repetition av begrepp Deklarera och skapa vektor: vektorns namn antal element int[] v = new int[5]; elementens typ Markerar att det är en vektor och inte en vanlig int-variabel Använda vektor: for (int i = 0; i < v.length; i++) { v[i] = scan.nextint(); index antal element Datavetenskap (LTH) Föreläsning 9-10 HT 2018 8 / 41

Vektorer är objekt Vektorer är objekt i Java. Variabeln v refererar till vektorn. v 0 0 0 0 0 0 1 2 3 4 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 9 / 41

Vektorer är objekt Referenstilldelning Vad händer i detta exempel? Hur många vektorer skapas? Vad refererar b till? Komplettera bilden. int[] a = new int[3]; a[0] = 7; a[1] = 8; a[2] = 9; int[] b = a; a 7 8 9 0 1 2 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 10 / 41

Kopiera vektorer Exempel Kopiera a, dvs. skapa en ny vektor med samma innehåll som a. int[] a = new int[3]; a[0] = 7; a[1] = 8; a[2] = 9; int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) { b[i] = a[i]; a 7 8 9 0 1 2 b 7 8 9 0 1 2 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 11 / 41

Genvägar Överkurs, men praktiskt Skapa en vektor när man vet innehållet: int[] a = {7, 8, 9; Kopiera en vektor till en ny vektor med längden a.length: int[] b = Arrays.copyOf(a, a.length); Metoden Arrays.toString returnerar en sträng med vektorns innehåll. Skriv ut innehållet i vektorn: System.out.println(Arrays.toString(b)); a 7 8 9 0 1 2 b 7 8 9 0 1 2 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 12 / 41

Lagra objekt i vektorer Exempel tärningar Exempel: program som skapar 5 tärningar. public class FiveDice { public static void main(string[] args) { Die[] dice = new Die[5]; /** Skapa tärningarna */ for (int i = 0; i < dice.length; i++) { dice[i] = new Die(); /** Kasta tärningarna */ for (int i = 0; i < dice.length; i++) { dice[i].roll(); System.out.println("Tärning pos " + i + " visar " + dice[i].getdots()); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 13 / 41

Lagra objekt i vektorer Deklarera och skapa vektorn Vektorn dice med plats för fem Die-objekt: Die[] dice = new Die[5]; dice null null null 0 1 2 null null 3 4 Varje vektorelement är en referensvariabel av typen Die. Observera att vi inte har skapat några tärningsobjektobjekt ännu, bara en vektor med plats för fem tärningar. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 14 / 41

Lagra objekt i vektorer Skapa objekten for (int i = 0; i < dice.length; i++) { dice[i] = new Die(); 0 1 2 3 4 dice dots 1 dots 4 dots 1 dots 5 dots 5 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 15 / 41

Klassen Triangle Klassen Triangle har följande specifikation: /** Skapar en triangel med hörnpunkterna x1 y1, x2 y2 och x3 y3. */ Triangle(int x1, int y1, int x2, int y2, int x3, int y3); /** Flyttar triangeln dx i x-led och dy i y-led. */ void move(int dx, int dy); /** Ritar triangeln i fönstret w. */ public void draw(simplewindow w); Implementera klassen. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 16 / 41

Program som använder klassen Triangle public class TriangleExample { public static void main(string[] args) { Triangle t = new Triangle(10, 150, 50, 10, 90, 120); SimpleWindow w = new SimpleWindow(200, 200, "Triangel"); t.draw(w); t.move(20, 20); t.draw(w); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 17 / 41

Lagra objekt i vektorer Exempel triangel Hur ska vi hålla reda på hörnen? 6 st attribut med typen int: x1, y1, x2, y2, x3, y3? 3 st attribut med typen Point: p1, p2, p3? en vektor med tre punkter? Vi väljer den tredje varianten. Det finns en färdig klass Point i paketet java.awt. Vi kommer att använda dessa metoder: double getx(); double gety(); void translate(int dx, int dy) // flyttar punkten // dx längs x-axeln och // dy längs y-axeln Datavetenskap (LTH) Föreläsning 9-10 HT 2018 18 / 41

Klassen Triangle attribut, konstruktor och metoden move public class Triangle { private Point[] vertices; /** Skapar en triangel med hörnpunkterna x1 y1, x2 y2 och x3 y3. */ public Triangle(int x1, int y1, int x2, int y2, int x3, int y3) { vertices = new Point[3]; vertices[0] = new Point(x1, y1); vertices[1] = new Point(x2, y2); vertices[2] = new Point(x3, y3);... Observera att både vektorn och punkterna skapas i konstruktorn i det här exemplet. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 19 / 41

Lagra objekt i vektorer Attributet vertices 0 1 2 vertices x 10 x 50 x 90 y 150 y 10 y 120 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 20 / 41

Klassen Triangle Metoderna draw och move /** Flyttar triangeln dx i x-led och dy i y-led. */ public void move(int dx, int dy) { for (int i = 0; i < vertices.length; i++) { vertices[i].translate(dx, dy); /** Ritar triangeln i fönstret w. */ public void draw(simplewindow w) { w.moveto((int) Math.round(vertices[0].getX()), (int) Math.round(vertices[0].getY())); for (int i = 1; i < vertices.length; i++) { w.lineto((int) Math.round(vertices[i].getX()), (int) Math.round(vertices[i].getY())); w.lineto((int) Math.round(vertices[0].getX()), (int) Math.round(vertices[0].getY())); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 21 / 41

Diskutera Vi vill lägga till en metod i klassen Triangle som undersöker om en punkt med koordinaterna x, y ingår bland triangelns hörnpunkter. Börja skissa på metoden: Hitta på ett lämpligt namn Vilka parametrar ska metoden ha? Returtyp? Börja skissa på algoritm och/eller programkod Datavetenskap (LTH) Föreläsning 9-10 HT 2018 22 / 41

Linjärsökning Mönster Uppgift: Sök upp givet element i en följd av element. Lösning: Gå igenom elementen i tur och ordning och kontrollera för varje element om det är det sökta. Avbryt om det sökta elementet påträffas. Algoritm: for (int i = 0; i < "antal element"; i++) { if ("elementet på plats i är det vi söker") { avbryt Datavetenskap (LTH) Föreläsning 9-10 HT 2018 23 / 41

Linjärsökning Exempel 1 Lägg till en metod som undersöker om det finns någon hörnpunkt med koordinaterna x, y. public boolean hasvertex(int x, int y) { for (int i = 0; i < vertices.length; i++) { if (vertices[i].getx() == x && vertices[i].gety() == y) { return true; return false; Datavetenskap (LTH) Föreläsning 9-10 HT 2018 24 / 41

Håll koll på typerna Kontrollera att typerna stämmer vid tilldelningar och jämförelser för att undvika fel. namn typ index i int vektorn med punkter vertices Point[] en punkt vertices[i] Point punktens x-koordinat vertices[i].getx() int punktens y-koordinat vertices[i].gety() int Datavetenskap (LTH) Föreläsning 9-10 HT 2018 25 / 41

Se upp med return public boolean hasvertex(int x, int y) { for (int i = 0; i < vertices.length; i++) { if (vertices[i].getx() == x && vertices[i].gety() == y) { return true; else { return false; I den felaktiga koden ovan undersöker man bara vertices[0] och returnerar sedan direkt true eller false. Man ska fortsätta leta tills man hittat en punkt med matchande x- och y-koordinat eller tills alla punkter är genomsökta. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 26 / 41

return och break Med return avbryter man exekveringen av en metod. Med break avbryter man en loop. while (true) {... if (...) { break; // hoppar ut ut loopen Ska användas med försiktighet så att koden inte blir för svårläst. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 27 / 41

Linjärsökning Exempel 2 Lägg till en metod som undersöker om punkten p matchar någon av triangelns hörnpunkter. public boolean hasvertex(point p) { for (int i = 0; i < vertices.length; i++) { if (vertices[i].getx() == p.getx() && vertices[i].gety() == p.gety()) { return true; return false; Alternativ lösning: I klassen Point finns det en metod equals som jämför två punkters innehåll:... if (vertices[i].equals(p)) {... Datavetenskap (LTH) Föreläsning 9-10 HT 2018 28 / 41

Linjärsökning Med while-sats utan avbrott mitt i Algoritm: i = "platsen för det första elementet" while ("fler element kvar att söka igenom" && "elementet på plats i inte är det vi söker") i = platsen för nästa element Exempel: public boolean hasvertex(int x, int y) { int i = 0; while (i < vertices.length && (vertices[i].getx()!= x vertices[i].gety()!= y)) { i++; return i < vertices.length; Datavetenskap (LTH) Föreläsning 9-10 HT 2018 29 / 41

Linjärsökning Med while-sats undvik fel Ordningen mellan delvillkoren är viktig. I ett logiskt uttryck med flera delvillkor exevkeras inte mer än vad som behövs för att beräkna det logiska uttryckets värdet. Om i < vertices.length är false undersöks inte det andra deluttrycket. Man undviker därför att använda ett för stort index i vertices. Efter while-satsen vill man veta om det man sökte efter fanns eller ej. Jämför i med antal element för att avgöra detta: if (i < vertices.length) { return true else { return false; Om det sökta inte finns har i fått värdet vertices.length. Därför kan man inte använda vertices[i] i villkoret i if-satsen. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 30 / 41

Matriser kolonn 0 kolonn 1 kolonn 2 kolonn 3 kolonn 4 rad 0 7 9 123 41 1 rad 1 rad 2 22 11-18 16 12-4 3 0-2 1 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 31 / 41

Deklarera och skapa matriser elementens typ int[][] m = new int [3][5]; antal rader antal kolonner Datavetenskap (LTH) Föreläsning 9-10 HT 2018 32 / 41

Använda matriser Att använda ett matriselement: radindex kolonnindex m[2][0] = 0; Man kan ta reda på antal rader: m.length och antal kolumner på raden i: m[i].length Datavetenskap (LTH) Föreläsning 9-10 HT 2018 33 / 41

Övning Matris Deklarera och skapa en matris som representerar ett schackbräde med 8 x 8 rutor. På rutorna ska man kunna placera schackpjäser som beskrivs av en klass ChessPiece (som vi antar finns). Datavetenskap (LTH) Föreläsning 9-10 HT 2018 34 / 41

Exempel Matris Beräkna och skriv ut radsummorna i en 3 x 5-matris. för varje rad för varje element på raden behandla elementet for (int i = 0; i < m.length ; i++) { int sum = 0; for (int k = 0; k < m[i].length; k++) { sum = sum + m[i][k]; System.out.println(sum); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 35 / 41

Övning Matris Antag att vi har en matris booked av typen boolean[][] som ska användas för att hålla reda på bokade platser i en biosalong. Varje matriselement motsvarar en plats i salongen och har värdet true om platsen är bokad, i annat fall värdet false. Skriv satser som räknar antal bokade platser. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 36 / 41

Programexempel: rasterdata En kartas geometriska innehåll kan lagras i form av rasterdata. Det geometriska innehållet lagras som en matris där varje element motsvarar en ruta (t.ex. 50 x 50 kvadratmeter). I vårt exempel innehåller varje matriselement ett heltal som representerar markanvändning för den ruta som elementet motsvarar i verkligheten. Talet 1 betyder skog, 2 betyder åker och 3 betyder sjö. 1 1 1 1 2 3 3 Skog Åker Sjö 1 1 1 1 2 3 3 1 1 1 2 2 3 3 2 2 2 2 2 3 3 2 2 1 1 2 2 2 Datavetenskap (LTH) Föreläsning 9-10 HT 2018 37 / 41

Programexempel: rasterdata public class RasterData { public static void main(string[] args) { // 1 = skog, 2 = åker, 3 = sjö int[][] rasterdata = {{1, 1, 1, 1, 2, 3, 3, {1, 1, 1, 1, 2, 3, 3, {1, 1, 1, 2, 2, 3, 3, {2, 2, 2, 2, 2, 3, 3, {2, 2, 1, 1, 2, 2, 2; // Lägg till satser som beräknar och // skriver ut andel åker Datavetenskap (LTH) Föreläsning 9-10 HT 2018 38 / 41

Programexempel: rasterdata Andel åker int nbrfields = 0; for (int row = 0; row < rasterdata.length; row++) { for (int col = 0; col < rasterdata[row].length; col++) { if (rasterdata[row][col] == 2) { nbrfields++; double share = (double) nbrfields / (rasterdata.length * rasterdata[0].length); System.out.println("Andelen åker är " + share); Datavetenskap (LTH) Föreläsning 9-10 HT 2018 39 / 41

Programidé: rasterdata karta Programmet från föregående bilder kan modifieras så att man får en bild av markanvändningen. Använd t.ex. klassen Graphics från lab 5 och rita block i olika färg för skog, åker och sjö. Datavetenskap (LTH) Föreläsning 9-10 HT 2018 40 / 41

Checklista Exempel på vad du ska kunna Förklara begreppen datastruktur, vektor, matris. Deklarera, skapa och använda vektorer och matriser. Formulera algoritmer och programkod för att söka i en vektor (linjärsökning). Läsa data från en textfil Skriva data på en textfil Datavetenskap (LTH) Föreläsning 9-10 HT 2018 41 / 41