LØSNINGSFORSLAG TIL - NTNU
LØSNINGSFORSLAG TIL - NTNU
LØSNINGSFORSLAG TIL - NTNU
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)])