2010-01-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Olika personer äter olika mycket mat. Vissa är sådana som alltid äter mycket. Andra äter lite och vissa äter mer vid vissa tillfällen. Hur hänger detta då ihop? I en nyligen utkommen forskningsrapport visar det sig att mängden mat man äter beror på en massa faktorer. Här följer en lista på några av dem: Personens längd, midjemått, vikt. Tid sedan senaste måltid. Tid på dagen. Ämnesomsättning. Matens och omgivningens temperatur. Ja, ni förstår att det finns mycket mer som detta kan bero på. I denna uppgift har vi tagit den förenklade formel som gäller för hur många ägg en person kan klara av att äta på fastande mage på juldagen efter en bastant middag på julaftonskvällen. Formeln tar endast hänsyn till personens längd (L), tid på dagen (T), antal timmar sen senaste måltid (N) och matens temperatur given i o C (C). Denna formel är uppdelad i två delar för att man lättare skall se hur den är uppbyggd. Formeln Capacity nedan används för att få fram kapaciteten personen har: T -- 5 C e 2 60C ---------------------- 10 Capacity( T, C, L, N) = round -------------------------------------- + N 20L Formeln Gastronomi räknar ut antalet ägg och ser ut på följande sätt: Din uppgift är att implementera (skapa) dessa funktioner i Ada och sen skriva ett program där användaren får mata in data för L, T, C och N. Programmet skall (förstås) skriva ut antalet ägg personen klarar av. OBS! Användaren matar in heltal, men beräkningarna skall ske med flyttal. Eventuella matematiska funktioner som kan behövas (t.ex. exp för e x ) finns i standardpaketet Ada.Numerics.Elementary_Functions. Attributet Float Rounding kan också vara bra att ha. Formlerna ovan bygger på rimliga indata på variablerna och dessa heltalsintervall är: T: [0, 24] C: [20, 50] L: [50, 250] N: [6, 24] Gastronomi( T, C, L, N) = N i = 1 CapacityTCLi (,,, ) -------------------------------------------------- i
2010-01-12.kl.14-19 Uppgift 2 I algebra tycker många om inversberäkningar på matriser. Detta finns förstås inbyggt i verktyg som MatLab, men er uppgift är att skapa en egen sådan i Ada. Er funktion skall heta Inverse (och ligga i det givna paketet Matrix_Handling) och den skall ta emot en kvadratisk matris. Funktionen skall ligga på en separat fil och kompileras tillsammans med huvudprogrammet Test_My_Inverse som finns givet. Vi antar för enkelhets skull att vi inte kommer att råka ut för att behöva byta rader i ursprungsmatrisen eller att vi får nollelement i diagonalen under beräkningsgången. Här följer ett exempel på hur beräkningarna skall gå till. Lösningsgången börjar med att vi sätter upp matrisen bredvid en enhetsmatris. Vi antar att vi har den matris som är till vänster i följande uppställning: 2 4 6 1 0 0 1 4 5 0 1 0 2 6 7 0 0 1 Det gäller nu att få till en enhetsmatris av den vänstra sidan genom att utföra följande operationer ett antal gånger. 1. Sätt N = 1 2. Normalisera rad nummer N, d.v.s. se till att det element som ligger på diagonalen blir en 1:a. Detta görs i exemplet genom att dividera alla element på raden med talet som står på diagonalpositionen, d.v.s. position (N, N). 3. Därefter skall de övriga raderna nollställas i kolumn N. Detta görs genom att subtrahera eller addera den N:te raden (eventuellt multiplicerad med en faktor). 4. Öka N med 1 och börja om från punkt 2 tills alla rader är genomförda. Vi utför punkterna 2 och 3 för N = 1 givet exemplet ovan. Efter punkt 2 blir raderna: 1.000 2.000 3.000 0.500 0.000 0.000 1.000 4.000 5.000 0.000 1.000 0.000 2.000 6.000 7.000 0.000 0.000 1.000 Efter punkt 3 ser det ut på följande sätt (subtrahera rad 1 med faktor 1 resp. 2 från rad 2 och 3): 1.000 2.000 3.000 0.500 0.000 0.000 0.000 2.000 2.000-0.500 1.000 0.000 0.000 2.000 1.000-1.000 0.000 1.000 Vi fortsätter med N = 2 och får då efter punkt 2 (division med 2 gjord): 1.000 2.000 3.000 0.500 0.000 0.000 0.000 1.000 1.000-0.250 0.500 0.000 0.000 2.000 1.000-1.000 0.000 1.000 Efter punkt 3 ser det ut som följer (vi har subtraherat med faktorn 2 på rad 1 och 3): 1.000 0.000 1.000 1.000-1.000 0.000 0.000 1.000 1.000-0.250 0.500 0.000 0.000 0.000-1.000-0.500-1.000 1.000 Vi fortsätter med N = 3 och får då efter punkt 2 och 3 (division med -1 och subtrahera 1): 1.000 0.000 0.000 0.500-2.000 1.000 0.000 1.000 0.000-0.750-0.500 1.000 0.000 0.000 1.000 0.500 1.000-1.000
2010-01-12.kl.14-19 Uppgift 3 Ett jämnt 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 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 bridge_1 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: Mata in antal personer (inkl Bridget): 8 Person 1 och 2 går fram. Person 1 går tillbaka. Person 7 och 8 går fram. Person 2 går tillbaka. Person 1 och 2 går fram. Person 1 går tillbaka. Person 5 och 6 går fram. Person 2 går tillbaka. Person 1 och 2 går fram. Person 1 går tillbaka. Person 3 och 4 går fram. Person 2 går tillbaka. Person 1 och 2 går fram. Tiden blir 35 kvartar.
2010-01-12.kl.14-19 Uppgift 4 På hemsidan http://www.astronomycafe.net/qadir/timeline.html fins en lista av framtida viktiga händelser. Dessa är sparade i filen events.txt. Formatet på varje rad i filen är (se i filen för att se exakt hur det ser ut): <Årtal>:<Förutsägelse med maximalt 200 tecken> En hel del av förutsägelserna är tagna från science fiction. Det kommer från böcker, tv-serier, filmer etc. Vissa av dessa har även namn på vilka serier det är eller vem som kommit fram med profetian. Dessa referenser står isåfall inom parentes i slutet av raden. Årtalet kan vara ett normalt 4-siffrigt år, ett 5- eller 6-siffrigt år med ett kommatecken (,) som tusentalsavgränsare, ett tal med punkt som decimalavgränsare följt av ett av orden million, billion eller trillion. Händelser väldigt långt in i framtiden skrivs på exponentialform, t.ex. 10^17. Se i filen för mer detaljer. OBS! Detta är en exempelfil. Det kan vara fler eller färre rader i den fil vi använder. Skriv ett program som frågar användaren efter ett årtal och sedan skriver ut alla förutsägelser för detta år. Endast år som exakt matchar användarens indata skall beaktas av programmet. Om det inte finns någon förutsägelse för detta år skall programmet skriva ut att det inte fanns någon förutsägelse (se i exemplen nedan). Programmet skall avslutas när man skriver in årtalet 0. Körexempel: Year? 2024 This is the prediction(s) for year 2024: End of the World. Asteroid hits earth. Year? 2029 This is the prediction(s) for year 2029: No predictions found Year? 657,208 This is the prediction(s) for year 657,208: The Time Ships. The Morlock civilization. (Stephen Baxter) Year? 16,000 This is the prediction(s) for year 16,000: Vega is now the North Pole Star. Year? 1.1 billion This is the prediction(s) for year 1.1 billion: Sun will be 10% brighter than today. Moist Greenhouse Effect. Earth would start to lose its water via a moist greenhouse Year? 10^10^26 This is the prediction(s) for year 10^10^26: All iron nuclei collapse into black holes Year? 0
2010-02-17.kl.13-15 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som låter användaren matat in en sträng bestående av maximalt 20 tecken. De tecken användaren matar in är i intervallet [ a, z ]. Inga andra tecken behöver hanteras då användaren är en snäll assistent som har koll på sina inmatningar. Programmet skall läsa in inmatningen till en sträng som är dimensionerad till 20 tecken (inte mer eller mindre). Användaren kan mata in godtyckligt lång sträng (dock skall endast de första 20 tecknen räknas som inmatning om det är fler än 20, resten skall kastas bort). Om användaren endast trycker på <ENTER>-knappen, d.v.s. inte matar in något, skall programmet avslutas. Om användaren matar in minst ett tecken skall inmatningen skrivas ut enligt nedan och en ny inmatning skall göras (utan att man behöver starta om programmet). Körexempel: Mata in en sträng med maximalt 20 tecken: abcd abcdefghijklmnopqrstuvwxyz a b c d Mata in en sträng med maximalt 20 tecken: bdac abcdefghijklmnopqrstuvwxyz b d a c Mata in en sträng med maximalt 20 tecken: qwertyuiop abcdefghijklmnopqrstuvwxyz q w e r t y u i o p Mata in en sträng med maximalt 20 tecken: Inget att skriva ut. Tack för idag! Tips: Om man tittar lite på ovanstående ser man att innehållet i strängen skrivs ut ett tecken per rad och med så många blanktecken som det finns tecken i alfabetet innan det aktuella tecknet före själva tecknet.
2010-02-17.kl.15-17 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som låter användaren matat in en sträng bestående av maximalt 20 tecken. De tecken användaren matar in är i intervallet [ a, z ]. Inga andra tecken behöver hanteras då användaren är en snäll assistent som har koll på sina inmatningar. Programmet skall läsa in inmatningen till en sträng som är dimensionerad till 20 tecken (inte mer eller mindre). Användaren kan mata in godtyckligt lång sträng (dock skall endast de första 20 tecknen räknas som inmatning om det är fler än 20, resten skall kastas bort). Om användaren endast trycker på <ENTER>-knappen, d.v.s. inte matar in något, skall programmet avslutas. Om användaren matar in minst ett tecken skall inmatningen skrivas ut enligt nedan och en ny inmatning skall göras (utan att man behöver starta om programmet). Körexempel: Mata in en sträng med maximalt 20 tecken: abcd abcdefghijklmnopqrstuvwxyz a....b.....c......d... Mata in en sträng med maximalt 20 tecken: bdac abcdefghijklmnopqrstuvwxyz.b......d... a.....c... Mata in en sträng med maximalt 20 tecken: qwertyuiop abcdefghijklmnopqrstuvwxyz...q......w......e......r......t......y....u......i......o......p... Mata in en sträng med maximalt 20 tecken: Inget att skriva ut. Tack för idag! Tips: Om man tittar lite på ovanstående ser man att innehållet i strängen skrivs ut ett tecken per rad och med så många punkter som det finns tecken i alfabetet före och efter det aktuella tecknet runt själva tecknet.
2010-02-17.kl.17-19 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som låter användaren matat in en sträng bestående av maximalt 20 tecken. De tecken användaren matar in är i intervallet [ a, z ]. Inga andra tecken behöver hanteras då användaren är en snäll assistent som har koll på sina inmatningar. Programmet skall läsa in inmatningen till en sträng som är dimensionerad till 20 tecken (inte mer eller mindre). Användaren kan mata in godtyckligt lång sträng (dock skall endast de första 20 tecknen räknas som inmatning om det är fler än 20, resten skall kastas bort). Om användaren endast trycker på <ENTER>-knappen, d.v.s. inte matar in något, skall programmet avslutas. Om användaren matar in minst ett tecken skall inmatningen skrivas ut enligt nedan och en ny inmatning skall göras (utan att man behöver starta om programmet). Körexempel: Mata in en sträng med maximalt 20 tecken: abcd abcdefghijklmnopqrstuvwxyz > -> --> ---> Mata in en sträng med maximalt 20 tecken: bdac abcdefghijklmnopqrstuvwxyz -> ---> > --> Mata in en sträng med maximalt 20 tecken: qwertyuiop abcdefghijklmnopqrstuvwxyz ----------------> ----------------------> ----> -----------------> -------------------> ------------------------> --------------------> --------> --------------> ---------------> Mata in en sträng med maximalt 20 tecken: Inget att skriva ut. Tack för idag! Tips: Om man tittar lite på ovanstående ser man att innehållet i strängen bestämmer hur långt streck man ritar ut och på rätt plats kommer ett > -tecken.
2010-03-15.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) På MTV ser man ofta att de ger information om hur bra personer passar ihop. Detta kan man göra ungefär lika bra själv genom en enkel algoritm. Din uppgift är att skapa en sådan för att se om två personer passar bra ihop. Algoritmen går ut på att man låter användaren mata in sitt eget förnamn och förnamnet på den han/hon älskar. Ut från detta kommer en procentsats som anger hur bra chans man har att det skall bli ett bra förhållande. Procentsatsen kommer alltså att ligga i intervallet [0, 99]. För att beräkna procentsatsen gör man så att man går igenom personens eget namn och beräknas summan av alla tecken som finns i namnet. Denna summa skall sen divideras med summan man får för namnet på personen man älskar. I det värde man nu får fram skall man endast använda de första två decimalerna. Dessa anger den procentsats som anger förhållandets reella chans i det verkliga livet. För att lösa ovanstående gäller att varje tecken har det värde som det har i det vanliga svenska alfabetet (inklusive w ), d.v.s. a =1, b =2,..., ö =29. Vi antar att inga icke-svenska tecken ingår i namnen. Alla tecken som inte finns med i detta alfabet anses ha värdet 0 (noll). Inmatningen är maximalt 20 tecken lång och du får inte ha strängar som är längre än 20 tecken långa. Körexempel 1: Mata in ditt eget namn : kungen Mata in namnet på din älskade: silvia Sannolikheten för detta förhållande är ca 0%. Körexempel 2: Mata in ditt eget namn : julia Mata in namnet på din älskade: romeo Sannolikheten för detta förhållande är ca 80%. Körexempel 3: Mata in ditt eget namn : kalle Mata in namnet på din älskade: kajsa Sannolikheten för detta förhållande är ca 97%. Körexempel 4: Mata in ditt eget namn : antonietta florentia Mata in namnet på din älskade: bert Sannolikheten för detta förhållande är ca 86%.
2010-03-15.kl.08-13 Uppgift 2 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Shaker Sort. Denna algoritm ser ut på följande sätt: 1. Sätt L till första index i fältet 2. Sätt R till sista index i fältet 3. Sätt I till L samt sätt N till R 4. Byt plats på det I:te och det (I+1):te värdet i fältet om det I:te värdet är störst 5. Om byte har skett: Sätt N till I 6. Öka I med 1 7. Gå till punkt 9 om I = R 8. Upprepa från punkt 4 9. Sätt R till N 10.Avbryt sorteringen om R = L 11.Sätt I till R 12.Byt plats på det I:te och det (I-1):te värdet i fältet om det I:te värdet är minst 13.Om byte har skett: Sätt N till I 14.Minska I med 1 15.Gå till punkt 17 om I = L 16.Upprepa från punkt 12 17.Sätt L till N 18.Avbryt sorteringen om R = L 19.Gå till punkt 3 Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_shaker_sort.
2010-03-15.kl.08-13 Uppgift 3 Det finns ett givet program som stoppar in data i ett såkallat binärt sökträd i mappen given_files. Din uppgift är att komplettera detta program med en utskriftsprocedur som gör att man ser hur innehållet i trädet ser ut. Här följer en bild över hur ett binärt sökträd skulle kunna se ut. 5 3 8 1 4 7 9 Trädet är representerat i programmet som ett fält där index 1 motsvarar den översta noden i trädet (med talet 5). För att gå till vänster i trädet multiplicerar man det index man för tillfället är på med 2 och för att går till höger multiplicerar man den nod man är på med 2 samt adderar 1. Detta ger att de två noderna under toppnoden (de med värdena 3 resp. 8) har index 2 och 3 i fältet. Samma operationer utförs oavsett var i trädet man befinner sig. Din uppgift är att skriva ut trädets innehåll i sorterad ordning (utan att använda någon sorteringsalgoritm förstås) med det minsta talet först. Den enda jämförelse av data i trädet som är tillåten är om datat är 0 (noll) då detta motsvarar att det inte finns mer nedåt i trädet i denna gren. Talet noll kan alltså inte lagras i denna datastruktur. Vi antar att användaren inte matar in dubletter av data (även om detta skulle kunna vara möjligt utan större problem, men ett binärt sökträd skall inte innehålla dubletter). Körexempel 1: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT1.TXT Det binära sökträdet innehåller nu: 1 3 4 5 7 8 9 Körexempel 2: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT2.TXT Det binära sökträdet innehåller nu: 1 2 3 5 6 7 8 9 TIPS: Det kan vara trevligt med rekursion. KRAV: Du skall modifiera programmet så att det läser in det filnamn som man skall läsa in indatat från och sen hämtar datat därifrån förstås.
2010-03-15.kl.08-13 Uppgift 4 Det var en gång ett troll som hade en stor borg med en stor sal, 16 celler där man kunde hålla fångar och ett rum med en spak som hade två lägen (uppåt respektive nedåt). Trollet hade dessutom lyckats fånga 16 tomtar som han hade fört till sin stora sal i borgen. Tomtarna var väldigt rädda då de visste att troll äter tomtar och de såg ingen utväg att komma hem levande. Nu var det så att detta troll hade väldigt gott om mat och därför kände det sig väldigt upprymt och ville ge tomtarna en chans att få bli fria. Han bestämde sig för att berätta detta för tomtarna och det som var deras chans var att komma fram till ett sätt (en algoritm om man vill säga så) som gjorde att någon av tomtarna kunde avgöra om alla tomtar (inklusive tomten själv) varit inne i rummet med spaken. Tomtarna fick en liten stund att diskutera problemet och sen blev de bortförda till cellerna. Man bör observera att de efter detta inte kunde kommunicera på annat sätt än med hjälp av ovan nämnda spak. Något som ställer till alltihop är att trollet helt slumpmässigt plockar en tomte ur en cell och för denne till rummet med spaken. Det är inte givet att trollet tar ut en tomte en gång och sen är denna kvar i sin cell utan det kan lika gärna vara så att samma tomte råkar ut för att bli vald fler gånger. I rummet med spaken får tomten gör något av följande: 1) Ändra spakens läge. 2) Låta spaken stå kvar i samma läge. 3) Säga "Jag vet att alla har varit här nu". Om tomten väljer alternativ 3 kan detta vara korrekt och isåfall slipper alla tomtar ut ur borgen. Om detdäremot är så att någon tomte inte varit där när den utvalde tomten väljer alternativ 3 blir alla tomtarna uppätna av trollet. Om tomten väljer något av alternativen 1 eller 2 kommer trollet att föra tillbaka tomten till sin cell efter utfört uppdrag. Tomtarna kom fram till följande algoritm: 1. Tomte 1 är en såkallad räknetomte. han håller reda på hur många som varit i rummet. 2. Tomte 1 får endast fälla ned spaken och de andra får endast fälla upp spaken. 3. Då man inte vet om spaken är upp- eller nedfälld från början måste alla tomtar fälla upp spaken 2 gånger. 4. Detta gör att spaken kommer att vara i uppfällt läge antingen 30 eller 31 gånger. 5. Det behövs endast 29 gånger om spaken var uppfälld från början och detta gör att tomte 1 garanterat kan säga att alla varit där då han fäller ned spaken för 30:e gången. Din uppgift är att skriva ett program som simulerar detta förlopp och räknar hur många gånger trollet behöver plocka ut tomtar innan de blir fria. Själva slumpningen skall vara så att man slumpar vilken tomte som blir hämtad och om det är tomte nummer 1 skall denna räkna upp varje gång spaken är uppfälld och de andra skall fälla upp spaken två gånger var. Körexempel 1: Trollet hämtade ut tomtar 590 gånger. Körexempel 2: Trollet hämtade ut tomtar 568 gånger. Körexempel 3: Trollet hämtade ut tomtar 752 gånger.
2010-03-15.kl.08-13 Uppgift 5 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Shaker Sort. Denna algoritm ser ut på följande sätt: 1. Sätt L till första index i fältet 2. Sätt R till sista index i fältet 3. Sätt I till L 4. Byt plats på det I:te och det (I+1):te värdet i fältet om det I:te värdet är störst 5. Om byte har skett: Sätt N till I 6. Öka I med 1 7. Gå till punkt 9 om I = R 8. Upprepa från punkt 4 9. Sätt R till N 10.Avbryt sorteringen om R = L 11.Sätt I till R 12.Byt plats på det I:te och det (I-1):te värdet i fältet om det I:te värdet är minst 13.Om byte har skett: Sätt N till I 14.Minska I med 1 15.Gå till punkt 17 om I = L 16.Upprepa från punkt 12 17.Sätt L till N 18.Avbryt sorteringen om R = L 19.Gå till punkt 3 Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_shaker_sort.
2010-03-15.kl.08-13 Uppgift 6 Det finns ett givet program som stoppar in data i ett såkallat binärt sökträd i mappen given_files. Din uppgift är att komplettera detta program med en utskriftsprocedur som gör att man ser hur innehållet i trädet ser ut. Här följer en bild över hur ett binärt sökträd skulle kunna se ut. 5 3 8 1 4 7 9 Trädet är representerat i programmet som ett fält där index 1 motsvarar den översta noden i trädet (med talet 5). För att gå till vänster i trädet multiplicerar man det index man för tillfället är på med 2 och för att går till höger multiplicerar man den nod man är på med 2 samt adderar 1. Detta ger att de två noderna under toppnoden (de med värdena 3 resp. 8) har index 2 och 3 i fältet. Samma operationer utförs oavsett var i trädet man befinner sig. Din uppgift är att skriva ut trädets innehåll i sorterad ordning (utan att använda någon sorteringsalgoritm förstås) med det minsta talet först. Den enda jämförelse av data i trädet som är tillåten är om datat är 0 (noll) då detta motsvarar att det inte finns mer nedåt i trädet i denna gren. Talet noll kan alltså inte lagras i denna datastruktur. Vi antar att användaren inte matar in dubletter av data (även om detta skulle kunna vara möjligt utan större problem, men ett binärt sökträd skall inte innehålla dubletter). Körexempel 1: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT1.TXT Det binära sökträdet innehåller nu: 1 3 4 5 7 8 9 Körexempel 2: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT2.TXT Det binära sökträdet innehåller nu: 1 2 3 5 6 7 8 9 TIPS: Det kan vara trevligt med rekursion. KRAV: Du skall modifiera programmet så att det läser in det filnamn som man skall läsa in indatat från och sen hämtar datat därifrån förstås.
2010-03-15.kl.08-13 Uppgift 7 Det var en gång ett troll som hade en stor borg med en stor sal, 16 celler där man kunde hålla fångar och ett rum med en spak som hade två lägen (uppåt respektive nedåt). Trollet hade dessutom lyckats fånga 16 tomtar som han hade fört till sin stora sal i borgen. Tomtarna var väldigt rädda då de visste att troll äter tomtar och de såg ingen utväg att komma hem levande. Nu var det så att detta troll hade väldigt gott om mat och därför kände det sig väldigt upprymt och ville ge tomtarna en chans att få bli fria. Han bestämde sig för att berätta detta för tomtarna och det som var deras chans var att komma fram till ett sätt (en algoritm om man vill säga så) som gjorde att någon av tomtarna kunde avgöra om alla tomtar (inklusive tomten själv) varit inne i rummet med spaken. Tomtarna fick en liten stund att diskutera problemet och sen blev de bortförda till cellerna. Man bör observera att de efter detta inte kunde kommunicera på annat sätt än med hjälp av ovan nämnda spak. Något som ställer till alltihop är att trollet helt slumpmässigt plockar en tomte ur en cell och för denne till rummet med spaken. Det är inte givet att trollet tar ut en tomte en gång och sen är denna kvar i sin cell utan det kan lika gärna vara så att samma tomte råkar ut för att bli vald fler gånger. I rummet med spaken får tomten gör något av följande: 1) Ändra spakens läge. 2) Låta spaken stå kvar i samma läge. 3) Säga "Jag vet att alla har varit här nu". Om tomten väljer alternativ 3 kan detta vara korrekt och isåfall slipper alla tomtar ut ur borgen. Om detdäremot är så att någon tomte inte varit där när den utvalde tomten väljer alternativ 3 blir alla tomtarna uppätna av trollet. Om tomten väljer något av alternativen 1 eller 2 kommer trollet att föra tillbaka tomten till sin cell efter utfört uppdrag. Tomtarna kom fram till följande algoritm: 1. Tomte 1 är en såkallad räknetomte. han håller reda på hur många som varit i rummet. 2. Tomte 1 får endast fälla ned spaken och de andra får endast fälla upp spaken. 3. Då man inte vet om spaken är upp- eller nedfälld från början måste alla tomtar fälla upp spaken 2 gånger. 4. Detta gör att spaken kommer att vara i uppfällt läge antingen 30 eller 31 gånger. 5. Det behövs endast 29 gånger om spaken var uppfälld från början och detta gör att tomte 1 garanterat kan säga att alla varit där då han fäller ned spaken för 30:e gången. Din uppgift är att skriva ett program som simulerar detta förlopp och räknar hur många gånger trollet behöver plocka ut tomtar innan de blir fria. Själva slumpningen skall vara så att man slumpar vilken tomte som blir hämtad och om det är tomte nummer 1 skall denna räkna upp varje gång spaken är uppfälld och de andra skall fälla upp spaken två gånger var. Körexempel 1: Trollet hämtade ut tomtar 590 gånger. Körexempel 2: Trollet hämtade ut tomtar 568 gånger. Körexempel 3: Trollet hämtade ut tomtar 752 gånger.
2010-03-15.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) På MTV ser man ofta att de ger information om hur bra personer passar ihop. Detta kan man göra ungefär lika bra själv genom en enkel algoritm. Din uppgift är att skapa en sådan för att se om två personer passar bra ihop. Algoritmen går ut på att man låter användaren mata in sitt eget förnamn och förnamnet på den han/hon älskar. Ut från detta kommer en procentsats som anger hur bra chans man har att det skall bli ett bra förhållande. Procentsatsen kommer alltså att ligga i intervallet [0, 99]. För att beräkna procentsatsen gör man så att man går igenom de två namnen och parar ihop de tecken som står på samma position i namnet. Värdena på de tecken som ingår i ett par multipliceras ihop och alla dessa produkter skall adderas ihop. Om det ena namnet innehåller fler tecken än det andra utförs inte multipliceringen för dessa utan man tar bara värdet av dessa tecken och adderar till summan. Av den summa man får fram efter denna beräkning skall endast de två sista siffrorna användas och dessa anger den procentsats som anger förhållandets reella chans i det verkliga livet. För att lösa ovanstående gäller att varje tecken har det värde som det har i det vanliga svenska alfabetet (inklusive w ), d.v.s. a =1, b =2,..., ö =29. Vi antar att inga icke-svenska tecken ingår i namnen. Alla tecken som inte finns med i detta alfabet anses ha värdet 1 (ett). Inmatningen är maximalt 20 tecken lång och du får inte ha strängar som är längre än 20 tecken långa. Körexempel 1: Mata in ditt eget namn : kungen Mata in namnet på din älskade: silvia Sannolikheten för detta förhållande är ca 79%. Körexempel 2: Mata in ditt eget namn : julia Mata in namnet på din älskade: romeo Sannolikheten för detta förhållande är ca 11%. Körexempel 3: Mata in ditt eget namn : kalle Mata in namnet på din älskade: kajsa Sannolikheten för detta förhållande är ca 75%. Körexempel 4: Mata in ditt eget namn : antonietta florentia Mata in namnet på din älskade: bert Sannolikheten för detta förhållande är ca 2%.
2010-03-15.kl.14-19 Uppgift 2 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Insertion Sort. Denna algoritm ser ut på följande sätt: 1. Sätt N till första index i fältet 2. Sätt D till det N:te värdet i fältet 3. Flytta alla värden som är större än D bland de första N-1 värdena i fältet ett steg (så att det bildas ett mellanrum mellan de mindre och de större värdena) 4. Stoppa in D i det mellanrum som skapas 5. Öka N med 1 6. Upprepa från punkt 2 tills det att N > sista index i fältet Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_insertion_sort.
2010-03-15.kl.14-19 Uppgift 3 Det finns ett givet program som stoppar in data i ett såkallat binärt sökträd i mappen given_files. Din uppgift är att komplettera detta program med en utskriftsprocedur som gör att man ser hur innehållet i trädet ser ut. Här följer en bild över hur ett binärt sökträd skulle kunna se ut. 5 3 8 1 4 7 9 Trädet är representerat i programmet som ett fält där index 1 motsvarar den översta noden i trädet (med talet 5). För att gå till vänster i trädet multiplicerar man det index man för tillfället är på med 2 och för att går till höger multiplicerar man den nod man är på med 2 samt adderar 1. Detta ger att de två noderna under toppnoden (de med värdena 3 resp. 8) har index 2 och 3 i fältet. Samma operationer utförs oavsett var i trädet man befinner sig. Din uppgift är att skriva ut trädets innehåll i sorterad ordning (utan att använda någon sorteringsalgoritm förstås) med det största talet först. Den enda jämförelse av data i trädet som är tillåten är om datat är 0 (noll) då detta motsvarar att det inte finns mer nedåt i trädet i denna gren. Talet noll kan alltså inte lagras i denna datastruktur. Vi antar att användaren inte matar in dubletter av data (även om detta skulle kunna vara möjligt utan större problem, men ett binärt sökträd skall inte innehålla dubletter). Körexempel 1: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT1.TXT Det binära sökträdet innehåller nu: 9 8 7 5 4 3 1 Körexempel 2: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT2.TXT Det binära sökträdet innehåller nu: 9 8 7 6 5 3 2 1 TIPS: Det kan vara trevligt med rekursion. KRAV: Du skall modifiera programmet så att det läser in det filnamn som man skall läsa in indatat från och sen hämtar datat därifrån förstås.
2010-03-15.kl.14-19 Uppgift 4 Det var en gång ett troll som hade en stor borg med en stor sal, 16 celler där man kunde hålla fångar och ett rum med en spak som hade två lägen (uppåt respektive nedåt). Trollet hade dessutom lyckats fånga 16 tomtar som han hade fört till sin stora sal i borgen. Tomtarna var väldigt rädda då de visste att troll äter tomtar och de såg ingen utväg att komma hem levande. Nu var det så att detta troll hade väldigt gott om mat och därför kände det sig väldigt upprymt och ville ge tomtarna en chans att få bli fria. Han bestämde sig för att berätta detta för tomtarna och det som var deras chans var att komma fram till ett sätt (en algoritm om man vill säga så) som gjorde att någon av tomtarna kunde avgöra om alla tomtar (inklusive tomten själv) varit inne i rummet med spaken. Tomtarna fick en liten stund att diskutera problemet och sen blev de bortförda till cellerna. Man bör observera att de efter detta inte kunde kommunicera på annat sätt än med hjälp av ovan nämnda spak. Något som ställer till alltihop är att trollet helt slumpmässigt plockar en tomte ur en cell och för denne till rummet med spaken. Det är inte givet att trollet tar ut en tomte en gång och sen är denna kvar i sin cell utan det kan lika gärna vara så att samma tomte råkar ut för att bli vald fler gånger. I rummet med spaken får tomten gör något av följande: 1) Ändra spakens läge. 2) Låta spaken stå kvar i samma läge. 3) Säga "Jag vet att alla har varit här nu". Om tomten väljer alternativ 3 kan detta vara korrekt och isåfall slipper alla tomtar ut ur borgen. Om detdäremot är så att någon tomte inte varit där när den utvalde tomten väljer alternativ 3 blir alla tomtarna uppätna av trollet. Om tomten väljer något av alternativen 1 eller 2 kommer trollet att föra tillbaka tomten till sin cell efter utfört uppdrag. Tomtarna kom fram till följande algoritm: 1. Tomte 1 är en såkallad räknetomte. han håller reda på hur många som varit i rummet. 2. Tomte 1 får endast fälla ned spaken och de andra får endast fälla upp spaken. 3. Då man inte vet om spaken är upp- eller nedfälld från början måste alla tomtar fälla upp spaken 2 gånger. 4. Detta gör att spaken kommer att vara i uppfällt läge antingen 30 eller 31 gånger. 5. Det behövs endast 29 gånger om spaken var uppfälld från början och detta gör att tomte 1 garanterat kan säga att alla varit där då han fäller ned spaken för 30:e gången. Din uppgift är att skriva ett program som simulerar detta förlopp och räknar hur många gånger trollet behöver plocka ut tomtar innan de blir fria. Själva slumpningen skall vara så att man slumpar vilken tomte som blir hämtad och om det är tomte nummer 1 skall denna räkna upp varje gång spaken är uppfälld och de andra skall fälla upp spaken två gånger var. Körexempel 1: Trollet hämtade ut tomtar 590 gånger. Körexempel 2: Trollet hämtade ut tomtar 568 gånger. Körexempel 3: Trollet hämtade ut tomtar 752 gånger.
2010-03-15.kl.14-19 Uppgift 5 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Insertion Sort. Denna algoritm ser ut på följande sätt: 1. Sätt N till första index i fältet 2. Sätt D till det N:te värdet i fältet 3. Flytta alla värden som är större än D bland de första N-1 värdena i fältet ett steg (så att det bildas ett mellanrum mellan de mindre och de större värdena) 4. Stoppa in D i det mellanrum som skapas 5. Öka N med 1 6. Upprepa ovanstående till det att N > sista index i fältet Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_insertion_sort.
2010-03-15.kl.14-19 Uppgift 6 Det finns ett givet program som stoppar in data i ett såkallat binärt sökträd i mappen given_files. Din uppgift är att komplettera detta program med en utskriftsprocedur som gör att man ser hur innehållet i trädet ser ut. Här följer en bild över hur ett binärt sökträd skulle kunna se ut. 5 3 8 1 4 7 9 Trädet är representerat i programmet som ett fält där index 1 motsvarar den översta noden i trädet (med talet 5). För att gå till vänster i trädet multiplicerar man det index man för tillfället är på med 2 och för att går till höger multiplicerar man den nod man är på med 2 samt adderar 1. Detta ger att de två noderna under toppnoden (de med värdena 3 resp. 8) har index 2 och 3 i fältet. Samma operationer utförs oavsett var i trädet man befinner sig. Din uppgift är att skriva ut trädets innehåll i sorterad ordning (utan att använda någon sorteringsalgoritm förstås) med det största talet först. Den enda jämförelse av data i trädet som är tillåten är om datat är 0 (noll) då detta motsvarar att det inte finns mer nedåt i trädet i denna gren. Talet noll kan alltså inte lagras i denna datastruktur. Vi antar att användaren inte matar in dubletter av data (även om detta skulle kunna vara möjligt utan större problem, men ett binärt sökträd skall inte innehålla dubletter). Körexempel 1: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT1.TXT Det binära sökträdet innehåller nu: 9 8 7 5 4 3 1 Körexempel 2: Mata in filnamn som indata skall läsas ifrån: TREE_INPUT2.TXT Det binära sökträdet innehåller nu: 9 8 7 6 5 3 2 1 TIPS: Det kan vara trevligt med rekursion. KRAV: Du skall modifiera programmet så att det läser in det filnamn som man skall läsa in indatat från och sen hämtar datat därifrån förstås.
2010-03-15.kl.14-19 Uppgift 7 Det var en gång ett troll som hade en stor borg med en stor sal, 16 celler där man kunde hålla fångar och ett rum med en spak som hade två lägen (uppåt respektive nedåt). Trollet hade dessutom lyckats fånga 16 tomtar som han hade fört till sin stora sal i borgen. Tomtarna var väldigt rädda då de visste att troll äter tomtar och de såg ingen utväg att komma hem levande. Nu var det så att detta troll hade väldigt gott om mat och därför kände det sig väldigt upprymt och ville ge tomtarna en chans att få bli fria. Han bestämde sig för att berätta detta för tomtarna och det som var deras chans var att komma fram till ett sätt (en algoritm om man vill säga så) som gjorde att någon av tomtarna kunde avgöra om alla tomtar (inklusive tomten själv) varit inne i rummet med spaken. Tomtarna fick en liten stund att diskutera problemet och sen blev de bortförda till cellerna. Man bör observera att de efter detta inte kunde kommunicera på annat sätt än med hjälp av ovan nämnda spak. Något som ställer till alltihop är att trollet helt slumpmässigt plockar en tomte ur en cell och för denne till rummet med spaken. Det är inte givet att trollet tar ut en tomte en gång och sen är denna kvar i sin cell utan det kan lika gärna vara så att samma tomte råkar ut för att bli vald fler gånger. I rummet med spaken får tomten gör något av följande: 1) Ändra spakens läge. 2) Låta spaken stå kvar i samma läge. 3) Säga "Jag vet att alla har varit här nu". Om tomten väljer alternativ 3 kan detta vara korrekt och isåfall slipper alla tomtar ut ur borgen. Om detdäremot är så att någon tomte inte varit där när den utvalde tomten väljer alternativ 3 blir alla tomtarna uppätna av trollet. Om tomten väljer något av alternativen 1 eller 2 kommer trollet att föra tillbaka tomten till sin cell efter utfört uppdrag. Tomtarna kom fram till följande algoritm: 1. Tomte 1 är en såkallad räknetomte. han håller reda på hur många som varit i rummet. 2. Tomte 1 får endast fälla ned spaken och de andra får endast fälla upp spaken. 3. Då man inte vet om spaken är upp- eller nedfälld från början måste alla tomtar fälla upp spaken 2 gånger. 4. Detta gör att spaken kommer att vara i uppfällt läge antingen 30 eller 31 gånger. 5. Det behövs endast 29 gånger om spaken var uppfälld från början och detta gör att tomte 1 garanterat kan säga att alla varit där då han fäller ned spaken för 30:e gången. Din uppgift är att skriva ett program som simulerar detta förlopp och räknar hur många gånger trollet behöver plocka ut tomtar innan de blir fria. Själva slumpningen skall vara så att man slumpar vilken tomte som blir hämtad och om det är tomte nummer 1 skall denna räkna upp varje gång spaken är uppfälld och de andra skall fälla upp spaken två gånger var. Körexempel 1: Trollet hämtade ut tomtar 590 gånger. Körexempel 2: Trollet hämtade ut tomtar 568 gånger. Körexempel 3: Trollet hämtade ut tomtar 752 gånger.
2010-03-16.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) I seriernas värld finns det många roliga saker. T.ex. har vi ju de glada gallerna Asterix och Obelix som klarar av romarna på löpande band. Det som gör mig lite fundersam är hur de räknade på den tiden. Enligt olika källor fanns det olika sätt att kombinera de olika romerska siffrorna för att få fram det resultat man ville få. När man kontrollerar lite närmare upptäcker man dock att det går att skapa ett program som klarar av att läsa in ett romerskt tal och omvandla detta till ett vanligt tal, som vi idag arbetar med, utan större problem. Detta är din uppgift och när man kör programmet skall man hålla på och mata in nya romerska tal tills det att man matar in en tom rad (d.v.s. bara ENTER). Se körexemplet nedan hur det skall se ut. Ett av de krav vi har i denna uppgift är att programmet inte får vara rekursivt på något sätt. Allt måste lösas utan rekursion alltså. Det finns en given fil med indata som ligger i mappen given_files. Det kan vara bra att veta hur man bygger upp ett romerskt tal. Här kommer de siffror vi har att tillgå och de regler som får användas: I=1 V=5 X=10 L=50 C=100 D=500 M=1000 Regel 1: Om större siffra står direkt till höger om en mindre skall den mindre dras bort från slutresultatet. Regel 2: Man adderar alla siffror till resultatet i övriga fall. Körexempel: Mata in ett romerskt tal (mellan I och MMM): I => 1 Mata in ett romerskt tal (mellan I och MMM): III => 3 Mata in ett romerskt tal (mellan I och MMM): IV => 4 Mata in ett romerskt tal (mellan I och MMM): MCM => 1900 Mata in ett romerskt tal (mellan I och MMM): MCMXCIX => 1999 Mata in ett romerskt tal (mellan I och MMM): Tack för idag! KRAV: Inmatningen är maximalt 30 tecken och din sträng får inte vara längre än så.
2010-03-16.kl.08-13 Uppgift 2 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Selection Sort. Denna algoritm ser ut på följande sätt: 1. Sätt N till första index i fältet 2. Leta reda på det minsta värde som finns i fältet fr.o.m. N till sista indexet 3. Byt plats på det N:te värdet och det minsta värdet i fältet 4. Öka N med 1 5. Upprepa ovanstående till det att N > sista index i fältet Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_selection_sort.
2010-03-16.kl.08-13 Uppgift 3 Matematiker är ett underligt folk. De håller på med serier och underliga tal. I USA har matematikerna dock lite problem att skilja på Christmas day (dec25) och Halloween (oct31). Konstigt vad lite olika talbaser kan ställa till det. Nog om detta. Vi har i denna uppgift en fundering på om det finns något hexadecimalt tal som, om det tolkas som ett decimalt tal, är hälften så stort som det decimala tal det egentligen motsvarar (d.v.s. HEXTALET * 2 = DECIMALTALET). Antag att vi har det hexaecimala talet 123. Detta tal översatt till decimala talsystemet blir 1*16 2 + 2*16 1 + 3*16 0 = 256 + 32 + 3 = 291. I detta fall är det inte så att 123 * 2 = 291 så vi kan utesluta hextalet 123 som aspirant på detta. Din uppgift är att skriva ett program som kontrollerar om det finns något sådant hexadecimalt tal vars korrekts värde i decimala talsystemet ligger i värdemängden som kan representeras med Integer. Programmet skall isåfall skriva ut detta hexadecimala tal i dess hexadecimala form på en textfil som skall heta HEX_DEC_LIKA.TXT. Körexempel (där vi antar att vi funnit något sådant tal): Programmet har hittat hextalet som uppfyller kravet. Detta är: Körexempel (där vi antar att vi inte funnit något sådant tal): Programmet har inte hittat något hextal som uppfyller kravet. OBS! Där det står skall alltså talet stå. OBS! Ovanstående två utskrifter är alltså inte på skärmen utan i textfilen.
2010-03-16.kl.08-13 Uppgift 4 Det var en gång ett troll som hade en stor borg med en stor sal, 16 celler där man kunde hålla fångar och ett rum med en spak som hade två lägen (uppåt respektive nedåt). Trollet hade dessutom lyckats fånga 16 tomtar som han hade fört till sin stora sal i borgen. Tomtarna var väldigt rädda då de visste att troll äter tomtar och de såg ingen utväg att komma hem levande. Nu var det så att detta troll hade väldigt gott om mat och därför kände det sig väldigt upprymt och ville ge tomtarna en chans att få bli fria. Han bestämde sig för att berätta detta för tomtarna och det som var deras chans var att komma fram till ett sätt (en algoritm om man vill säga så) som gjorde att någon av tomtarna kunde avgöra om alla tomtar (inklusive tomten själv) varit inne i rummet med spaken. Tomtarna fick en liten stund att diskutera problemet och sen blev de bortförda till cellerna. Man bör observera att de efter detta inte kunde kommunicera på annat sätt än med hjälp av ovan nämnda spak. Något som ställer till alltihop är att trollet helt slumpmässigt plockar en tomte ur en cell och för denne till rummet med spaken. Det är inte givet att trollet tar ut en tomte en gång och sen är denna kvar i sin cell utan det kan lika gärna vara så att samma tomte råkar ut för att bli vald fler gånger. I rummet med spaken får tomten gör något av följande: 1) Ändra spakens läge. 2) Låta spaken stå kvar i samma läge. 3) Säga "Jag vet att alla har varit här nu". Om tomten väljer alternativ 3 kan detta vara korrekt och isåfall slipper alla tomtar ut ur borgen. Om detdäremot är så att någon tomte inte varit där när den utvalde tomten väljer alternativ 3 blir alla tomtarna uppätna av trollet. Om tomten väljer något av alternativen 1 eller 2 kommer trollet att föra tillbaka tomten till sin cell efter utfört uppdrag. Tomtarna kom fram till följande algoritm: 1. Tomte 1 är en såkallad räknetomte. han håller reda på hur många som varit i rummet. 2. Tomte 1 ändrar alltid spakens läge. 3. De andra tomtarna får endast fälla upp spaken en gång och detta endast om de sett att spaken tidigare ändrat läge. 4. Då tomte 1 ser att spaken inte står i det läge han lämnade den senast har en tomte varit i rummet. Han räknar då denna. 5. Den 15:e gången tomte 1 ser att spaken står i fel läge har alla andra varit där. Din uppgift är att skriva ett program som simulerar detta förlopp och räknar hur många gånger trollet behöver plocka ut tomtar innan de blir fria. Själva slumpningen skall vara så att man slumpar vilken tomte som blir hämtad och om det är tomte nummer 1 skall denna räkna upp varje gång spaken står i ett felaktigt läge och de andra skall fälla upp spaken en gång var. Körexempel 1: Trollet hämtade ut tomtar 290 gånger. Körexempel 2: Trollet hämtade ut tomtar 278 gånger. Körexempel 3: Trollet hämtade ut tomtar 379 gånger.
2010-03-16.kl.08-13 Uppgift 5 Det finns ett givet huvudprogram som läser in heltal från tangentbordet och sen anropar en sorteringsprocedur som ligger i ett paket. Detta paket är också givet. Sorteringen sker med hjälp av den såkallade Bubble Sort som vi redan sett i laborationsserien och på lektion under kursens gång. Din uppgift är att skapa ett nytt paket och ändra i huvudprogrammet så att ditt nya paket används istället för det givna. OBS! Skicka in alla filer som behövs för att kunna kompilera och köra ditt program när du begär rättning. Det nya paketet skall ha en sorteringsprocedur som använder sig av en algoritm som kallas för Selection Sort. Denna algoritm ser ut på följande sätt: 1. Sätt N till första index i fältet 2. Leta reda på det minsta värde som finns i fältet fr.o.m. N till sista indexet 3. Byt plats på det N:te värdet och det minsta värdet i fältet 4. Öka N med 1 5. Upprepa ovanstående till det att N > sista index i fältet Till din hjälp har vi lagt upp ett program som du kan provköra för att se hur algoritmen fungerar. Detta program heter given_files/demo_selection_sort.
2010-03-16.kl.08-13 Uppgift 6 Matematiker är ett underligt folk. De håller på med serier och underliga tal. I USA har matematikerna dock lite problem att skilja på Christmas day (dec25) och Halloween (oct31). Konstigt vad lite olika talbaser kan ställa till det. Nog om detta. Vi har i denna uppgift en fundering på om det finns något hexadecimalt tal som, om det tolkas som ett decimalt tal, är hälften så stort som det decimala tal det egentligen motsvarar (d.v.s. HEXTALET * 2 = DECIMALTALET). Antag att vi har det hexaecimala talet 123. Detta tal översatt till decimala talsystemet blir 1*16 2 + 2*16 1 + 3*16 0 = 256 + 32 + 3 = 291. I detta fall är det inte så att 123 * 2 = 291 så vi kan utesluta hextalet 123 som aspirant på detta. Din uppgift är att skriva ett program som kontrollerar om det finns något sådant hexadecimalt tal vars korrekts värde i decimala talsystemet ligger i värdemängden som kan representeras med Integer. Programmet skall isåfall skriva ut detta hexadecimala tal i dess hexadecimala form på en textfil som skall heta HEX_DEC_LIKA.TXT. Körexempel (där vi antar att vi funnit något sådant tal): Programmet har hittat hextalet som uppfyller kravet. Detta är: Körexempel (där vi antar att vi inte funnit något sådant tal): Programmet har inte hittat något hextal som uppfyller kravet. OBS! Där det står skall alltså talet stå. OBS! Ovanstående två utskrifter är alltså inte på skärmen utan i textfilen.