26.07.2013 Views

LØSNINGSFORSLAG TIL - NTNU

LØSNINGSFORSLAG TIL - NTNU

LØSNINGSFORSLAG TIL - NTNU

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>LØSNINGSFORSLAG</strong> <strong>TIL</strong> EKSAMENSOPPGAVE I<br />

SIF8001 Informasjonsteknologi, grunnkurs<br />

SIF8007 Informasjonsteknologi, grunnkurs<br />

09.12.2002<br />

Oppgave 1 og oppgave 2<br />

Oppgave 1 Oppgave 2<br />

a b c d a b c d<br />

1 X 1 X<br />

2 X 2 X<br />

3 X 3 X<br />

4 X 4 X<br />

5 X 5 X<br />

6 X 6 X<br />

7 X 7 X<br />

8 X X X X 8 X<br />

9 X 9 X<br />

10 X 10 X<br />

11 X X X X<br />

12 X<br />

13 X<br />

14 X<br />

15 X<br />

16 X<br />

17 X<br />

18 X<br />

19 X<br />

20 X<br />

21 X<br />

22 X<br />

23 X<br />

24 X<br />

25 X<br />

Side 1 av 4<br />

Forklaringer: 1c) legg merke til at internlink-klassen benyttes på to -merkelapper nede i koden som er<br />

uthevet og uten strek under, 2b) tilbakemeld-iden benyttes på tilbakemeldingstabellen i koden. En id skrives med<br />

#-tegn, 3d) her må man vite at 18pt er en stor skrift og 100pt er enormt stort, 4a) det er merknad-klassen som har<br />

passende utseende (kursiv), 5c) For å få til et Textarea med 4 rader og 30 kolonner slik bildet viser benyttes<br />

-merkelappen, 6d) 8 bit gir mulighet for verdier fra binære 00000000 (titallet 0) til 11111111 (titallet<br />

255 – dette regnes ut med å ta 2^7+2^6+…+2^1+2^0), dermed 256 forskjellige verdier, 7a) denne deler hele<br />

tiden dataene det søkes i på to og går i ”riktig” retning (krever en sortert tabell). Avsluttes dermed et søk i f.eks.<br />

128 verdier etter å ha sjekket maksimalt 7 tall i datamengden - log(128) = 7), 8c) en funksjon gjør at<br />

programmet må ”hoppe” mer rundt i minnet for å utføres, dette medfører en del ”hoppkall” som tar litt tid, i<br />

tillegg må programmets variabler tas vare på mens funksjonen utføres, men da det i Matlabheftet står nettopp<br />

det motsatte (funksjoner går raskere) går denne oppgaven ut. Hvorfor og akkurat hva som stemmer for<br />

Matlab forsøker vi å finne ut, men for programmer generelt vil dette gjelde slik som beskrevet i c), 9b), 10d), IPregisteret<br />

(lite minneområde i prosessoren hvor det ligger en tallverdi) holder hele tiden orden på hvor neste<br />

instruksjon ligger for programmet vårt. 11c) . a og b er riktig for primærminne, men ikke for RAM generelt, og<br />

RAM og primærminne er ikke det samme, selv om det er synonymt i dagligtalen. Alt primærminne er RAM,<br />

men ikke omvendt, men oppgaven var for uklart formulert og derfor får alle riktig på oppgaven, 12c)<br />

Svitsjen har mange porter, men filtrerer data som sendes igjennom slik at bare ”riktige” data sendes til riktig<br />

utgang (der mottakeren befinner seg), 13b) TCP-protokollen sørger for å holde ”forbindelsen” mellom de to<br />

endene som kommuniserer (Transmission Control Protocol) og ligger dermed på ende-til-ende-laget, 14b) for å<br />

Side 2 av 4<br />

oppnå en en-til-mange-relasjon må flere rader fra mange-tabellen kunne knyttes mot en rad i en-tabellen. Dette<br />

gjøres ved å referere til denne ene radens primærnøkkelverdi i en-tabellen fra et fremmednøkkelfelt i hver av<br />

radene i mange-tabellen. 15c) En svak entitet må nødvendigvis ha en identifiserende eier som den kan ”dele”<br />

primærnøkkelfeltet med slik at denne er, sammen med entitetens egen primærnøkkel, med på å identifisere<br />

entiteten unikt. Den kan også bare ha en eier. 16d) Redundans (dobbeltlagring av data) gjør at databasen blir<br />

vanskeligere å vedlikeholde, men ofte lettere å hente data ut av (fordi man kan forenkle spørringer slik at de ikke<br />

inkluderer så mange tabeller), 17b) stormaskiner er kraftige maskiner som kan behandle store datamengder og<br />

håndtere mange brukere og benyttes gjerne i serversammenhenger også på <strong>NTNU</strong>, 18a), 11101 = 2^4 + 2^3 +<br />

2^2 + 2^0 = 16+8+4+1=29, greieste for små tall her er å dele opp tallet og innse at 13 = 8 + 4 + 1 = 2^3 + 2^2 +<br />

2^0 = 1101, 20b) sekundærminne karakteriseres ved at det er mye tregere og har mye større kapasitet enn<br />

primærminne 21b) Windows var ikke først, op.sys. kan ha flere grensesnitt samtidig og tekstlige kom først,<br />

op.sys. skal gjøre det nettopp lettere å benytte datamaskinen for brukerne og programer, 22c) RAM er<br />

primærminne og ikke sekundær, 23a) ADSL er nyere teknologi enn ISDN og for å få opp ytelsen der den<br />

behøves har man laget en asymmetrisk forbindelse der ytelsen er raskest til brukeren (man laster typisk mer ned<br />

enn opp ved hjemmebruk), 24d) slik er det bare, 25a) klienten er oss som bruker nettet og våre datamaskiner, vi<br />

spør tjenere i nettverket om ”tjenester” ved å sende ut forespørsler.<br />

Oppg2 1-5: Denne funksjonen går igjennom tabellen baklengs fra nest siste celle fram til første celle. Hver<br />

celleverdi settes lik tidligere celleverdi + cellen til høyre, dermed hvis [3, 6, 3, 9] gis inn returneres<br />

[21, 18, 12, 9], der 12 er summen av 3+9, 18 summen av 6+12 og 21 summen av 3+18.<br />

Oppg2 6-9: Hele tabellen gås igjennom og variabelen tall økes hvis tallet på tabellplass i er delelig med tallet i,<br />

dvs. for tabellen [3, 6, 3, 9] blir<br />

- 3 på tabellplass 1 er delelig med 1 tall økes<br />

- 6 på tabellplass 2 er delelig med 2 tall økes<br />

- 3 på tabellplass 3 er delelig med 3 tall økes<br />

- mens 9 på tabellplass 4 er ikke delelig med 4<br />

Oppg2 10: Dette er en såkalt rekursiv funksjon (som kaller seg selv), men dette var ikke nødvendig å vite for å<br />

løse oppgaven. Her kalles beregning med tallet 4. Dette funksjonskallet vil returnere følgende:<br />

beregning(4) = 4*beregning(3) = 4*3*beregning(2) = 4*3*2*beregning(1) = 4*3*2*1*beregning(0) = 24<br />

(tilfeldigvis også fakultetet til 4:) fordi funksjonskallet beregning(0) returnerer uansett verdien 1.<br />

Oppgave 3 - ER-modellering (20 %)<br />

BLAD<br />

nr i året<br />

årgang<br />

utgivelsesdato<br />

antall sider<br />

forekommer i<br />

sideNr start<br />

sideNr slutt<br />

Hver episode<br />

hører bare<br />

hjemme i en<br />

historie<br />

En episode kan<br />

forekomme i<br />

mange blader og<br />

må være utgitt<br />

(for at samleren<br />

skal vite om<br />

Evt. tittel som primærnøkkel da<br />

denne typisk er unikt<br />

HISTORIE<br />

historieNr<br />

tittel<br />

sammendrag<br />

består av<br />

EPISODE<br />

episodeNr.<br />

Hvert blad må minst ha en<br />

episode, men kan ha flere<br />

Figurer kan opptre i<br />

en til mange historier<br />

(for at samleren skal<br />

vite om dem)<br />

opptrer i<br />

FIGUR<br />

figurNr<br />

navn<br />

art<br />

Hver historie må<br />

minst bestå av en<br />

episode, men kan<br />

ha mange<br />

Hver historie må minst<br />

ha en figur, men kan<br />

ha mange<br />

dem) Evt. navn som<br />

primærnøkkel<br />

da denne typisk<br />

er unikt<br />

Som alltid vil<br />

det kunne<br />

forekomme flere<br />

alternative<br />

løsninger på<br />

denne typen<br />

oppgave. De<br />

forklarende<br />

pilene/tekstene<br />

er ikke<br />

nødvendig for å<br />

få oppgaven<br />

godkjent


Oppgave 4 – Matlab (35 %)<br />

a) Forslag til løsning. Her er ikke kommentarene og testprogrammet nederst nødvendige; bare metoden.<br />

function svar = godkjent(tabell)<br />

%sum6forste skal inneholde hvor mange av de 6 første som er godkjent<br />

sum6forste = 0;<br />

for i= 1:6<br />

%legger til celleverdien til hver av de 6 første cellene<br />

%i tabellen (da disse er 1 eller 0 - og 1 hvis godkjent)<br />

sum6forste = sum6forste + tabell(i);<br />

end<br />

%sum6forste skal inneholde hvor mange av de 6 siste som er godkjent<br />

sum6siste = 0;<br />

for i= 7:12<br />

sum6siste = sum6siste + tabell(i);<br />

end<br />

//svaret 1 (sann) skal returneres hvis:<br />

// 5 godkjent blant de 6 første øvingene &&<br />

// 4 godkjent blant de 6 siste &&<br />

// enten øving 11 || øving 12 er godkjent<br />

svar = sum6forste>=5 & sum6siste>=4 & (tabell(11) | tabell(12));<br />

return<br />

Side 3 av 4<br />

b) Tilsvarende her. Bare koden er nødvendig for godkjent, ikke kommentarer. Her var ikke tanken å gjøre det så<br />

veldig komplisert, men rundturen på eksamen viste at mange forskjellige brukbare løsninger kan vurderes som<br />

godkjent. Noe som bør vurderes er om det som presenteres er et rimelig ”kjørbart” matlab-program. Tre forslag<br />

til godkjent løsning er gitt under:<br />

Enkleste løsning:<br />

% Oppgaven sa:<br />

% - tre tabeller skulle finnes på<br />

% - tabellene skulle skrives ut<br />

% - funksjonen godkjent skulle kalles<br />

% - resultatet av funksjonskalles skulle presenteres<br />

tab1 = [1 1 0 1 1 1 1 1 1 0 0 1]<br />

godkjent(tab1)<br />

tab2 = [1 1 0 0 1 1 1 1 1 0 0 1]<br />

godkjent(tab2)<br />

tab3 = [1 1 0 1 1 1 1 1 1 0 1 1]<br />

godkjent(tab3)<br />

Ved å ta inn tabellene fra brukeren vha. input():<br />

tab1 = input('Skriv inn tabell 1: ');<br />

godkjent(tab1)<br />

tab2 = input('Skriv inn tabell 2: ');<br />

godkjent(tab2)<br />

tab2 = input('Skriv inn tabell 3: ');<br />

godkjent(tab2)<br />

Litt mer omstendelig:<br />

tab1 = [1 1 0 1 1 1 1 1 1 0 0 1]<br />

if(godkjent(tab1))<br />

disp('tab1 var godkjent')<br />

else<br />

disp('tab1 var ikke godkjent')<br />

end<br />

tab2 = [1 1 0 0 1 1 1 1 1 0 0 1]<br />

if(godkjent(tab2))<br />

disp('tab2 var godkjent')<br />

else<br />

disp('tab2 var ikke godkjent')<br />

end<br />

tab3 = [1 1 0 1 1 1 1 1 1 0 1 1]<br />

if(godkjent(tab3))<br />

disp('tab3 var godkjent')<br />

else<br />

disp('tab3 var ikke godkjent')<br />

end<br />

Side 4 av 4<br />

c) Utfordringen her var vel å beherske programmering nok til å kunne benytte den på en litt vanskelig (?)<br />

matematisk beregning. Her bør en løkkestruktur benyttes for å beregne de enkelte y-verdier da de er såpass<br />

mange. Det var ingen krav om å enkelt kunne endre hvilken funksjon integralet beregner; heller ikke å enkelt<br />

kunne endre x-intervallet eller n-verdien, men man blir selvsagt ikke trukket hvis noe slikt er tatt hensyn til i<br />

programmet.<br />

Det vi ønsker å skrive program for å beregne her er følgende:<br />

2<br />

0,<br />

1<br />

∫ sin( x ) ≈T10<br />

= sin( 1)<br />

+ 2 ⋅ sin( 1.<br />

1)<br />

+ 2 ⋅ sin( 1.<br />

2)<br />

+ ... + 2 ⋅ sin( 1.<br />

8)<br />

+ 2 ⋅ sin( 1.<br />

9)<br />

+ sin( 2)<br />

1<br />

2<br />

hvilket i programmet mer beregnes i følgende rekkefølge (som jo gir samme svar):<br />

⎛ sin( 1)<br />

sin( 2)<br />

⎞<br />

T 10 = ⎜ + sin( 1.<br />

1)<br />

+ sin( 1.<br />

2)<br />

+ ... + sin( 1.<br />

8)<br />

+ sin( 1.<br />

9)<br />

+ ⎟ ⋅ 0,<br />

1<br />

⎝ 2<br />

2 ⎠<br />

( )<br />

Forslag til program:<br />

n = 10;<br />

xstart = 1;<br />

xslutt = 2;<br />

deltaX = (xslutt-xstart)/n; %kan settes til 0.1 direkte<br />

%først legges y0-verdien (i startpunktet xstart) til integralet<br />

integral = sin(xstart)/2;<br />

%for alle y-verdier fra y1 til yn-1 gjør følgende<br />

for i = xstart+deltaX : deltaX : xslutt-deltaX<br />

%legg til sinus til i-verdien<br />

integral = integral + sin(i);<br />

end<br />

%til slutt legges yn-verdien (i sluttpunktet xslutt) til<br />

integral = integral + sin(xslutt)/2;<br />

%ganger med deltaX fordi formelen sier så:)<br />

integral = integral*deltaX;<br />

disp(['Numerisk beregnet integral for sinus(x) mellom 1 og 2 med n=10 er '<br />

num2str(integral)])

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!