TDT4110 IT Grunnkurs Høst 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Løsningsforslag til Auditorieøving 1 1 Teori 1. Hvilket tall kan IKKE lagres presist i en datamaskin? a) 10 9 b) π c) 1 /2 d) 5 2. Et bilde er lagret med 8-bit pr. pixel. Hvor mange forskjellige farger (eller gråtoner) kan man da velge mellom i hver pixel? a) 64 b) 1024 c) 8 d) 256 3. Hvilken komponent i en stasjonær datamaskin mister data om strømmen forsvinner? a) Harddisk b) RAM c) SSD d) Strømforsyning 4. Hva er det binære tallet 0101 i titallssystemet? 5 5. Hva gjør ALU i hente- og utføre-kretsløpet? a) Henter instruksjonen (IF) b) Dekoder instruksjonen (ID) c) Henter data (DF) d) Utfører instruksjonen (EX) e) Returnerer resultatet (RR) 6. Hva menes med "flyt" i flyttall? a) Det er bare et navn b) Spesielt store tall kan representeres c) Kommaet skifter plass etter størrelsen til eksponenten d) Tall med uendelig mange desimaler kan representeres nøyaktig Side 1 av 9
2 Variabler, verdier og IO a) Skriv kode for å tilordne strengen "Hei" til en variabel i Python: hilsen = " Hei " b) Hva skrives ut når Kodesnutt 1 kjøres? Kodesnutt 1 a = 1 b = 4 if b < 4* a: print (a+b) print (b) 4 c) Skriv en kodelinje som tar inn input fra brukeren: Eksempel på løsning: name = input (" Hva heter du? ") d) Hvilken variabeltype (string/integer/float/boolean) ville du brukt i tilordning av følgende personlig informasjon: 1. Navn - string 2. Alder - integer 3. Høyde i meter - float 4. Telefonnummer - string/integer 5. Gift (ja/nei) - boolean Side 2 av 9
3 Betingelser og bruk av logiske uttrykk a) Skriv et program som tar inn et fornavn (string) fra bruker. Hvis fornavnet er Kristian, skal programmet printe "Hei, Kristian!". For alle andre navn, skal programmet printe "Hallo!". Løsningsforslag er gitt i Kodesnutt 2 Kodesnutt 2 name = str ( input (" Hva heter du? ")) if name == " Kristian ": # Kan legge inn likegyldighet til s m à / store bokstaver print ("Hei, Kristian!") print (" Hallo!") b) Bjørn skal på shopping. Han har x kroner til disposisjon (x skrives inn fra bruker). La en vilkårlig genser ha prisen y (skrives inn fra bruker). Lag et program som gir Bjørn beskjed om han kan kjøpe genseren eller ikke. Eksempel på kjøring (tall er input fra bruker): Hvor mye penger har du? 300 Hvor mye koster genseren? 279 Du har r à d til genseren. Hvor mye penger har du? 250 Hvor mye koster genseren? 279 Du har ikke r à d til genseren. Kodesnutt 3 penger = float ( input (" Hvor mye penger har du? ")) pris = float ( input (" Hvor mye koster genseren? ")) if penger >= pris : print ("Du har r à d til genseren.") print ("Du har ikke r à d til genseren.") Side 3 av 9
c) Bjørn vil bare kjøpe genseren hvis den har høy hals. Dette er lagret i den boolske variabelen harhoyhals. Lag et nytt program som gir Bjørn beskjed om å kjøpe genseren hvis han har råd, OG genseren har høy hals. Hvis ikke begge kravene er oppfylt, skal Bjørn få beskjed om å lete videre i neste butikk. Eksempel på kjøring (tall er input fra bruker): # harhoyhals = false Hvor mye penger har du? 250 Hvor mye koster genseren? 279 Let videre i neste butikk. # harhoyhals = true Hvor mye penger har du? 250 Hvor mye koster genseren? 199 Kjoep genseren! Kodesnutt 4 penger = float ( input (" Hvor mye penger har du? ")) pris = float ( input (" Hvor mye koster genseren? ")) if penger >= pris and harhoyhals : print (" Kjoep genseren!") print (" Let videre i neste butikk.") d) Hva skrives ut når Kodesnutt 5 kjøres? Kodesnutt 5 a = True b = False if not (( a and not b) or ( a or b)): print (" Tomat ") print (" Potet ") Potet Side 4 av 9
4 Løkker a) Skriv et program som skriver ut alle tall fra 0 til og med 102 som er delelig på 3. Husk at modulo-operasjonen % angir resten ved divisjon, f.eks. er 5%2 = 1. To alternative løsningsmetoder: Kodesnutt 6 for i in range (0, 103, 3): print (i) for i in range (0, 103 ): if (i%3 == 0): print (i) b) Skriv et program som tar inn to heltall x og y fra bruker, og skriver ut antall tall i intervallet [x, y] som er delelig på 3. Eksempel på kjøring (tall etter kolon er input fra bruker): Skriv inn x: 8 Skriv inn y: 27 7 tall i intervallet er delelige p à 3. Kodesnutt 7 x = int ( input (" Skriv inn x: ")) y = int ( input (" Skriv inn y: ")) resultat = 0 for i in range (x, y+1): if i% 3==0: resultat +=1 print ( resultat, " tall i intervallet er delelige p à 3") c) Skriv et program som kontinuerlig tar inn tall fra bruker. Når summen av tallene har oversteget 50, skal programmet avsluttes. Eksempel på kjøring (tall etter kolon er input fra bruker): Skriv et tall : 14 Skriv et tall : 23 Skriv et tall : 32 Summen er over 50. Kodesnutt 8 tall = float ( input (" Skriv et tall : ")) resultat = tall while resultat <= 50: tall = float ( input (" Skriv et tall : ")) resultat += tall print (" Summen er over 50.") Side 5 av 9
d) Utvid programmet i a) slik at det avslutter når det har funnet de 10 første tallene som er delelig på 3, eller summen av tallene er større enn 120. Deretter skrives det ut hva summen ble. Kodesnutt 9 resultat = 0 antall = 0 for i in range (0,103 ): # Alternativ 1: (0,103,3) while antall < 10 and resultat <= 120 : if i% 3 == 0: # Droppes i alternativ 1 antall += 1 resultat break print ( resultat ) += i 5 Koorståelse og funksjoner I alle de påfølgende oppgavene bruker vi følgende variable: A = 10 B = 5 a) Hva printer Kodesnutt 10? Kodesnutt 10 oppgavea (A,B): return A print ( oppgavea (A,B)) 10 b) Hva printer Kodesnutt 11? Kodesnutt 11 oppgaveb (B,A): return B print ( oppgaveb (A,B)) 10 Side 6 av 9
c) Hva printer Kodesnutt 12? Kodesnutt 12 oppgavec (C,D): return D print ( oppgavec (D=A,C=B)) 10 d) Hva printer Kodesnutt 13? Kodesnutt 13 G = 2 oppgaved (): G = 5 oppgaved () print (G) 2 e) Hva printer Kodesnutt 14? Kodesnutt 14 G = 2 oppgavee (): G = 5 return G print ( oppgavee ()) 5 Side 7 av 9
6 Pascals trekant og n! (Vanskelig) I denne oppgaven skal vi printe ut tallmønsteret i Pascals trekant på skjermen. I de første deloppgavene kommer vi til å introdusere noen konsepter og funksjoner til å hjelpe oss på veien. n fakultet, eller n!, er inert som med spesialtilfellet 0! = 1. n! = 1 2... (n 1) n a) Lag funksjonen factorial_loop(n), som bruker en for-løkke til å regne ut n! og returnerer svaret. Kodesnutt 15 factorial_ loop ( n): p = 1 for i in range (2, n + 1): p *= i return p b) "Av n, velg k", ( n k) er inert som n! ( k! (n k)! ) Lag en funksjon nchoosek(n, k) som returnerer (n k) for inputparametrene n og k. Bruk en av funksjonen vi har nevnt over. Du trenger ikke å ha klart oppgave a) for å gjøre denne oppgaven. Kodesnutt 16 nchoosek (n, k): return factorial_loop (n)/( factorial_loop (k)* factorial_loop (n - k)) Side 8 av 9
c) De første radene i Pascals trekant er: 1 1 1 1 2 1 1 3 3 1... Det viser seg at tallene i trekanten er inert ved nchoosek slik: (0 0) (1 0) (1 1) (2 0) (2 1) (2 2)... Lag en funksjon Pascal( n ) som tar inn heltallet n og printer ut de n første radene i Pascals trekant. F. eks. skal Pascal(4) printe ut den første trekanten i denne deloppgaven. Tips: For å printe ut et tall og et mellomrom bak uten å starte en ny linje, kan du bruke print( tall, end= ) Kodesnutt 17 Pascal (n): for i in range (n): for j in range ( i + 1): if print ( ) ( nchoosek (i,j)!=0): print ( nchoosek (i, j), end = ) Side 9 av 9