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 TekFak FilFak 1 poäng 19:00 Betyg 3 Betyg G 3 poäng 18:00 Betyg 4 3 poäng 16:45 Betyg VG 3 poäng 16:30 Betyg 5 >=4 poäng 18:00 Betyg 5 >=4 poäng 18:15 Betyg VG Bonustid från avklarade duggauppgifter/laborationer 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 - Tid i sträng till post [1p] Skriv ett program som låter användaren mata in en sträng som har formatet "T:MM:SS.dddddd" och sedan omvandlar innehållet i strängen till en post för att sen avsluta med att skriva ut posten så att det blir en utskrift som i exemplen nedan. Strängens format lite mer noggrannt beskrivet är att "T" motsvarar timmar, "MM" motsvarar minuter, "SS" motsvarar sekunder och "dddddd" motsvarar mikrosekunder. Postens innehåll skall vara två heltal (timmar och minuter) och ett flyttal (sekunderna inklusive mikrosekundsdelen). Mata in en tid: 0:00:00.000577 Tiden var 0 timmar, 0 minuter och 0.000577 sekunder. Mata in en tid: 0:02:01.229903 Tiden var 0 timmar, 2 minuter och 1.229903 sekunder. Mata in en tid: 9:59:59.999999 Tiden var 9 timmar, 59 minuter och 59.999999 sekunder. OBS: Eftersom vi använder flyttal kan det dyka upp små avrundningsfel. Du kan t.ex. få 60.000000 i det sista körexemplet. Men det är OK ändå.
Uppgift 2 - Snyggare utskrift [1p] När man skriver ut heltal och det börjar bli lite större tal (som man ju råkar ut för när man t.ex. summerar primtal eller räknar ut N!) blir det ofta svårt att se hur många siffror talet innehåller. I Ada kan man, när man skriver sin programkod, sätta in '_' utan att kompilatorn tycker att detta är konstigt. Man kan alltså skriva talet 1234567890 som 1_234_567_890 istället och då ser man direkt t.ex. att detta har 10 siffror. Din uppgift är att skriva ett program som låter användaren skriva in ett heltal och därefter skall detta skrivas ut med '_' mellan var tredje siffra enligt modellen ovan. KRAV: Du skall ha ett underprogram som tar 1 (en) parameter (heltalet) och som löser själva "insättningen" av '_'. Detta underprogram skall vara rekursivt och får endast sätta in 1 (ett) '_' per rekursivt steg. Mata in ett heltal: 1 Du skrev in talet : 1. Mata in ett heltal: 12345 Du skrev in talet : 12_345. Mata in ett heltal: 0123456789 Du skrev in talet : 123_456_789.
Uppgift 3 - Hur många registrerade resultat? [2p] Filen RESULTAT.TXT innehåller alla deltagare och dess resultat från en tävling. Filen finns given och ligger i mappen given_files. Du behöver inte kopiera filen utan kan direkt i ditt program skriva "given_files/resultat.txt" när du öppnar den. Din uppgift är att skriva ett program som läser igenom filen och sen skriver ut hur många test som har givit ett registrerat resultat. Det är givet att om ett test har minst en rad innehållande "Time used:" räknas detta som att deltagaren fått ett resultat registrerat. Vissa deltagare har inte fått något resultat då deras program inte klarat av maximaltiden för ett test eller att deras program kanske inte gick att kompilera. Varje test startas med en rad som innehåller "=> DATUM_kl.TID" där "DATUM" och TID" är det aktuella datumet och den aktuella tiden där test registrerades. OBS: Det är inte säkert att alla test resulterar i ett registrerat resultat. Se i text ovan igen om du inte förstått detta. Körexempel (inte anpassat för er fil): Det var 40 test som resulterade i registrerade resultat.
Uppgift 4 - Utskrift av STORA heltal [2p] När man räknar med riktigt positiva stora tal (som inte kan lagras i en Integer) behöver man någon form av datatyp som klarar av att lagra dessa. Denna uppgift går ut på att du skall skapa en sådan datatyp och sen skapa en Get- och en Put-procedur som läser in respektive skriver ut ett tal till/från en variabel av sådan datatyp. I denna uppgift är det bestämt att du skall dela upp talet så att varje del består av ett 9-siffrigt tal. Vi börjar med ett exempel. Talet 1234567890123456789012345678901234567890 skall lagras i fältet. Vi delar upp det i delar om 9 siffror till att börja med. Detta ger talen 1234, 567890123, 456789012, 345678901, 234567890. Vi lagrar sen dessa i vårt fält (med max 10 platser) som: 0 0 0 0 0 1234 567890123 456789012 345678901 234567890 Index: 1 2 3 4 5 6 7 8 9 10 Mata in ett heltal: 1 Du skrev in talet : 1. Mata in ett heltal: 123456789012345678 Du skrev in talet : 123456789012345678. Mata in ett heltal: 1000000000000000000100000001000000000 Du skrev in talet : 1000000000000000000100000001000000000. TIPS: Funktionen Integer'Image kan ta ett heltal och returnera en strängrepresentation av det talet. Funktionen returnerar alltid en sträng som är ett tecken längre än talet som skickades in. T.ex. heltalet 123 blir strängen " 123".