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