TENTA: TDDD11 & TDDC68 Tillåtna hjälpmedel Det är tillåtet att ha böcker (t.ex. Ada-bok, formelsamlingar, lexikon,...) med sig samt utdelade lathundar (finns på kurshemsidan) för Ada, Unix och Emacs. Utdraget ur boken som Torbjörn J. har skrivit är också tillåtet att ha med. Det är dessutom tillåtet att ha skrivit i sina böcker. Det är inte tillåtet med några som helst extra papper i boken (inte ens Post-it -lappar, förutom som index för att snabbare hitta i boken). ETT extra papper med anteckningar (maskinskrivna ok) får medtagas. Det är i övrigt INTE tillåtet att ha lösblad med information på eller intejpade blad i böcker! Ej heller elektroniska hjälpmedel såsom miniräknare m.m. Starta Emacs, terminal och tentakommunikationsfönster Detta görs genom att klicka på höger musknapp på bakgrundsfönstret och väljer respektive program. Skicka in frågor och uppgifter Använd tentakommunikationsfönstret (det kan dyka upp information där från oss även om du inte skickar frågor). VIKTIGT att du skickar ALLA filer vi behöver för att kompilera ditt program när du skickar in uppgifter. Logga ut när du är klar! Med EXIT långt nere på skärmen. När du är klar med tentamen och vill gå hem är det bara att logga ut. Samma regler som på andra tentor vad det gäller tider. Man kan alltså inte gå hur tidigt som helst. Oförutsedda händelser Om det är så att det händer något oförutsett (strömavbrott eller liknande) ställs tentan eventuellt in och går vid ett senare tillfälle. Om det för en enskild student blir något trubbel med dator eller annat som gör att tid förlöper utan att studenten kan göra något brukar vi lägga på tid för den enskilde studenten. Detta meddelas direkt via assistent och tiden stoppas in vid det tillfälle där problemet uppstått. Detta innebär att gränserna för betygen efter denna tidpunkt då flyttas motsvarande tid.
Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång 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å => kanske fel uppgift. Du tjänar in denna tid 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å (din uppgift kanske). TIPS 3: Sista timmen är vi normalt sett lite tydligare och ger lite bättre återkoppling på era fel. Före detta kan man få högre betyg => ni får leta reda på vad som skall rättas till. Vi ger dock information om vilket symptom felet uppvisar (under hela tentan) om vi kompletterar. Om ni är nära G tidigt på tentan kan detta kanske ge G i slutet (vi meddelar detta isåfall). Har ni fått ett meddelande om att detta kan ge betyg 3, men inte högre i kombination med andra uppgifter och ni är nöjda med betyg 3 och vill gå kan ni alltid skicka ett meddelande till oss så blockerar vi de övriga uppgifterna så att du kan få ditt betyg och gå. TIPS 4: 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. Vi hinner 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. Om det är så att ni skickar in en uppgift precis i slutet av tentan hinner vi förstås inte, men då får ni gärna skicka ett mail för att få reda på hur det gick. Vi rapporterar in resultaten så fort vi kan efter tentan. Det tar ett par dagar med pappershantering efter detta så räkna med att det är i LADOK ca en vecka. Kolla med era kompisar om de fått poäng innan innan ni skickar mail till oss. Betygsgränser (tiden räknas från tentans start. INTE från tiden du kommer till tentan): 1 uppg 19:00 Betyg 3 2 uppg 18:00 Betyg 4 2 uppg 16:30 Betyg 5 3 uppg 18:00 Betyg 5 Lycka till med tenterandet och hoppas att alla får G på minst en uppgift idag. M.v.h. /Torbjörn (examinator)
Uppgift 1 (RN-tärning) En "RN"-tärning är en vanlig sexsidig tärning som man slår på ett speciellt sätt. Först bestämmer man på något sätt en siffra mellan 1 och 6 (detta är N:et), och sedan slår man tärningen. Skulle man råka få just den valda siffran N så får man slå om, men lägga till N till sitt slutgiltiga resultat. Man förstår då att, om man har riktigt tur, så kan man få godtyckligt stora resultat! Antag att man väljer N till 4, jag slår sedan RN-tärningen (vi kallar den för en R4-tärning): Om man får något annat resultat än 4, då är detta det slutgiltiga resultatet. Om man får just 4, så slår man om R4-tärningen och lägger till 4. I det senare fallet skulle man exempelvis kunna slå 4 en gång till, då får man på nytt slå om. Om man då slår en 2:a blir resultatet 4+4+2=10. Skriv ett program som låter användaren mata in en siffra N (för vilka tärningsresultat som skall slås om) och sedan hur många RN-tärningar som skall slås. Summan av dessa skall skrivas ut av programmet. Körexempel 1: Mata in ett N: 3 Mata in hur många R3-tärningar som skall slås: 2 Summan av alla slag blev: 8 Körexempel 2: Mata in ett N: 5 Mata in hur många R5-tärningar som skall slås: 3 Summan av alla slag blev: 13 KRAV: Du skall ha ett rekursivt underprogram som räknar ut resultatet från en RN-tärning. Underprogrammet skall givetvis använda sig av slumpen för att få fram tärningsslagen. TIPS: Du skall inte göra Reset inne i underprogrammet då detta ger en mycket dålig slump. Reset skall endast göras en gång.
Uppgift 2 (Jämt en ny ruter vid udda storlek...) Skriv ett program som frågar användaren om en storlek på figur och sedan ritar ut figuren enligt nedanstående exempel (olika beroende på storlek). Det är givet att man kan mata in godtyckligt stora heltal större än noll (ingen felhantering). Programmet får inte ha någon begränsning mer än att heltalet inte ryms i ett Integer. Körexempel 1: Mata in storlek: 1 Körexempel 2: Mata in storlek: 2 / \ \ / Körexempel 3: Mata in storlek: 3 / \ / \ \ / \ / Körexempel 4: Mata in storlek: 8 / \ / \ / / \ \ / / \ \ / / / \ \ \ / / / \ \ \ / / / / \ \ \ \ \ \ \ \ / / / / \ \ \ / / / \ \ \ / / / \ \ / / \ \ / / \ / \ /
Uppgift 3 (HTML-komprimering) Du skall skriva ett program som inte frågar efter någonting utan endast läser allt som ligger i filen HEMSIDA.HTML och skriver ut detta på en enda lång rad i terminalen (enligt det som står nedan). Vi antar att det som finns på filen är korrekt HTML-kod (HTML används som du kanske vet till att skapa hemsidor). Kort om hur HTML ser ut. Det finns i princip två saker. (1) Taggar och (2) Text. En tagg börjar alltid med ett < och avslutas med ett > medan text inte gör detta. Här följer ett exempel på något som skulle kunna vara HTML (uppdelat på flera rader för att tydligare se delarna): <head> Textmassa med en massa ord. </head> <body> <p> Lite text. Lite mer text. </p> <div b= taggdata > Text </div> <p> Ännu lite mer text. </p></body> Observera att <div b= taggdata > totalt sett är en tagg även om det ser ut som text inuti. Hur skall formatet då se ut när det kommer ut i terminalen? Svaret är att det skall bli så komprimerat som möjligt (i princip). Detta innebär att: det INTE skall finnas något före den första taggen (HTML börjar alltid med en tagg). det efter alla taggar skall vara exakt ett blanktecken. alla radslut skall tas bort (utom det sista). alla förekomster av fler än ett blanktecken i rad skall ersättas med exakt ett blanktecken. Ett undantag till detta är dock om man har blanktecken som är quotade (d.v.s. inom citationstecken). Dessa skall alltid låtas vara som de är oavsett antal i både text och taggar. det inuti en tagg inte heller skall finnas fler än ett blanktecken i rad. Körexempel (givet att exemplet ovan ligger i filen HEMSIDA.HTML): <head> Textmassa med en massa ord. </head> <body> <p> Lite text. Lite mer text. </p> <div b= taggdata > Text </div> <p> Ännu lite mer text. </p> </body> OBS! Ovanstående är givetvis en enda lång rad även om den råkar radbrytas beroende på att terminalen är för kort i sidled. TIPS 1: Det är mycket bra att dela upp sitt program i olika underprogram som gör specifika saker. Det underlättar MYCKET. TIPS 2: GLÖM INTE filvariabeln i End_Of_Line och End_Of_File. TIPS 3: Det kan vara bra att ha extra variabler som håller reda på om man är inne i en quotad sträng respektive en tagg. TIPS 4: Det kan inte finnas < och > i quotade avsnitt.
Uppgift 4 (Japans flagga (eller)...) I denna uppgift får du lösa problemet precis hur du vill. Det enda vi vill är att resultatet skall vara rätt. Vi kommer dock endast ge som respons att det inte är rätt, samt vilken radie, om det inte fungerar. Din uppgift är att skriva ett program som ritar ut Japans flagga givet att vi har en terminal som är 24 rader lång och 80 tecken bred (standardinställning när man startar den). Användaren skall mata in vilken radie den runda pricken skall ha (i tecken räknat) och alla teckenpositioner som ligger inom den radien skall skrivas ut med tecknet #. Dimensionen på ramen runt flaggan skall också matas in (max 23 rader och 79 tecken i bredd) och skrivas med #. Pricken skall vara centrerad. OBS! För att få ut mittenpunkten krävs att radien är större än avståndet från mitten av tecknet till ett hörn (eller åtminstone lika stor). Detta innebär att minsta radien för att få med ett tecken i punkten (mitten) måste vara minst (enligt Pythagoras sats): 05, 2 2 + 05, = 05, 0, 70710678 Det man alltså måste tänka på är att man måste lägga till avståndet till hörnet för att tecknet skall få plats inom cirkeln. Tänk på papper... Centrum av cirkeln är i mitten av det mittersta tecknet. Den största radie användaren får mata in är givetvis anpassad så att man får en vit del mellan pricken och ramen. Ingen felkontroll behövs för detta. Användaren vet om det. Körexempel 1 (utskriften är förminskad för att den skall få plats här): Ange X- och Y-dimensioner: 39 15 Mata in cirkelns radie : 4.7 ####################################### # ### ##### ##### ####### ##### ##### ### # ####################################### Körexempel 2 (utskriften är förminskad för att den skall få plats här): Ange X- och Y-dimensioner: 79 23 Mata in cirkelns radie : 7.7 ############################################################################### # ##### ####### ######### ########### ########### ############# ############# ############# ########### ########### ######### ####### ##### # ###############################################################################