Innleveringsoppgave 1

Like dokumenter
Innleveringsoppgave 4

Innleveringsoppgave 6

Innleveringsoppgave 3

Innleveringsoppgave 5

INF109 - Uke 1a

INF109 - Uke 1b

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1

Løse reelle problemer

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

Øvingsforelesning i Python (TDT4110)

Forkurs i informatikk Python. Andreas Færøvig Olsen

Løse reelle problemer

Oppgaver uke 1: Løsningsforslag

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

UNIVERSITETET I OSLO

MAT-INF1100 Oblig 1. Teodor Spæren, brukernavn teodors. September 16, 2015

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

Øvingsforelesning 1 Python (TDT4110)

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Hjemmeeksamen 2 i INF3110/4110

Repetisjon Novice Videregående Python PDF

UNIVERSITETET I OSLO

INF Innleveringsoppgave 6

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Øvingsforelesning i Python (TDT4110)

ITGK - H2010, Matlab. Repetisjon

UNIVERSITETET I OSLO

MAT-INF 1100: Obligatorisk oppgave 1

INF Obligatorisk innlevering 5

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Hvordan løse problemer med programmering?

MAT-INF 1100: Obligatorisk oppgave 1

IN1000 Obligatorisk innlevering 7

Steg 1: Rest etter divisjon

Python: Funksjoner og moduler Kapittel

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

Informasjon Prøveeksamen i IN1000 høsten 2018

Øvingsforelesning i Matlab (TDT4105)

UNIVERSITETET I OSLO

INF100 INNLEVERING 3 HØSTEN 2004

Steg 1: Regneoperasjoner på en klokke

Finne ut om en løsning er helt riktig og korrigere ved behov

UNIVERSITETET I OSLO

Objektorientert programmering i Python

Mattespill Nybegynner Python PDF

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

MAT1030 Plenumsregning 1

Øvingsforelesning i Python (TDT4110)

UNIVERSITETET I OSLO

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

MAT1030 Diskret Matematikk

STK1000 Obligatorisk oppgave 2 av 2

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Læringsmål og pensum. if (be): else (not_to_be):

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

Forside. 1 Hva skrives ut?

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Hjemmeeksamen 1 i INF3110/4110

INF120: Oblig 3. Yngve Mardal Moe

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Python: Funksjoner og moduler Kapittel

YouTube-kanal ITGK. Læringsmål og pensum

INF Ekstrainnlevering

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

ANNENGRADSLIGNINGER OG PARABELEN

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Finne ut om en løsning er helt riktig og korrigere ved behov

INF Uke 10. Ukesoppgaver oktober 2012

Velkommen til. INF våren 2017

TDT4110 IT Grunnkurs Høst 2015

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

1. obligatoriske innlevering, høsten 2014

Utførelse av programmer, metoder og synlighet av variabler i JSP

Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Oppsummering fra sist

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Metoder med parametre, løkker og arrayer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Øvingsforelesning i Python (TDT4110)

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Transkript:

Innleveringsoppgave 1 INF109 Dataprogrammering for naturvitskap Dette er den første av syv obligatoriske oppgaver. Du kan få totalt 10 poeng på denne oppgaven. Innleveringsfristen er fredag, 12. feb, 23:59.9999999. Oppgaven skal leveres inn som én enkelt.py-fil. Oppgaven skal leveres inn på kursets hjemmeside på Mi Side. Oppgavene skal løses individuelt selv om samarbeid er tillatt. Lykke til! 1 Oppgaven Oppgave 1 Befolkningsvekst I denne oppgaven skal du skrive et Python-program som beregner veksten for en befolkning. Programmet skal først lese inn størrelse av en populasjon som heltall, årlig vekst i prosent som flyttall og antall år som skal beregnes som heltall. For hvert år skal programmet skrive ut estimatet av den nye befolkningsstørrelsen med to desimalers nøyaktighet (det er ikke nødvendig å skrive ut avsluttende nullere (trailing zeros), man kan med andre ord bruke round()-funksjonen, mer om dette under). Til slutt skal programmet skrive ut totalveksten av startbefolkningen. Kort oppsummert skal programmet gjøre følgende: Be brukeren om nåværende befolkning, en spesifikk vekstrate og antall år, n, som skal beregnes, skrive ut n linjer, én linje per år som beregnes, med antatt befolkning gitt oppgitt vekstrate og skrive ut en linje på slutten som oppgir den totale veksten etter n år oppgitt i prosent. Når programmet er lastet inn i Python, skal det være mulig uten å måtte gjøre annet enn å kompilere, å kjøre metoden befolkningsvekst(). Den skal be om de nødvendige tallene fra brukeren og skrive ut informasjonen som er beskrevet over. Når brukeren kjører funksjonen, skal det se ut som følger (dersom brukeren oppgir tallene 1000, 2.48 og 5). >>> befolkningsvekst () Befolkning : 1000 Å rlig vekstrate ( i prosent ): 2.48 Antall år: 5 Befolkningen etter 1 år er 1024.8 Befolkningen etter 2 år er 1050.22 Befolkningen etter 3 år er 1076.26 Befolkningen etter 4 år er 1102.95 1

Befolkningen etter 5 år er 1130.3 Total vekst etter 5 år er ( i prosent ) 13.03 >>> Med unntak av funksjonen round() som er beskrevet nedenfor skal du bare bruke Pythonfunksjoner du har lært i kapittel 1 og 2 i læreboken. Det vil si print-setninger, enkle aritmetiske uttrykk, innlesning av variabelverdier ved hjelp av input() og for-løkker med range(). round()-funksjonen Når du har et flyttall du vil skrive ut og du bare trenger et bestemt antall desimaler (e.g. du ønsker å skrive ut 1.618 fremfor 1.61803398874989) så kan du bruke round()-funksjonen. Første parameter av funksjonen er variabelen, eller tall som skal avrundes, andre parameter er antall desimaler du vil ha. F.eks.: >>> from math import e >>> e 2.718281828459045 >>> e_avrundet = round (e, 9) >>> e_avrundet 2.718281828 >>> round (e,14) 2.71828182845905 >>> round (e,13) 2.718281828459 >>> round (e,12) 2.718281828459 >>> from math import pi >>> pi 3.141592653589793 >>> round (pi,2) 3.14 >>> round (pi,4) 3.1416 >>> round (pi,5) 3.14159 >>> round ( pi) # pi blir rundet ned 3 >>> round (pi,0) 3.0 >>> round ( e) # e blir rundet opp 3 >>> round (e,0) 3.0 Hvis du bruker round() uten den andre parameteren (f.eks. round(var)), så få du nærmeste heltall tilbake. Du kan lese mer om round()-funksjonen på side 68 i boken. Prøv eksemplene over i IDLE og prøv å forstå hva som foregår. Merk at alt som står etter en # blir ignorert av Python (de er kommentarer), og at det derfor ikke er nødvendig å skrive det for disse eksemplene. Oppgave 2 Vi så i første ukeoppgave at formelen for å finne røttene til en annengradsligning var gitt med x = b ± b 2 4ac. 2a 2

Dette vil si at dersom man har en funksjon f(x) = 3x 2 4x + 3, så setter man a = 3, b = 4 og c = 3 og regner ut. Vi vet videre at et annengradspolynom har potensielt to røtter, én rot eller ingen røtter (gitt at vi bare aksepterer løsninger i R). Mer bestemt, dersom diskriminanten = b 2 4ac er positiv, det vil si om > 0, har ligningen to reelle røtter r 1 R og r 2 R, om vi har at = 0, har ligningen nøyaktig én reell rot r R og dersom < 0, vil vi ikke ha noen reelle røtter. Dette blir første funksjonen dere skriver som tar inn argumenter (også kalt parametre). En funksjon (som befolkningsvekst over), kan bli laget til å ta inn én eller flere argumenter. Dette betyr at den kommer med variabler allerede satt til verdier. Se på følgende eksempel: def hello_world ( name ): print (" Hello,", name ) Denne funksjonen må kalles med ett argument som følger (følg med på hvordan argumentet vi kaller funksjonen med blir det name har som verdi inni funksjonen): >>> hello_world (" Hallo ") Hello, Hallo >>> hello_world (3) Hello, 3 >>> Vi kan utvide funksjonen med å ta inn flere argumenter: def hello_again ( first_name, surname, times ): for i in range ( times ): print (" Hello,", first_name, surname ) Prøv deg frem med forskjellige verdier av first name, surname og times. Se spesielt hva som skjer dersom du setter times til å være noe annet enn et heltall. >>> hello_again (" INF109 ", " Python ", 6) >>> 2a Annengradspolynomer Lag en funksjon solve(a, b, c) som tar inn de tre variablene og regner ut (bruk gjerne variabelnavn d, siden python kan være i overkant hårsår på greske tegn). Deretter skal programmet ditt teste hvor mange røtter funksjonen har ved å bruke if-setninger. Skriv følgende (fyll ut for...): 3

def solve (a, b, c): """ Prints solutions to the quadratic equation given by parameters. """ d =... # Fyll ut for... # There are two solutions if (d > 0): numerator1 = -b + math. sqrt ( d) numerator2 = -b - math. sqrt ( d) denominator = 2 * a root1 = numerator1 / denominator #... print ut to linjer, en for hver x # There is only one solution if (d == 0): numerator = #... #... print ut kun en x # There is no solution if (d < 0): print ("No solutions ") 2b Innlesing fra bruker Nå skal vi lage en funksjon som tar inn input fra bruker og som kaller funksjonen vi laget over. Lag en funksjon quadratic equation solver() som leser inn a, b og c fra brukeren og som kaller funksjonen over med de argumentene: def quadratic_equation_solver (): """ Asks user for input, calls solve on input. """ print (" Velkommen.\ nvennligst tast inn verdi for a: ") a = eval ( input ()) #... 2c Førstegradspolynom? Nå skal vi løse en litt enklere oppgave enn Oppgave 2a, nemlig finne røttene til en førstegradsligning. Den har formen f(x) = bx + c. Lag funksjonen solve linear equation(b,c). Nå står du helt på egne ben, men husk å kommentere og å dokumentere koden. Utvid dernest koden i Oppgave 2b til å sjekke om verdien for a er 0, og hvis så er tilfelle, kall funksjonen solve linear equation istedet. Informer gjerne brukeren om dette ved å skrive ut at input ikke definerer et ekte annengradspolynom. 2d Valgfri: Røtter i C? (Denne oppgaven er valgfri og gir ikke poeng, bare litt street cred.) Dersom du har testet i oppgave at ligningen ikke har noen reelle røtter ( < 0), tar vi like greit og gir brukeren de to komplekse røttene. De er definert enkelt og greit ved r c = b 2a + i 2a 4

r c = b 2a i 2a, og de er, som noen kaller dem, komplekse konjugater av hverandre. For å få dem skrevet ut i python, bruker vi funksjonen complex(a,b) som gir oss det komplekse tallet a + bi. Dersom du ikke gidder å skrive inn begge formlene oppe, kan den andre fåes ved å kalle c.conjugate(), dersom c er ditt komplekse tall. 5

2 Innlevering Lagre programmet ditt i en.py-fil som heter oblig1-abc123.py, hvor abc123 skal erstattes med ditt brukernavn, og lever besvarelsen på studentportalen Mi Side, i mappen Innleveringsmappe Vurderingsmappe Innlevering1. 3 Vurdering For denne oppgaven kan du få maksimalt 10 poeng. Fordeling av poeng er: Programmet fungerer som forventet 6 Programmet er veldokumentert med kommentarer og oversiktlig 2 Navngiving 2 10 Programmet fungerer som forventet. Her får man trekk om programmet enten skriver ut feil data, har feil format på utskrift (avviker fra eksempelet), kræsjer på noen som helst måte eller om funksjonsnavn ikke er som oppgitt. Det er viktig å merke seg at dersom funksjonen dere skal implementere, befolkningsvekst(), har blitt kalt noe annet enn nettopp befolkningsvekst vil dere bli trukket i poeng her. Utskriften skal heller ikke vesentlig avvike fra eksempelet over. Programmet er veldokumentert med kommentarer og oversiktlig. Her får man trekk om programmet ikke er kommentert godt nok, men også om programmet er for mye kommentert (spør gruppeleder hva dette betyr). Man kan også få trekk om programmet er uoversiktlig, det vil si at det er vanskelig for en ny person å sette seg inn i programmets funksjonalitet. Navngiving. Posten Navngiving dekker at navn på variabler og funksjoner er fornuftig valgt og at navngivingen som er brukt er konsistent; enten mixedcase eller med underscore. 1 Oppgavene vil være ferdigrettet innen én uke har gått, og poengsum og kommentarer fra retter vil bli postet i vurderingsmappen under kommentarer. Spørsmål til rettingen kan bli rettet til en av gruppelederne, eventuelle klager skal rettes til koordinator på e-post (email to be decided) som vil se gjennom rettingen og eventuelt be en annen gruppeleder rette på ny. Obs: Den nye karakteren vil bli stående og det er ikke garantert at den ikke vil gå ned. 1 mixedcase er når variablene ser ut som innlestdata, mens underscore er når variablene skrives som innlest data. Velg én av disse to, og hold dere til den måten. I boken bruker de førstnevnte, mens det er kanskje vanligere ellers i Python-verdenen å bruke sistnevnte. Aldri begynn med stor forbokstav, e.g. InnlestData eller lignende, da disse er reservert til klassenavn, noe som er delvis utenfor pensum for dette kurset. 6