TDT4110 IT Grunnkurs Høst 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Python Auditorieøving 2 Vennligst fyll ut følgende informasjon i BLOKKBOKSTAVER Navn: Brukernavn: Studieprogramkode: Godkjent av: Side 1 av 11
1 Teori 1. Hvor mange bit består en IPv6-adresse av? a) 32 b) 64 c) 128 d) 256 2. Hva er 171 dec i det heksadesimale tallsystemet? a) 67 hex b) AB hex c) AA hex d) 9F hex 3. Hvem har det overordnede ansvaret for tildelingen av domenenavn på toppnivå? a) Hver enkelt nasjon b) Internettleverandører c) ICANN d) The American Network Association 4. Hva er hensikten med paritetsbit i digitale signaler? a) Gjøre meldingen raskere å overføre b) Kryptere signaler så overføringen av data blir sikrere c) Bidra til å detekere feil i digitale signaler d) Fortelle hvor meldingen skal sendes 5. Hvorfor kan et WiFi-nettverk påvirke en Bluetooth-forbindelse? a) WiFi-nettverk har så sterkt signal b) Ved samtidig bruk av WiFi og Bluetooth dannes et fenomen som kalles "stående bølger" c) Bluetooth og WiFi bruker samme metode for koding d) Bluetooth og WiFi bruker samme frekvensbånd 6. Hva står forkortelsen VPN for? a) Virtual Protocol Node b) Virtual Privacy Node c) Virtual Private Network d) Volatile Performance Network Deloppgave 1 2 3 4 5 6 Svar Side 2 av 11
2 Kodeforståelse a) Hvilke verdier har a og b når vi har utført setningen: a, b = secret1 (11,3) Forklar med en setning hva funksjonen i Kodesnutt 1 gjør. Kodesnutt 1 def secret1 (a, b): r = 0 while a >= b: a = a - b r = r + 1 s = a return r, s a = b = Forklaring: b) Hva blir verdien til answer etter at Kodesnutt 2 er utført? Forklar med en setning hva funksjonen gjør. Kodesnutt 2 def secret2 (m): r = len (m) c = len (m[0]) if (r==c): for i in range (0, r- 1): for j in range ( i+1, c): temp = m[i][j] m[i][j] = m[j][i] m[j][i] = temp return m else : return -1 m = [[1,2,3],[4,5,6],[7,8,9]] answer = secret2 ( m) answer = Forklaring: Side 3 av 11
c) Hva blir skrevet ut til skjerm når du kjører koden som vist under? Kodesnutt 3 def mystery (x, y): z = for i in range (0, len (x)): if (i%2==1): z+=x[ i] else : z+=y[ i] return z A = SUNEAILSUN B = JALTNCSAES D = mystery (A,B) print (D) Side 4 av 11
3 Lister og matriser a) Lag en funksjon listmaker(n) som tar inn et heltall n, og returnerer en liste av lengde n, der hvert element er 0. >>> print ( listmaker (3)) [0,0,0] b) Lag en funksjon boardmaker(n) som tar inn et heltall n, og returnerer en n*n-matrise med 0-er. Her er det viktig at elementene er uavhengige av hverandre med hensyn på fremtidige endringer i brettet. Med andre ord vil ikke return [[0]*n]*n være en tilfredsstillende løsning. >>> print ( boardmaker (3)) [[0, 0, 0], [0, 0, 0], [0, 0, 0]] c) Lag en funksjon printboard(board) som tar inn en matrise board, og skriver ut matrisen på en fin måte (som vist nedenfor). Denne funksjonen skal ikke returnere noe. >>> printboard ([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) [0, 0, 0] [0, 0, 0] [0, 0, 0] Side 5 av 11
d) Lag en funksjon fillboard(board) som tar inn en matrise board, og fyller matrisen slik at annethvert element er 0, og annethvert element er X (sjakkmønstret). Deretter returneres matrisen. Du kan anta at matrisen du får inn som parameter er en n*n-matrise der hvert element er 0. Eksepmler på kjøring: >>> print ( fillboard ([[0, 0, 0], [0, 0, 0], [0, 0, 0]])) [0, X, 0] [X, 0, X] [0, X, 0] Side 6 av 11
e) Nå må du lese nøye og holde tungen rett i munn. Lag en funksjon validdirections(board), som tar inn en matrise, og returnerer en liste. Matrisen du får inn er på formen n*m, og inneholder én (og bare én) stjerne. Resten av matrisen er vilkårlige karakterer eller tall. Listen som returneres, skal inneholde hvilke retninger stjernen kan flyttes ( N, S, E, W ). Et flytt for stjernen er ikke gyldig dersom det går utenfor matrisen. >>> print ( validdirections ([1, s, 2, 4], [6, 0, b, 2], [ *, 5, 5, 5])) [ N, E ] >>> print ( validdirections ([1, x, 2, 4], [6, a, *, 2], [8, 5, 5, 5])) [ N, S, E, W ] >>> print ( validdirections ([1, 0, 2, * ], [6, 0, 0, 2], [8, 5, f, 5])) [ S, W ] Side 7 av 11
4 Strenger a) Lag en funksjon checkprefix(...) som tar inn et prefiks (streng) og en ordliste (liste med strenger). Funksjonen skal returnere en liste med alle ord i ordliste som starter på prefiks. >>> checkprefix ( en, [ en, enhjoerning, kan, neppe, bli, entrepenoer, i, denne, ensidige, verden ] ) [ en, enhjoerning, entrepenoer, ensidige ] b) Lag en funksjon checksuffix(...) som tar inn et suffiks (streng) og en ordliste (liste med strenger). Funksjonen skal returnere en liste med de tre siste ordene i ordliste som slutter på suffikset. >>> checksuffix ( som, [ en, morsom, gutt, ser, paa, en, ensom, og, arbeidsom, jente, som, gjoer, auditorieoeving ]) [ ensom, arbeidsom, som ] Side 8 av 11
c) Politiet arbeider mye basert på vitneobservasjoner. I dette tilfellet har en selvkjørt bil stukket av fra en ulykke, men vitnene sliter litt med å huske nøyaktig registreringsnummer. I en vitneobservasjon vil derfor et felt med «?» bety at vitnet var usikker på det aktuelle sifferet/tegnet i registreringsnummeret. Skriv en funksjon som tar inn to strenger, et vitneobservert registreringsnummer og et faktisk registreringsnummer. Funksjonen skal sjekke om det vitneobserverte registreringsnummeret kan stemme overens med det faktiske registreringsnummeret. Funksjonen skal returnere True dersom det er full overensstemmelse eller hvis avvik kun gjelder «?». Hvis det derimot finnes avvik utover «?» i vitneobservasjonen, skal funksjonen returnere False. Eksempler på kjøring: >>> match ( VF12345, VF12355 ) False >>> match ( V? 1234?, VF12355 ) False >>> match ( VF??? 55, VF12355 ) True >>> match (???????, VF12355 ) True Side 9 av 11
5 Sammensatt program, tidligere eksamensoppgave Vi har data fra en pulsklokke som er en vektor med hjertefrekvensen (ant. pulsslag pr. sekund) for hver sekund av en treningstur. Data for en treningstur på 15 sekunder kan for eksempel være: [110,125,127,130,129,132,133,134,134,145,158,165,172,173, 172 ] Det kan være hensiktsmessig å bruke funksjonene du lager utover i oppgaven. Du kan bruke funksjoner fra andre deloppgaver, selv om du ikke har klart å løse deloppgaven der du skal lage funksjonen. Du kan forutsette at alle inndata er riktige. a) Lag en funksjon pulsstatistikk(pulsdata) som returnerer en liste med gjennomsnittspuls, laveste puls og høyeste puls ut fra verdiene i innparameteren. Denne deloppgaven skal løses uten bruk av innebygde funksjoner. Dersom pulsstatistikk kalles med pulsdata som vist i innledningen til oppgaven, skal det returneres [142.6, 110, 173]. Side 10 av 11
b) Lag en funksjon lengstepulsokning(pulsdata) som finner det lengste tidsintervallet i pulsdata der der pulsen øker eller forblir uendret fra intervallets begynnelse til slutt. Funksjonen skal returnere en liste med lengden (i sekunder) av dette intervallet og starttiden for intervallet. Dersom det finnes flere intervaller med samme lengde, skal funksjonen returnere det intervallet som kommer først i pulsdata. Dersom lengstepulsokning(...) kalles med pulsdata som vist i innledningen av oppgaven, skal funksjonen returnere et intervall på 10 sekunder som starter det 4 sekundet ([10, 4]). Side 11 av 11