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 minuterna 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 TekFak FilFak 1 poäng 13:00 Betyg 3 Betyg G 3 poäng 12:00 Betyg 4 3 poäng 10:45 Betyg VG 3 poäng 10:30 Betyg 5 >=4 poäng 12:00 Betyg 5 >=4 poäng 12:15 Betyg VG 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 - Division är kul! [1p] En mattelärare vill ha ett datorprogram som visar upp exempel på division. Skriv ett program där användaren får mata in två flyttal: en nämnare och en (mycket stor) täljare. Programmet skall sedan skriva ut täljaren med lika många decimaler som heltalsdelen har siffror. Täljaren delas sedan med nämnaren till en kvot. Kvoten får utgöra täljaren på nästa rad, och skrivs ut på samma sätt. Utskriften av flyttalen skall vara så att decimalpunkterna är precis under varandra. Programmet fortsätter att dela och skriva ut rader så länge kvoten inte blivit mindre än 1. Programmet skall sedan vänta på att användaren trycker enter, och sedan skriva ut en motiverande text (se körexemplet) och sedan avslutas. Körexempel 1: Mata in nämnare: 20.0 Mata in täljare: 4000000.0 4000000.0000000 200000.000000 10000.00000 500.000 25.00 1.3 Tryck ENTER för att fortsätta... Division är KUL! Körexempel 2: Mata in nämnare: 5.5 Mata in täljare: 1234567.8987654 1234567.8750000 224466.890625 40812.16016 7420.3926 1349.1622 245.302 44.60 8.1 1.5 Tryck ENTER för att fortsätta... Division är KUL! TIPS 1: För att ta reda på hur "långt" ett tal är kan man kolla hur många gånger man kan dela talet med 10 innan man kommer under 1. Längden är så många gånger det gick att dela. TIPS 2: Oroa dig inte om decimalerna inte stämmer exakt. Flyttal är inte så exakta, men det gör inget. Det är antalet decimaler som är det viktiga.
Uppgift 2 - Duellen [1p] Som det ofta blir mellan banditer har Lotta Cash och Bloody Bonny blivit ovänner och skall nu göra upp i en duell. Detta skall göras kl 12.00 på huvudgatan i Digit City. Vem som vinner har ju med att göra vem som kan "draw" sin 6-skjutare snabbast. Skriv ett program där användaren får mata in 6 st reaktionstider för de båda (i millisekunder). Programmet skall sedan slumpa ett heltal X (mellan 1 och 6) och jämföra den X:te reaktionstiden för de båda. Den som har lägst skjuter först - den andra är död. Om det blir lika så innebär det att båda har missat och det blir en ny omgång. Körexempel 1: Reaktionstider för Lotta: 50.34 105.3 120.26 70.70 100.09 90.16 Reaktionstider för Bonny: 206.1 190.2 40.5 61.6 73.56 55.40 X slumpat till 5 Bang! Bonny var snabbast! Körexempel 2: Reaktionstider för Lotta: 0.34 5.3 0.26 0.70 0.09 0.16 Reaktionstider för Bonny: 6.1 0.2 0.5 1.6 3.56 5.40 X slumpat till 1 Bang! Lotta var snabbast! Körexempel 3: Reaktionstider för Lotta: 1 2 8 4 5 6 Reaktionstider för Bonny: 2 3 8 5 6 6 X slumpat till 6 Bang! Bang! - två missar! X slumpat till 3 Bang! Bang! - två missar! X slumpat till 2 Bang! Lotta var snabbast! KRAV: Du skall ha ett underprogram Get, som läser in en uppsättning reaktionstider från tangentbordet.
Uppgift 3 - Prisjägare [2p] I Vilda Västern fanns det gott om prisjägare, d.v.s. personer som jagar efterlysta personer och lämnar in dem mot betalning. När en prisjägare (Bloody Bonny) får betalning får den det i ett antal guldstycken eller silvermynt. Sådana betalningar är självklart trevliga men medför ofta oönskad uppmärksamhet från banditer. Därför är det säkrast för prisjägaren att göra en deposition hos lokala guld- och silversmeder (Golden Gary och Lotta Cash) och få ett kreditkvitto istället. Kreditkvittot anger hur många dollar i kredit som prisjägaren får. Självklart har Gary och Lotta kommit på en ekonomisk modell som verkar sund, men i själva verket lurar av Bonny alla hennes surt förvärvade pengar! Det fungerar enligt följande regler: 0. 0 st guldstycken är värt $0 och 0 st silverstycken är värt $0. Ganska självklart faktiskt. 1. Ett och endast ett silvermynt är värt exakt $1 i kredit. Endast ett guldstycke är värt $5. Det vet alla. 2. Om guldsmeden får mer än 1 guldstycke att värdera tar han alltid 1 guldstycke i avgift. Han baserar sedan värdet av det resterande guldet på värdet hos silvermynt. Detta göra han genom att fråga silversmeden hur mycket kredit man får för ett antal silvermynt som är lika med 4 gånger antalet resterande guldstycken. Han ger denna kredit plus $7. 3. Om silversmeden får mer än 1 silvermynt frågar hon guldsmeden vad detta antal silvermynt genom 5 är värt (i guld). All avrundning sker nedåt (eventuella tappade decimaldelar går till silversmeden som avgift). Några exempel: Bloody Bonny kommer med 8 silvermynt. Hon frågar silversmeden hur mycket kredit man får för 8 silvermynt. Silversmeden delar 8 med 5 och får 1 (de övriga 3 går till henne som avgift). Hon frågar alltså guldsmeden vad han tar för 1 guldstycke, vilket är $5. Prisjägarens kredit är $5 Bloody Bonny kommer med 3 guldstycken. Guldsmeden tar 1 guldstycke i avgift vilket lämnar 2. Han beräknar sedan krediten som $7 plus vad silversmeden skulle ta för 4*2 = 8 silvermynt. Vi vet sedan tidigare att detta blir $5. Totalt $12. Bloody Bonny kommer med 16 silvermynt. Silversmeden delar 16 med 5 och får 3 (det överblivna silvermyntet får hon som avgift). Hon frågar alltså guldsmeden hur mycket kredit man får för 3 guldstycken. Sedan tidigare vet vi att detta är $12. Så det blev $12 denna gången också. Skriv ett program där användaren får ange hur många och huruvida det är guldstycken eller silvermynt som lämnas in av prisjägaren (anges som tecknet 's' eller 'g'). Programmet skall sedan mata ut krediten. Körexempel: Mata in: s 55123 Erhållen kredit: $236 TIPS: Skriv en rekursiv funktion som tar två parametrar: antalet och om det är silver eller guld. Använd heltal och heltalsdivision.
Uppgift 4 - Stor filsortering [2p] Skriv ett program som läser heltal från filen BIG_NUMS.TXT. Filen innehåller endast numeriska tecken, separerade med blanksteg och radbrytningar. Filen innehåller maximalt 200 tal och det kan vara olika antal heltal på varje rad (även tomma rader kan förekomma). Filens första tre rader ser ut på detta sätt: 613 303 735 586 205 392 299 404 836 566 741 427 240 721 520 805 698 107 10 610 244 40 Vi anser att alla dessa tal är en enda lång sekvens, som ligger i den ordningen som ditt program läser in dem. Ditt program skall sedan sortera alla talen så att det minsta talet kommer först och det största kommer sist. Slutligen skall ditt program skriva ut talen på skärmen, med 10 st per rad (förutom sista raden som får ha färre tal, om det totala antalet tal inte är jämnt delbart med 10). Kolumnerna skall vara "snygga", som i körexemplet. Körexempel: 1 3 6 7 7 7 9 10 10 13 27 40 59 60 61 68 69 72 76 77 95 100 101 104 104 107 107 112 117 127 134 135 142 146 153 155 157 158 162 168 171 186 192 205 210 210 213 223 225 228 234 235 240 244 246 247 248 249 251 282 297 299 300 301 303 307 308 319 324 327 330 336 343 345 353 367 371 380 392 404 406 416 419 419 425 426 427 430 439 443 445 446 455 461 468 496 499 501 501 503 509 520 529 537 537 554 554 557 560 566 583 585 586 587 588 596 598 601 610 610 613 627 643 643 652 653 656 659 661 674 676 679 682 694 698 704 710 718 721 721 729 735 741 743 747 759 769 771 772 777 779 780 787 789 789 792 794 797 802 804 805 809 811 821 826 833 836 840 845 850 850 874 875 880 881 886 892 894 898 901 903 910 916 921 924 924 930 931 935 939 947 952 953 964 970 979 984 986