2005-01-11.kl.14-19 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.
2005-01-11.kl.14-19 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 Next Next Next 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).
2005-01-11.kl.14-19 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.
2005-01-11.kl.14-19 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.
2005-01-11.kl.14-19 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:
2005-03-14.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser in ett tal som motsvarar ett antal sekunder. Därefter skall programmet räkna ut hur många timmar, minuter och sekunder detta motsvarar. Programmet skall skriva ut de beräknade tidsenheterna på skärmen. Om antalet timmar, minuter eller sekunder är noll skall denna tidsenhet ej skrivas ut (se exemplen nedan). Programmet skall avslutas först då användaren matar in noll sekunder. Användaren är snäll och matar alltid in korrekta data. Körexempel: Mata in ett antal sekunder (avsluta med noll): 3600 Svar: Det motsvarar 1 timme. Mata in ett antal sekunder (avsluta med noll): 60 Svar: Det motsvarar 1 minut. Mata in ett antal sekunder (avsluta med noll): 7320 Svar: Det motsvarar 2 timmar och 2 minuter. Mata in ett antal sekunder (avsluta med noll): 43 Svar: Det motsvarar 43 sekunder. Mata in ett antal sekunder (avsluta med noll): 12345 Svar: Det motsvarar 3 timmar och 25 minuter och 45 sekunder. Mata in ett antal sekunder (avsluta med noll): 3659 Svar: Det motsvarar 1 timme och 59 sekunder. Mata in ett antal sekunder (avsluta med noll): 2005 Svar: Det motsvarar 33 minuter och 25 sekunder. Mata in ett antal sekunder (avsluta med noll): 0 Tack för idag.
2005-03-14.kl.08-13 Uppgift 2 När man försöker bestämma namn på en bebis kan det vara bra att ha en massa förslag på namn. Dessa namn kan ligga på vanliga textfiler med ett namn per rad. När man har flera filer kan det vara bra att kunna sammanställa dessa till en. Din uppgift är att skriva ett program som sammanställer två filer med namn (ett per rad som sagt) och skapar en fil med unika namn sorterade i bokstavsordning. Det är givet att de två filerna är sorterade från början. Det är rimligt att anta att inget namn är längre än 80 tecken. Observera att även namn innehållande å, ä och ö skall sorteras rätt enligt svensk alfabetsordning. Det är givet att alla namn är skrivna med gemener. Du har två exempelfiler som heter FLICKNAMN.TXT och POJKNAMN.TXT. Skapa en resultatfil som heter ALLA_NAMN.TXT. Ingen utskrift på skärmen från programmet krävs i denna uppgift. ------------------------------------------------------------------------------- SPECIALARE (endast för betyg 3 på hela tentan): Filerna som skall sorteras ihop behöver ej ta hänsyn till å, ä och ö. Denna specialare ger endast betyg 3 på hela tentan som resultat och kan inte kombineras med någon annan uppgift. Det är dock möjligt att lösa två eller tre av de andra uppgifterna för att få högre betyg. De filer ni skall använda för specialaren har filnamnen SPECIAL_FLICKNAMN.TXT och SPECIAL_POJKNAMN.TXT. Resultatet skall då hamna i SPECIAL_ALLA_NAMN.TXT. OBS! För att markera att det är specialaren ni skickar in måste ert program skriva ut "SPECIALARE" på skärmen när man kör programmet så att vi ser detta när vi testkör ert program.
2005-03-14.kl.08-13 Uppgift 3 Skriv ett program som läser in ett positivt heltal (utan +) i intervallet [1,1.000.000.000] och sen skriver ut det igen. Det är givet att användaren alltid matar in maximalt 10 tecken. Om den rad användaren matar in innehåller annat än siffror skall felmeddelande skrivas ut och användaren skall få fler försök att mata in ett korrekt heltal. Full felhantering skall göras. Programmet får inte avslutas innan ett korrekt heltal matats in. KRAV: Heltalet skall givetvis ligga lagrat i en heltalsvariabel när det skrivs ut.
2005-03-14.kl.08-13 Uppgift 4 Proceduren Merge är given i filen "merge.adb". Denna procedur sorterar ihop två filer till en sorterad fil och tar samtidigt bort dubletter. Det är givet att filerna är textfiler och att de data som finns på filerna är ett heltal per rad. Antag att den ena filen innehåller följande: 2 3 6 12 Antag att den andra filen innehåller följande: 3 4 7 11 13 Den resulterande filen kommer då att innehålla: 2 3 4 6 7 11 12 13 Din uppgift är att göra om proceduren Merge till en generisk procedur som skall heta Generic_Merge där det skall vara möjligt att sortera ihop två filer som innehåller annan datatyp än heltal. Det är alltså meningen att huvudprogrammet skall kunna instansiera den generiska proceduren med en datatyp. Du skall dessutom skriva ett huvudprogram som visar att det går att kompilera och använda den generiska proceduren. Det är upp till dig att bestämma vad huvudprogrammet skall hantera för datatyp och du får dessutom skapa testfiler för att provköra ditt program (görs lättast i Emacs). Det är huvudprogrammets uppgift att öppna/skapa filerna som skall sorteras ihop. OBS! Du skall inte skicka med testfilerna när du skickar in din lösning.
2005-03-14.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) På en textfil som heter TEXTFIL.TXT finns ett obestämt antal rader med text. Det man vet om raderna är att de är maximalt 80 tecken långa. Din uppgift är att skriva ett program som skapar en ny textfil som skall heta SORTERADE_RADER.TXT som skall innehålla samma text som den första, men där varje rad är sorterad så att alla tecken på raden ligger i bokstavsordning. Versaler och gemener anses ej vara likvärdiga (ordningen är A,B,C,...,Å,Ä,Ö och sedan a,b,c,...,å,ä,ö). Specialfall är dock att alla övriga tecken (som blanktecken, utropstecken, siffror m.m.) anses vara oväsentliga och skall tas bort. Alla rader kommer alltså inte att vara lika långa i den nya filen som i den gamla. Antag att filen TEXTFIL.TXT innehåller följande rader: En kort rad. En rad som innehåller ganska mycket text. Ovanför denna rad var det en tom rad. Resultatet i filen SORTERADE_RADER.TXT skall då bli: Eadknorrt Eaaacdeeeeghikkllmmnnnnorrsstttxyå Oaaaaaddddeeefmnnnnorrrrttvvö
2005-03-14.kl.14-19 Uppgift 2 En student har tidigare skrivit ett paket som hanterar ett binärt sökträd. I ett binärt sökträd kan man lagra data (i studentens paket lagras heltal). Datastrukturen ser ut på följande sätt (bildmässigt, se i paketet för detaljer). Tree 8 2 15-1 4 11 27 0 7 10 13 I ett binärt sökträd gäller att alla data i det vänstra delträdet är mindre än datat i noden som pekar ut delträdet. De data som ligger i det högra delträdet är större än datat i noden som pekar ut trädet. Detta gäller för alla noder i hela trädet. Studenten har implementerat (skapat) procedurerna Insert och Delete i paketet. Dessutom finns datatypen som representerar trädet. För att visa att allt fungerar som det skall har studenten också skrivit ett huvudprogram som heter Tree_Tester (finns i filen "tree_tester.adb"). Han har dock lagt till en rad i programmet som gör att detta inte går att kompilera. Denna rad är "Put(Tree);". Din uppgift är att lägga till proceduren Put i paketet så att huvudprogrammet fungerar enligt kommentarerna. Se alltså i huvudprogrammet för att se hur Put skall skriva ut trädets innehåll.
2005-03-14.kl.14-19 Uppgift 3 Det finns tydligen "matematiker" som tror att funktionerna F 1 och F 2 som beskrivs enligt F 1 ( AB, ) = A+ ( 2 B) F 2 ( AB, ) = A+ 2 B ger samma resultat. Frågan är om dessa "matematiker" vet något om matematik? Du skall dock inte svara på den frågan. Din uppgift blir att skriva ett program som låter användaren bestämma ett min- och ett maxvärde på A samt ett min- och ett maxvärde på B och därefter skriva ut en tabell innehållande A, B, F1 och F2. A- och B-värdena skall ligga i intervallet [0, 10]. Det är givet att A och B skall vara heltal. Dock är det så att användaren kan få för sig att mata in data som är felaktiga. Du skall göra fullständig felhantering av inmatningarna. Felaktigheter som att ange värden som är orimliga och dessutom av fel datatyp kan förekomma. Exempel på programkörning: Alla inmatningar skall vara heltal i intervallet [0, 10]. Mata in A:s minvärde: -2 FEL: För litet värde! Mata in A:s minvärde: 2 Mata in A:s maxvärde: TRE FEL: Konstiga data! Mata in A:s maxvärde: 3 Mata in B:s minvärde: 2 Mata in B:s maxvärde: 1 FEL: Maxvärdet måste vara minst lika stort som minvärdet. Mata in B:s maxvärde: 3 A B F1(A,B) F2(A,B) -------------------------- 2 2 2.44949 3.41421 2 3 2.82843 3.86370 3 2 2.64575 3.73205 3 3 3.00000 4.18154 TIPS: För att kunna hantera matematiska funktioner finns det ett paket som heter Ada.Numerics.Elementary_Functions. I detta paket finns en funktion som heter Sqrt som beräknar roten ur ett flyttal.
2005-03-14.kl.14-19 Uppgift 4 Givet ett paket som heter Queue_Handling. Filerna för detta paket heter "queue_handling.ads" och "queue_handling.adb". Din uppgift är att modifiera detta paket så att det blir generiskt och heter Generic_Queue_Handling. Det huvudprogram som skall instansiera paketet skall skicka med den datatyp som skall lagras i kön. Dessutom skall köns maxstorlek skickas med vid instansieringen. Förutom ovanstående skall du skriva ett huvudprogram som instansierar ditt generiska paket och visar att det fungerar att använda det.
2005-03-15.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser in två tidpunkter på formen TT:MM:SS. Därefter skall programmet räkna ut hur många sekunder det är mellan dessa två tidpunkter. Det är givet att tidpunkterna som ges ligger inom samma dygn. Körexempel 1: Mata in den ena tidpunkten : 12:36:15 Mata in den andra tidpunkten: 13:00:00 Svar: Det är 1425 sekunder mellan dessa tider. Körexempel 2: Mata in den ena tidpunkten : 00:00:00 Mata in den andra tidpunkten: 23:59:59 Svar: Det är 86399 sekunder mellan dessa tider. Körexempel 3: Mata in den ena tidpunkten : 11:12:13 Mata in den andra tidpunkten: 11:12:13 Svar: Det är 0 sekunder mellan dessa tider. Körexempel 4: Mata in den ena tidpunkten : 12:00:00 Mata in den andra tidpunkten: 11:59:59 Svar: Det är 1 sekund mellan dessa tider. OBS! I sista körexemplet står det sekund. Ingen felhantering krävs i denna uppgift.
2005-03-15.kl.08-13 Uppgift 2 När man försöker bestämma namn på en bebis kan det vara bra att ha en massa förslag på namn. Dessa namn kan ligga på vanliga textfiler med ett namn per rad. Ofta blir det dock så att de namn man skrivit in i sina filer hamnar i oordning. I dessa fall kan det vara bra med ett program som sorterar en fil i bokstavsordning. Din uppgift är att skriva ett program som sorterar en fil med namn (ett per rad som sagt) och skapar en ny fil med namnen sorterade i bokstavsordning. Det är givet att det finns maximalt 100 namn i filen. Dessutom är det rimligt att anta att inget namn är längre än 80 tecken. Observera att även namn innehållande å, ä och ö skall sorteras rätt enligt svensk alfabetsordning. Det är givet att alla namn är skrivna med gemener. Du har en exempelfil som heter EN_MASSA_NAMN.TXT. Skapa en resultatfil som heter SORTERADE_NAMN.TXT. Ingen utskrift på skärmen från programmet krävs i denna uppgift. ------------------------------------------------------------------------------- SPECIALARE (endast för betyg 3 på hela tentan): Filen som skall sorteras behöver ej ta hänsyn till å, ä och ö. Denna specialare ger endast betyg 3 på hela tentan som resultat och kan inte kombineras med någon annan uppgift. Det är dock möjligt att lösa två eller tre av de andra uppgifterna för att få högre betyg. De filer ni skall använda för specialaren har filnamnen SPECIAL_EN_MASSA_NAMN.TXT. Resultatet skall då hamna i SPECIAL_SORTERADE_NAMN.TXT. OBS! För att markera att det är specialaren ni skickar in måste ert program skriva ut "SPECIALARE" på skärmen när man kör programmet så att vi ser detta när vi testkör ert program.
2005-03-15.kl.08-13 Uppgift 3 Du skall skriva ett program som beräknar ett antal värden enligt följande funktion. f( n) Användaren skall mata in två heltal som motsvarar start- och slutvärde i en tabell. Användaren skall mata in heltal som ligger i intervallet [1, 100]. Du måste göra fullständig felhantering så att användaren inte kan mata in orimliga värden eller felaktiga data (t.ex. bokstäver). Körexempel: 1n, 2 = f( n 1) + f( n 2), n > 2 Mata in minvärdet: 8 Mata in maxvärdet: 12 n f(n) ------------ 8 21 9 34 10 55 11 89 12 144
2005-03-15.kl.08-13 Uppgift 4 Proceduren Sort_File är given i filen "sort_file.adb". Denna procedur sorterar innehållet i en given textfil och lagrar dessa sorterade data på en ny textfil. Det är givet att de data som finns på filen är ett heltal per rad. Proceduren Sort_File klarar endast av att hantera filer som är maximalt 100 rader långa. Antag att filen innehåller följande: 123 12-18 48 547 Den resulterande filen kommer då att innehålla: -18 12 48 123 547 Din uppgift är att göra om proceduren Sort_File till en generisk procedur som skall heta Generic_Sort_File där det skall vara möjligt att sortera en textfil som innehåller annan datatyp än heltal (varje data tar en rad i filen). Det är alltså meningen att huvudprogrammet skall kunna instansiera den generiska proceduren med en datatyp. Du skall dessutom skriva ett huvudprogram som visar att det går att kompilera och använda den generiska proceduren. Det är upp till dig att bestämma vad huvudprogrammet skall hantera för datatyp och du får dessutom skapa testfiler för att provköra ditt program (görs lättast i Emacs). Det är huvudprogrammets uppgift att öppna/skapa filerna som skall sorteras ihop. OBS! Du skall inte skicka med testfilerna när du skickar in din lösning.
2005-03-15.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) På en textfil som heter TEXTFIL.TXT finns ett obestämt antal rader med text. Det man vet om raderna är att de är maximalt 80 tecken långa. Din uppgift är att skriva ett program som skapar en ny textfil som skall heta SPEGELBILD.TXT som skall innehålla samma text som den första, men där varje rad är vänd bak och fram. Alla rader skall (förstås) vara lika långa i den nya filen som i den gamla. Antag att filen TEXTFIL.TXT innehåller följande rader: En kort rad. En rad som innehåller ganska mycket text. Ovanför denna rad var det en tom rad. Resultatet i filen SPEGELBILD.TXT skall då bli:.dar trok ne.txet tekcym aksnag rellåhenni mos dar ne.dar mot ne ted rav dar anned röfnavo
2005-03-15.kl.14-19 Uppgift 2 En student har tidigare skrivit ett paket som hanterar ett binärt sökträd. I ett binärt sökträd kan man lagra data (i studentens paket lagras heltal). Datastrukturen ser ut på följande sätt (bildmässigt, se i paketet för detaljer). Tree 8 2 15-1 4 11 27 0 7 10 13 I ett binärt sökträd gäller att alla data i det vänstra delträdet är mindre än datat i noden som pekar ut delträdet. De data som ligger i det högra delträdet är större än datat i noden som pekar ut trädet. Detta gäller för alla noder i hela trädet. Studenten har implementerat (skapat) procedurerna Insert och Delete i paketet. Dessutom finns datatypen som representerar trädet. För att visa att allt fungerar som det skall har studenten också skrivit ett huvudprogram som heter Tree_Tester (finns i filen "tree_tester.adb"). Han har dock lagt till en rad i programmet som gör att detta inte går att kompilera. Denna rad är "Put(Tree);". Din uppgift är att lägga till proceduren Put i paketet så att huvudprogrammet fungerar enligt kommentarerna. Se alltså i huvudprogrammet för att se hur Put skall skriva ut trädets innehåll.
2005-03-15.kl.14-19 Uppgift 3 Bilhandlare Bill vill ha ett program som läser in ett bilnummer och sen kontrollerar om detta finns med i bilregistret. Ett bilnummer måste matas in på formatet VSVSVS, där V är en versal (hela svenska alfabetet är tillåtet) och S är en siffra. Observera att det är ett fiktivt format för att inte Vägverket skall protestera mot upphovsrätt med mera. :-) Din uppgift är att göra inmatningsproceduren Get som läser in ett bilnummer på korrekt format enligt ovan. Själva registerhanteringen skall någon annan göra. Din procedur Get skall inte skriva något på skärmen så du måste se till att ett undantag (eng. exception) kastas som huvudprogrammet kan fånga. Huvudprogrammet måste dock fånga detta undantag specifikt (inte med "others"). För att visa att allt fungerar som det skall måste du skriva ett huvudprogram som använder din Get. Ditt program skall endast mata in ett bilnummer och sen skriva ut detta igen. Programmet får inte avslutas förrän ett korrekt bilnummer matats in. TIPS: Spara bilnumret i en sträng som är 6 tecken lång. Användaren kommer alltid att mata in exakt 6 tecken vid inmatningen. Det finns inget krav att lägga proceduren i en separat fil.
2005-03-15.kl.14-19 Uppgift 4 Givet ett paket som heter Stack_Handling. Filerna för detta paket heter "stack_handling.ads" och "stack_handling.adb". Din uppgift är att modifiera detta paket så att det blir generiskt och heter Generic_Stack_Handling. Det huvudprogram som skall instansiera paketet skall skicka med den datatyp som skall lagras i stacken. Dessutom skall stackens maxstorlek skickas med vid instansieringen. Förutom ovanstående skall du skriva ett huvudprogram som instansierar ditt generiska paket och visar att det fungerar att använda det.
2005-06-09.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Ett plustecken kan se ut på många sätt. En variant är den som ses nedan. Skriv ett program som låter användaren mata in storleken på plusset enligt exemplen nedan. Programkörning 1: Mata in storlek: 1 +--+ +-+ +-+ +-+ +-+ +--+ Programkörning 2: Mata in storlek: 2 +----+ +--+ +--+ +--+ +--+ +----+ Programkörning 3: Mata in storlek: 4 +--------+ +----+ +----+ +----+ +----+ +--------+
2005-06-09.kl.08-13 Uppgift 2 Inom fonetiken klassificerar man konsonantljud efter på vilket sätt de bildas och var någonstans de bildas. En klass av konsonantljud är de retroflexa ljuden, vilka bildas genom att tungspetsen böjs bakåt och förs mot tandvallens bortre del eller mot främre gommen. I många svenska dialekter kan ett antal konsonantljud förändras och uttalas retroflext om de föregås av ett r. Dessa konsonanter är n, s, t, d och l. Om flera av dessa bokstäver står efter varandra uttalas samtliga ljud retroflext om de föregås av ett r. Bokstav Exempel Representation ---------------------------------- n torn ton s fors fos t fort fot d bord bod l porla pola flera barnstol bordsben banstol bodsben En fonetikprofessor behöver hjälp att skriva ett program som kan hitta alla ljud i en text som skulle kunna uttalas retroflext. Skriv ett program som markerar alla retroflexa ljud i en text (som ligger i textfilen REN_TEXT.TXT) med motsvarande stor bokstav, se exemplet ovan. De ljud som kan bli retroflexa är alltså: n, s, t, d, l när de föregås av r (dessutom försvinner r -ljudet) och när de föregås av något annat retroflext ljud. Resultatet skall lagras i filen RETROFLEX.TXT. Det finns inga begränsningar på filens storlek (mer än att den ryms på hårddisken) och inte heller någon begränsning på radernas längder i filen.
2005-06-09.kl.08-13 Uppgift 3 En användare vill kunna rita ut snygga figurer enligt exemplen nedan på skärmen. Kravet är att ditt program skall anropa ett underprogram som heter Draw_Picture som endast får ha maximalt två heltalsparametrar (inga andra parametrar är tillåtna). Detta underprogram skall se till att utskriften på skärmen görs. Utskriften skall dessutom ske rekursivt (d.v.s. proceduren Draw_Picture skall vara rekursiv). Du får skriva ut en hel rad utan rekursion, men du får inte skriva flera rader utan rekursion. Programkörning 1: Mata in storlek: 7 XXXXXXX XXXXX XXX X XXX XXXXX XXXXXXX Programkörning 2: Mata in storlek: 6 XXXXXX XXXX XX XX XXXX XXXXXX Programkörning 3: Mata in storlek: 2 XX XX Programkörning 4: Mata in storlek: 1 X
2005-06-09.kl.08-13 Uppgift 4 I ett program som hanterar bilder vill man kunna förskjuta bilden både i x- och y-led (samtidigt om så önskas av användaren). En bild representeras av en matris innehållande ett antal heltal. Varje heltal (i intervallet [0, 255]) motsvarar en färg. Vi kan för enkelhets skull anta att bilden alltid är 4x4 bildpunkter stor, men ditt program skall ha dessa maxvärden som globala konstanter som används i programmet (detta för att enkelt kunna omdimensionera senare). Din uppgift blir att skriva ett program som skjuter bilden i x- och y-led efter användarens önskemål. En förkjutning innebär att bilden flyttas och det som trillar över kanten kommer in på andra sidan igen (man kan tänka sig att bilden sitter fast på en pappersrulle och det bilden glider runt rullen och in på papperet igen). Det finns givet ett skelett till program i filen forskjutning.adb. I detta skelett har vi tilldelat bildmatrisen de värden som skall användas av dig. Vi har däremot (som du märker) inte skapat datatypen för matrisen och vi har heller inte skrivit programmet i övrigt. Ditt program skall följa nedanstående exempel. Det är viktigt att utskrifterna exakt följer exemplen. Antag att vi har en bild med följande innehåll: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Programkörning 1: Mata in förskjutning i x-led (positivt => höger): 2 Mata in förskjutning i y-led (positivt => uppåt): 0 2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 Programkörning 2: Mata in förskjutning i x-led (positivt => höger): 0 Mata in förskjutning i y-led (positivt => uppåt): 1 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 Programkörning 3: Mata in förskjutning i x-led (positivt => höger): 1 Mata in förskjutning i y-led (positivt => uppåt): -1 15 12 13 14 3 0 1 2 7 4 5 6 11 8 9 10
2005-06-09.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som ritar ut följande figur (i den storlek som användaren väljer) på skärmen. Figuren har storlek 5x4 i detta exempel. +--+--+--+--+--+ +--+--+--+--+--+ +--+--+--+--+--+ +--+--+--+--+--+ +--+--+--+--+--+ Det finns inga begränsningar på storleken på figuren. Det är givet att användaren alltid matar in positiva heltal till ditt program. Programkörning: Mata in antal rutor i x-led: 6 Mata in antal rutor i y-led: 3 +--+--+--+--+--+--+ / +--+--+--+--+--+--+ / +--+--+--+--+--+--+ / +--+--+--+--+--+--+
2005-06-09.kl.14-19 Uppgift 2 I svenskan finns det en verbform som heter presens particip. Det är former som springande och gående som används i meningar som Han kom springande och hon kom gående. En lingvist skulle behöva hjälp att skriva ett program som tar ut alla former i en text som skulle kunna vara presens particip, det vill säga alla ord som avslutas med (har en ände :-) som är ande eller ende. Dessa ord ska skrivas ut på en ny fil (ett ord per rad). Den text som du skall gå igenom ligger i textfilen REN_TEXT.TXT och resultatet skall skrivas till filen PRESENS_PARTICIP.TXT (också en textfil). Det är givet att inga rader i originalfilen är längre än 60 tecken. Om det skulle vara så att det finns ord som slutar på ande / ende och de ändå inte är ord av rätt sort spelar det inte någon roll i denna uppgift.
2005-06-09.kl.14-19 Uppgift 3 Skriv ett program som ritar ut nedanstående figur på skärmen. Användaren skall kunna ange vilken storlek figuren skall ha (se programkörningar nedan). Storleken anges i antal teckens bredd respektive antal teckens höjd i figuren. Ingen felhantering krävs i denna uppgift. Som du ser är figuren uppbyggd av en spegelvänd spiral som utgår från det övre vänstra hörnet i riktning åt höger. Spiralen skall alltid avslutas med ett +. Varje krök i spiralen skall markeras med ett +. För att lösa problemet kan det vara bra att ha en matris där man lagrar (ritar) figuren innan utritande på skärm. Maximal storlek på figuren är 70x20. Programkörning 1: Mata in x-dimension: 8 Mata in y-dimension: 6 -------+ +-----+ +---+ +--+ +----+ +------+ Programkörning 2: Mata in x-dimension: 10 Mata in y-dimension: 1 ---------+ Programkörning 3: Mata in x-dimension: 1 Mata in y-dimension: 3 + + Programkörning 4: Mata in x-dimension: 4 Mata in y-dimension: 7 ---+ +-+ + ++ +--+
2005-06-09.kl.14-19 Uppgift 4 I filen matte.adb finns ett litet skelett till ett huvudprogram som du kan använda. I detta finns en matristilldelning som gör att du har ett innehåll som är startvärdet i programmet. Vi har dock inte givit typdeklarationen för matrisen utan antagit att den är färdig. Det är ditt jobb att definiera typen och se till att programmet utför det som beskrivs nedan. Det är givet i uppgiften att matrisen är 4x4 stor. I ditt program skall du skriva en procedur som utför en matematisk formel på alla element i hela matrisen. Den matematiska formeln ser ut på följande sätt. Udda tal skall adderas med 1. Jämna tal skall divideras med 2. Proceduren skall vara rekursiv och den skall avslutas när minst ett av talen i matrisen blivit 1. Man skall dock inte avsluta innan alla element i matirsen genomgått sin matematiska funktion. Om inget av talen i matrisen är 1 skall samma operation utföras ytterligare minst en gång. Huvudprogrammet skall därefter skriva ut matrisens innehåll. Antag följande ursprungsmatris: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Efter en genomgång av matrisen skall den se ut på följande sätt (skall dock inte synas på skärmen utan är endast internt): 5 12 6 14 7 16 8 18 9 20 10 22 11 24 12 26 Då programmet körs skall följande matris skrivas ut (det har nu hittats en etta i matrisen): 4 4 2 4 2 2 1 5 6 6 3 6 3 3 4 7 Krav: Proceduren som utför en fullständig matematisk beräkning av hela matrisen skall vara rekursiv. Det ser man i uppgiftens formulering dessutom. Givet: Det är givet att inget av talen är 1 i ursprungsmatrisen.
2005-08-16.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skapa ett paket som skall heta Money_Handling som skall innehålla en privat datatyp som skall heta Money_Type. Denna datatyp skall vara uppbyggd av en post innehållande två heltal där det ena motsvarar en valuta (t.ex. kronor eller pund) och det andra motsvarar en hundradel av denna valuta (t.ex. öre eller penny). Det är helt oväsentligt vilken valuta den som skall använda paketet vill hantera bara villkoren ovan är uppfyllda. I uppgiften beskriver vi allt med hjälp av kronor och ören för enkelhets skull. Till datatypen behövs ett antal procedurer, funktioner och operatorer och du skall i denna uppgift skapa endast ett fåtal. Dessa är Get, Put, + och -. Dessa finns beskrivna mer nedan. Inläsningsproceduren Get - skall läsa in en valuta på formatet: <kronor>.<ören> Exempel på detta är 314.2 och 4.18. Det är givet att det alltid finns en punkt och en eller två siffror för örena. Utskriftsproceduren Put - skall skriva ut valutan på formatet: <kronor>.<ören> Exempel på detta är 314.20 och 4.18. Det är givet att det alltid skall vara två siffror i öresdelen. Operatorn + - skall addera två valutor och resultatet skall (förstås) vara summan. Operatorn - - skall subtrahera den andra valutan från den första. Dock måste resultatet bli positivt (eller noll) för att operationen skall anses vara tillåten. Om det blir negativt skall undantaget Money_Error resas/kastas. Du skall förutom paketet skriva ett testprogram som visar att paketet fungerar ihop med ett huvudprogram. Det är en självklarhet att man som programmerare tillverkar ett sådant för att kunna kontrollera sitt paket i vilket fall. Observera dock att den text som finns i exemplet inte skall ingå i någon av de procedurer eller operatorer du gjort i paketet utan skrivs ut av huvudprogrammet. Du skall heller inte ha fler saker i paketet än de ovan beskrivna. Ett exempel på en programkörning: Mata in ett belopp : 5.5 Mata in ett nytt belopp : 2.34 Du matade in beloppen 5.50 och 2.34. Summan av dessa belopp är 7.84. Differensen är 3.16. Ett till exempel på en programkörning (där differensen beräknas omvänt i undantagshantering i huvudprogrammet): Mata in ett belopp : 2.34 Mata in ett nytt belopp : 5.5 Du matade in beloppen 2.34 och 5.50. Summan av dessa belopp är 7.84. Differansen är 3.16.
2005-08-16.kl.14-19 Uppgift 2 Du skall skriva ett program som skriver ut en multiplikationstabell på skärmen. Användaren skall ange storleken på tabellen. Storleken bestäms av två tal. Det ena anger antalet kolumner (X) och det andra anger antal rader (Y) i tabellen. Tabellen kommer alltså att innehålla alla kombinationer för talen 1.. X och 1.. Y. Användaren kommer att mata in tal i intervallet [1, 100] när programmet frågar efter X respektive Y. Ingen felhantering behövs. Första raden i tabellen är den rad som innehåller X-värdena och första kolumnen är den som innehåller Y-värdena. Ett krav som ställs är att alla tal i tabellen som skrivs ut skall stå i prydliga kolumner. Det största talet i tabellen skall föregås av exakt ett blanktecken och alla kolumner skall vara lika breda. Den enda kolumn som får skilja sig från de övriga är den där Y- värdena står. Denna skall vara så smal det går. Alla värden skall vara högerjusterade. Ett exempel på programkörning: Mata in maximalt X-värde: 4 Mata in maximalt Y-värde: 2 * 1 2 3 4 -+-------- 1 1 2 3 4 2 2 4 6 8 Ett exempel på programkörning: Mata in maximalt X-värde: 10 Mata in maximalt Y-värde: 10 * 1 2 3 4 5 6 7 8 9 10 --+---------------------------------------- 1 1 2 3 4 5 6 7 8 9 10 2 2 4 6 8 10 12 14 16 18 20 3 3 6 9 12 15 18 21 24 27 30 4 4 8 12 16 20 24 28 32 36 40 5 5 10 15 20 25 30 35 40 45 50 6 6 12 18 24 30 36 42 48 54 60 7 7 14 21 28 35 42 49 56 63 70 8 8 16 24 32 40 48 56 64 72 80 9 9 18 27 36 45 54 63 72 81 90 10 10 20 30 40 50 60 70 80 90 100 KRAV: Programmet skall generera exakt det format, på tabellerna, som angivits ovan för att det skall godkännas. Även inmatningen skall se ut som i exemplen ovan. För att undvika missförstånd gäller att M:et i Mata in... står på första positionen på raden. TIPS: Då tabellen kan bli väldigt stor i förhållande till skärmens storlek kan det bli svårt att se om programmet fungerar för stora X och Y. Man kan dock förstora det fönster där programmet körs för att bilda sig en bättre uppfattning.
2005-08-16.kl.14-19 Uppgift 3 Nu har det kommit till Sverige. Det populära pusslet Sudoku från Japan. På hemsidan www.sudoku.com finns mer information för den som är intresserad. Ett citat från hemsidan är There s no math involved. och det är helt sant i denna uppgift. Kort kan man säga att det gäller att placera in talen 1-9 i varje rad och varje kolumn i en figur enligt nedan. Det får inte finns dubletter i raderna och ej heller i kolumnerna. En liten, men betydelsefull, extra regel är att varje grupp om nio rutor (markerade i figuren nedan) också skall innehålla alla de nio siffrorna. 9 6 3 1 7 4 2 5 8 1 7 8 3 2 5 6 4 9 2 5 4 6 8 9 7 3 1 8 2 1 4 3 7 5 9 6 4 9 6 8 5 2 3 1 7 7 3 5 9 6 1 8 2 4 5 8 9 7 1 3 4 6 2 3 1 7 2 4 6 9 8 5 6 4 2 5 9 8 1 7 3 På en fil som heter SUDOKU.TXT finns ett antal rader som motsvarar försök till lösningar av ovanstående. Varje rad i filen består av 81 siffror (ett helt pussel alltså). De första nio siffrorna motsvarar första raden, de nästföljande rad två o.s.v. Observera att siffrorna står i en följd utan blanktecken. Din uppgift blir att gå igenom filen med lösningar och skriva ut vilka lösningar som är korrekta. Utskriften skall ske på skärmen. Det är endast radnummret på de korrekta lösningarna som skall skrivas ut. Antag att följande innehåll ligger i filen SUDOKU.TXT (första raden innehåller de siffror som motsvarar figuren ovan): 963174258178325649254689731821437596496852317735961824589713462317246985642598173 123456789123456789123456789123456789123456789123456789123456789123456789123456789 123456789912345678891234567789123456678912345567891234456789123345678912234567891 123456789789123456456789123345678912912345678678912345891234567567891234234567891 Utskriften på skrämen vid programkörning skulle då bli: Följande rader innehåller korrekta lösningar: - rad nummer 1 - rad nummer 4 Att rad 2 inte är korrekt beror på att alla kolumner innehåller flera (i detta fall nio stycken) likadana värden. Att rad 3 inte kommer med beror på att det finns flera likandana värden inom respektive niogrupp (det räcker att en grupp är fel för att det skall vara fel, men i detta fall är det i alla grupper).
2005-08-16.kl.14-19 Följande matematiska funktion är given: FN ( ) 1N, = 0 2N, = 1 = FN ( 1) FN ---------------------, ( 2) N > 1 Uppgift 4 Din uppgift är att skriva ett program som skriver ut en tabell där första kolumnen innehåller värdena på N (som skall vara heltal större än eller lika med noll) och den andra kolumnen värdet av funktionen. Programmet skall innehålla en rekursiv funktion som motsvarar ovanstående matematiska uttryck. Ditt program skall fråga användaren efter det största N-värdet som skall finnas med i tabellen. Vi antar att det maximala värdet användaren vill ge är runt 35. Annars kommer ditt program antagligen att hålla på för lång tid med beräkningar. Alla värden från noll till det inmatade skall vara med i tabellen. Tabellen börjar enligt följande (... betyder att ditt program visar resten): N F(N) ------------ 0 1.0 1 2.0 2...
2005-12-14.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Tomtenissarna har fått ett STORT problem att brottas med. De håller på att bygga en uppdaterad version av tomtens släde. Den gamla har tyvärr blivit för liten. För att de skall veta hur stor släde som behövs just detta år vill de att du skriver ett program som beräknar den totala volymen av alla julklappar som tomten skall dela ut. På en fil som heter JULKLAPPAR.TXT finns alla julklappar lagrade. Varje rad i textfilen innehåller information om en julklapps dimensioner i x-, y- och z-led samt vad det är för julklapp. Alla julklappar är fyrkantiga med bara räta vinklar. Alla dimensioner är givna i heltalsformat. Ett exempel på hur filen JULKLAPPAR.TXT skulle kunna se ut är följande: 12 34 56 Tåg 24 31 52 Bilar 3 9 7 Osthyvel 12 12 12 Rubiks kub 100 10 1 Meterlinjal En programkörning av ditt program skulle då ge resultatet: Den totala volymen av alla julklappar blir 64453 volymenheter Krav: Ditt program skall klara av filer som innehåller godtyckligt många julklappar. Det är dock givet att den totala volymen inte ställer till besvär vad det gäller den interna representationen av heltal i datorn.
2005-12-14.kl.08-13 Uppgift 2 Jultomten passerade Mongoliet på sin resa runt jorden. Där såg han en massa konstiga trianglar. Din uppgift är att rita ut en triangel i den storlek som tomten matar in på skärmen. Programkörning 1: Mata in dimension (N): 1 -- \/ Programkörning 2: Mata in dimension (N): 3 ------ \ -- / \\// \/ Programkörning 3: Mata in dimension (N): 5 ---------- \ ------ / \\ -- // \\\/// \\// \/ Programkörning 4: Mata in dimension (N): 2 ---- \ / \/ Programkörning 5: Mata in dimension (N): 4 -------- \ ---- / \\ // \\// \/ Tips: Alla udda triangelstorlekar innehåller föregående udda triangel och motsvarande gäller för de jämna triangelstorlekarna.
2005-12-14.kl.08-13 Uppgift 3 Givetvis måste jultomten ha reda på alla barn som skall få julklappar. Programmet som behövs för detta är ett program som läser in ett antal namn och lagrar dessa i ett fält. Efter detta skall programmet sortera namnen så att de hamnar i ordning. Alla namn som har samma längd skall ligga tillsamans och de kortaste namnen skall ligga först. Om två namn är lika långa skall det som ligger först i bokstavsordning ligga först. Varje namn skall lagras i en post bestående av en sträng (namnet) och ett heltal som anger längden på namnet. Det är givet att alla namn är maximalt 20 tecken långa. Då tomten nu har lärt sig programmering skriver han givetvis det program som behövs på egen hand. Han har lärt sig Bubble Sort och använder gärna denna. Till sin hjälp har tomten en fil som heter generic_swap.ads och en fil som heter generic_swap.adb. Det som finns i dessa filer skall användas i sorteringen på det sätt som är lämpligt (inte kopieras in i programmet alltså). Tomten inser att det är bra att skriva ett program som hanterar en mindre mängd barn till att börja med för att han skall kunna testa sitt program. Tomten börjar med ett program som klarar exakt 10 barn. Det är dock meningen att programmet skall kunna modifieras (på endast ett ställe) så att det klarar av många fler barn. Krav: Bubble Sort får endast jämföra hela namnposter! Programkörning: Mata in namn nummer 1: Kalle Mata in namn nummer 2: Nisse Mata in namn nummer 3: Nils Mata in namn nummer 4: Bert Mata in namn nummer 5: Berta Mata in namn nummer 6: Bert Mata in namn nummer 7: Karl Mata in namn nummer 8: Eva Mata in namn nummer 9: Eva-Lena Mata in namn nummer 10: Lena De inmatade namnen i sorterad ordning blir Eva Bert Bert Karl Lena Nils Berta Kalle Nisse Eva-Lena Kommentar: Tomtens dator går lika fort som tomtens släde under julnatten.
2005-12-14.kl.08-13 Uppgift 4 Jultomten har blivit skrockfull och lite tankspridd. För att han inte skall råka illa ut, när han skall delar ut julklapparna, har han bett att du skall skriva ett program som tar fram alla datum där det är fredag den 13:e från den förste januari år 2000 och fram till ett datum som tomten själv anger. Programkörning 1: Mata in ett slutdatum: 2005-12-24 Fredag den 13:e infaller på följande datum ========================================== 2000-10-13 2001-04-13 2001-07-13 2002-09-13 2002-12-13 2003-06-13 2004-02-13 2004-08-13 2005-05-13 Programkörning 2: Mata in ett slutdatum: 2009-07-31 Fredag den 13:e infaller på följande datum ========================================== 2000-10-13 2001-04-13 2001-07-13 2002-09-13 2002-12-13 2003-06-13 2004-02-13 2004-08-13 2005-05-13 2006-01-13 2006-10-13 2007-04-13 2007-07-13 2008-06-13 2009-02-13 2009-03-13 Tips: Till din hjälp har du ett givet paket Date_Handling som innehåller en hel del gott att ha. Det är tillåtet (och kanske bra) att införa extra funktionalitet i detta paket. Det är givet att det var en lördag 2000-01-01. Fråga (utanför tentan): Hur tankspridd får tomten egentligen vara? :-)
2005-12-14.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Tomtenissarna har fått ett STORT problem att brottas med. De håller på att bygga en uppdaterad version av tomtens släde. Den gamla har tyvärr blivit för liten. För att de skall veta hur stor släde som behövs just detta år vill de att du skriver ett program som beräknar den totala volymen av alla julklappar som tomten skall dela ut. På en fil som heter JULKLAPPAR_HATTASKAR.TXT finns alla julklappar lagrade. Att filen heter just detta beror på att alla i hela världen just detta år endast skänker varandra hattar (som ligger i cylindriska hattaskar). Varje rad i textfilen innehåller information om en julklapps dimensioner. Dels radien och dels höjden på hattasken. Förutom detta finns också information om vem som skall få hatten på raden. Alla julklappar är som sagt helt cylindriska. Alla dimensioner är givna i flyttalsformat. För att det skall bli fel har nissarna tagit reda på att arean för en cirkel beräknas med formeln A = π r 2 Ett exempel på hur filen JULKLAPPAR_HATTASKAR.TXT skulle kunna se ut är följande: 50 20 Berta 23 180 Paulina 10 30 Nils En programkörning av ditt program skulle då ge resultatet: Den totala volymen blir 465646.91 volymenheter Krav: Ditt program skall klara av filer som innehåller godtyckligt många julklappar. Det är dock givet att den totala volymen inte ställer till besvär vad det gäller den interna representationen av flyttal i datorn. Tips: Ada.Numerics innehåller konstanten Pi.
2005-12-14.kl.14-19 Uppgift 2 Jultomten passerade Egypten på sin resa runt jorden. Där såg han en massa pyramider. Din uppgift är att rita ut en pyramid i den storlek som tomten matar in på skärmen. Programkörning 1: Mata in dimension (N): 1 /\ -- Programkörning 2: Mata in dimension (N): 3 /\ //\\ / -- \ ------ Programkörning 3: Mata in dimension (N): 5 /\ //\\ ///\\\ // -- \\ / ------ \ ---------- Programkörning 4: Mata in dimension (N): 2 /\ / \ ---- Programkörning 5: Mata in dimension (N): 4 /\ //\\ // \\ / ---- \ -------- Tips: Alla udda pyramidstorlekar innehåller föregående udda pyramid och motsvarande gäller för de jämna pyramidstorlekarna.
2005-12-14.kl.14-19 Uppgift 3 Givetvis måste jultomten ha reda på alla barn som skall få julklappar. Programmet som behövs för detta är ett program som läser in ett antal namn och lagrar dessa i ett fält. Efter detta skall programmet sortera namnen så att de hamnar i bokstavsordning. Om två namn är olika långa där det kortaste namnet återfinns först i det längre anses det korta namnet vara före i bokstavsordningen. Varje namn skall lagras i en post bestående av en sträng (namnet) och ett heltal som anger längden på namnet. Det är givet att alla namn är maximalt 20 tecken långa. Då tomten nu har lärt sig programmering skriver han givetvis det program som behövs på egen hand. Han har lärt sig Bubble Sort och använder gärna denna. Till sin hjälp har tomten en fil som heter generic_swap.ads och en fil som heter generic_swap.adb. Det som finns i dessa filer skall användas i sorteringen på det sätt som är lämpligt (inte kopieras in i programmet alltså). Tomten inser att det är bra att skriva ett program som hanterar en mindre mängd barn till att börja med för att han skall kunna testa sitt program. Tomten börjar med ett program som klarar exakt 10 barn. Det är dock meningen att programmet skall kunna modifieras (på endast ett ställe) så att det klarar av många fler barn. Krav: Bubble Sort får endast jämföra hela namnposter! Programkörning: Mata in namn nummer 1: Kalle Mata in namn nummer 2: Nisse Mata in namn nummer 3: Nils Mata in namn nummer 4: Bert Mata in namn nummer 5: Berta Mata in namn nummer 6: Bert Mata in namn nummer 7: Karl Mata in namn nummer 8: Eva Mata in namn nummer 9: Eva-Lena Mata in namn nummer 10: Lena De inmatade namnen i sorterad ordning blir Bert Bert Berta Eva Eva-Lena Kalle Karl Lena Nils Nisse Kommentar: Tomtens dator går lika fort som tomtens släde under julnatten.
2005-12-14.kl.14-19 Uppgift 4 Jultomten är bekymrad över att tiden går så fort. Antalet dagar till julafton minskar allt fortare ju närmre det blir. Tomten vill därför att du skriver ett program där han kan mata in två datum och få fram hur många dagar det är mellan dessa. Programkörning 1: Mata in ett startdatum: 2005-12-14 Mata in ett slutdatum : 2005-12-24 Det är 10 dagar mellan 2005-12-14 och 2005-12-24. Programkörning 2: Mata in ett startdatum: 1900-01-01 Mata in ett slutdatum : 2000-01-01 Det är 36524 dagar mellan 1900-01-01 och 2000-01-01. Programkörning 3: Mata in ett startdatum: 2005-12-14 Mata in ett slutdatum : 2005-12-14 Det är 0 dagar mellan 2005-12-14 och 2005-12-14. Tips: Till din hjälp har du ett givet paket Date_Handling som innehåller en hel del gott att ha. Krav: Det är INTE tillåtet att införa extra funktionalitet i detta paket.