2006-12-08.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Implementera följande funktion: fun(1) = 1 fun(n) = fun(n / 2), för jämna n fun(n) = n / (fun(n - 1) + fun(n + 1)), för udda n Exempel på korrekta resultat: fun(2) = 1 fun(3) = 1.5 fun(4) = 1 fun(5) = 2 fun(6) = 1.5 fun(7) = 2.8 fun(8) = 1 fun(123) = 10.0502129319534 fun(321) = 19.7074964131994
2006-12-08.kl.08-13 Uppgift 2 Skriv en funktion som heter Number_Sort. Denna skall ta emot en vektor innehållande heltal. Funktionen skall gå igenom vektorn och skapa en frekvenstabell (en ny vektor innehållande antalet av respektive heltal) samt skriva ut en tabell innehållande de olika talen och hur många av dem som den ursprungliga vektorn innehöll. Tabellen skall vara sorterad efter antalet i första hand (i sjunkande ordning) och i andra hand efter talens storlek (i stigande ordning). För att kunna testa din funktion skall du dessutom skriva ett huvudprogram där användaren får mata in vektorn som skall skickas till funktionen. Körexempel 1: Mata in vektorn som skall hanteras: [1 2 3 2 3 1 4 22 1 3] Frekventabell Antal Tal 3 1 3 3 2 2 1 4 1 22 Körexempel 2: Mata in vektorn som skall hanteras: [-1-2 -3 2 3 4-1 -1 2] Frekventabell Antal Tal 3-1 2 2 1-3 1-2 1 3 1 4
Uppgift 3 Skriv ett program som ritar ut en stjärna som ser ut enligt nedan. Användaren skall mata in antalet spetsar stjärnan skall ha samt radien på den cirkel som tangerar spetsarna. Det är givet att användaren alltid matar in ett udda antal spetsar (alltid minst 3 som då ger en triangel som vi anser vara den minsta stjärnan). Exempel 1: Mata in antalet spetsar: 5 Mata in yttre radien : 5 Exempel 2: Mata in antalet spetsar: 9 Mata in yttre radien : 5
Uppgift 4 Skriv en funktion, vector_shuffle, som tar emot en vektor med heltal och sen blandar runt dem slumpmässigt. Man kan tänka sig att vektorn som kommer till funktionen motsvarar t.ex. en kortlek och att den skall blandas. Den blandade vektorn skall vara utdata från funktionen. Ett krav är att alla positioner i vektorn måste ha bytt data med någon annan position i vektorn (eventuellt samma position om slumpen råkar göra det så). Observera att vektorn som kommer in till funktionen kan vara olika lång vid olika tillfällen. Tips: Det kan vara lämpligt att skapa någon funktion som slumpar ut heltal i intervallet [1, längden av vektorn].
2006-12-08.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Om man har en vektor innehållande ett antal heltal och skickar den till den inbyggda funktionen sort får man tillbaka antingen den sorterade vektorn (om man har ett anrop enligt v2 = sort(v1); ) eller så får man tillbaka både den sorterade vektorn och en vektor där man ser vilken plats talen hade innan sorteringen (om man anropar enligt [v2 v3] = sort(v1); ). Antag att v1 innehåller följande data: [1 3 6 0 5 1 8 6 5 5] Utdata blir då i v2 (oavsett anrop ovan): [0 1 1 3 5 5 5 6 6 8] I fall nummer två blir utdatat i v3: [4 1 6 2 5 9 10 3 8 7] Din uppgift är att skriva en funktion, restore_vector, som tar emot de två vektorerna v2 och v3 och returnerar den ursprungliga vektorn v1. OBS! du skall inte skriva ut något i funktionen. Krav: Din funktion skall klara av godtyckligt långa vektorer, d.v.s. man kan anropa din funktion med olika långa vektorer olika gånger. Förutom ovanstående skall du skriva ett program som sköter själva in- och utmatningen av data. Detta skall bete sig enlig körexemplet nedan. Programmet skall givetvis anropa ovanstående funktion. Körexempel (utskrifterna av vektorerna behöver dock inte se ut som i exemplet): Mata in en vektor motsvarande v1: [1 3 6 0 5 1 8 6 5 5] Programmet anropar nu den inbyggda sort för att få v2 och v3. v1 = 1 3 6 0 5 1 8 6 5 5 v2 = 0 1 1 3 5 5 5 6 6 8 v3 = 4 1 6 2 5 9 10 3 8 7 Programmet anropar nu restore_vector för att återskapa v1. v1 = 1 3 6 0 5 1 8 6 5 5 OBS! Du skall givetvis inte skriva ut original-v1 utan det som kommer tillbaka från restore_vector i den sista utskriften av v1!
2006-12-08.kl.14-19 Uppgift 2 Implementera följande funktion: n f(n) = ----------------------------------------------------- n-1 n-1 ------------------------- + ------------------------- n-2 n-2 n-2 n-2 ----------- + ----------- ----------- + ----------- / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ 2 ----- 1 + 1 Exempel: f(1) = 1 2 f(2) = ----- = 1 1 + 1 3 f(3) = ------------- = 1.5 2 2 ----- + ----- 1 + 1 1 + 1 4 f(4) = ----------------------------- = 1.33333 3 3 ------------- + ------------- 2 2 2 2 ----- + ----- ----- + ----- 1 + 1 1 + 1 1 + 1 1 + 1 f(5) =... = 1.875 f(10) =... = 2.03174603174603 Tips: Rekursion är inte dumt. Skriv om funktionen så att det blir rekursiv innan du börjar med själva programmeringen.
Uppgift 3 Skriv ett program som ritar ut en stjärna som ser ut enligt nedan. Användaren skall mata in antalet spetsar stjärnan skall ha samt de två radier som motsvarar en omkringliggande cirkels radie samt en inskriven cirkels radie. Det är givet att användaren alltid matar in ett antal spetsar så att det går att rita en stjärna. Exempel 1: Mata in antalet spetsar: 5 Mata in yttre radien : 5 Mata in inre radien : 1.9 Exempel 2: Mata in antalet spetsar: 9 Mata in yttre radien : 5 Mata in inre radien : 1.75
Uppgift 4 När syskon skall dela på en godispåse kan det ibland bli så att alla inte får lika mycket. Speciellt om storebror delar innehållet. I denna uppgift får vi se ett exempel där storebror delar godiset till alla med hjälp av en tärning. Du skall skriva ett program som slumpar fram ett antal barn som skall få godis och delar ut godis till dem. Programmet skall slumpa ut antalet barn mellan 5 och 10 samt antal godisbitar, som skall delas ut, mellan 50 och 100. Därefter skall programmet slumpa hur många bitar, mellan 1 och 6 stycken, respektive barn får enligt följande algoritm: 1) Sätt N = 1. 2) Slumpa ut antal godisbitar som skall delas ut. 3) Plocka så många bitar det går upp till det slumpade antalet och ge dessa till barn nummer N. 4) Om det inte finns bitar kvar att dela ut: Avsluta utdelningen. 5) Öka N med 1. 6) Om N överstiger antalet barn: Sätt N till 1. 7) Börja om från punkt 2. Programmet skall skriva ut hur många godisbitar respektive barn har fått i slutänden.
2006-12-15.kl.08-13.extrainsatt Uppgift 1 (Extra insatt tenta, speciella regler) Skriv en funktion som heter min_union. Denna skall ta emot två vektorer innehållande heltal. Funktionen skall gå igenom vektorerna och skapa en ny vektor som innehåller alla tal som fanns i antingen den första vektorn, den andra vektorn eller i båda de inkommande vektorerna. Dock skall den nya vektorn inte innehålla några dubletter. Du skall förutom detta skriva ett huvudprogram som anropar din funktion. Huvudprogrammet skall bete sig som i exemplen nedan. Körexempel 1: Mata in första vektorn som skall hanteras: [1 2 3 2 3] Mata in andra vektorn som skall hanteras : [3 2 1 5 4] Resultatet blev: [1 2 3 4 5] Körexempel 2: Mata in första vektorn som skall hanteras: [1 2 3 4 5 6] Mata in andra vektorn som skall hanteras : [7 8 9 1 2 3 7 9 1] Resultatet blev: [1 2 3 4 5 6 7 8 9] OBS! Resultatvektorn skall givetvis vara sorterad.
2006-12-15.kl.14-19.extrainsatt Uppgift 1 (Extra insatt tenta, speciella regler) Skriv en funktion som heter min_snitt. Denna skall ta emot två vektorer innehållande heltal. Funktionen skall gå igenom vektorerna och skapa en ny vektor som innehåller alla tal som fanns i båda de inkommande vektorerna. Dock skall den nya vektorn inte innehålla några dubletter. Du skall förutom detta skriva ett huvudprogram som anropar din funktion. Huvudprogrammet skall bete sig som i exemplen nedan. Körexempel 1: Mata in första vektorn som skall hanteras: [1 2 3 2 3] Mata in andra vektorn som skall hanteras : [3 2 1 5 4] Resultatet blev: [1 2 3] Körexempel 2: Mata in första vektorn som skall hanteras: [1 2 3 4 5 6] Mata in andra vektorn som skall hanteras : [7 8 9 1 4 3 7 9 1] Resultatet blev: [1 3 4] OBS! Resultatvektorn skall givetvis vara sorterad.