Datalogi, grundkurs 1
Tentamen
19:e maj 2001
Hjälpmedel:
Några fakta om Standard Pascal,
Revised5 Report on the Algorithmic Language Scheme,
Användarhandledning för Unix på Nada.
Användarhandledning för Pascal på Nada.
Tänk på:
Skriv högst en uppgift på varje blad.
Använd endast framsidan på varje blad.
Uppgifterna kommer inte i svårighetsordning.
Skriv tydligt, motivera svaren – obegriplig eller oläsbar
lösning ger noll poäng.
Maximal poäng finns angiven inom parentes vid varje uppgift.
Totalt kan tentamen ge 42 poäng + max 8 poäng för de
laborationer som redovisats senast fastställt datum.
25 poäng på tentamen inklusive ”godispoäng” för laborationer
ger säkert godkänt.
Lycka till,
Carina
1. Givet följande deklarationer samt funktioner i Standard Pascal:
TYPE elementPointer = ^element;
element
= RECORD
index : INTEGER;
next : elementPointer
END;
list
= RECORD
first : elementPointer
END;
FUNCTION count(VAR lista : list) : INTEGER;
FUNCTION inner(VAR el : elementPointer) : INTEGER;
BEGIN
inner:=0;
WHILE el<> NIL DO BEGIN
el:=el^.next;
inner:=inner+1
END
END;
BEGIN
count:=inner(lista.first)
END;
a. (4p) Tyvärr är det en del fel i koden. Hitta dem, korrigera
koden och förklara noga varför det blir fel! Efter att koden är
rättad ska funktionen returnera antalet element i listan.
b. (4p) Skriv en svansrekursiv procedur i Scheme som räknar
antalet element i en lista.
c. (2p) Uppstår samma problem för den svansrekursiva
proceduren i Scheme som i ovan givna funktion?
Förklara och motivera ditt svar noga!!!
2.
a. (2p) Varför är det bra att dokumentera?
Hur kan man gå tillväga, vilka punkter är viktiga?
b. (2p) Vilka är likheterna mellan stack och kö?
Vilka är skillnaderna mellan stack och kö?
c. (2p) Beskriv en av sorteringsmetoderna som ingår i kursen.
1
3. (8p)
Hemlis-Arne behöver hjälp med att kryptera en textfil.
I textfilen, hemlis ska endast bokstäverna A, B, ... , Y, Z krypteras och
detta ska ske genom att varje bokstav “flyttas fram” två steg d.v.s.
A → C, B → D, C → E, ..., X → Z, Y → A, Z → B.
Observera att övriga tecken INTE ska krypteras.
Gör ett program i Pascal så att filen hemlis kommer att innehålla
krypterad text enligt dessa instruktioner.
4. Djurlivet på Holmarna ska inventeras (=räknas). Inventeringslistan
har man tänkt göra på följande sätt:
djuren delas in i de fem grupperna: grodor, insekter, små fåglar, stora
fåglar och övrigt. Varje grupp ska sedan kunna delas upp i olika
sorter. Varje sort ska innehålla information om sortens namn samt
antalet djur av sorten. Observera att endast sorter som man funnit på
Holmarna ska finnas med och att de endast kan förekomma en gång.
Till exempel så har man funnit på en av Holmarna: 1003 trollsländor,
20 340 flugor, 2 gråsparvar, 3 svanar, 1 örn, 15 kråkor, 1 hund och 7
katter.
Ur gruppen grodor har inte ett djur hittats alltså finns inga sorter i
denna grupp. I gruppen insekter finns däremot 2 sorter; trollsländor
och flugor. I gruppen små fåglar finns en sort; gråsparv. I gruppen
stora fåglar finns 3 sorter; svan, örn och kråka. I gruppen övrigt finns
2 sorter; hund och katt.
a. (2p) Föreslå en lämplig typdefinition i Pascal för detta! Tänk
igenom noga och motivera ditt val av datastruktur väl.
b. (6p) Gör en funktion/procedur i Pascal som sorterar ut de
sorter vars antal < 10 ur en godtycklig grupp och lägger dessa i
en ny lista.
c. (3p) Skriv i Scheme de selektorer/predikat/konstruktorer som
behövs för denna struktur och använd dem sedan i nästa uppgift.
d. (7p) Skriv proceduren getInfo i Scheme. getInfo tar två
argument, namn och inventeringslista. namn är namnet på den
eftersökta sorten och inventeringslista är inventeringslistan.
getInfo returnerar en lista, om den eftersökta sorten finns i
inventeringslistan består listan av namnet på gruppen samt all
data som tillhör sorten annars är den tom.
För exempel se nästa sida.
2
Exempel:
guile> (define inventeringslista
’((insekt (trollsländor 1003) (fluga 20340))
(liten (gråsparv 2))
(stor (svan 3) (örn 1) (kråka 15))
(resten (hund 1) (katt 7))))
guile> (getInfo ’kråka inventeringslista)
(stor (kråka 15))
guile> (getInfo ’skata inventeringslista)
()
3