Hur kan man designa req_lock_acquire och req_lock_release för ett sådant lås?

Storlek: px
Starta visningen från sidan:

Download "Hur kan man designa req_lock_acquire och req_lock_release för ett sådant lås?"

Transkript

1 Linköpings universitet Institutionen för datavetenskal (IDA) Processprogrammering och operativsystem (TDDI04) Synkronisera koden Instruktioner VIKTIGT PÅ TENTAN! För rätt och effektiv synkronisering är det viktigt att förstå hur koden fungerar och vad den är tänkt att göra. Det finns inga genvägar. Identifiera kritiska sektioner: 1. För varje kodrad eller kodstycke, vad har koden för syfte? 2. Vad vet du efteråt? Vad har kodstycket räknat ut? 3. Måste det du nu vet vara sant i efterföljande kod? Är efterföljande kod beroende av att vad kodstycket räknat ut eller hämtat från minnet fortfarande är likadant? 4. Kan något en annan tråd exekverar förändra vad kodstycket räknat ut, förändra det du vet? 5. Vad gör de andra trådarna? Vilken kod exekverar de? 6. Hur kan du skapa ett lås som är gemensamt för dessa trådar och denna kod? 7. När du låser, finns det operationer som använder låset trots att de egentligen inte behöver? För ökad parallellism behövs kanske flera lås, ett per individuell resurs istället för ett gemensamt för hela resurstypen. 8. Gör det någon skillnad om du låser, eller kvarstår problemet ändå? Kanske måste du låsa på en annan nivå (i anropande funktion). 9. Behövs låset bara över ett funktionsanrop? Går det låsa i funktionen istället? 10. Går det nyttja hårvaruinstruktionen atomic_swap eller test_and_set istället för ett lås? 11. Används flera lås eller semaforer? Kan deadlock eller starvation uppstå? 12. Kan koden skrivas om så synkroniseringen kan lösas på ett bättre, säkrare, effektivare eller enklare sätt? VIKTIGT PÅ TENTAN! Efter att tänkt igenom ovan 11 punkter bör du enkelt kunna besvara: 1. Vilken variabel eller datastruktur är det som behöver låset? 2. Vilka kodrader skall ingå i den kritiska sektionen så den blir minimal? 3. För var och en av kodraderna i kritiska sektionen, varför krävs mutual exclusion? 4. För var och en av kodraderna utanför kritiska sektionen, varför behövs inte låsning? 5. Är lösningen effektiv? Kan flera trådar arbeta parallellt utan att vänta på varandra (mer än absolut nödvändigt) hela tiden? Rekursiv låsning Ibland uppstår situationer där både funktion A och B behöver ta låset, men funktion B anropar funktion A medan den håller i låset. I detta läge behövs ett lås som fungerar rekursivt. Om tråden redan håller i låset skall den inte ta låset igen (det får man ju inte), men hålla reda på att det är låst med dubbla slag, så man även måste låsa upp två gånger innan det släpps. Hur kan man designa req_lock_acquire och req_lock_release för ett sådant lås? Vi förutsätter att vanliga lås med funktionerna lock_acquire, lock_release och is_locked_by_current_thread finns att tillgå. Läs- och skrivlås I fall när det är många trådar som läser men få som ändrar i delad data är naturligtvis lås som tillåter flera samtidiga läsartrådar så länge ingen tråd skriver att föredra. Hur designar man en sådan låsmekanism? Kan det innebära starvation för läsar- eller skrivartrådar? 1

2 MiniExempel Insättning av unikt ord i fält. Insättningen sker i tre steg. Kontrollera att ordet är giltigt, kontrollera att det inte redan är insatt, hitta en ledig plats, sätt in. Antag att fältet används av många trådar. 1: void insert( char* array[], int size, char* word ) 2: { Parametern array är en pekare till själva ordlistan i vilken alla trådar sätter in ord. Parametern size är en lokal variabel som inte ändras i funktionen. Parametern word är adressen till en sträng. adressen ändras inte då det är en lokal inparameter som inte ändras. Dock skulle innehållet i ordet kunna ändras. I detta fall förutsätter vi att inparameren word är något som inte påverkas av andra trådar. Om den ändras av andra trådar är det upp till anroparen att synkronisera detta. Det går inte lösa internt i insert då vi inte vet var eller hur insträngen eventuellt ändras. (Dock kan vi lösa det om kod är given så vi kan skapa ett lås för ordet som löser det eventuella problemet.) Vi förutsätter alltså i detta fall att inparametern är konstant under funktionens exekvering (synkroniserade externt). Inget annat är givet, ingen kod som ändrar ordet under insättningen är given eller kan förutsättas finnas. 3: if (! is_valid( word ) ) 4: return; Under ovan förutsättningar finns inget som kan ändra ordets giltighet. Om en annan tråd kör insert påverkar det inte hur ordet ser ut. Raderna är alltså inte kritiska och behöver inte synkroniseras. 5: if ( find(array, word) ) 6: return; Vi vet här att ordet inte finns i fältet. Ovan rad har tagit reda på det. Detta kan förändras genom att en annan tråd sätter in samma ord. Följande kod (insättningen) kräver att ordet inte finns för att det skall bli korrekt enlig specifikationen. Synkronisering behövs alltså. 7: for (int i = 0; i < size; ++i) 8: if ( is_empty(array, i) ) 9: break; Vi vet här att position i är ledig (ser du kodningsfelet?). Ovan iterering har letat upp en ledig plats. Detta kan förändras genom att en annan tråd hinner ockupera platsen. Följande kod (insättningen) kräver att platsen är ledig för att det skall bli korrekt. Synkronisera. Iterationsvariabeln i är en lokal variabel (varje anrop får en egen kopia) och inkrement av denna behöver inte synkroniseras (men råkar ändå hamna i kritiska sektionen). 10: store(array, word, i); 11: } Vi vet att ordet är korrekt insatt. Andra insättningar påverkar inte detta. 2

3 Flertrådad ordlista En ordlista med unika ord. Ett antal internetrobotar söker upp nya ord som läggs till om de inte redan finns. Några kontrolltrådar sorterar bort ord sådant som inte är riktiga ord. 1: /* represent the entier wordlist */ 2: struct set 3: { 4: char* word[size]; 5: }; 6: /* check if a word is added to the set */ 7: int find_word(struct set* s, char* word) 8: { 9: int i; 10: 11: for ( i = 0; i < SIZE; ++i) 12: { 13: if ( strcmp( s->word[i], word ) == 0 ) 14: return i; /* found match */ 15: } 16: return -1; 17: } 18: /* add a word if it does not already exist in the set */ 19: void add_word(struct set* s, char* word) 20: { 21: int i; 22: 23: if ( valid_word(word) ) 24: return; /* invalid characters in word */ 25: 26: if ( find_word(s, word)!= -1 ) 27: return; /* already added */ 28: 29: for ( i = 0; i < SIZE; ++i) 30: { 31: if ( s->word[i] == NULL ) 32: break; /* found free slot */ 33: } 34: 35: if ( i >= SIZE ) 36: return; /* no space left */ 37: 38: s->word[i] = word; 39: } 40: /* remove a word from the set */ 41: void remove_word(struct set* s, char* word) 42: { 43: int i = find_word(s, word); 44: 45: if ( i == -1 ) 46: return; /* already removed or never added */ 47: 48: s->word[i] = NULL; 49: } 3

4 Varulager Ett varulager har en databas för att hålla reda på hur mycket av varje produkt som finns på lager, och när det är dags att skicka ut nya beställningar. Alla funktioner används av många trådar. 1: struct varudata 2: { 3: char varunamn[16]; 4: double pris; 5: int antal_på_lager; 6: }; 7: struct varudata* lager[size]; 8: int add_new_item(char* namn, double pris, int antal) 9: { 10: for (int i = 0; i < SIZE; ++i) 11: { 12: if (lager[i] == NULL) 13: { 14: lager[i] = new varudata(slag, pris, antal); 15: return i; 16: } 17: } 18: return -1; 19: } 20: void remove_item(int id) 21: { 22: if (id < 0 or id >= SIZE) 23: throw invalid id ; 24: 25: delete lager[id]; 26: 27: lager[id] = NULL; 28: } 29: void increase_stock(int id, int antal) /* called on item arrival */ 30: { 31: if (id < 0 or id >= SIZE) 32: throw invalid id ; 33: 34: lager[id]->antal_på_lager += antal; 35: } 36: bool decrease_stock(int id, char*& namn, double& pris) 37: { 38: if (id >= 0 and id < SIZE) 39: { 40: namn = lager[id]->varunamn; 41: pris = lager[id]->pris; 42: 43: if ( --lager[id]->antal_på_lager < 10 ) 44: return true; /* order new items */ 45: } 46: return false; /* no need to order new items */ 47: } 4

5 Hashtabell i ADA Ett antal trådar använder tabellen. 90% av accesserna är läsningar (get). Varje index i tabellen består av en länkad lista. Data som hashas till samma position sätts helt enkelt in i listan. Listan är ospecificerad, men kan t.ex. vara en pekare till första elementet, som t.ex. avallokeras om remove gör listan tom. 1: -- to get the data identified by key from table 2: function get(table : in hash_table_type, 3: key : in key_type) returns stored_type is 4: 5: index : integer; -- 3 variable declarations 6: list : list_type; 7: value : stored_type; 8: 9: begin 10: 11: index := hash(key); 12: list := table(index); 13: value := find(list, key); 14: return value; 15: 16: end get; 17: -- to insert the data in the table 18: procedure set(table : in hash_table_type, 19: data : in stored_type) is 20: 21: index : integer; -- 3 variable declarations 22: list : list_type; 23: key : key_type; 24: 25: begin 26: 27: key := get_key(data); 28: index := hash(key); 29: list := table(index); 30: 31: if exists(list, key) then -- replace old data 32: remove(list, key); 33: end if; 34: 35: insert(list, data); 36: 37: end get; 5

6 Smaskens sa filosofen Fler än fem filosofer spenderar dagarna med att äta och tänka. Först reserverar de en stol och sedan de enda två gafflarna inom räckhåll. När de har båda gafflarna börjar de äta. Trots för få gafflar för att räcka till alla runt bordet så svälter de inte (?) ihjäl. 1: bool fork[5]; /* all initiated to false from start */ 2: bool seat[5]; /* all initiated to false from start */ 3: int free_seats = 5; 4: void philosopher() 5: { 6: int i, j; 7: 8: while ( true ) 9: { 10: random_sleep(); /* thinking a lot */ 11: 12: while (free_seats == 0) 13: ; /* Busy wait is BAD! */ 14: 15: for (i = 0; i < 5; ++i) 16: { 17: if (seat[i] == false) 18: { 19: seat[i] = true; 20: break; 21: } 22: } 23: free_seats--; 24: 25: /* wait for first fork */ 26: while ( fork[i] == false ) 27: ; /* Busy wait is BAD! */ 28: fork[i] = true; 29: 30: /* wait for second fork */ 31: j = (i+1)%5; 32: while ( fork[j] == false ) 33: ; /* Busy wait is BAD! */ 34: fork[j] = true; 35: 36: sleep(2); /* eating */ 37: 38: /* release both forks and seat */ 39: fork[i] = false; 40: fork[j] = false; 41: seat[i] = false; 42: free_seats++; 43: } 44: } TIPS: Tänk till om hur koden kan modifieras för att använda lås, semaforer, conditions eller hårdvaruinstruktioner av typen test_and_set eller atomic_swap. 6

7 Reservation av index i fält Ett antal trådar använder ett fält för att associera en pekare och heltal. Pekaren läggs på ett ledigt (?) index och det erhållna indexet returneras. 1: /* Each value in this global array of pointers is set to NULL in main */ 2: void* content[128]; 3: /* Add data to free slot in array. This is called from many threads. */ 4: int array_add(void* data) 5: { 6: for (int i = 0; i < 128; ++i) 7: { 8: /* if free, use it */ 9: if (content[i] == NULL) /* determine if index is free */ 10: { 11: content[i] = data; /* save data pointer in free index */ 12: break; 13: } 14: } 15: return i; /* return index used */ 16: } 17: /* Remove data from array. This is called from many threads. */ 18: void* array_remove(int id) 19: { 20: void* ret = content[id]; /* temporarily save the index s pointer */ 21: content[id] = NULL; /* mark the index as free */ 22: return ret; /* return the pointer that was removed */ 23: } TIPS: Skall ett globalt lås för hela arrayen användas, eller går det att använda ett lås för varje individuellt index i tabellen? Finns det i så fall fördelar? Nackdelar? Går det nyttja någon form av hårdvarulösning av typen atomic_swap eller test_and_set? 7

8 Summering av fält Ett antal trådar skall hjälpas åt att summera ett fält. De delar upp fältet i lika delar och summerar var sin del. Huvudprogrammet skriver ut summan när allt (?) är klart. 1: /* sum: A pointer to the variable containing the final sum. 2: start: A pointer to the first value in an array to sum. 3: stop: A pointer which the summation should stop just before. 4: */ 5: void sum_array(int* sum, int* start, int* stop) 6: { 7: while (start < stop) 8: { 9: *sum = *sum + *start; 10: ++start; 11: } 12: } 13: /* Some code in the main function is omitted for brewity. */ 14: int main() 15: { 16: int sum = 0; 17: int array[512]; 18: 19: load_interesting_data_to_array(array, 512); 20: 21: /* Start four threads to sum different parts of the array. 22: * 23: * thread_create schedules (places in ready queue) a new thread 24: * to execute the sum_array function. As this shecdule is just a 25: * list insert it will return quickly, probably (but not always) 26: * before the new thread even staret execution. 27: */ 28: for (int i = 0; i < 4; ++i) 29: thread_create(sum_array, &sum, array + 128*i, array + 128*(i+1)); 30: 31: printf("the sum is: %d\n", sum); 32: } 8

9 Starta jobb i ny tråd Ett virusprogram startar kontroll av filer inuti ett filarkiv som en egen tråd. Om filarkivet visar sig korrupt kontolleras det istället (?) som en vanlig fil. 1: /* Open the file as a zip file and scan each file inside for viruses. 2: * Set the output parameter bad to true if the zip is invalid. */ 3: void unpack_and_scan(const char* filename, bool* bad) 4: { 5: zip = open_zip(filename); 6: 7: if (open_failed(zip)) 8: { 9: *bad = true; /* message back to main function */ 10: return; /* exit thread */ 11: } 12: 13: /* Iterate each file contained in the zip and scan it. */ 14: for (file = zip_first(zip); file!= NULL; file = zip_next(zip)) 15: { 16: scan_regular_file(file); 17: } 18: } 19: /* Scan all files given as argument to main. */ 20: int main(int argc, char* argv[]) 21: { 22: int i; 23: for (i = 0; i < argc; ++argc) 24: { 25: switch ( file_extension(argv[i]) ) 26: { 27: case ZIP: 28: { 29: bool bad_file = false; 30: 31: /* thread_create schedules a new thread to execute 32: * unpack_and_scan. As schedule is just a list insert it 33: * will return quickly, probably before the new thread even 34: * stared execution. */ 35: thread_create(unpack_and_scan, argv[i], &bad_file); 36: 37: if ( bad_file ) /* receive message */ 38: { 39: /* bad zip, scan as regular file instead */ 40: scan_regular_file(argv[i]); 41: } 42: break; 43: } 44: 45: /* remaining cases omitted here */ 46: 47: } /* end switch */ 48: } /* end for */ 49: 50: return 0; 51: } 9

10 En stack är bra att ha Stacken används i ett system där flera trådar lägger till och hämtar ut värden. Trådar som hämtar ut värden väntar (?) tills det finns något att hämta. 1: /* This structure represents one item on the stack. */ 2: struct stack_node 3: { 4: struct stack_node* next; 5: int data; 6: } 7: /* This structure represents the entire stack. */ 8: struct stack 9: { 10: struct stack_node* top; 11: } 12: /* Initiate the stack to become empty. 13: * Called once before any threads are started. */ 14: void stack_init(struct stack* s) 15: { 16: s->top = NULL; 17: } 18: /* Pop one item from the stack. The stack is specified as 19: * parameter. Many threads use this function simultaneously. */ 20: int stack_pop(struct stack* s) 21: { 22: struct stack_node* popped = s->top; /* Get the top element */ 23: 24: while (popped == NULL) /* Was it anything there? */ 25: popped = s->top; 26: 27: int data = popped->data; /* Save the data we want */ 28: s->top = popped->next; /* Remove the top element */ 29: free(popped); /* Free removed element memory */ 30: return data; /* Return the saved data */ 31: } 32: /* Push one item to the stack. The stack and the integer data to push 33: * are specified as parameters. Many threads use this function. */ 34: void stack_push(struct stack* s, int x) 35: { 36: struct stack_node* new_node = malloc(sizeof(struct stack_node)); 37: new_node->next = s->top; 38: new_node->data = x; 39: s->top = new_node; 40: } 10

11 Kommunikationskö med begränsad storlek Ett fält nyttjas som kommunikationskö mellan flera trådar som både läser och skriver till kön. Är kön full eller tom väntar (?) trådarna tills den inte är det längre. 1: #define SIZE 256 2: /* With this size and 8-bit read- and write positions the position 3: * counters will automatically go from 255 around to 0. 4: * Else we must add code to wrap around (position % SIZE).*/ 5: /* This structure represent a bounded buffer (queue) */ 6: struct bounded 7: { 8: int buffer[size]; 9: int used_size = 0; /* Initiation like this is not possible in 10: int8 read_pos = 0; * real C-code. You must use an init function. 11: int8 write_pos = 0; */ 12: }; 13: /* Read the oldest value in the queue. */ 14: int bounded_read(struct bounded* b) 15: { 16: /* We must wait until the queue have at least one value. */ 17: while (b->used_size == 0) 18: ; /* Busy wait is BAD! */ 19: 20: /* Now we have(?) a value to read (remove). */ 21: --b->used_size; 22: 23: /* Read the value from the read position. */ 24: return b->buffer[b->read_pos++]; 25: } 26: /* Write a new value to the next free position in the queue. */ 27: void bounded_write(struct bounded* b, int x) 28: { 29: /* We must wait until at least one slot is available. */ 30: while (b->used_size == SIZE) 31: ; /* Busy wait is BAD! */ 32: 33: /* Now we have(?) an empty position to use. */ 34: b->buffer[b->write++] = x; 35: ++b->used_size; 36: } 11

12 Platsreservation En biosalong erbjuder automatisk platsbokning via internet. Varje bokningstråd använder denna funktion för att reservera ett antal platser bredvid varandra på given rad. 1: /* all seats starts empty, indicated by false */ 2: bool seats[rows][columns]; 3: /* Reserve n consecutive seats on row */ 4: bool reserve_seat(int n, int row) 5: { 6: int max_start = 0; 7: int max_count = 0; 8: int c = 0; 9: while (c < COLUMNS) 10: { 11: int start; 12: int end; 13: 14: while (c < COLUMNS && seats[row][c] == true) 15: ++c; 16: start = c; /* first free seat in row */ 17: 18: while (c < COLUMNS && seats[row][c] == false) 19: ++c; 20: end = c; /* column of the next occupies seat */ 21: 22: /* Is it the longest sequence of free seats in row? */ 23: if (max_count < (end - start)) 24: { 25: max_start = start; 26: max_count = end - start; 27: } 28: } 29: 30: /* Was the longest free sequence long enough? */ 31: if (max_count < n) 32: { 33: return false; 34: } 35: 36: /* allocate the seats */ 37: for (c = max_start; c < (max_start + n); ++c) 38: { 39: seats[row][c] = true; 40: } 41: 42: return true; 43: } 12

13 Förflyttning på spelplan Ett datorspel har en spelplan med ett antal olika objekt. Ett antal spelartrådar flyttar runt objekten på spelplanen genom att anropa flyttningsfunktionen på objektet i en ruta. 1: // struct to represent one square on the board and what s in it 2: struct square 3: { 4: // if the square is occupied with something or not 5: int occupied; 6: // whatever that something is (wall, player, food...) 7: object* content; 8: }; 9: // the playground, shared by all threads 10: struct square board[ X ][ Y ]; 11: class object 12: { 13: public: 14: // move the object one step if possible 15: virtual bool move(int x_off, int y_off) 16: { 17: if ( outside_board(x+x_off, y+y_off) ) 18: { 19: return false; // move failed 20: } 21: 22: if ( board[ x+x_off ][ y+y_off ].occupied ) 23: { 24: return false; // move failed 25: } 26: 27: // destination square is free, go there 28: board[ x+x_off ][ y+y_off ].occupied = true; 29: board[ x+x_off ][ y+y_off ].content = this; 30: 31: // leave the previous square 32: board[ x ][ y ].occupied = false; 33: board[ x ][ y ].content = NULL; 34: 35: // update where the object is on the board 36: x += x_off; 37: y += y_off; 38: 39: return true; // move succeded 40: } 41: 42: private: 43: int x, y; 44: }; 13

14 Överföring mellan konton En funktion för att överföra en summa pengar mellan två konton i en bank används av ett antal trådar. Kunder kan t.ex. ansluta via internet för att föra över pengar. Varje anslutning hanteras av en tråd. 1: /* representation of one account */ 2: struct bank_account 3: { 4: int balance; 5: char owner[]; 6: }; 7: /* one big array with all accounts */ 8: struct bank_account account[ CUSTOMER_COUNT ]; 9: void transfer(int from, int to, int amount) 10: { 11: if (account[from].balance < amount) 12: return; 13: 14: account[from].balance -= amount; 15: account[ to ].balance += amount; 16: } 14

15 Linköpings universitet Institutionen för datavetenskal (IDA) Processprogrammering och operativsystem (TDDI04) Filtabell Funktioner som hanterar en enkel filtabell. Filpekare läggs till och tillbaka får man fildeskriptorer. Tabellen används gemensamt av många trådar. 1: /* representation av tabellen */ 2: struct file* table[size]; 3: /* add a file to table */ 4: int add_file(struct file* f) 5: { 6: int index = 0; 7: 8: while (index < SIZE && table[index]!= NULL) 9: ++index; 10: 11: if (index == SIZE) 12: return -1; 13: 14: table[index] = f; 15: return index; 16: } 17: /* clear one index */ 18: struct file* clear_index(int i) 19: { 20: if (i < 0 i >= SIZE) 21: return NULL; 22: 23: struct file* r = table[i]; 24: table[i] = NULL; 25: 26: return r; 27: } 28: /* check if index is valid */ 29: bool index_valid(int i) 30: { 31: return (i >= 0 && i < SIZE) && (table[i]!= NULL); 32: } 15

Synkronisering. Ordning och reda

Synkronisering. Ordning och reda Synkronisering Ordning och reda Banköverföring struct account { int balance; char* owner; }; struct account account[ NUM_ACCOUNTS ]; bool transfer( int amount, unsigned from, unsigned to ); 2 Banköverföring

Läs mer

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put) Summering av fält Synkronisering Ordning och reda function sum_low is begin for i in 0..999_999_999 sum += array[i] end sum_low function sum_high is begin for i in 1_000_000_000..1_999_999_999 sum += array[i]

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University Datum för tentamen Date of exam Sal Room Tid Time Kurskod Course code Provkod LADOK code

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor 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.

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy 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 mer

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum:

Läs mer

Recitation 4. 2-D arrays. Exceptions

Recitation 4. 2-D arrays. Exceptions Recitation 4. 2-D arrays. Exceptions Animal[] v= new Animal[3]; 2 declaration of array v Create array of 3 elements v null a6 Assign value of new-exp to v Assign and refer to elements as usual: v[0]= new

Läs mer

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167 GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,

Läs mer

Mekanismer. (implementation)

Mekanismer. (implementation) Mekanismer (implementation) Repetition Semafor Räknar tillgängliga resurser Initieras med startvärde Vid förbrukning: väntar tills resurs finns Användning: invänta händelse Lås Markerar att en variabel/datastruktur

Läs mer

Tentamen i TDIU16 Process- och operativsystemprogrammering

Tentamen i TDIU16 Process- och operativsystemprogrammering Linköpings universitet Institutionen för datavetenskap 2017-06-03 Tentamen i TDIU16 Process- och operativsystemprogrammering Datum 2017-06-03 Tid 14-18 Institution IDA Kurskod TDIU16 Provkod TEN1 Examinator

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

Dugga Datastrukturer (DAT036)

Dugga 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 mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser

Läs mer

Support Manual HoistLocatel Electronic Locks

Support Manual HoistLocatel Electronic Locks Support Manual HoistLocatel Electronic Locks 1. S70, Create a Terminating Card for Cards Terminating Card 2. Select the card you want to block, look among Card No. Then click on the single arrow pointing

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen.

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen. Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes IDE-sektionen Juni 14 Utkast 1 Recap 2 Mera om nya typer 3 Kort 4 Fält Recap Man kan ge namn till typer. Vi undersökte enum

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University Datum för tentamen Date of exam Sal Room Tid Time Kurskod Course code Provkod LADOK code

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

Tentamen PC-teknik 5 p

Tentamen PC-teknik 5 p Tentamen PC-teknik 5 p Namn:. Klass:... Program: Di2, Em3, Et3 Datum: 03-08-15 Tid: 13:30-18:30 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Instruktionsrepertoar för 8086 (utdelas), Lathund, Pacific C

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

Läs mer

Tentamen Grundläggande programmering

Tentamen 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 mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Som sagt så kommer den här kursen endast innehålla en enda föreläsning och det var förra gången. Från och med nu så kommer vi förutsätta

Läs mer

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

Synkronisering - Semaforen. Om att vänta men inte i onödan

Synkronisering - Semaforen. Om att vänta men inte i onödan Synkronisering - Semaforen Om att vänta men inte i onödan Dörrvakten Har order uppifrån pga brandregler: Släpp in max 40 personer Garanterar att det aldrig är fler insläppta än order angivit Kommer fler

Läs mer

Exam Concurrent and Real-Time Programming

Exam Concurrent and Real-Time Programming LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Exam Concurrent and Real-Time Programming 2018 08 23, 14.00 19.00 1. Vad är prioritetsinversion? Illustrera med ett enkelt exempel. Redogör

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen 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 mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - 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 mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Exempelsamling Assemblerprogrammering

Exempelsamling Assemblerprogrammering Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start

Läs mer

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås Schenker Privpak AB Interface documentation for web service packageservices.asmx 2012-09-01 Version: 1.0.0 Doc. no.: I04304b Sida 2 av 7 Revision history Datum Version Sign. Kommentar 2012-09-01 1.0.0

Läs mer

Objektsamlingar i Java

Objektsamlingar 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 mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4 Grafer, traversering Koffman & Wolfgang kapitel 1, avsnitt 4 1 Traversering av grafer De flesta grafalgoritmer innebär att besöka varje nod i någon systematisk ordning precis som med träd så finns det

Läs mer

OOP Objekt-orienterad programmering

OOP 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 mer

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS 180226 Idag (ADT), OOP i Racket, labb 5 2 Allmän info Duggan. Laboration 4 deadline. Planering framöver Muddy cards (nästa timme) 3 Lite repetition ADT

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och

Läs mer

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

Datastrukturer, 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 mer

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 13 mars 2013, klockan 14:00 19:00 i Vic 2 A-D, 3 A-C. Tillåtna hjälpmedel: på tentan utdelad

Läs mer

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

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Grundläggande datalogi - Övning 4

Grundläggande datalogi - Övning 4 Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167 GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,

Läs mer

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-10-30 Repetition Analys av tidskomplexitet. Kostnadsmodeller. Asymptotisk komplexitet/notation. Dynamiska arrayer. Amorterad tidskomplexitet

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket 1 Länkade listor Likadant som i Ada-kursen. 2 Stack MyStack MyStack

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

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

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter ADT Kö Grundprinciper: En kö fungerar som en kö. Man

Läs mer

Isolda Purchase - EDI

Isolda Purchase - EDI Isolda Purchase - EDI Document v 1.0 1 Table of Contents Table of Contents... 2 1 Introduction... 3 1.1 What is EDI?... 4 1.2 Sending and receiving documents... 4 1.3 File format... 4 1.3.1 XML (language

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00 Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

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.

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. Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016 Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class

Läs mer

Tentamen: Datordel Programmeringsteknik

Tentamen: Datordel Programmeringsteknik Tentamen: Datordel Programmeringsteknik Datum: 2012-02-28 Tid: 12:00-16:00 Sal: Ansvarig: Resultat: Hjälpmedel: Betygsgränser: Ulf Johansson Anslås inom 3 veckor. Inga Sammanlagt 30 p för G, 45 p för VG.

Läs mer

Föreläsning 8: Exempel och problemlösning

Föreläsning 8: Exempel och problemlösning TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och

Läs mer

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

Datalogi, 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 mer

Schenker Privpak AB Telefon 033-178300 VAT Nr. SE556124398001 Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr 033-257475 Säte: Borås

Schenker Privpak AB Telefon 033-178300 VAT Nr. SE556124398001 Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr 033-257475 Säte: Borås Schenker Privpak AB Interface documentation for web service packageservices.asmx 2010-10-21 Version: 1.2.2 Doc. no.: I04304 Sida 2 av 14 Revision history Datum Version Sign. Kommentar 2010-02-18 1.0.0

Läs mer

Resa Att ta sig runt. Att ta sig runt - Platser. I am lost. Du vet inte var du är

Resa Att ta sig runt. Att ta sig runt - Platser. I am lost. Du vet inte var du är - Platser I am lost. Du vet inte var du är Can you show me where it is on the map? Be om att bli visad en viss plats på en karta Where can I find? Fråga om en viss... a bathroom?... a bank/an exchange

Läs mer

Resa Att ta sig runt. Att ta sig runt - Platser. Du vet inte var du är. Be om att bli visad en viss plats på en karta. Fråga om en viss servicepunkt

Resa Att ta sig runt. Att ta sig runt - Platser. Du vet inte var du är. Be om att bli visad en viss plats på en karta. Fråga om en viss servicepunkt - Platser I am lost. Du vet inte var du är Can you show me where it is on the map? Be om att bli visad en viss plats på en karta Where can I find? Fråga om en viss I am lost. Can you show me where it is

Läs mer

Övning 1 - Abstrakta datatyper

Övning 1 - Abstrakta datatyper /home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20121 0 # coding : latin Övning 1 - Abstrakta datatyper 18 Summering Vi gick igenom betydelsen av abstrakta datatyper/datastrukturer.

Läs mer

Isometries of the plane

Isometries of the plane Isometries of the plane Mikael Forsberg August 23, 2011 Abstract Här följer del av ett dokument om Tesselering som jag skrivit för en annan kurs. Denna del handlar om isometrier och innehåller bevis för

Läs mer

Concurrency Saker händer samtidigt. Process En instans av ett program

Concurrency Saker händer samtidigt. Process En instans av ett program Concurrency Saker händer samtidigt Hur gör vi flera saker samtidigt på en dator? - Dela på en CPU - Flera CPU Flera processer på en dator. Operativsystemet (OS) tilldelar dem körtid (time slices, prioritet)

Läs mer

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK) Summering av fält 1.1 Synkronisering - Semaforen Om a6 vänta men inte i onödan Vi har en stor array: int array[2_000_000_000] Vi har variabler för a6 lagra summor och delsumor av arrayen. Dessa iniferas

Läs mer

Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012 Tentamen Systemnära programmering, 7.5hp 5 november 2012 Skrivtid: 9 13 Hjälpmedel: EN av följande böcker Bilting & Skansholm: Vägen till C ELLER J.R. Hanly & E.B. Koffman: C Program Design for Engineers

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN 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 mer

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Göteborgs Universitet och Chalmers Tekniska Högskola 25 oktober 2005 Datavetenskap TDA180/TDA181/INN110 Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Onsdagen

Läs mer

PROGRAMMERING-Java Omtentamina

PROGRAMMERING-Java Omtentamina PROGRAMMERING-Java Omtentamina Nicolina Månsson 2007-08 13 Tentamensinstruktioner Poängsättning Hela tentamen omfattar 41 poäng. Poäng för varje uppgift står angivet inom parentes före varje uppgift. -

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 7 mars 2012, klockan 14:00 19:00 i Vic 2, 3. Tillåtna hjälpmedel: på tentan utdelad formelsamling,

Läs mer

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9 Quicksort Koffman & Wolfgang kapitel 8, avsnitt 9 1 Quicksort Quicksort väljer ett spcifikt värde (kallat pivot), och delar upp resten av fältet i två delar: alla element som är pivot läggs i vänstra delen

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tentamen i Grundläggande Programvaruutveckling, TDA548 Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2017-08-14 Tid: 14.00-18.00 Hjälpmedel: Lexikon Engelskt-Valfritt språk. Betygsgränser: U: -23 3: 24-37 4: 38-47 5

Läs mer

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att

Läs mer

Beijer Electronics AB 2000, MA00336A, 2000-12

Beijer Electronics AB 2000, MA00336A, 2000-12 Demonstration driver English Svenska Beijer Electronics AB 2000, MA00336A, 2000-12 Beijer Electronics AB reserves the right to change information in this manual without prior notice. All examples in this

Läs mer

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler Outline Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Vända om inlästa värden Vända om inlästa

Läs mer

LULEÅ TEKNISKA UNIVERSITET

LULEÅ TEKNISKA UNIVERSITET LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, Andrey Kruglyak, 491000 Resultatet offentliggörs senast: 2010-04-09. Tillåtna

Läs mer

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 11 Tentamen FYTA11 Javaprogrammering Måndag 9:e januari 2012, 10:15 14:15 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

Läs mer

Kurskod D0010E Datum 2012-05-15 Skrivtid 5tim

Kurskod D0010E Datum 2012-05-15 Skrivtid 5tim LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, 491000, 073-820 1700 Resultatet o entliggörs senast: 2012-05-29. Tillåtna

Läs mer

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

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack Stack och Kö -Implementering - Tilllämpningar ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition:

Läs mer

Deluppgift 17 Processhantering: exec, sleep, exit, plist

Deluppgift 17 Processhantering: exec, sleep, exit, plist Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson Deluppgift 17 Processhantering: exec, sleep, exit, plist Inledning För att få ett praktiskt

Läs mer

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14 Labb LIVE Exempelkod från föreläsningen Plushögskolan Frågeutveckling inom MSSQL - SU14 Här kommer exempelkoden jag använde under föreläsningen Exemplen Constraints... 2 Transactions... 4 Views... 5 Functions...

Läs mer

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!! Sid 1 av 8 Datavetenskap Tentamen för DVG A03 Datorsystemteknik, 7,5 hp, del 2 fredag 2009-01-09 kl. 08.15-13.15 Tentamen del 2 består av 4 sidor. Ansvariga lärare: Tillåtna hjälpmedel: Kerstin Andersson

Läs mer

Föreläsning 3-4 Innehåll

Fö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 mer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer