Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer att fastna på så kanske det är fel uppgift att ge sig på. Tiden du lägger på att noga läsa uppgifterna tjänar du in på att välja rätt uppgift. TIPS 2: Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att ni skickat in en fråga. Kanske gäller det dig också (d.v.s. den uppgift du jobbar med). TIPS 3: Om ni har problem med kompilator, Emacs eller annat som INTE har med uppgifterna att göra, räck upp handen så kommer en assistent. Detsamma gäller om hur man kopierar givna filer " cp given_files/*. " eller liknande. Frågor om själva uppgifterna tar vi i första hand via tentasystemet. I körexemplen har vi markerat det som användaren matar in på tangentbordet med fet och kursiverad stil. Tänk på att körexemplen bara är ett exempel på när programmet körs. Testa ditt program noga och tänka över hur programmet skall fungera vid andra indata. Vi hinner normalt sett inte svara på frågor de sista 10 utminutera på tentan. Då ägnar vi all tid åt att rätta uppgifter för att alla skall hinna få svar innan ni går hem. Betygsgränser: Tid 1 poäng 19:00 (21:00) Betyg 3 3 poäng 18:00 (19:30) Betyg 4 3 poäng 16:30 (17:30) Betyg 5 4-6 poäng 18:00 (19:30) Betyg 5 Bonustid från laborationerna tillkommer till dessa tidsgränser. Tiden för betyg 3/G överstiger dock aldrig 5 timmar. OBS: Delpoäng delas inte ut på uppgifterna. För att få poäng på en uppgift måste man alltså lösa uppgiften helt (och enligt specifikation). Lycka till med tenterandet och hoppas att alla får G på minst en uppgift idag. M.v.h. /Torbjörn (examinator)
Uppgift 1 - Kösystem [2p] Till en stor utomhusfest förväntar arrangörerna att många kommer att behöva stå i kö vid ingången. Man vill då sätta upp stolpar och band att spärra av med. Problemet är dock att det förväntas vara olika många i kö vid olika tidpunkter under kvällen. Tidigt under kvällen kommer det inte vara många i kö, men senare kommer kön troligtvis vara lång. Man vill sätta upp stolparna så att man inte behöver flytta dem senare under kvällen utan bara flytta banden. Iden är att man sätter upp ett antal S-slingor. När det inte är så mycket kö så kopplar man bara förbi dem. Skriv ett program som låter arrangörerna mata in hur många som förväntas köa och som ritar ut hur banden bör sättas. Programmet skall också mata ut hur många som maximalt kan köa med denna konfiguration av banden. Kö-systemet måste ha minst så många platser som användaren matar in. Stolparna ritas ut med '+' och flyttar sig aldrig. Banden ritas ut med lodräta- och bindestreck. På varje "tom" ruta i figuren kan alltså en person stå. Detta medför att det kan stå 20 personer på varje rad. Observera att in- och utgång ritas med '' och man flyttar aldrig på dessa. köar (max 200): 200 Plats för 200 personer. köar (max 200): 1 Plats för 10 personer. Körexempel 3: köar (max 200): 11 Plats för 48 personer. OBS: Just i denna uppgift är det alltid tio rader. Men du skall självklart skriva din lösning så att den är generell, d.v.s. det skall inte vara svårt att utöka problemet till större kösystem (med fler rader). TIPS: Det finns många fler körexempel i filen KOREXEMPEL.TXT.
Uppgift 2 - Hur många kort behövs? [1p] Nathalie vill bygga korthus. Hon hittar lite kortlekar, men hon är osäker på om korten kommer räcka till hennes ingenjörsmässiga ambitioner. Du skall skriva ett program åt henne där hon får mata in N, där N är höjden på korthuset. Ditt program skall räkna ut hur många kort som går åt för att bygga huset. Programmet skall fungera för godtyckligt stora tal (inom rimliga gränser). Vi utgår ifrån att korthusen ser ut som i exemplen nedan: N = 1 /\ => 2 kort N = 2 /\ => 7 kort N = 3 /\ => 15 kort /\ N = 4 /\ => 26 kort /\ Mata in korthusets höjd: 3 Det krävs 15 kort för att bygga huset. Mata in korthusets höjd: 100 Det krävs 15050 kort för att bygga huset. KRAV: Din lösning skall vara rekursiv. Du får inte använda loopar (for, while, loop). TIPS: Lös problemet på papper för N = 1 till 4. Finns det något samband mellan N och antalet kort? Kan man bygga vidare på "föregående Ns" resultat?
Uppgift 3 - Omaka Par [1p] Skriv ett program som låter användaren mata in ett antal par av heltal. Maximalt 20 par kan matas in av användaren. Därefter skall ditt program gå igenom paren och kolla om de är omaka. Ett par är omaka om det vänstra talet är större än det högra. Om det finns par som är omaka så skall de göras maka genom att byta på det vänstra och det högra talet. Slutligen skall alla paren skrivas ut igen. Mata in antalet par (max 20): 3 2 1 0 3 5 4 1 2 0 3 4 5 Mata in antalet par (max 20): 1 80000 2500 2500 80000 Körexempel 3: Mata in antalet par (max 20): 7 14 14 13 12 11 10 9 8 7 6 5 4 3 2 14 14 12 13 10 11 8 9 6 7 4 5 2 3
Uppgift 4 - Avtagande Energi [2p] På en rymdstation finns en generator som genererar energi för stationen. Dessvärre fungerar inte generatorn särskilt bra och energinivåerna avtar sporadiskt. På filen ENERGY.TXT har systemet sparat energinivån för varje minut som gått. Din uppgift är att göra ett program som visualiserar nedgången med en graf. Följande gäller för filen: Det är ett flyttal per rad som representerar energinivån (i MW) för varje minut. Talet på första raden motsvarar tiden T=0 minuter. Energinivån börjar på maximalt 44.0 MW. Energinivån kan aldrig öka, den avtar eller bibehåller nuvarande nivå. Det kan vara godtyckligt många rader i filen. Följande gäller för den graf som ditt program skall genereras: Det skall finnas en punkt per mätvärde i filen (en för varje minut). Dessa ritas ut med tecknet '0' (en nolla). Y-axeln motsvarar energi (i MW). Varje "kolumn" i terminalen motsvarar 1MW. Y-axeln ritas ut horisontellt (växande åt höger) i grafens överkant. X-axeln motsvarar tiden (i minuter). Varje rad i terminalen motsvarar 1 minut. X-axeln ritas ut vertikalt (växande nedåt) i grafens vänsterkant. Körexempel: + > MW V minuter