Uppgift 1 ( Betyg 3 uppgift ) I filerna queue_handling.ads och queue_handling.adb finns en datastruktur som motsvarar en kö. Det finns fyra operationer som kan utföras på en kö. 1) Enqueue som stoppar in ett data sist i kön. 2) Dequeue som tar bort det första datat i kön. 3) Empty som kontrollerar om kön är tom. 4) Length som talar om hur många data som finns i kön. Du skall skapa ett program som använder ovanstående paket till att hantera ett antal framslumpade heltal. Programmet skall slumpa fram ett antal heltal (mellan 1 och 10) och utföra följande operationer (du måste skapa en kö innan följande kan utföras): 1) Slumpa fram ett heltal (vi kallar detta N). 2) Slumpa fram N stycken heltal och stoppa in dem i kön. 3) Skriv ut köns innehåll. 4) Slumpa fram ett heltal (vi kallar detta N). 5) Tag bort N stycken heltal ur kön. Om kön är kortare än N data skall alla data tas bort ur kön. 6) Skriv ut köns innehåll. Upprepa punkterna 1 till 6 fem gånger. En viktig sak förutom ovanstående är att varje tal dessutom skall skrivas ut direkt då det slumpas fram. Observera att ditt program (inte paketet) skall innehålla utskriften av innehållet i kön. En programkörning kan se ut på följande sätt: N = 3 -> Stoppa in: 3 2 1 Kön: 3 2 1 N = 5 -> Tag bort. Kön: N = 5 -> Stoppa in: 6 6 9 9 8 Kön: 6 6 9 9 8 N = 4 -> Tag bort. Kön: 8 N = 1 -> Stoppa in: 10 Kön: 8 10 N = 2 -> Tag bort. Kön: N = 10 -> Stoppa in: 4 6 9 5 4 9 5 8 6 6 Kön: 4 6 9 5 4 9 5 8 6 6 N = 8 -> Tag bort. Kön: 6 6 N = 1 -> Stoppa in: 9 Kön: 6 6 9 N = 2 -> Tag bort. Kön: 9 Ett exempel på hur man kan hantera slumptal finns i filen slump.adb. TIPS: Ditt program behöver inte hantera undantag (eng. exception ). Det går att lösa uppgiften utan detta. Om du ändå vill använda undantag får du givetvis detta, men det behövs alltså inte. Det är dessutom tillåtet att kopiera variabler som är av privata datatyper.
Uppgift 2 I ett paket som heter Queue_Handling finns en implementation av en datatyp som representerar en kö. Denna är uppbyggd med hjälp av en post som innehåller ett fält och ett heltal. Förutom denna datatyp finns ett antal operationer man kan använda för att lagra data i kön, hämta data ur kön eller ta reda på status för kön. Mer information om vad dessa heter och vad de gör finns i uppgift 1 eller i filerna som är givna. Din uppgift är att kopiera ovanstående paket och döpa om kopian till New_Queue_Handling. Dessutom skall du i detta nya paket byta ut datastrukturen som representerar kön till en lista som skall vara uppbyggd på följande sätt: N 3 Data 7 Data 2 Data 10 Head Tail Det är alltså en länkad lista där listdatatypen är en post som innehåller tre saker. Dels ett heltal som anger hur många data som ligger i kön och dels två pekare som håller reda på början respektive slutet av kön. Om det inte finns några data i listan skall alltså posten innehålla talet noll (0) och två null -pekare. När du nu bytt ut datastrukturen måste även operationerna (procedurerna och funktionerna) skrivas om så att de fungerar med den nya datastrukturen. Gör detta. Skriv ett program som visar att man kan utföra all operationerna på den nya kön. T.ex. kan programmet utföra 5 stycken instoppningar av data och sen borttagning av 3 data. Efter varje sådan operation kan man skriva ut innehållet i kön och längden av kön. Se till att du även använder de andra operationerna som finns i paketet i ditt program. Detta program kan alltså ses som ett testprogram som skall försöka påvisa att ditt paket fungerar. TIPS: Ditt testprogram bör fungera för både originalpaketet och det nya paketet bara man byter ut with och use i programmet. Det kanske är bra att skriva testprogrammet först... KRAV: Du får inte ändra på några publika delar i paketet och köns innehåll skall visas när du kör ditt testprogram (detta innebär att du måste skriva en egen Put, i huvudprogrammet, för att skriva ut innehållet i kön).
Uppgift 3 Paketet Queue_Handling är hårt bundet till att hantera köer där varje data är ett heltal. I det verkliga (programmerings)livet kan det vara så att den som skriver huvudprogrammet vill kunna ha köer som innehåller andra typer av data. Din uppgift är alltså att göra en kopia av originalpaketet och döpa om kopian så att paketet heter Generic_Queue_Handling. I kopian skall paketet göras generiskt med avseende på datatypen på de data som skall lagras i kön. Skriv dessutom ett testprogram som gör det troligt att ditt generiska paket fungerar. Alla operationer på kön skall utföras så att man åtminstone kan se att det går att hantera kön.
Uppgift 4 När man står sist i ett led brukar man säga att man står i kön av ledet. Denna uppgift ligger sist och är därför i kön av uppgifter. Den handlar dock inte om köer utan om filer, bilder och fält. På en fil finns en figur som är uppritad med hjälp av vanliga skrivbara tecken. Figuren består av maximalt 100 rader och det finns maximalt 100 tecken per rad. Filnamnet är maximalt 20 tecken långt och består endast av bokstäver (det kan vara antingen versaler eller gemener) och eventuellt punkter. Din uppgift är att skriva ett program som frågar användaren efter ett filnamn (där bilden finns), därefter läser in bilden och skapar fyra (4) nya filer där alla 90-gradersvridningar finns lagrade. Filnamnen på de nya filerna skall vara uppbyggt med hjälp av ursprungsfilnamnet, men med tilläggen.a,.b,.c,.d. Ett exempel på en originalbild skulle kunna se ut på följande sätt: 123 456 78 Resultatfilerna skulle då innehålla följande bilder (en av dem är originalet självt): 123 36 87 741 456 258 654 852 78 147 321 63 Observera att raderna i originalfilen kan vara olika långa och att eventuella saknade positioner ersätts med blanktecken om det behövs. Det är tillåtet att ha blanktecken i slutet av raderna i resultatfilerna. TIPS 1: Det är normalt sett inte siffror i bilderna utan alla möjliga skrivbara tecken. Bygg alltså inte ditt program med tanke på heltal utan med utgångspunkten tecken. TIPS 2: Ibland kan det vara så att man inte kan skilja på datatypen Character och datatypen Wide_Character i Ada när det gäller teckenkonstanter. För att markera att det skall vara Character kan man då skriva Character ( A ) istället för endast A.
Uppgift 4 (SPECIALARE) Lite speciellt denna gång är att jag ger en möjlighet att få en variant av uppgift 4. Det är samma specifikation och allt som står i den ordinarie uppgiften skall fungera som det står. Det som skiljer sig är att jag ger er en hel del av programmet och att ni endast får själva filhanteringen som uppgift. Det som är haken med detta är att ni skriftligt måste lämna in den nedre delen av detta papper ifyllt med personnummer och namn (tydligt), det Student-ID som står i fönstret ni kommunicerar med oss via (ni måste alltså ha loggat in innan ni kan begära detta). Förutom dessa data vill vi ha er underskrift för att få del av denna specialuppgift. I och med detta kommer denna uppgift att vara helt separerad från övriga uppgifter och kan inte användas för högre betyg än betyg 3. Ni kan givetvis lösa de andra uppgifterna för högre betyg, men får då inte räkna uppgift 4 i detta. Om ni vill kan ni alltså få denna specialare och sen lösa de andra uppgifterna istället. Det är tillåtet att lämna in denna begäran när som helst under tentan. Ni får ett meddelande via tentasystemet om hur ni får tag i den fil som innehåller en del av programmet då vi fått er begäran. ---------- Riv här ---------------------------------------------------------- Jag vill ha del av SPECIALAREN på uppgift 4 och accepterar villkoren ovan. Gäller endast tentan 2005-01-11 kl. 14-19. Namn: Personnummer: Student-ID: Underskrift: