2008-03-14.kl.14-19

2008-03-14.kl.14-19
Uppgift 1 (”Betyg 3 uppgift”)
Du skall skriva ett program som läser igenom en textfil som heter DATA.XML och skriver ut
på skärmen hur många ”taggar” det finns inuti. Vi räknar inte de taggar som är rena
”avslutningstaggar”.
De taggar som kan förekomma är:
• Inledningstag: <xxx>
• Avslutningstag: </xxx>
• Inledning och avslutning i samma tag: <xxx/>
Ett exempel på indatafil skulle kunna vara:
<aaa> .... <bbb> ... </bbb> ...
... <ccc> ... </ccc> ... <ddd/>
... </aaa> <eee/>
Resultatet på skärmen skulle i detta fall bli:
Det finns 5 taggar i filen.
Det finns en given textfil som heter just DATA.XML att kopiera.
Det är givet att filen består av en korrekt datamängd. D.v.s. det fattas inga avslutningstaggar
och det finns inga taggar som ligger i fel ordning.
Det är också givet att texten i övrigt inte innehåller några ’/’, ’<’ eller ’>’.
2008-03-14.kl.14-19
Uppgift 2
I Ada har vi lite problem med hantering av riktigt stora heltal. Datatypen Integer räcker liksom
inte till. Detta i kombination med att man ofta vill hantera andra talbaser än det decimala gör
att vi är ute efter ett paket som klarar av att addera binära tal.
Din uppgift är att skapa paketet Big_Binary_Numbers och där skapa operatorn ”+” som
adderar två binära tal. Det är givet att din operator skall ta emot två strängar (som inte är
begränsade i längd) och addera ihop innehållet och returnera en ny sträng med resultatet.
Strängarna innehåller endast ett antal tecken ’0’ och ’1’. Inga inledande nollor får finnas med
(förutom för talet noll som givetvis representeras som ”0”).
Det är givet att det endat är positiva binära heltal som skall adderas.
Att addera binära tal är inget konstigare än att addera två vanliga tal. Man får tänka på att det
blir en minnessiffra till nästa position om man adderar minst två ettor. OBS! Tänk på att
minnessiffran räknas med i additionen.
Körexempel 1:
Mata in två binära tal (ett per rad):
1001010001010101010100100101010100100101001
10010101001010100101010001010
Resultatet av additionen blir:
1001010001010111101001101111111001110110011
Körexempel 2:
Mata in två binära tal (ett per rad):
101
111
Resultatet av additionen blir:
1100
Körexempel 3:
Mata in två binära tal (ett per rad):
1
11111111111
Resultatet av additionen blir:
100000000000
Körexempel 4:
Mata in två binära tal (ett per rad):
0
0
Resultatet av additionen blir:
0
2008-03-14.kl.14-19
Uppgift 3
Du skall komplettera paketet Data_Structure_Handling som redan är påbörjat. Din uppgift är
att se till att proceduren Insert fungerar enligt nedan.
Det är givet att varje nod har ett tecken som data och att den kan kopplas mot två andra noder.
Detta leder till att det kan bli cirkulariteter i datastrukturen, men det är alltid givet att man inte
behöver leta sig vidare i strukturen om ”nästa” nod är en nod med en tidigare bokstav (i
alfabetet).
Indata till programmet kommer att vara en sekvens av rader med beskrivningar av vilka noder
som skall kopplas ihop i datastrukturen. Indatasekvensen kommer alltid att vara ordnad så att
den kan ses som sorterad i bokstavsordning och man kan aldrig koppla sig mot en tidigare nod
om inte existerar. Indatasekvensen avslutas med en enkel nolla (tecknet ’0’).
Exempel på indatasekvens:
a-b
b-c
c-b
c-d
d-a
d-e
e-c
0
Datastrukturen efter detta:
Data
b
e
a
d
c
Du har i paketet en utskriftsprocedur given som återskapar indatasekvensen om du fått till
datastrukturen rätt.
2008-03-14.kl.14-19
Uppgift 4
Du skall skriva ut det diagram man får för funktionen ”y = roten ur x”. Det som är lite udda är
att användaren inte matar in värden på x utan istället matar in min- och maxvärde på y.
Steglängden skall alltid vara 1. Se i exemplen nedan hur utskrifterna skall se ut för olika indata.
Körexempel 1:
Mata in startvärde på y: 1
Mata in slutvärde på y : 5
5
*
4
*
*
3
*
*
*
2
*
*
*
*
1 * *
*
*
*
01234567890123456789012345
Körexempel 2:
Mata in startvärde på y: 0
Mata in slutvärde på y : 7
7
*
6
*
*
5
*
*
*
4
*
*
*
*
3
*
*
*
*
*
2
*
*
*
*
*
*
1 * *
*
*
*
*
*
0** *
*
*
*
*
*
01234567890123456789012345678901234567890123456789
Körexempel 3:
Mata in startvärde på y: 3
Mata in slutvärde på y : 7
7
*
6
*
*
5
*
*
*
4
*
*
*
*
3
*
*
*
*
*
01234567890123456789012345678901234567890123456789
Tips: Den ordinarie funktionen för roten ur heter ”Sqrt” och ligger i paketet
Ada.Numerics.Elementary_Functions.