Föreläsning 6: Introduktion av listor
|
|
- Sven-Erik Magnusson
- för 8 år sedan
- Visningar:
Transkript
1 Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras. En lista är en sekvens av data. Man skulle kunna implemetera en lista med hjälp av t.ex. antingen typen fält "array (...) of..." eller type fil "File_Type". Jämförr mellan lista gjord med pekare och lista av fält: + Pekarlistan kan vara godtyckligt lång och man behöver inte dimensionera den från början. Endast primärminnets storlek begränsar längden. + Pekarlistan kan bli längre och kortare beroende på hur många data som skall lagras. Tar alltså lagom mycket minne hela tiden. - Element i pekarlistan kan inte nås direkt (i varianten med fält går detta m.h.a. index) utan måste letas upp. - Man måste skriva underprogram för att kunna kopiera en pekarlista till en annan eller jämföra två pekarlistor. Jämförr mellan lista gjord med pekare och lista av fil: + Pekarlistan ligger i primärminnet vilket ger snabbare åtkomst än filvarianten. + I pekarlistan kan man stoppa in data mellan två andra data vilket inte går enkelt i filvarianten. - Pekarlistan försvinner när programmet avslutas då det finns krav att man lämnar tillbaka dynamiskt bundet minne. Vi väljer i detta fall att arbeta med pekarlistor och det är vanligast att man menar dessa om man bara säger lista. Här följer en figur som visar hur en enkellänkad lista med två data kan se ut. List: Data:???? Data:???? Next: Next:
2 Man lagrar varje data i en post (man brukar kalla listans poster för element eller noder) och dessutom en pekare till nästa element i listan. Man kan rita detta på ett förenklat sätt. Exempel med tre element i listan.???????????? När man hanterar dessa listor i ett huvudprogram vill man dock inte hålla på med en massa "bökig" pekarhantering. Det man gör är att abstrahera bort detta genom att skapa ett paket som hanterar listor. Hur deklarerar man det som behövs för att det skall motsvara ovanstående bild? Här kommer typdeklarationsdelen. type Element_Type; type List_Type is access Element_Type; type Element_Type is record Data : Integer; Next : List_Type; end record; Deklaration av Element_Type. Definition av List_Type. Definition av Element_Type. Om datat är ett heltal. Om man skall stoppa in detta i ett paket skall man självklart gömma undan hela definitionen av typerna i den privata delen och endast visa List_Type i den publika delen. Hur visar man List_Type utan att visa vad den egentligen "består av". Alternativ 1 (räcker för att gömma undan typen): type List_Type is private; Alternativ 2 (med lite fler restriktioner på vad man kan göra med data av den typen): type List_Type is limited private; Vilka operationer vill man kunna utföra på en lista? Här är några förslag, men beroende på vad man skall använda listan till kan det vara andra saker som är mer väsentliga. 1. Insert - Stoppa in ett data i listan. Man kan tänka sig olika varianter på "Insert". Argument: Listan och datat. 2. Remove - Ta bort ett data ur listan. Man kan tänka sig olika varianter på "Remove". Argument: Listan och någon form av söknyckel (i enklaste fallet själva datat). 3. Delete - Ta bort hela listan. Argument: listan.
3 4. Find - Leta reda på ett data i listan. Argument: Listan och någon form av söknyckel (i enklaste fallet själva datat). 5. Length - Längden av listan (antalet element i listan). Argument: Listan. Detta skall göras på laborationen så vi tar inte och gör detta nu, men vi kan titta på en av funktionerna för att prova det här med pekarhantering. Vi tar funktionen Length som exempel och löser den på två olika sätt. Iterativt och rekursivt. Det är viktigt att man tar hand om fallet med "tom lista". Om detta inte görs kan man råka ut för att programmet kraschar (exception) och det skall man ju undvika om det är möjligt. Iterativ lösning (rita figurer). function Length(List : in List_Type) return Natural is L : List_Type := List; Len : Natural := 0; while (L /= null) then L := L.Next; Len := Len + 1; end loop; return Len; end Length; Rekursiv lösning (rita figurer). function Length(List : in List_Type) return Natural is if (List = null) then return 0; return 1 + Length(List.Next); end Length; Ett exempel där vi använder oss av iterativ problemlösning för att visa att detta ger en hel del extra att hålla reda på. Vi utför en "Insert" där datat skall hamna sorterat i en redan existerande lista. Listan består av heltal för att göra det så litet som möjligt.
4 Vi antar att vi har ett huvudprogram som ser ut så här: procedure Main is Deklaration av listtyp... type List_Node; type List_Type is access List_Node; type List_Node is record Data : Integer; Next : List_Type; end record; Definition av proceduren "Insert". Här skall proceduren in senare... Deklaration av variabler... List : List_Type; X : Integer; Kod som utförs innan... for I in loop Get(X); Insert(List, X); end loop; Mer kod som gör något... end Main; Hur ser nu "Insert" ut? Vi kan iallafall få fram hur ett procedurskelett ser ut. Sen får vi fundera på hur vi skall lösa problemet. procedure Insert(List : in out List_Type; end Insert; Nu behöver vi rita en hel del figurer. Dels vilka varianter av listor som kan komma in till denna rutin och dels vilka olika data som skall lagras som kommer in. Detta ger en grund till vad som skall göras. Vi ser alltså proceduren som en svart låda som skall utföra något och bryr oss inte om exakt hur den gör detta.
5 Fall 1: Tom lista och godtyckligt data. Fall 2: Lista med ett element och a) data som skall in först i listan. b) data som skall in efter listans element. Fall 3: Lista med två element och a) data som skall in först i listan. b) data som skall in efter listans första element. c) data som skall in efter listans andra element. Fall 4: Lista med tre element (vilket i många fall är det samma som godtyckligt antal element och a) data som skall in först i listan. b) data som skall in efter listans första element. c) data som skall in efter listans andra element. d) data som skall in efter listans sista element. Hur gör vi detta? Vi tar ett fall i taget och löser det. Fall 1: Fall 2 a: Fall 2 b: New_Node : List_Type; New_Node := new List_Node; New_Node.Data := Data; New_Node.Next := null; end...; New_Node := new List_Node'(Data => Data, Next => List); List := New_Node; OBS! Ej Free på New_Node!!! end...; New_Node := new List_Node'(Data => Data, Next => List.Next); List.Next := New_Node; end...; Fall 3 a: Samma som 2 a. Fall 3 b: Samma som 2 b.
6 Fall 3 c: New_Node := new List_Node'(Data => Data, Next => List.Next.Next); List.Next.Next := New_Node; end...; Vi ser att det inte kommer att bli roligt att fortsätta så här. Vi försöker hitta ett lite bättre sätt (som löser vårt probem lite mer generellt). Vi inför ett par extra pekare som håller reda på var i listan man befinner sig. Fall 3 b: Current, Next : List_Type; Current := List; Next := List.Next; while (Next /= null) loop if (Data < Next.Data) then Insert_First(Current.Next, Data); Fall 2a Lämnar en rad... Current := Next; Next := Current.Next; end loop; end...; Nu fungerar det ganska bra, men det fallerar när man kommer till slutet av listan (om vi skall stoppa in datat efter alla element i listan). Skulle man kunna lösa detta på en gång? Det går om vi på något sätt håller reda på att vi inte har stoppat in datat i listan. Vi inför en extra variabel till som bara håller reda på detta. Current, Next : List_Type; Data_Inserted : Boolean := False; Current := List; Next := List.Next; while (Next /= null) and (not Data_Inserted) loop if (Data < Next.Data) then Insert_First(Current.Next, Data); Fall 2 a Data_Inserted := True; Current := Next; Next := Current.Next; end loop; if not Data_Inserted then Insert_First(Current.Next, Data); end...;
7 Om man tittar lite extra på detta ser man att detta inkluderar alla fall då det nya datat inte skall in först i listan. Hur kommer hela proceduren att se ut då? procedure Insert(List : in out List_Type; New_Node : List_Type; Current, Next : List_Type; Data_Inserted : Boolean := False; if List = null then List := new List_Node'(Data => Data, Next => null); elsif Data < List.Data then New_Node := new List_Node'(Data => Data, Next => List); List := New_Node; Current := List; Next := List.Next; while (Next /= null) and (not Data_Inserted) loop if (Data < Next.Data) then New_Node := new List_Node'(Data => Data, Next => Next); Current.Next := New_Node; Data_Inserted := True; Current := Next; Next := Current.Next; end loop; if not Data_Inserted then New_Node := new List_Node'(Data => Data, Next => Null); Current.Next := New_Node; end Insert;
8 Man kan också upptäcka att det går att modifiera lite till för att slippa lite kod, men det kanske är lättare att förstå koden om man inte gör detta. Vi gör modifieringen iallafall för att se vad som kunde gjorts. procedure Insert(List : in out List_Type; Current, Next : List_Type; if (List = null) or (Data < List.Data) then Datat skall in först i listan. List := new List_Node'(Data => Data, Next => List); Leta rätt på den plats datat skall in. Current := List; Next := List.Next; while (Next /= null) and then (Data >= Next.Data) loop Current := Next; Next := Current.Next; end loop; Stoppa in datat i efterhand. Current.Next := new List_Node'(Data => Data, Next => Next); end Insert; Om vi skapar alla våra underprogram som hanterar listor på detta vis (iterativt) kommer vi att ha samma problem för varje gång vi skall lösa ett nytt problem. Om vi istället nyttjar att vi kan skriva samma sak rekursivt kommer vi att få en mall som vi snabbt kan nyttja till att lösa många olika varianter av problem. Det finns nackdelar med att använda rekursion, men i denna kurs behöver vi inte ta hänsyn till dessa. Under labserien gör vi uppgifterna rekursivt så slipper vi krångla med iterativa lösningar. Övning på lektion Uppgift 1: Antag att vi har en lista med data som är heltal. Hur gör vi för att stoppa in ett nytt heltal först i listan. Vi kan kalla det underprogram vi skapar för Insert_First. Vi löser detta rekursivt. Är det någon som vill lösa detta iterativt så får det bli en hemuppgift. Först måste man komma fram till om det skall vara en procedur eller en funktion man skall göra. I detta fall är det väl lämpligast med en procedur. Vi skall ju påverka den lista vi skickar in. Vi skriver ett procedurskelett:
9 procedure Insert_First(List : in out List_Type; Här skall det in satser... end Insert_First; Rita upp olika fall av indata och vad som skall komma ut som resultat. Bra fall är "tom lista", "lista med ett element", "lista med två element" och "lista med tre element". Diskutera hur vi skall lösa problemen ett efter ett. Fallet "tom lista" (brukar alla komma på hur man gör): if (List = null) then List := new Element_Type; List.Data := Data; List.Next := null; Inte tom lista. Denna kod kan vi stoppa in direkt i procedurskelettet. Nästa steg är att fylla på med de övriga fallen. Här krävs nog en liten fundering. Efter kort diskussion brukar det lösa sig och de kommer fram till att alla tre fallen egentligen är samma fall. Fallet "ej tom lista": E := new Element_Type; E.Data := Data; E.Next := List; List := E; Här krävs en extra variabel, E (av typen List_Type), för att lösa problemet. Den måste deklareras i proceduren. Efter en liten diskussion kan man dessutom komma fram till att dessa två fall egentligen är samma. Vi modifierar fallet "tom lista" på så sätt att vi använder den lokala variabeln E och vi upptäcker att det blir samma kod som fallet "ej tom lista". Om man vill kan man också införa ett "snabbare" sätt att tilldela den nya posten sina initialvärden. Eller i kortform: E := new Element_Type'(Data => Data, Next => List); E := new Element_Type'(Data, List);
10 Alltså kan vi ta bort if-satsen och skriva vår funktion i en form som ser ut på följande sätt. procedure Insert_First(List : in out List_Type; E : List_Type; E := new Element_Type'(Data, List); List := E; end Insert_First; Vill man ändra sig lite till så kan man faktiskt till och med ta bort den extra variabeln E. Här kommer sista förslaget: procedure Insert_First(List : in out List_Type; List := new Element_Type'(Data, List); end Insert_First; Uppgift 2: Skriv proceduren som utför en insättning av ett nytt data i en lista, men där kravet är att datat skall sorteras in på rätt plats i listan. Listan skall både före insättning och efter det att nya datat stoppats in vara sorterad så att minsta datat ligger först och alla efterföljande ligger i stigande storleksordning. Förutsättning: Det nya datat får inte finnas i listan sen tidigare. (Hemuppgift?) Vi börjar direkt att skriva ett procedurskelett: procedure Insert(List : in out List_Type; Här skall det in satser... end Insert; Rita upp olika fall av indata och vad som skall komma ut som resultat. Bra fall är "tom lista", "lista med ett element där datat är större än det nya", "lista med ett element där datat är mindre än det nya", "lista med två element där första datat är större än det nya", "lista med två element där första datat är mindre än och andra datat är större än det nya", "lista med två element där båda data är mindre än det nya". Nu börjar diskussionerna igen. Hur gör man i de olika fallen. Vi börjar med fallet "tom lista" (här brukar de inse att det är samma kod som i Insert_First, men inte att de kan anropa den proceduren):
11 if (List = null) then Insert_First(List, Data); Om man frågar om det finns några fall av de uppräknade som egentligen är samma fall så kommer de antagligen fram till att alla fall som har första datat större än det nya datat kommer att resultera i samma fall. Vi tar alltså hand om alla fall där första datat är större än det nya: elsif (List.Data > Data) then Insert_First(List, Data); Även här kan det vara så att de inte inser att det går att använda samma rutin igen. Frågan är om man inte kunde slå ihop de två första delarna i if-satsen till en enda? Då skulle det väl bli: if (List = null) or (List.Data > Data) then Insert_First(List, Data); Eller fungerar inte det? Nej, det gör det inte! Ada är inte definierat på så sätt att första delvillkorets resultat avgör hela villkoret i if-satsen även om det råkar vara omöjligt att få annat svar efter detta. Hela villkoret kommer att beräknas och då kommer det andra villkoret att ge fel (pekaren pekar ju ingenstans och vi försöker referera ett minnesutrymme som "inte finns"). Den första varianten är alltså bättre. Det är dessutom så att man ökar läsbarheten om man alltid ser till att testa "tom lista" som ett eget fall. Nu går det att lösa problemet ovan i Ada. Man kan skriva if-satsen på följande sätt så att bara första villkoret testas om det är tillräckligt för att avgöra om man skall utföra något eller ej. if (List = null) or (List.Data > Data) then Insert_First(List, Data); De fall som nu finns kvar är de som inte har ett första data som är större än det nya datat. Av dem vi ritat upp är dessa kvar: "lista med ett element där datat är mindre än det nya", "lista med två element där första datat är mindre än och andra datat är större än det nya", "lista med två element där båda data är mindre än det nya". En diskussion med studenterna kan ge att man tar ett av fallen i taget och löser dem, men detta leder till att vi måste lägga till ytterligare ett antal fall som kan ställa till det (t.ex. med tre, fyra eller fem element i listan...). Ett förslag man då kan ge är att man stryker första elementet i listan och tittar på "resten av listan" som en enhet. Man vet ju att det första datat är mindre så det skall ju hamna först. Frågan är bara var vi skall stoppa in det nya datat i "resten av listan". Det kan vara någon som kommer på att man då kan göra ett rekurivt anrop, men om vi antar att det inte är någon kan vi ju säga att vi anropar en annan procedur som klarar av att stoppa in datat på rätt ställe så har vi iallafall skjutit problemet framåt. Vi kompletterar vår kod med: Insert2(List.Next, Data);
12 Nu har vi inga fler fall att ta hand om. Om det är så att ingen har kommit på att man kan anropa sig själv för att lösa problemet får vi väl börja om från början och fråga vilka olika fall som kan uppstå och när vi ritat upp några fall kan vi referera tillbaka till att det ju är samma fall som tidigare. Alltså: Vi anropar oss själva så är hela problemet löst. Ändra koden så att det blir: Insert(List.Next, Data); Rekursivt anrop. Hela proceduren så att vi ser vad vi gjort: procedure Insert(List : in out List_Type; if (List = null) then Insert_First(List, Data); elsif (List.Data > Data) then Insert_First(List, Data); Insert(List.Next, Data); end Insert; Från ett ganska komplext problem har vi nått fram till en lösning som är lättläst (när man väl vant sig med begreppet rekursions) och dessutom har vi bara två gånger i hela proceduren behövt använda oss av pekarhantering (List.Data respektive List.Next). Dessutom har vi i just detta exempel inget behov av lokala variabler i proceduren. Vi kan visa hur samma procedur skulle ha sett ut om vi inte hade haft rekursion att tillgå.
Föreläsning 4: Poster
Föreläsning 4: Poster Följande är genomgånget: type Person_Type is Namn : String(30); Skonr : Float; Kon : Boolean; Diskussion runt detta med olika typer m.m. Har tagit upp vilka operationer man kan göra
Läs merTommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
Läs mer6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:
6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt
Läs merFöreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och
Läs merFöreläsning 5: Introduktion av pekare
Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men
Läs merTentamen Grundläggande programmering
Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:
Läs merTräd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4
Träd, binära träd och sökträd Koffman & Wolfgang kapitel 6, avsnitt 1 4 1 Träd Träd är ickelinjära och hierarkiska: i motsats till listor och fält en trädnod kan ha flera efterföljare ( barn ) men bara
Läs merObjektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Läs merProgrammering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller
Läs merTentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
Läs merExempel på ett litet Ada-program
Exempel på ett litet Ada-program -- En kommentar som beskriver något. with Ada.Text_IO; procedure Mini is -- Deklarationer. K : constant Integer := 5; X, Y : Integer; -- Körbar kod. Ada.Text_IO.Put( Utskrift
Läs merSätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Läs merFöreläsning 3.1: Datastrukturer, en översikt
Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,
Läs mer5 Grundläggande in- och utmatning
5 Grundläggande in- och utmatning För att användaren skall kunna kommunicera med programmet krävs att man inkluderar ett eller flera bibliotek med rutiner. I Ada finns det ett antal paket som gör detta
Läs merTentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något
Läs merDugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Läs merFöreläsning 13 och 14: Binära träd
Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av
Läs merUppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa
Lena Kallin Westin 2005-08-22 Institutionen för datavetenskap Umeå universitet TENTAMEN Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Inlämnad Poäng Kurs : Programmeringsteknisk
Läs merFöreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Läs merAtt använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
Läs merTentamen TEN1 HI1029 2014-05-22
Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Läs merUppgift 1 ( Betyg 3 uppgift )
2005-06-09.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Ett plustecken kan se ut på många sätt. En variant är den som ses nedan. Skriv ett program som låter användaren mata in storleken på plusset enligt exemplen
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merÖvningar Dag 2 En första klass
Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt
Läs merAlgoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.
Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills
Läs merSockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.
Sockets: server with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.Text_IO; with TJa.Sockets; use TJa.Sockets; procedure Server is -- Servern
Läs merObjektorienterad programmering D2
Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste
Läs merGrunderna i stegkodsprogrammering
Kapitel 1 Grunderna i stegkodsprogrammering Följande bilaga innehåller grunderna i stegkodsprogrammering i den form som används under kursen. Vi kommer att kort diskutera olika datatyper, villkor, operationer
Läs merGrundläggande programmering med C# 7,5 högskolepoäng
Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)
Läs merTDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne
Läs merTentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'
Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.' Skrivtid: 08.30 13.30 Hjälpmedel: Inga Lärare: Betygsgränser DVA104' Akademin)för)innovation,)design)och)teknik) Onsdag)2014:01:15) Caroline
Läs merRepetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python
Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python
Läs merObjektsamlingar i Java
1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och
Läs merOmtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)
Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk
Läs merVisual Basic, en snabbgenomgång
Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika
Läs merOmgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.
Omgivningar Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. (define (sqrroot c) (define (fixpoint guess c eps) (define
Läs merTDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne
Läs merTentaupplägg denna gång
Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva
Läs merTentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl
Läs merFöreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
Läs merSMD 134 Objektorienterad programmering
SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning
Läs merTDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap
TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,
Läs merTentaupplägg denna gång
Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva
Läs merFöreläsning 1 & 2 INTRODUKTION
Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga
Läs merTentamen, EDAA20/EDA501 Programmering
LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna
Läs merFöreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Läs merKOMPLETTERANDE HEMTENTAMEN TDDB53
Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén mars 2003 Tentamen TDDB53 KOMPLETTERANDE HEMTENTAMEN TDDB53 Programmering i Ada för MI (MI-ADA) i mars 2003 Tentan lämnas ut 24/3
Läs merGrundläggande datalogi - Övning 1
Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b
Läs merDatastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar
Läs merFunktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation
Funktioner, Procedurer och Parametrar I delar vi upp underprogram i två grupper : Funktioner: lämnar alltid ett värde som resultat Funktionsnamnet får ett värde i funktionen genom: funktionsnamn := expr;
Läs mer1 Funktioner och procedurell abstraktion
1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår
Läs merFö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 Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
Läs merTDDC74 Lab 02 Listor, sammansatta strukturer
TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare
Läs merIckelinjära ekvationer
Löpsedel: Icke-linjära ekvationer Ickelinjära ekvationer Beräkningsvetenskap I Varför är det svårt att lösa icke-linjära ekvationer? Iterativa metoder Bisektion/intervallhalvering Newton-Raphsons metod
Läs merFöreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
Läs merIntroduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 2014-2015. Lektion 3
Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 014-015 Lektion 3 Denna lektion är temat hur man effektivt ska organisera den data som en algoritm använder för att åtkomsten till datan
Läs merLösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008
Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008 Christian 27 maj 2008 Uppgift 1 Flera av dem jag talade med efter tentan hade blivit förskräckta när
Läs merMMA132: Laboration 1 Introduktion till MATLAB
MMA132: Laboration 1 Introduktion till MATLAB De flesta numeriska metoder låter oss få en tillräckligt bra lösning på ett matematiskt problem genom att byta ut komplexa matematiska operationer med kombinationer
Läs merDatalogi, grundkurs 1. Lösningsförslag till tentamen
Datalogi, grundkurs 1 Lösningsförslag till tentamen 6 maj 2000 1. För att proceduren sortera ska fungera som tänkt kan den se ut på följande sätt: const min = 1; max = 3; type tal = integer; index = min..max;
Läs merFöreläsning 4: Kombinatorisk sökning
DD2458, Problemlösning och programmering under press Föreläsning 4: Kombinatorisk sökning Datum: 2009-09-25 Skribent(er): Kristina Nylander, Dennis Ekblom, Marcus Öman Föreläsare: Fredrik Niemelä 1 Introduktion
Läs merTextsträngar från/till skärm eller fil
Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,
Läs merFörsättsblad till skriftlig tentamen vid Linköpings Universitet
Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2016-03-21 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal
Läs merFöreläsning 10. ADT:er och datastrukturer
Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad
Läs merFöreläsning 13. Rekursion
Föreläsning 13 Rekursion Rekursion En rekursiv metod är en metod som anropar sig själv. Rekursion används som alternativ till iteration. Det finns programspråk som stödjer - enbart iteration (FORTRAN)
Läs merIntroduk+on +ll programmering i JavaScript
Föreläsning i webbdesign Introduk+on +ll programmering i JavaScript Rune Körnefors Medieteknik 1 2012 Rune Körnefors rune.kornefors@lnu.se Språk Naturliga språk Mänsklig kommunika+on T.ex. Svenska, engelska,
Läs merRödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: 40-120 minuter beroende på variant Material: TI-82/83/84 samt tärningar
Aktivitetsbeskrivning Denna aktivitet är utformat som ett spel som spelas av en grupp elever. En elev i taget agerar Gömmare och de andra är Gissare. Den som är gömmare lagrar (gömmer) tal i några av räknarens
Läs merif (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
Läs merÖversikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22
Översikt 732G11 PROGRAMMERING 1 Institutionen för datavetenskap Om kursen Vad är programmering (bra för)? Programmeringsspråket Java Utvecklingsmiljön Eclipse Genomgång av några programexempel Programmering
Läs merTentamen Datastrukturer (DAT037)
Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca
Läs merInledande programmering med C# (1DV402) 27+15=42 1 (22)
27+15=42 1 (22) Variabler Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll
Läs merTDDC74 Programmering, abstraktion och modellering DUGGA 2
1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Torsdag 19 feb 2009 8-10 Namn: Personnummer:
Läs merTypsystem. Typsystem... Typsystem... Typsystem... 2 *
Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och
Läs merLänkade strukturer, parametriserade typer och undantag
Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer
Läs merExempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.
Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.
Läs merDSV A Procedurell programmering 5 poäng Tentamen 2002-12-04
DSV A Procedurell programmering 5 poäng Tentamen 2002-12-04 Uppgift 1 3 poäng Vilka uppgifter ingår i programutveckling, dvs vilka faser bör man gå igenom när man utvecklar ett större program? Beskriv
Läs merTypsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19
Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och
Läs merSnabbguide Visma Compact API Version 5.1 Copyright 2006-2008 Visma Spcs AB Visma Compact API
Snabbguide Visma Compact API Version 5.1 Copyright 2006-2008 Visma Spcs AB Visma Compact API Introduktion Visma Compact API är ett programmeringsgränssnitt framtaget för att underlätta integration av Visma
Läs merDatastrukturer. föreläsning 3. Stacks 1
Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer
Läs merTentamen: Programutveckling ht 2015
Tentamen: Programutveckling ht 2015 Datum: 2015-11-04 Tid: 09:00-13:00 Sal: Ansvarig: Resultat: Hjälpmedel: Maxpoäng: Betygsgränser: Anslås inom 3 veckor. Inga 40 p 20 p för G, 32 p för VG. Iakttag följande:
Läs merFöreläsning 2. Länkad lista och iterator
Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF
Läs merAnmä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 Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Läs merTentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
Läs merOOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Läs merDatalogi, grundkurs 1. Lösningsförslag till tentamen
Datalogi, grundkurs 1 Lösningsförslag till tentamen 10 december 2008 1. a. Man testar med typiska värden, gränsvärden och värden utanför specificerad indatavärdemängd. Helst med alla permutationer av
Läs merKompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Läs merBygga hus med LECA-stenar
Bygga hus med LECA-stenar När man bygger hus med LECA-stenar finns det en del att tänka på. Till att börja med finns det LECA-stenar i olika dimensioner (t.ex. 59x19x19 och 59x19x39). Dessa dimensioner
Läs merTwincat: PLC Control
Dokument Förklaring Dat. Revision KI-221-003-003 Kom igång med trukturerad Text 080402 1.0 Twincat: PLC Control Kom igång med Strukturerad Text (ST) programmering 1. Kod exempel. a. Exemplen som demonstreras
Läs merSCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall
Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab
Läs merVHDL och laborationer i digitalteknik
V:1.1 VHDL och laborationer i digitalteknik Vid laborationskursen i digitalteknik används VHDL till alla laborationerna utom den första. VHDL är ett stort språk och enbart en liten del av språket behövs
Läs merFöreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
Läs merTENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P
UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr
Läs merpublic static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Läs merÖversikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.
Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär
Läs merKOMPLETTERANDE HEMTENTAMEN TDDB53
Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén februari 2009 Tentamen TDDB53 KOMPLETTERANDE HEMTENTAMEN TDDB53 Programmering i Ada för MI (MI-ADA) i februari 2009 Tentan lämnas
Läs merProgrammering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08
Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning
Läs merDatorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer
Datorlära 1 Introduktion till datasystemet, epost konto, afs hemkonto Introduktion till datorer och datasalar Open Office Calculator Beräkningar med Open Office Calc Diagram med OO Calc Datorlära 2 Utforma
Läs merProblem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB. 30.04.2015
Problem: BOW Bowling swedish BOI 0, dag. Tillgängligt minne: 6 MB. 30.04.0 Byteasar tycker om både bowling och statistik. Han har skrivit ner resultatet från några tidigare bowlingspel. Tyvärr är några
Läs merRekursion. Koffman & Wolfgang kapitel 5
Rekursion Koffman & Wolfgang kapitel 5 1 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre,
Läs mer