Programmering Grundkurs Laboration 1 Till kursen Programmering Grundkurs hör fyra obligatoriska laborationer. Detta är Laboration 1 given i period 1, HT 2010 vid KTH STH. Mål: I början av en programmeringskurs är det viktigt att bygga många små program, för att på det viset nöta in de vanligaste sats-konstruktionerna, bekanta sig med utvecklingsmiljön och lära sig felsökning programming in the small. Betyg: Varje uppgift är korrekt löst värd angiven poäng. Totalt omfattar laborationen 18 poäng. För att bli godkänd på denna laboration behöver du 6 poäng och kan välja fritt bland uppgifterna. Redovisning: Du redovisar dina lösningar vid datorn. Dels ska du köra programmen för givna testdata och dels ska du visa upp koden och vara beredd att besvara frågor kring denna. Normalt redovisar du laborationen under ett övningstillfälle, men speciella redovisningstillfällen finns inlagda på schemat Ytterligare redovisningstillfälle ges, i augusti 2011. 1 Lådan (1 poäng) En låda (rätblock) med volymen V m 3 skall tillverkas. Höjd, längd och bredd ska alla vara ett heltal meter. Skriv ett program som tar emot en volym V och skriver ut alla möjliga kombinationer av höjd, längd och bredd, som ger denna volym. Så här kan dialogen komma att se ut: Önskad volym? 39 Möjliga mått: 1 1 39 1 3 13 1 13 3 1 39 1 3 1 13 3 13 1 13 1 3 13 3 1 39 1 1 Håkan Strömberg 1 KTH STH
2 Den irrande musen (1 poäng) Figur 1: I figur 1 ser vi en rad rum (ett udda antal). I det mittersta av dessa finns en mus som irrar omkring. Musen byter hela tiden, slumpmässigt, rum till det som ligger direkt till vänster eller direkt till höger om det, där den just nu befinner sig. I rummet längst till vänster finns en hungrig katt. Likaså i rummet längst till höger. Så fort musen kommer in i ett av dessa rum är vandringen slut och katten mätt. Skriv ett program som inledningsvis frågar efter hur många rum det finns i raden (ett udda antal) och som 10 000 gånger simulerar musens vandring, varje gång med start i mittenrummet. Resultatet av körningen ska presentera hur många, i genomsnitt, rumsbyten musen hinner med. Svaret ska ges med två decimaler. srand() ska användas. Ett körningsexempel: Antal rum (udda tal): 7 Musen hinner med 9.02 rumsbyten Håkan Strömberg 2 KTH STH
3 Gissa talet (1 poäng) Denna uppgift är en variant av uppgift 5.3 i boken. Precis som där, handlar det här om att skriva ett program där datorn tänker på ett heltal mellan 1 och 100. Om inte användarens första gissning är korrekt ombeds denne att göra ytterligare en gissning. Om inte heller den andra gissningen är korrekt, ställs den senare gissningen i relation till den första. Tre möjligheter finns: Den andra gissningen är BÄTTRE Den andra gissningen är SÄMRE Båda gissningarna är LIKA bra Med BÄTTRE menas förstås att den andra gissningen ligger närmare det hemliga talet än den första. På samma sätt är SÄMRE ett uttryck för att det först gissade talet ligger närmare det hemliga talet. Givetvis betyder LIKA att de två gissningarna ligger lika långt från det hemliga talet. Fortsättningsvis ställs alltid det senast inskrivna talet i relation till det näst senaste. Skriv nu ett program som genomför dessa idéer och i övrigt fungerar som exemplen nedan: Ett tal: 38 Ett tal: 24 Ett tal: 34 Ett tal: 56 Ett tal: 59 Du behövde 1 försök Du behövde 2 försök SÄMRE Ett tal: 30 BÄTTRE Ett tal: 40 SÄMRE Ett tal: 20 BÄTTRE Ett tal: 23 Du behövde 6 försök I det vänstra exemplet gissade användaren rätt i andra försöket. I exemplet i mitten krävdes det 6 försök innan det korrekta talet 23 skrevs in. I det högra exemplet hade spelaren tur och gissade rätt med en gång! Håkan Strömberg 3 KTH STH
4 Rätvinkliga trianglar (2 poäng) Här gäller det att damma av kunskaper i geometri och trigonometri. Vi önskar ett program som bestämmer sidorna hos en rätvinklig triangel. Det finns inte mindre än fem olika fall av indata som väljs utifrån en meny: 1. Två kateter kända 2. Hypotenusan och en katet kända 3. Hypotenusan och en närliggande vinkel kända 4. En katet och närliggande vinkel kända 5. En katet och motstående vinkel kända Val? 1 Efter valet ovan öppnas vägen för fem olika dialoger av indata. Efter valet 1 ska till exempel dialogen ha följande utseende: Katet 1 (cm) : 3 Katet 2 (cm) : 4 Hypotenusan är 5.00 cm För valet 3 kommer däremot dialogen att få följande utseende: Hypotenusan (cm) : 10 Vinkeln (grader) : 45 Katet 1 är 7.07 cm Katet 2 är 7.07 cm Tänk på att de trigonometriska funktionerna sin, cos och tan görs tillgängliga genom math.h och att vinkeln för dessa ska ges i radianer. Svaren ges alltid med två decimaler. Håkan Strömberg 4 KTH STH
5 Varuroboten (2 poäng) I snabbköpet finns en robot som automatiskt packar kundens varor i två kassar, A och B. Roboten placerar varorna, i den ordning de placeras på bandet, enligt följande regler: Kassarna rymmer 12 liter vardera Roboten placerar aktuell vara i en kasse den ryms i. I valet mellan två kassar väljs den som väger minst, om kassarna väger lika läggs varan i kasse A Om varan inte ryms i någon av kassarna skall programmet meddela detta. Därefter fortsätter programmet som vanligt Programkörningen avslutas genom att vikten 0 matas in Kassarnas vikter skrivs med en decimal En testkörning Ange vikt : 2.1 Ange volym: 1.7 Ange vikt : 2.5 Ange volym: 7.9 Ange vikt : 1.2 Ange volym: 5.3 Ange vikt : 1.5 Ange volym: 6.6 *** Varan ryms inte i någon av kassarna Ange vikt : 0.5 Ange volym: 2.0 Ange vikt : 1.0 Ange volym: 4.0 Ange vikt : 0 Kasse A väger 4.3 kg och kasse B väger 3.0 kg Håkan Strömberg 5 KTH STH
6 Karamellburkarna (2 poäng) Figur 2: I de tre burkarna i figuren finns karameller av tre olika sorter (Gråmunkar, Svarta kanonkulor och Vita nejlikor). Den ordningsamme Vilgot vill ordna konfekten så att varje burk innehåller endast en sort. Det spelar ingen roll i vilken burk de olika sorterna hamnar. Det viktiga för Vilgot är istället att han flyttar så få karameller som möjligt. Skriv ett program som tar emot uppgifter om hur många karameller av varje sort det finns i burkarna och som bestämmer det minsta antalet karameller som måste flyttas för att få godiset uppdelat. Programmet ska också tala om i vilka burkar de olika karamellerna hamnat. Indata: Programmet frågar genom en rad i taget efter burkarnas innehåll. På varje rad anges i tur och ordning antalet Gråmunkar (G), antalet Svarta kanonkulor (S) och antalet Vita nejlikor (V). Burk 1 G S V: 5 4 4 Burk 2 G S V: 4 4 6 Burk 3 G S V: 4 4 5 Det totala antalet karameller understiger alltid 30000. Utdata: Programmet svarar med det antal karameller som har flyttats. Samt en rad med tre bokstäver som anger burkarnas slutliga innehåll, med början för Burk 1. 25 karameller har flyttats. Burkarnas innehåll: GVS Håkan Strömberg 6 KTH STH
7 Grodorna (3 poäng) Figur 3: Varje groda gör hela tiden lika långa hopp i samma riktning Runt den lilla dammen finns n stenar. På två av dessa stenar, intill varandra, sitter Frogrik och Frogia. Vi kan tänka oss stenarna numrerade medurs från 1 till n, med Frogia på sten nr 1 och Frogrik på sten nr n. Frogrik vill gärna hamna på samma sten som Frogia. Frogia hoppar alltid moturs m stenar framåt. Frogrik, som kan hoppa både moturs och medurs (men inte ändra riktning, efter det att jakten väl börjat), hoppar alltid p stenar i taget. Dessutom hoppar de samtidigt. Skriv ett program, som frågar efter 10 n 100, 1 m 25 och 1 p 25 och som bestämmer det minsta antal hopp Frogrik behöver göra för att hamna på samma sten som Frogia. Ett körningsexempel: Antal stenar... 11 Frogriks hopplängd... 3 Frogias hopplängd... 2 Efter 9 hopp hamnar de på samma sten. Han hoppar medurs Observera att det finns uppsättningar av data som leder till att de två grodorna aldrig kommer att hamna på samma sten. Några sådana testexempel finns dock inte med här. Håkan Strömberg 7 KTH STH
8 Fia med knuff (3 poäng) Figur 4: A och B spelar en sorts Fia med Knuff. I figur 4 ser vi utgångsläget i spelet. Spelarna står bakom startlinjen. Framför sig har de 100 rutor. Målet är att passera dessa före sin motståndare och hamna bakom mållinjen. A startar alltid spelet genom att kasta en vanlig sexsidig tärning och flytta lika många steg som tärningen visar. Spelarna turas sedan om att kasta tärningen och flytta sin pjäs framåt. Varje spelare får fortsätta att kasta tärningen och flytta pjäsen så länge den visar en sexa. Om en spelare hamnar på samma ruta som den andra spelaren petas den senare och får börja om från utgångsläget. Skriv ett program som simulerar 10000 spel och bestämmer hur många procent av spelen som A respektive B vinner. Dessutom ska man bestämma hur många gånger, i genomsnitt, de två spelarna blir petade under ett spel. Alla data presenteras med två decimaler. För att få variationer vid körning av programmet ska srand() användas. A vann??.?? av spelen B vann??.?? av spelen A petas?.?? gånger/spel B petas?.?? gånger/spel Håkan Strömberg 8 KTH STH
9 Honung (3 poäng) HONUNGHONUNG HONUNG Figur 5: Lite av den hunung de arbetsamma bina samlade in Nedan följer en beskrivning av en mycket sällsynt sorts bin. Din uppgift är att skriva ett program som bestämmer hur lång tid det tar, i dagar räknat, tills en nystartad bikupa lyckats producera 100 kilo honung! I bikupan finns bara två sorts bin, drottningar och arbetare. Endast drottningen kan sätta nya bin till världen. En ny bikupa startas, en morgon, med en nyfödd bidrottning och 20 gram honung. En drottning lever i sju dagar. Första dagen konsumerar hon 0.5 gram honung. Från den andra till sjätte dagen konsumerar hon 1.5 gånger så mycket honung som dagen innan. Den sjunde dagen äter hon ingen honung alls. Drottningen föder fem arbetsbin varje dag med början den tredje dagen i sitt liv. Den sjunde dagen föder hon dessutom en drottning. Eftersom alla bin föds på morgonen är denna dag också den första dagen i deras liv. Ett arbetsbi lever i 20 dagar. De två första dagarna av deras liv varken producerar eller konsumerar de någon honung. De återstående 18 dagarna av deras liv producerar de N gram honung/dag. Indata: Programmet ska fråga efter hur många milligram honung ett arbetsbi producerar varje dag. Ett tal N, i intervallet 0 < N 10. Ett bi producerar (milligram): 900 Utdata: Ett tal som anger antalet dagar det tar för bikupan att producera 100 kg honung. Efter 161 dagar nådde produktionen sitt mål 1 1 Då fanns det 100318.25 gram honung i kupan Håkan Strömberg 9 KTH STH