Uppgift 1 ( Betyg 3 uppgift )

Relevanta dokument
Uppgift 1 ( Betyg 3 uppgift )

Bygga hus med LECA-stenar

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

Uppgift 1 (vadå sortering?)

Uppgift 1a (Aktiekurser utan poster)

Tentaupplägg denna gång

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

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

Tentaupplägg denna gång

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

UPPGIFT 1 FORTSÄTT TALFÖLJDEN

kl Tentaupplägg

Uppgift 1 (Sorterade heltal som är OK)

kl Tentaupplägg

Robotarm och algebra

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 (grundläggande konstruktioner)

Regler. Betygssättning

TDIU Regler

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

kl Tentaupplägg

TDIU Regler

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

kl Tentaupplägg

UPPGIFT 1 TVETYDIGA DATUM

kl Tentaupplägg

Tentaupplägg denna gång

kl Tentaupplägg

kl Tentaupplägg

Känguru 2017 Student gymnasiet

Tentaupplägg denna gång

kl Tentaupplägg

Tentaupplägg denna gång

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

M onstertrubbel. till monstertrubbel

Avdelning 1, trepoängsproblem

Inlämningsuppgift 4 NUM131

Laboration: Grunderna i MATLAB

Facit åk 6 Prima Formula

UPPGIFT 1 V75 FIGUR 1.

4-4 Parallellogrammer Namn:..

Programmering. Den första datorn hette ENIAC.

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

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

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

kl Tentaupplägg

kl Tentaupplägg

kl Examination - Ada

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

Programmeringsolympiaden 2012 Kvalificering

UPPGIFT 1 VÄNSKAPLIGA REKTANGLAR

Algoritmer, datastrukturer och komplexitet

Resurscentrums matematikleksaker

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

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.

Lutande torn och kluriga konster!

DUGGA Tentaupplägg

Pangea Matematiktävling FRÅGEKATALOG. Första omgång 2016 Årskurs 9

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

TANA17 Matematiska beräkningar med Matlab

Avdelning 1, trepoängsproblem

Känguru 2019 Student gymnasiet

Programmeringsuppgift Game of Life

A: måndag B: tisdag C: onsdag D: torsdag E: fredag. Vilken av följande bitar behöver vi för att det ska bli ett rätblock?

kl Tentaupplägg

TAIU07 Matematiska beräkningar med Matlab

Algoritmer, datastrukturer och komplexitet

DUGGA Tentaupplägg

2. Förkorta bråket så långt som möjligt 1001/

Flera våningar. ArchiCAD 16. Delmoment:! Skapa nya våningsplan, kopiera och klistra in i våningsplan,

kl Tentaupplägg

Mer om funktioner och grafik i Matlab

Kvalificeringstävling den 30 september 2008

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

TDDI TDDI22 Tentaregler

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

Värmedistribution i plåt

TDP Regler

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

Känguru 2017 Benjamin (åk 6 och 7)

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

Kvalificeringstävling den 28 september 2010

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

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

TDDI22 (exempel) TDDI22 Tentaregler

1, 2, 3, 4, 5, 6,...

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

Känguru 2018 Student gymnasieserien i samarbete med Jan-Anders Salenius (Brändö gymnasium)

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Högskoleprovet. Block 1. Anvisningar. Övningsexempel. Delprovet innehåller 22 uppgifter.

Känguru 2018 Mini-Ecolier (åk 2 och 3)

Transkript:

2009-04-14.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall hitta det största tal N i intervallet [1, 999] där N 3 = produkten av alla heltalsdelare till N. Här följer två beskrivande exempel (inte körexempel) på tal och om de är kandidater till att vara talet vi söker (d.v.s. N). Exempel 1: Talet 207: Heltalsdelarna till 207 (de tal som 207 går att dela med) är 1, 3, 9, 23, 69 och 207. 207 3 = 207*207*207 = 8869743 1*3*9*23*69*207 = 8869743 Resultaten är lika så talet 207 är en kandidat. Exempel 2: Talet 996: Heltalsdelarna till 996 är 1, 2, 3, 4, 6, 12, 83, 166, 249, 332, 498 och 996. 996 3 = 996*996*996 = 988047936 1*2*3*4*6*12*83*166*249*332*498*996 = 9.762e+17 Resultaten är inte lika så talet 996 är inte en kandidat. Ditt program (din funktion) skall returnera det tal N som vi söker, d.v.s. den största kandidaten i intervallet som är angivet ovan. Det behöver inte finnas några indata.

2009-04-14.kl.14-19 Uppgift 2 På företaget Försäljning AB har de en policy som säger att alla som köper något och betalar med deras kort får lite rabatt. När man stoppar in pengar på kortet måste detta göras med 500 kronor. När man handlar på kortet dras det så mycket som varan kostar (förstås). Antag att man har laddat kortet med 500 kronor och därefter varje dag köper en vara för 53 kronor. Hur många dagar tar det då innan man kommer till det exakta saldot noll kronor på kundkortet. Givetvis måste man ladda in nya pengar om det inte går att dra minst 53 kronor vid ett köp. Det är inte givet att det skall vara 53 kronor vid varje inköp utan det kan istället vara t.ex. 49 kronor. Dock är det givet att man alltid köper varor för samma belopp varje dag. Användaren skall förutom ovanstående mata in vad som finns på kortet från början. Krav: Funktionen som räknar ut antalet dagar måste vara rekursiv. Huvudfunktionen skall dock heta how_many_days. >> how_many_days() Hur mycket finns på kortet från början: 1 Mata in vilket belopp som det handlas för per dag: 53 Det tar 227 dagar innan det blir exakt noll kronor i saldo >> how_many_days() Hur mycket finns på kortet från början: 500 Mata in vilket belopp som det handlas för per dag: 135 Det tar 100 dagar innan det blir exakt noll kronor i saldo Körexempel 3: >> how_many_days() Hur mycket finns på kortet från början: 500 Mata in vilket belopp som det handlas för per dag: 18 Det tar 250 dagar innan det blir exakt noll kronor i saldo Körexempel 4: >> how_many_days() Hur mycket finns på kortet från början: 498 Mata in vilket belopp som det handlas för per dag: 1 Det tar 498 dagar innan det blir exakt noll kronor i saldo

2009-04-14.kl.14-19 Uppgift 3 Sudoku är ett logikspel som går ut på att man ska placera ut siffror i ett rutmönster. Det klassiska, ursprungliga rutmönstret består av 3x3 rutor ( lådor ) som i sin tur består av 3x3 rutor. Det gäller att placera in siffrorna 1 till 9 på ett sådant sätt att varje vågrät rad, lodrät rad och låda på 3x3 rutor innehåller varje siffra exakt en gång. Du skall skriva ett program där man får mata in en matris (9x9 i storlek) som motsvarar en given Sudoku från en tidning. Ditt program skall därefter lösa denna och returnera lösningen. Antag att man i tidningen ser följande information: 6 5 9 3 4 7 8 5 8 2 4 3 5 6 7 9 1 8 3 5 9 1 2 8 2 3 6 4 7 2 5 6 1 8 7 2 Givet ovanstående tidningsurklipp så skall den matris man skickar in till din funktion se ut på följande sätt: M = [[6 5 0 9 3 0 0 0 0] ; [0 0 4 7 8 0 0 0 5] ; [8 0 0 0 0 2 4 3 0] ; [5 0 6 0 0 7 0 9 0] ; [0 1 0 8 0 3 0 5 0] ; [0 9 0 1 0 0 2 0 8] ; [0 2 3 6 0 0 0 0 4] ; [7 0 0 0 2 5 6 0 0] ; [0 0 0 0 1 8 0 7 2]] Körexempel: >> solve_sudoku(m) 6 5 1 9 3 4 8 2 7 2 3 4 7 8 1 9 6 5 8 7 9 5 6 2 4 3 1 5 8 6 2 4 7 1 9 3 4 1 2 8 9 3 7 5 6 3 9 7 1 5 6 2 4 8 1 2 3 6 7 9 5 8 4 7 4 8 3 2 5 6 1 9 9 6 5 4 1 8 3 7 2 Tips: Tanken är att man från början har talen 1-9 givet som möjliga i varje position. Varje gång man stoppar in ettt tal tas de övriga bort från denna position och dessutom skall talet tas bort från de rader/kolumner och från alla positioner i den aktuella lådan. Om man hittar en postiion där det endast finns ett värde kvar anses detta värde som det som skall stoppas in på den positionen. Detta upprepas tills det att hela Sudokun är löst.

2009-04-14.kl.14-19 Uppgift 4 Du skall skriva ett program som ritar en figur som ser så lik den nedan ut som möjligt. Det är tillåtet att använda de inbyggda funktionerna axis, plot och fill. Vågorna består av en massa stjärnor. Tips: Det är ok att mäta i figuren och det behöver inte bli en exakt kopia..

2009-08-21.kl.08-13 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 ges i mått som avser längd (SL), bredd (SB) och en höjd (SH). LECA-stenarna sammanfogas med murbruk och detta gör att man kan räkna med att det är lite mellanrum mellan stenarna och det gör att man brukar räkna med att de bygger 1 cm mer än de har som mått (d.v.s. de två exempelmåtten ovan kan ses som 60x20x20 och 60x20x40). Vi kan anta i följande uppgifter att vi skall bygga ett hus som ser ut enligt följande figur i en vy uppifrån. Det finns inga fönster utan bara en dörr som går från golv till tak och det är givet att denna sitter på mitten så gått det går med kravet att det skall vara en multipel av 10 cm på den vänstra sidan (dörren justeras alltså, så att detta krav tillgodoses, åt vänster om det inte går att få dörren exakt på mitten). Alla mått skall vara i hela cm. DB DB = Dörrbredd HB = Husbredd HL = Huslängd HL HB Man ser i figuren ovan att det i det övre vänstra hörnet skall vara en hel sten nedåt. Vi börjar dock vid dörrens vänstra sida och lägger en hel sten (om det får plats) och så fyller man på med hela stenar tills vi når fram till det vänstra övre hörnet. Den sista stenen blir i de flesta fall kortare (måste alltså kapas) för att få plats. På samma sätt gör man runt hela huset tills det att man når dörrens högra sida. Det kan alltså bli ett antal stenar som kapas för att det skall bli bra i hörnen. Även den sista stenen vid dörrens högra sida kanske skall kapas. Det är också viktigt att man inte lägger stenarna så att två lager på varandra får fogar (skarvar) på samma ställe. Om två fogar hamnar på samma ställe försvagas konstruktionen. När man bygger det andra lagret skall detta inte ge några skarvar på samma ställe som i lager 1. Detta kan vi anta att det uppfylls om man i andra lagret börjar på högra sidan om dörren istället för vänstra och går runt åt andra hållet (de fall som skapar problem bortser vi ifrån). Antal lager med LECA-stenar anges som HH och är alltså ett heltal. Höjden på huset blir då resultatet av HH * SH. Vi har påbörjat en del program som har med ovanstående att göra. Dessa finns givna i given_files -mappen. Din uppgift är att utifrån dessa eller på egen hand lösa det som står i uppgifterna i tentan.

2009-08-21.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) När man bygger ett hus enligt förutsättningarna på första sidan blir det oftast så att man måste kapa ett antal stenar. Om man antar att man inte återanvänder det man kapat bort till andra ställen får man direkt en frågeställning framför sig. Hur många stenar behöver kapas givet indata på HB, HL, DB, SB och SL. Vi antar att det bara är ett lager vi skall räkna på så det är irrelevant vad som finns i lager 2, 3,... Mata in husets bredd (HB): 300 Mata in husets längd (HL): 500 Mata in dörrens bredd (DB): 100 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 Det behöver kapas 3 stenar. Mata in husets bredd (HB): 238 Mata in husets längd (HL): 346 Mata in dörrens bredd (DB): 82 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 Det behöver kapas 5 stenar. Körexempel 3 (OBS! resultatet i singularis): Mata in husets bredd (HB): 320 Mata in husets längd (HL): 500 Mata in dörrens bredd (DB): 80 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 Det behöver kapas 1 sten. Körexempel 3: Mata in husets bredd (HB): 200 Mata in husets längd (HL): 100 Mata in dörrens bredd (DB): 80 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 20 Det behöver kapas 0 stenar.

2009-08-21.kl.08-13 Uppgift 2 När man bygger ett hus enligt förutsättningarna på första sidan blir det oftast så att man måste kapa ett antal stenar. Om man antar att man återanvänder det man kapat bort till andra ställen får man direkt en frågeställning framför sig. Hur många stenar behövs givet indata på HB, HL, HH, DB, SB och SL. Vi antar att det är ett jämnt antal lager vi skall räkna på så det är irrelevant vad som finns i sista lagret om användaren anger ett udda antal lager. När man bygger sitt hus får man gamla avkapade delar allt eftersom man bygger och när man behöver en ny kapad sten skall man leta reda på den minsta möjliga (som räcker till) av de delar som kapats av tidigare och använda denna istället för att kapa av en helt ny sten. Här inser man att det då kan vara så att man har en sten som är helt rätt längd bland de kapade eller så är den stendel man skall använda lite för lång. I det senare fallet kapas denna stendel så att man får den bit man önskar samt att man får en ny kortare avkapad bit att använda till senare. Din uppgift är alltså att skriva ett program som tar reda på hur många stenar man behöver totalt för att bygga huset. Körexempel 1 (när det som i detta exmepel inte blir delar över ser det lite underligt ut, men...): Mata in husets bredd (HB): 80 Mata in husets längd (HL): 80 Mata in dörrens bredd (DB): 40 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 Mata in husets höjd (HH = antal stenar i höjdled): 6 Det behövs 20 stenar för att bygga huset. Eventuella delar som blev över är: Mata in husets bredd (HB): 300 Mata in husets längd (HL): 500 Mata in dörrens bredd (DB): 90 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 Mata in husets höjd (HH = antal stenar i höjdled): 10 Det behövs 243 stenar för att bygga huset. Eventuella delar som blev över är: 5 st med längd 10 10 st med längd 20 1 st med längd 30

2009-08-21.kl.08-13 Uppgift 3 Det kan vara bra att se hur man skall bygga sitt hus. Din uppgift är därför att rita ut de stenar som finns i ett givet lager. Lagret genereras i den givna programkoden. Du får titta i det givna programmet och se till att skapa själva utskriftsdelen som saknas. Utskrifterna skall följa nedanstående exempel. Mata in husets bredd (HB): 300 Mata in husets längd (HL): 200 Mata in dörrens bredd (DB): 90 Mata in stenarnas bredd (SB): 40 Mata in stenarnas längd (SL): 60 +--++----+ +---++----+ +----+ +---++----+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +----++----++----++----+++ +----++----++----++----++++--+ Mata in husets bredd (HB): 450 Mata in husets längd (HL): 50 Mata in dörrens bredd (DB): 100 Mata in stenarnas bredd (SB): 20 Mata in stenarnas längd (SL): 60 +++-++----++----+ +----++----++----+ +-++----++----+ +----++----++----+ ++ ++ +----++----++----++----++----++----++----++ +----++----++----++----++----++----++----++++

2009-08-21.kl.08-13 Uppgift 4 När man bygger sitt hus och kommer till den punkt där man skall bygga taket får man lite problem. Man behöver någon form av ställning. Antag att man bygger den av LECA-stenar på så sätt att man kan se det som en trapp oavsett från vilket håll man kommer (lite grann som en kapad pyramid). Se i figuren för att se hur trappen skulle se ut för hushöjderna 2, 3 och 4 (självklart behövs ingen trappa om man bara bygger ett lager stenar i huset). Din uppgift är att skriva det program som räknar ut hur många stenar det behövs för att bygga trappan givet en viss höjd på huset. Krav: Du skall ha en rekursiv funktion som beräknar antalet stenar i ditt program. Mata in husets höjd (HH = antal stenar i höjdled): 1 Det behövs 0 stenar för att bygga trappan. Körexempel 2 (singularis!!!): Mata in husets höjd (HH = antal stenar i höjdled): 2 Det behövs 1 sten för att bygga trappan. Körexempel 4: Mata in husets höjd (HH = antal stenar i höjdled): 4 Det behövs 22 stenar för att bygga trappan. Körexempel 10: Mata in husets höjd (HH = antal stenar i höjdled): 10 Det behövs 525 stenar för att bygga trappan. Körexempel 100: Mata in husets höjd (HH = antal stenar i höjdled): 100 Det behövs 651750 stenar för att bygga trappan.

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 Körexempel 3: >> 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 Körexempel 3: >> bridge_1(6) Person 1 och 6 går över. Person 1 går tillbaka. Person 1 och 5 går över. Person 1 går tillbaka. Person 1 och 4 går över. Person 1 går tillbaka. Person 1 och 3 går över. Person 1 går tillbaka. 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 Körexempel 3: >> 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 Körexempel 3: >> 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) Körexempel 3: >> 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 Körexempel 3: >> 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 Körexempel 3: >> 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 1 går tillbaka. Person 7 och 8 går fram. Person 2 har nu vilat och går tillbaka. Person 1 och 2 går fram. Person 1 går tillbaka. Person 5 och 6 går fram. Person 2 har nu vilat och går tillbaka. Person 1 och 2 går fram. Person 1 går tillbaka. 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) Körexempel 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