2D1310 Programmeringsteknik Tentamen (1p) lördag 29 april 2000 kl 14-17 Hjälpmedel: En Pascalbok. För betyget godkänd krävs att a- eller b-delen av varje fråga (uppgift 1-6) är rätt besvarad. Ett mindre fel som inte har med frågan att göra kan accepteras. Vi reserverar oss för eventuella lättnader av dessa krav. Skriv linje och årskurs (t ex M-92) på omslaget. Skriv svaren direkt i ramarna i detta häfte. Uppgifterna är inte ordnade i svårighetsordning. String motsvaras av PACKED ARRAY OF Char i standardpascal. Lycka till! 1 Parametrar a) Vad blir utskriften från följande program: PROGRAM EttA; VAR x, y, z: Integer; PROCEDURE Proc(a : Integer; VAR b : Integer); VAR c : Integer; BEGIN c := a; a := b; b := c; Writeln(a, b, c); (* PROCEDURE Proc *) BEGIN (* Huvudprogram *) x := 1; y := 38; z := 472; Proc(x,y); Writeln(x, y, z); END. Utskrift i proceduren Utskrift i huvudprogrammet b) Följande typer, funktioner och procedurer finns definierade: TYPE vektortyp = ARRAY[1..365] OF Real; (* Utomhustemperatur för varje dag *) PROCEDURE LasIn(fil:Text; temperaturvektor:vektortyp); (* Läser in från fil till vektorn temperaturvektor *) FUNCTION MaxTemp(temp:vektortyp) : Integer; (* Returnerar den dag på året då temperaturen var högst *) Eventuella referensdefinitioner (VAR) av parametrarna är utelämnade. Ange för varje parameter ifall den MÅSTE vara referensparameter eller KAN vara värdeparamter. Du måste motivera valet. Parameter fil:text temperaturvektor:vektortyp temp:vektortyp Måste vara referens (j/n) Motivering
2 Pekare Följande deklarationer gäller för a- och b-uppgiften TYPE pekare = ^post; post = RECORD tkn : Char; next : pekare; VAR p, q : pekare; a) Antag att vi har följande situation. Visa med steg-för-steg figurer vad som blir effekten av satserna. Om spökposter uppstår skall dessa markeras. s p q V Å D NIL s^.tkn:= R ; p^.next:=s; s^.next:=q; q^.next:=nil; Efter s^.tkn:= R ; Efter p^.next:=s; Efter s^.next:=q; Efter q^.next:=nil;
p A B NIL b) Vad blir effekten om man utgående från situationen ovan gör: Dispose(p); New(p); p^.next:=p; Efter Dispose(p); Efter New(p); Efter p^.next:=p;
3 Funktions/proceduranrop Följande deklarationer av typer, variabler, procedurer och funktioner är redan gjorda och inga andra får användas för att lösa uppgifterna. VAR effekt:integer vikt:integer; minuter:real; mattyp:string; FUNCTION Tid(x:Integer; e:integer):real; (* Ger uppvärmningstid i minuter för x gram mat då mikrovågsugnens effekt är e. *) PROCEDURE Instruktioner(mattyp:String); (* Skriver ut instruktioner för tillagning av viss mattyp, t ex nudlar*) a) Kryssa för och ange vilka av följande satser som är riktiga respektive felaktiga, samt för de felaktiga vad som är fel! Sats Rätt Fel Orsak Instruktioner( rödspätta ); vikt:=instruktioner( broccoli ); Writeln(Tid(vikt,750)); minuter:=tid(x,e); b) Skriv kod som först skriver ut instruktioner för tillagning av ägg och sedan beräknar och skriver ut uppvärmningstiden för 70 gram mat då mikrovågsugnens effekt är 650.. 4 Filer och poster TYPE posttyp = RECORD namn : String; pris : Integer; VAR spel1, spel2, spel3 : posttyp; fil : Text; nintendo.txt (exempel) Pokemon 375 N64 Ridge Racer 589 Motoracer 2 199 Textfilen nintendo.txt innehåller namn och pris för några nintendospel. Givet informationen ovan (du får inte göra några ytterligare deklarationer eller antaganden), skriv satser som:
a) Läser in namn och pris för två spel (spel1 och spel2) från textfilen nintendo.txt.. b) Skriver ut namnet på det billigaste av spelen spel1 och spel2. 5 Vektorer och matriser Följande deklarationer är redan gjorda och inga andra får användas för att lösa talet. CONST dim = 20; {matrisdimension} TYPE vektortyp = ARRAY [1..dim] OF Real; matristyp = ARRAY [1..dim,1..dim] OF Real; VAR v : vektortyp; m : matristyp; i, j, rad, kol : Integer; sum : Real; a) Skriv kod som skriver ut vektorn v baklänges (sista elementet först). b) Skriv kod som beräknar summan av alla element i matrisen m. Du kan förutsätta att hela matrisen är fylld med värden.
6 Datastrukturer a) Följande deklarationer är redan gjorda och inga andra får användas för att lösa talet. TYPE posttyp = RECORD namn : String; (* Telefonens namn *) rabatt : ARRAY[1..10] OF Real; (* rabatt, beroende på abonnemang *) pris : Real; VAR telefon : posttyp; i : Integer; max : Real; Skriv kod som i posten telefon letar rätt på den största rabatten (största värdet i fältet rabatt) och drar av den från priset (fältet pris). b) Följande deklarationer är redan gjorda och inga andra får användas för att lösa talet. TYPE posttyp = RECORD namn : String; (* Telefonens namn *) standbytid : Integer; (* Standbytid i timmar *) samtalstid : Integer; (* samtalstid i timmar *) vektortyp = ARRAY[1..20] OF posttyp; VAR mobiltelefon : vektortyp; i : Integer; Skriv kod som skriver ut namnen på de telefoner som finns i vektorn mobiltelefon som har en samtalstid över 4 timmar.