Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

Relevanta dokument
Arrayer (fält)

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Länkade strukturer. (del 2)

Arrayer. results

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Sammansatta datatyper Generics: Parametrisk polymorfism

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Repetition av OOP- och Javabegrepp

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Strängar. Elektronikcentrum i Svängsta AB

Repetition av OOP- och Javabegrepp

Objektorienterad programmering

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

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

Datastrukturer. föreläsning 3. Stacks 1

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

DAT043 - föreläsning 8

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

Konvertering från sträng. Winstrand Development

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Föreläsning 3-4 Innehåll

Visual Basic, en snabbgenomgång

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Datalogi, grundkurs 1. Lösningsförslag till tentamen

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Metoder (funktioner) Murach s: kap Winstrand Development

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

Föreläsning 6: Introduktion av listor

Beräkningsvetenskap föreläsning 2

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TDDC77 Objektorienterad Programmering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

OOP Objekt-orienterad programmering

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

TDDE44 Programmering, grundkurs

Introduktion till Java

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

[] Arrayer = Indexerad variabel

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

Föreläsning 4 Innehåll

Stackar, köer, iteratorer och paket

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

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning REPETITION & EXTENTA

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

TDIU01 - Programmering i C++, grundkurs

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Paket (2) nautisk_mil : constant Float := * foot; ångström : constant Float := 10.0E-10; mile : constant Float := 5280.

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Tentamen Grundläggande programmering

Lektion 7. Datateknik A, Java I, 5 poäng

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

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

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

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

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 6 pekare och pekare tillsammans med arrayer

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

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

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Del A (obligatorisk för alla)

maxlist-1. Indexerad lista Länkad lista

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen OOP

Användarhandledning Version 1.2

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

TDIU01 - Programmering i C++, grundkurs

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

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

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

int iarray[]= new int[3]; // deklarera ett heltalsfält med tre heltal int jarray[]={ 1, 3, 5, 7, 9, 11, 13, 15}; // initierat fält 8 element

729G04 Programmering och diskret matematik. Föreläsning 7

Del A (obligatorisk för alla)

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Lösningsförslag: Instuderingsfrågor, del D

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Datastrukturer och algoritmer

1 Standardalgoritmer. 1.1 Swap. 1.2 Sök minsta värdet i en array

Introduktion till MATLAB, med utgångspunkt från Ada

Transkript:

Arrayer (vektorer) Murach s: kap 8 2013-01-15 1 Elektronikcentrum i Svängsta AB

Arrayer Arrayer (vektorer) Ofta i ett program har vi flera variabler av samma datatyp som är relaterade till varandra. Exempel Koordinater längs en sträcka mellan två punkter (tänk GPS med vägbeskrivning) Namn på personer som är medlemmar i en klubb Istället för att ha flera variabler kan vi använda oss av arrayer (även kallat vektorer). EC Utbildning AB 2013-01-15 2

Arrayer Arrayer (vektorer) En array är en variabel som just består av en samlig relaterad data. De har en definierad längd (storlek). När storleken bestämts går den ej att ändra. Deklaration av en array består av flera delar: datatype[] arrayname = new datatype[size]; datatype int, string, decimal etc.. Hakparenteser [] Visar att det är en array arrayname new size Namnet på arrayen (variabelnamet) Minne för arrayen allokeras (arrayer är klasser i.net) Antal element som ryms i arrayen EC Utbildning AB 2013-01-15 3

Arrayer Arrayer (vektorer) En vektor kan bestå av en eller flera dimensioner. Oftast är dessa en- eller tvådimensionella. Varje dimension kan bestå av ett eller flera element Index börjar på 0 första elementet i arrayen ligger på plats 0. Innehåller arrayen 3 element är således högsta index 2. Man kommer åt ett element genom att ange dess index inom hakparenteser [ ] //Endimenstionell vektor med 3 element int[] onedimarray = new int[3]; onedimarray[0] = 1; //första elementet - alltid på plats 0 onedimarray[1] = 2; onedimarray[2] = 3; //sista elementet - alltid 1 mindre än storleken på arrayen //Tvådimensionell vektor med (2 x 3) 6 element double[,] multiarray = new double[2, 3]; multiarray[0, 0] = 1.0; //första elementet multiarray[1, 2] = 6.0; //sista elementet EC Utbildning AB 2013-01-15 4

Arrayer Endimensionella arrayer och initiering Vanligast är att man arbetar med endimensionella vektorer. Vet man vilka värden som ska finnas i arrayen kan man tilldela dessa direkt. Dessa anges inom måsvingar {} och separerade med komma,. //Initiering på två rader string[] names; //deklaration names = new string[2]; //tilldelning med storlek (2) // Initiering med värden. Storleken beräknas automatiskt int[] intarray = { 1, 2, 3, 4 }; // Initiera med storlek. Värdena nollställs decimal[] prices = new decimal[2]; prices[0] = 2.7m; //första elementet prices[1] = 3.14m; //andra (sista) elementet EC Utbildning AB 2013-01-15 5

Arrayer Endimensionella arrayer Man kan tänka sig att en endimensionell array är som en lista. int[] array = {10, 9, 8, 7}; Index 0 1 2 3 Värde 10 9 8 7 array[1] = 6; array[3] = array[2]; Index 0 1 2 3 Värde 10 6 8 8 EC Utbildning AB 2013-01-15 6

Arrayer Tvådimensionella arrayer Arbetar man med två dimensioner används kommatecknet (,) för att separera på dimensionerna. Tvådimensionella arrayer kan visualiseras som en tabell där första dimensionen är raderna och andra dimensionen är kolumnerna. double[,] arrayname = new double[rows, columns]; EC Utbildning AB 2013-01-15 7

Arrayer Tvådimensionella arrayer För att komma åt ett element i arrayen behöver vi här ange båda dimensionerna // Skapa arrayen int[,] myarray = new int[2, 3]; //Första raden myarray[0, 0] = 1; myarray[0, 1] = 2; myarray[0, 2] = 3; //Andra raden myarray[1, 0] = 4; myarray[1, 1] = 5; myarray[1, 2] = 6; EC Utbildning AB 2013-01-15 8

Arrayer Tvådimensionella arrayer Värden nollställs vid initiering // Skapa arrayen int[,] myarray = new int[2, 3]; //Första raden myarray[0, 0] = 1; myarray[0, 1] = 2; myarray[0, 2] = 3; //Andra raden myarray[1, 0] = 4; myarray[1, 1] = 5; myarray[1, 2] = 6; Kolumn Rad 0 1 2 0 0 0 0 1 0 0 0 Kolumn Rad 0 1 2 0 1 2 3 1 4 5 6 EC Utbildning AB 2013-01-15 9

Arrayer Tvådimensionella arrayer Precis som med endimensionella arrayer kan tvådimensionella dito initieras med värden: // Initiera en 2 x 3-array med värden int[,] myarray = { { 1, 2, 3 }, //Rad 1 {4, 5, 6 } }; //Rad 2 EC Utbildning AB 2013-01-15 10

Arrayer Flerdimensionella arrayer Vanligtvis arbetar man med en eller två dimensioner i sina arrayer. Krävs fler än två dimensioner i din array är det samma tillvägagångssätt som med tvådimensionella arrayer det kräver bara utökning av dimensionerna: int[,,] threed = new int[2, 4, 8]; EC Utbildning AB 2013-01-15 11

Arbeta med arrayer 2013-01-15 12 Elektronikcentrum i Svängsta AB

Arbeta med arrayer Arrayers storlek När man hanterar arrayer är det viktigt att tänka på dess storlek. Anger du en indexposition utanför arrayens gränser kommer programmet med all sannolikhet att krascha! int[] array = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3; // Skriver utanför arrayens gräns- // IndexOutOfRangeException kommer genereras array[3] = 4; Index 0 1 2??? Värde 1 2 3??? EC Utbildning AB 2013-01-15 13

Arbeta med arrayer Arrayers storlek För att ta reda på hur många element det finns i en array, eller specifik dimension i arrayen, finns följande metoder i tabellen nedan. Dessa är speciellt användbara tillsammans med loopar då man på ett enkelt sätt kan stega genom alla element Metod/Property Beskrivning Length Returnerar ett heltal (integer) som representerar antalet element för alla dimensioner i arrayen. En 4x4-array returnerar då 16. OBS returvärdet är antalet element i arrayen, inte det högsta indexvärdet! GetUpperBound(dim) Finn det största index-värdet i arrayen för vald dimension (skickas som parameter). Precis som vanligt index börjar man räkna på 0. EC Utbildning AB 2013-01-15 14

Arbeta med arrayer Arrayers storlek Exempel //Några produkters priser decimal[] prices = {10.9m, 23m, 139m, 59.9m,74.5m}; decimal subtotal = 0.0m; Console.WriteLine("Antal element: {0}", prices.length); Console.WriteLine("Högsta indexvärde: {0}", prices.getupperbound(0)); //Gå igenom alla element //Tänk på att Length alltid är 1 (ett) större än antalet element! for (int i = 0; i < prices.length; i++) { subtotal += prices[i]; Console.WriteLine("index {0}:\t{1:c}", i, prices[i]); } Console.WriteLine("Slutsumma:\t{0:c}", subtotal); Console.ReadLine(); Antal element: 5 Högsta indexvärde: 4 index 0: 10,90 kr index 1: 23,00 kr index 2: 139,00 kr index 3: 59,90 kr index 4: 74,50 kr Slutsumma: 307,30 kr EC Utbildning AB 2013-01-15 15

Arbeta med arrayer Foreach Att stega igenom en array (eller andra collections såsom List och Dictionary som förklaras senare) finns en dedikerad loop: foreach. foreach(datatype value in collection) { //gör någonting med value } EC Utbildning AB 2013-01-15 16

Arbeta med arrayer Foreach //Några produkter med priser decimal[] prices = { 10.9m, 23m, 139m, 59.9m, 74.5m }; decimal subtotal = 0.0m; //Gå igenom alla element foreach(decimal value in prices) { subtotal += value; Console.WriteLine("enhetspris:\t{0:c}", value); } Console.WriteLine("Slutsumma:\t{0:c}", subtotal); Console.ReadLine(); enhetspris: enhetspris: enhetspris: enhetspris: enhetspris: Slutsumma: 10,90 kr 23,00 kr 139,00 kr 59,90 kr 74,50 kr 307,30 kr EC Utbildning AB 2013-01-15 17

Arbeta med arrayer Foreach Vissa begränsningar finns där man måste använda en vanlig for-loop: Vi vill bara komma åt vissa element i samlingen, exempelvis element 10-15. Med foreach går vi igenom alla element. Vi vill uppdatera elementen. Uppbyggnaden av foreach gör det omöjligt att uppdatera värdetyper. Man behöver en for-loop för detta ändamål. EC Utbildning AB 2013-01-15 18

Arbeta med arrayer Statiska metoder på arrayer Det finns även två statiska metoder för array-klassen som är användbara. Då dessa metoder är statiska anropas de direkt på Array-klassen. Metod Beskrivning Clear(myArray, index, length) Nollställer de specificerade värdena mellan index och length element framåt. IndexOf(myArray, value) och LastIndexOf(myArray, value) Finn första respektive sista index-värdet för det specificerade värdet. Om värdet inte kunde hittar returneras -1 EC Utbildning AB 2013-01-15 19

Arbeta med arrayer Statiska metoder på arrayer // En array med dimensionerna 4x2 int[,] myarray = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; //statisk method anropas direkt på Array! Array.Clear(myArray, 1, 4); 1 2 3 4 5 6 7 8 Array.Clear(myArray, 1, 4); 1 0 0 0 0 6 7 8 EC Utbildning AB 2013-01-15 20

Collections (samlingar) Murach s: kap 8 (från s. 232) 2013-01-15 21 Elektronikcentrum i Svängsta AB

Collections (samlingar) Collections En utökning av Arrayer är så kallade collections (samlingar). Till skillnad från arrayer, som har en fast storlek, kan collections variera antalet element i sig. Det är alltså möjligt att lägga till och ta bort element dynamiskt samlingen utökas automatiskt när det behövs. EC Utbildning AB 2013-01-15 22

Collections (samlingar) Collections De collectionklasser som man främst använder är generiska (eng. generic) Detta betyder att man anger, direkt efter typnamnet och innanför vinkelparenteser (<>), vilken datatyp samlingen ska innehålla. Man skriver ofta List<T> för att symbolisera att klassen är generisk. T står för Type. En lista som innehåller int definieras såhär: List<int> mylist = new List<int>(); EC Utbildning AB 2013-01-15 23

Collections (samlingar) Collections De vanligaste collectionklasserna är: Klass Beskrivning List<T> Fungerar ungefär som en array man kommer åt ett element via dess index. Dictionary<TKey,TValue> Liknar ett uppslagsverk man använder ett nyckelord, TKey, för att komma åt definitionen (alltså värdet), TValue. De kan vara av olika datatyper. Queue<T> Stack<T> En kö av typen FIFO (First In, First Out). Det som kommer först in i kön tas först ut. En stack (hög, stapel) av typen LIFO (Last In, First Out). Det som läggs överst på högen tas bort först. EC Utbildning AB 2013-01-15 24

Collections (samlingar) List<T> Den absolut vanligaste samlingsklassen är List<T> då den är ett bra substitut för vanliga arrayer. En List<T> kan alltså innehålla en datatyp dock kan olika List<T> innehålla olika datatyper: List<int> mylist = new List<int>(); List<string> names = new List<string>(); List<decimal> pricelist = new List<decimal>(); EC Utbildning AB 2013-01-15 25

Collections (samlingar) List<T> Vanligt förekommande metoder och properties i List<T>-klassen är: Metod/Property Beskrivning Count Add(object) Clear() Sort() Antalet element i listan, alltså samma värde som Length hos en array. Lägg till ett element i listan. Elementet lägger sig sist. Tömmer och nollställer listan. Sortera listan i stigande ordning (dvs. minsta värdet först) EC Utbildning AB 2013-01-15 26

Collections (samlingar) List<T> List<decimal> pricelist = new List<decimal>(); // Skapa listan // Lägg till värden pricelist.add(79.9m); pricelist.add(2.5m); pricelist.add(159.0m); pricelist.add(25.5m); Console.WriteLine("Det finns {0} element i listan", pricelist.count); Det finns 4 element i listan 79,90 kr 2,50 kr 159,00 kr 25,50 kr Uppdaterad och sorterad lista: 2,50 kr 25,50 kr 30,90 kr 79,90 kr Uppdaterad lista: Det finns 1 element i listan 10,50 kr // stega igenom alla element foreach (decimal price in pricelist) { Console.WriteLine(price.ToString("c")); } pricelist[2] = 30.90M; // uppdatera andra elementet pricelist.sort(); // sortera listan Console.WriteLine("\nUppdaterad och sorterad lista:"); foreach (decimal price in pricelist) { Console.WriteLine(price.ToString("c")); } pricelist.clear(); pricelist.add(10.5m); //Töm listan... //Och lägg till ett värde Console.WriteLine("\nUppdaterad lista:"); Console.WriteLine("Det finns {0} element i listan", pricelist.count); foreach (decimal price in pricelist) { Console.WriteLine(price.ToString("c")); } Console.ReadKey(); EC Utbildning AB 2013-01-15 27

Collections (samlingar) Dictionary<TKey, TValue> Ibland används två värden av olika datatyp ihop i ett par. Då är klassen Dictionary användbar då den sparar en nyckel som ger tillgång till ett värde. Exempel på tillämpningar kan vara Ett uppslagsverk (som namnet antyder) slå upp ett ord och du får en beskrivning Prislista en produkt är bunden till ett pris. EC Utbildning AB 2013-01-15 28

Collections (samlingar) Dictionary<TKey, TValue> Vanligt förekommande metoder och properties i Dictionary-klassen är (förutom de som nämnts om List): Metod/Property Add(TKey, TValue) Beskrivning Lägg till ett element-par. ContainsKey(TKey) Returnerar true om nyckeln finns i samlingen, false annars. ContainsValue(TValue) Returnerar true om värdet finns i samlingen, false annars. EC Utbildning AB 2013-01-15 29

Collections (samlingar) Dictionary<TKey, TValue> Dictionary<string, decimal> pricelist = new Dictionary<string, decimal>(); string product; decimal price; // Lägg till några produkter pricelist.add("potatis", 6.5m); pricelist.add("shampoo", 15m); pricelist.add("spagetti", 12m); product = "Spagetti"; //kolla så att nyckeln finns - //finns inte nyckeln kommer programmet krascha! if (pricelist.containskey(product)) { price = pricelist[product]; Console.WriteLine(product + " kostar " + price.tostring("c")); } else { Console.WriteLine("Kunde inte hitta produkten"); } Console.ReadLine(); Spagetti kostar 12,00 kr EC Utbildning AB 2013-01-15 30

Collections (samlingar) Collections utan typ Klassen ArrayList används för att, på samma sätt som en List<T>, samla ihop data. Skillnaden mellan ArrayList och List<T> är att ArrayList kan ta alla datatyper. Vi kan alltså blanda int, decimal, string etc. hur vi vill. Denna användes innan de generiska klasserna fanns, dvs. innan version 2.0 av.net. Använd om möjligt de generiska varianterna då de är säkrare. Mer information om denna klass finns i böckerna EC Utbildning AB 2013-01-15 31