Uppgift 1 ( Betyg 3 uppgift )

Relevanta dokument
Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Uppgift 1 (vadå sortering?)

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 (Sorterade heltal som är OK)

Uppgift 1a (Aktiekurser utan poster)

kl Tentaupplägg

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

Uppgift 1 (grundläggande konstruktioner)

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

TDIU Regler

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Regler. Betygssättning

Robotarm och algebra

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

kl Tentaupplägg

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

Bygga hus med LECA-stenar

Tentaupplägg denna gång

UPPGIFT 1 TVETYDIGA DATUM

TDIU Regler

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Uppgift 1 ( Betyg 3 uppgift )

Känguru 2017 Student gymnasiet

Tentaupplägg denna gång

UPPGIFT 1 V75 FIGUR 1.

Programmeringsolympiaden 2012 Kvalificering

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

kl Tentaupplägg

UPPGIFT 1 FORTSÄTT TALFÖLJDEN

Föreläsning 3-4 Innehåll

i=1 β i a i. (Rudolf Tabbe.) i=1 b i a i n

TAIU07 Matematiska beräkningar med Matlab

kl Tentaupplägg

Uppgift 1 (Oläsliga krypterade meddelanden)

Datalogi, grundkurs 1

Värmedistribution i plåt

Avdelning 1, trepoängsproblem

Kängurutävlingen Matematikens hopp 2009 Benjamin för elever i åk 5, 6 och 7

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Inlämningsuppgift 4 NUM131

kl Tentaupplägg

UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.

Känguru 2012 Cadet (åk 8 och 9)

kl Tentaupplägg

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Laboration: Grunderna i MATLAB

Trepoängsproblem. Kängurutävlingen 2011 Junior

kl Tentaupplägg

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

Detta är också en aktivitet som är enkel att variera genom att utgå från olika starttrianglar.

Photoscape (

Övningsuppgifter kapitel 8

Tentaupplägg denna gång

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

MMA132: Laboration 2 Matriser i MATLAB

Föreläsning 13 Linjär Algebra och Geometri I

Lennart Rolandsson, Uppsala universitet, Ulrica Dahlberg och Ola Helenius, NCM

Funktioner och grafritning i Matlab

kl Tentaupplägg

Känguru 2012 Junior sivu 1 / 8 (gymnasiet åk 1) i samarbete med Jan-Anders Salenius vid Brändö gymnasiet

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

TSBB14 Laboration: Intro till Matlab 1D

TAIU07 Matematiska beräkningar med Matlab

9 Geometriska begrepp

Känguru 2013 Cadet (åk 8 och 9) i samarbete med Jan-Anders Salenius vid Brändö gymnasium

kl Examination - Ada

TDP Regler

M onstertrubbel. till monstertrubbel

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Laboration 0: Del 2. Benjamin Kjellson Introduktion till matriser, vektorer, och ekvationssystem

! "# # # $ # " % & # # '(") " " )## (")"#*+*(, ( - " ' # (") #. % % /

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

1. (Dugga 1.1) (a) Bestäm v (3v 2u) om v = . (1p) and u =

Mer om funktioner och grafik i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Trepoängsproblem. Kängurutävlingen 2011 Cadet. 1 Vilket av följande uttryck har störst värde? 1 A: B: C: D: E: 2011

kl Tentaupplägg

Kvalificeringstävling den 26 september 2017

INSTÄLLNINGAR FÖR IRONCADS 2D-RITNING

Avdelning 1, trepoängsproblem

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Textsträngar från/till skärm eller fil

Dekomposition och dynamisk programmering

kl Tentaupplägg

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Känguru 2013 Student sida 1 / 7 (gymnasiet åk 2 och 3)

Känguru 2012 Ecolier sid 1 / 7 (åk 4 och 5)

Transkript:

2009-12-16.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Skriv funktionen create_diagonal som tar emot de två parametrarna R och N. R markerar hur många rader den resulterande matrisen skall få och N markerar hur många ettor i följd det skall vara på respektive rad i matrisen enligt exemplen nedan. Funktionen skall returnera mden skapade matrisen (d.v.s. den skall inte skrivas ut inuti funktionen). >> create_diagonal(1, 1) 1 >> create_diagonal(3, 1) 1 0 0 0 1 0 0 0 1 >> create_diagonal(4, 3) 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 Körexempel 4: >> create_diagonal(5, 2) 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 Körexempel 5: >> create_diagonal(2, 4) 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1

2009-12-16.kl.14-19 Uppgift 2 Ett antal personer, som leds av den snabbgående guiden Bridget, kom en natt fram till en bro som endast klarade av att bära två personer åt gången. Dessutom fanns det ett antal hål i bron vilket gjorde det farligt att gå över utan lyse. Nu hör det till saken att det inte fanns några lampor vid eller på bron och det var becksvart ute då inte ens månen syntes genom molntäcket. Som tur var hade sällskapet en ficklampa med sig. Dock bara en. Lösningen är självklar. Två personer får givetvis gå över med ficklampan och sen får en av dessa gå tillbaka (självklart med ficklampan) för att man sen skall få över fler personer. Nu finns en liten hake i allt detta. Personerna är inte lika snabba att gå och det råkar vara så att alla personer har olika hastighet som dessutom råkar göra att det tar 1 minut för den snabbaste att gå över, 2 minuter för näste och så vidare upp till N minuter för den N:te och siste personen. När två personer går tillsamman över bron gäller dock att de måste hålla samma tempo som den långsammaste av dem. Din uppgift är att skriva en funktion som räknar ut hur lång tid det tar för sällskapet att komma över bron givet att den snabbaste alltid är den som går tillbaka över bron (och därför alltså får gå MÅNGA gånger över bron om sällskapet är stort). Funktionen skall heta bridge_1 och ta emot hur stort sällskapet är (d.v.s. N). Krav: Din funktion skall vara rekursiv. >> bridge_1(1) Person 1 går över. 1 >> bridge_1(2) Person 1 och 2 går över. 2 >> bridge_1(6) Person 1 och 6 går över. Person 1 och 5 går över. Person 1 och 4 går över. Person 1 och 3 går över. Person 1 och 2 går över. 24

2009-12-16.kl.14-19 Uppgift 3 Nu tändas tusen juleljus... börjar en av våra kära julsånger. Detta leder oss raskt in på denna uppgift. Du skall skriva ett program som ritar ut en adventsljusstake med så många ljus som användaren bestämmer (antalet = N). Det är givet att det är ett udda antal ljus. Om användaren matar in ett jämnt antal är det fel och programmet får krascha i värsta fall. Ett ljus skall se ut på följande sätt (där det röda är uppbyggt av tre trianglar): N = 1 När man sen bygger en ljusstake kommer det att finnas flera ljus som ligger förskjutna lite i sidled/höjdled. Detta blir då att se ut enligt följande (för tre ljus): Ljusstaken ser då inte riktigt snygg ut (vilket gör att vi inte är nöjda med detta som lösning från er) så vi får lägga till ytterligare ett par trianglar som fyller ut lite. Då får vi en snygg ljusstake som ser ut enligt följande: N = 3 Ditt program skall alltså rita ut figurer som matchar ovanstående för N=1 resp. N=3. För N=7 skulle ljusstaken se ut enligt följande: N = 7 Till din hjälp får du en funktion som ritar ut en låga. Denna heter draw_flame och ligger i mappen given_files. Denna funktion är anpassad för att rita ut lågan på olika positioner. För att slippa svarta ramar runt trianglarna kan man använda det extra argumentet EdgeColor samt den färg man använder. Exempel: fill([cosd(0:360)], [sind(0:360)], r, EdgeColor, r );

2009-12-16.kl.14-19 Uppgift 4 För er Sudoku-vänner kommer här en specialare. Det gäller att kontrollera om innehållet i en matris motsvarar en korrekt lösning till en Sudoku. Det kan komma in tvådimensionella matriser av vilken storlek som helst. Kravet för att det är en korrekt Sudoku-lösning är: 1. Matrisen är kvadratisk. 2. Antalet rutor i x-led är en jämn kvadrat. 3. Talen som finns i matrisen måste vara i intervallet [1, matrisens sidlängd ]. 4. Det finns inte flera tal av samma sort i någon rad. 5. Det finns inte flera tal av samma sort i någon kolumn. 6. Det finns inte flera tal av samma sort i någon av de delrutor som finns i Sudokun. I en matris med 16x16 rutor finns det 16 delrutor med storleken 4x4. Din funktion som skall kontrollera ovanstående skall heta check_sudoku_solution och ta en matris som parameter. Funktionen skall SKRIVA UT om det är en korrekt eller felaktig matris.

2009-12-17.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Du skall skiva funktionen my_size som tar en vektor som indata. Vektorn skall ha två element som anger antal rader och kolumner för en matris. Funktionen skall returnera en matris av denna dimension som innehåller en multiplikationstabell enligt exemplen nedan. >> my_size([1 2]) 1 2 >> my_size([2 2]) 1 2 2 4 >> my_size([3 7]) 1 2 3 4 5 6 7 2 4 6 8 10 12 14 3 6 9 12 15 18 21 >> my_size([10 10]) 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100

2009-12-17.kl.08-13 Uppgift 2 Ett antal personer, som leds av den snabbgående guiden Brolle, kom en natt fram till en bro som endast klarade av att bära två personer åt gången. Dessutom fanns det ett antal hål i bron vilket gjorde det farligt att gå över utan lyse. Nu hör det till saken att det inte fanns några lampor vid eller på bron och det var becksvart ute då inte ens månen syntes genom molntäcket. Som tur var hade sällskapet en ficklampa med sig. Dock bara en. Lösningen är självklar. Två personer får givetvis gå över med ficklampan och sen får en av dessa gå tillbaka (självklart med ficklampan) för att man sen skall få över fler personer. Nu finns en liten hake i allt detta. Personerna är inte lika snabba att gå och det råkar vara så att alla personer har olika hastighet som dessutom råkar göra att det tar 1 kvart för den snabbaste att gå över, 2 kvartar för näste och så vidare upp till N kvartar för den N:te och siste personen. När två personer går tillsamman över bron gäller dock att de måste hålla samma tempo som den långsammaste av dem. Det finns ytterligare en hake med det hela. Bron är så pass lång att en person inte orkar gå mer än totalt tre gånger över bron (d.v.s. fram, tillbaka och sen fram igen). Detta får inte inträffa och därför skall ditt program se till att ingen går fler än tre gånger över bron. Har man vilat en gång är det ok att gå igen. Lösningen blir förstås att den snabbaste och den näst snabbaste kommer att turas om att gå en massa gånger. Din uppgift är att skriva en funktion som räknar ut hur lång tid det tar för sällskapet att komma över bron. Funktionen skall heta bro_lle och ta emot hur stort sällskapet är (d.v.s. N). För att man skall veta vilka som går i vilken riktning skall funktionen skriva ut vilken/vilka som går över bron vid varje tillfälle (denna utskrift sker inuti funktionen). Ingen utskrift av tiden skall göras i funktionen utan detta skall returneras. Krav: Din lösning skall vara rekursiv och följa nedanstående (ickeoptimala) algoritm för att få över personerna. Körexempel: >> bro_lle(7) Person 1 och 2 går fram. Person 2 går tillbaka. Person 2 och 3 går fram. Person 3 går tillbaka. Person 3 och 4 går fram. Person 4 går tillbaka. Person 4 och 5 går fram. Person 5 går tillbaka. Person 5 och 6 går fram. Person 6 går tillbaka. Person 6 och 7 går fram. 47

2009-12-17.kl.08-13 Uppgift 3 Nu är det snart jul och många åker ut och köper julgranar (man kan ju undra varför de inte bara köper en gran). För att du skall slippa detta får du istället skriva ett program som ritar en julgran. Användaren skall få välja hur hög granen skall vara. Du ser i exemplen nedan hur vi har tänkt. >> christmas_tree(1) >> christmas_tree(2) >> christmas_tree(3) Givetvis skall figurerna ritas ut med kommandot fill. Som extra argument till fill kan man skicka EdgeColor samt den färg man använder så slipper man den svarta ramen runt sina trianglar (vi antar att ni förstår att det är tringlar som ni skall rita ut...). Exempel: fill([cosd(0:360)], [sind(0:360)], r, EdgeColor, r ); Tips: Lös lite i taget och se vad som händer så att du inte får allt fel på en gång...

2009-12-17.kl.08-13 Uppgift 4 För er Sudoku-vänner kommer här en specialare. Det gäller att kontrollera om innehållet i en av de 9 delkvadrater (bestående av 3x3 rutor) som finns i en vanlig 9x9-Sudoku innehåller en magisk kvadrat. En magisk kvadrat är en kvadrat med ett antal olika tal (alla skall vara olika) där summan av varje rad, kolumn och diagonal (bara de två från hörn till hörn räknas) är densamma. Ett exempel på en 3x3-kvadrat som är magisk är följande: 4 3 8 9 5 1 2 7 6 Din funktion som skall kontrollera ovanstående skall heta find_magic_square och ta en 9x9- matris som parameter. Funktionen skall SKRIVA UT om det finns en magisk kvadrat eller ej.

2009-12-17.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skiva funktionen my_mult som tar en vektor som indata. Vektorn skall ha två element som anger antal rader och kolumner för en matris. Funktionen skall returnera en matris av denna dimension som innehåller en multiplikationstabell enligt exemplen nedan. >> my_mult([1 2]) 0 0 0 0 1 2 >> my_mult([2 2]) 0 0 0 0 1 2 0 2 4 >> my_mult([3 7]) 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 4 6 8 10 12 14 0 3 6 9 12 15 18 21 >> my_mult([9 9]) 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27 0 4 8 12 16 20 24 28 32 36 0 5 10 15 20 25 30 35 40 45 0 6 12 18 24 30 36 42 48 54 0 7 14 21 28 35 42 49 56 63 0 8 16 24 32 40 48 56 64 72 0 9 18 27 36 45 54 63 72 81

2009-12-17.kl.14-19 Uppgift 2 Ett jämnt antal personer, som leds av den snabbgående guiden Bror, kom en natt fram till en bro som endast klarade av att bära två personer åt gången. Dessutom fanns det ett antal hål i bron vilket gjorde det farligt att gå över utan lyse. Nu hör det till saken att det inte fanns några lampor vid eller på bron och det var becksvart ute då inte ens månen syntes genom molntäcket. Som tur var hade sällskapet en ficklampa med sig. Dock bara en. Lösningen är självklar. Två personer får givetvis gå över med ficklampan och sen får en av dessa gå tillbaka (självklart med ficklampan) för att man sen skall få över fler personer. Nu finns en liten hake i allt detta. Personerna är inte lika snabba att gå och det råkar vara så att alla personer har olika hastighet som dessutom råkar göra att det tar 1 kvart för den snabbaste att gå över, 2 kvartar för näste och så vidare upp till N kvartar för den N:te och siste personen. När två personer går tillsamman över bron gäller dock att de måste hålla samma tempo som den långsammaste av dem. Det finns ytterligare en hake med det hela. Bron är så pass lång att en person inte orkar gå mer än två gånger i rad över bron (d.v.s. antingen fram och tillbaka eller tillbaka och fram). Att gå tre gånger över bron gör att personen blir okoncentrerad och antagligen faller i ett av hålen i bron. Detta får inte inträffa och därför skall ditt program se till att ingen går fler än två gånger över bron i rad. Har man vilat en gång är det ok att gå igen. Lösningen blir förstås att den snabbaste och den näst snabbaste kommer att turas om att gå en massa gånger. Din uppgift är att skriva en funktion som räknar ut hur lång tid det tar för sällskapet att komma över bron. Funktionen skall heta bro_r och ta emot hur stort sällskapet är (d.v.s. N). För att man skall veta vilka som går i vilken riktning skall funktionen skriva ut vilken/vilka som går över bron vid varje tillfälle (denna utskrift sker inuti funktionen). Ingen utskrift av tiden skall göras i funktionen utan detta skall returneras. Krav: Din lösning skall vara rekursiv. Körexempel: >> bro_r(8) Person 1 och 2 går fram. Person 7 och 8 går fram. Person 2 har nu vilat och går tillbaka. Person 1 och 2 går fram. Person 5 och 6 går fram. Person 2 har nu vilat och går tillbaka. Person 1 och 2 går fram. Person 3 och 4 går fram. Person 2 har nu vilat och går tillbaka. Person 1 och 2 går fram. 35

2009-12-17.kl.14-19 Uppgift 3 Nu är det snart jul och många åker ut och köper julgranar (man kan ju undra varför de inte bara köper en gran). För att du skall slippa detta får du istället skriva ett program som ritar en julgran. Användaren skall få välja hur hög granen skall vara. Du ser i exemplen nedan hur vi har tänkt (det finns ingen gran med storlek 1). >> nice_christmas_tree(2) >> nice_christmas_tree(3) >> nice_christmas_tree(4) Givetvis skall figurerna ritas ut med kommandot fill. Som extra argument till fill kan man skicka EdgeColor samt den färg man använder så slipper man den svarta ramen runt sina trianglar (vi antar att ni förstår att det är tringlar som ni skall rita ut...). Exempel: fill([cosd(0:360)], [sind(0:360)], r, EdgeColor, r ); Tips: Lös lite i taget och se vad som händer så att du inte får allt fel på en gång...

2009-12-17.kl.14-19 Uppgift 4 För er Sudoku-vänner kommer här en specialare. Det gäller att skriva en funktion som kontrollerar hur svår en Sudoku är. Det finns (nu) en teori om att man kan använda sig av determinantberäkningar för att få fram ett tal som anger svårighetsgraden. Det går till på följande sätt: 1. Bekräkna produkten (elementvis m.h.a. operatorn.* ) för alla delkvadrater i en Sudokulösning (i en 9x9-Sudoku finns det 9 stycken 3x3-delkvadrater). 2. Den produktmatris man då får fram tar man sen och beräknar determinanten för. 3. Detta resultat skall sen divideras med 1.000.000.000.000.000. 4. Avrunda detta värde till heltal. 5. Absolutbeloppet av det avrundade värdet motsvarar svårigheten. Din funktion som utför ovanstående skall heta sudoku_det och den skall returnera svårighetsgraden (inte skriva ut denna). M = [ 1 2 3 4 5 6 7 8 9 ; 4 5 6 7 8 9 1 2 3 ; 7 8 9 1 2 3 4 5 6 ; 2 3 4 5 6 7 8 9 1 ; 5 6 7 8 9 1 2 3 4 ; 8 9 1 2 3 4 5 6 7 ; 6 7 8 9 1 2 3 4 5 ; 3 4 5 6 7 8 9 1 2 ; 9 1 2 3 4 5 6 7 8 ]; >> sudoku_det(m) 0 M = [ 5 6 7 3 2 4 9 8 1 ; 8 9 1 6 5 7 3 2 4 ; 2 3 4 9 8 1 6 5 7 ; 4 5 6 2 1 3 8 7 9 ; 1 2 3 8 7 9 5 4 6 ; 7 8 9 5 4 6 2 1 3 ; 9 1 2 7 6 8 4 3 5 ; 3 4 5 1 9 2 7 6 8 ; 6 7 8 4 3 5 1 9 2 ]; >> sudoku_det(m) 248