MAT-INF 1100: Obligatorisk oppgave 1

Like dokumenter
MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

MAT-INF 2360: Obligatorisk oppgave 3

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

MAT-INF 2360: Obligatorisk oppgave 2

UNIVERSITETET I OSLO

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

MAT-INF 2360: Obligatorisk oppgave 2

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

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

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

INF1000 : Forelesning 1 (del 2)

INF1000 oppgaver til uke 38 (17 sep 23 sep)

UNIVERSITETET I OSLO

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

INF Uke 10. Ukesoppgaver oktober 2012

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Introduksjon til objektorientert programmering

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

2 Om statiske variable/konstanter og statiske metoder.

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

UNIVERSITETET I OSLO

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Reelle tall på datamaskin

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo

VELKOMMEN TIL MAT-INF 1100

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Underveiseksamen i MAT-INF 1100, 17. oktober 2003 Tid: Oppgave- og svarark

Programmeringsspråket C

Velkommen til. INF våren 2016

Java. INF1000 : Forelesning 2. Ulike varianter for ulike behov. Java Standard Edition (Java SE) Java:

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

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

Jentetreff INF1000 Debugging i Java

Løse reelle problemer

Forelesning inf Java 1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

Programmering i C++ Løsningsforslag Eksamen høsten 2005

UNIVERSITETET I OSLO

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

INF Obligatorisk innlevering 5

UNIVERSITETET I OSLO

Forelesning inf Java 4

Om plotting. Knut Mørken. 31. oktober 2003

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Emnebeskrivelse og emneinnhold

INF100/INF100-F - INNLEVERING 2 HØSTEN 2005

VELKOMMEN TIL MAT-INF1100

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

Transkript:

8. september, 2005 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 23/9-2005, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels hus senest kl. 14.30 fredag 23/9. Javaprogrammer og kjøring av slike leveres som utskrift fra skriver, men for hver oppgave skal du også levere en beskrivelse som kommenterer resultatene. Denne skal være skrevet av deg selv (for hånd eller på datamaskin). Studenter som blir syke eller av andre grunner ønsker å søke om utsettelse eller fritak fra denne obligatoriske oppgaven, må ta kontakt med Elisabeth Seland (rom B726 Niels Henrik Abels hus, telefon 22 85 59 07, e-post: elisabhh@math.uio.no) i god tid før innleveringsfristen. Det oppfordres til samarbeid underveis i arbeidet med oppgavene, og gruppelærerne har anledning til å svare på generelle spørsmål, men kan ikke servere ferdige løsninger. Den endelige besvarelsen som du leverer skal utarbeides av deg selv, og du må kunne redegjøre for innholdet ved en eventuell muntlig høring (aktuelt ved mistanke om avskrift). Husk at de to obligatoriske oppgavene i MAT-INF 1100 må begge bestås for å kunne gå opp til endelig eksamen i kurset. For å få bestått på denne første obligatoriske oppgaven må du gjøre seriøse løsningsforsøk på alle oppgavene, og programmene for minst to av de fem oppgavene bør gi riktig svar. Utskrift av kjøring. En del av besvarelsen er å levere utskrift av kjøring av programmene. Dette kan gjøres ved hjelp av kommandoen script under linux. Hvis du for eksempel sier script utskrift vil det du gjør deretter blir skrevet til fila utskrift. Avslutt ved å si exit. For mer info kan du si man script. 1

Oppgaver Oppgave 1. I denne oppgaven skal vi se hvordan overflow og verdien NaN oppfører seg i Java. Hver deloppgave skal programmeres og du skal beskrive resultatet som programmet ditt gir og om dette er rimelig. a) Bruk variable av typen long og multipliser sammen de to tallene 3 32 og 3 11. Sjekk om svaret stemmer med den riktige verdien som er 3 43 = 328256967394537077627. b) Bruk double-variable, divider de to tallene 10 100 og 10 300 (tallet 10 100 kan angis som en double med 1.0e100), og skriv ut svaret. Blir det 10 400? c) Multipliser svaret i oppgave (b) med seg selv. Hva blir resultatet? d) Divider 1 med svaret maskinen ga i (c) og skriv ut svaret. Kommentarer? e) Multipliser svaret fra (c) med 0, skriv ut svaret og kommenter. f) Multipliser svaret fra (e) med seg selv og skriv ut svaret. Kommentarer? g) Forsøk å utføre de to udefinerte divisjonene 1.0/0.0 og 1/0, lagre resultatet i henholdsvis en double-variabel og en long-variabel og skriv ut resulatet. Kommentarer? Oppgave 2. I matematikk brukes ofte en notasjon for produkter tilsvarende den for summer. Uttrykket 6 i=1 i er definert ved 6 i = 1 2 3 4 5 6. i=1 Symbolet er altså helt analogt med bortsett fra at plusstegnene blir endret til multiplikasjonstegn, slik at de aktuelle tallene multipliseres i steden for å adderes. Programmer og skriv ut resultatet av følgende produkter og kommenter resultatene. a) 11 i=1 i2. b) 20 i=3 3. c) 10 i=1 i4. d) 100 i=5 1/i2. e) 10 i=0 i2 /(i 1). 2

Oppgave 3. Binomialkoeffisientene ( n er definert ved ( ) n n! = i i! (n! der n 0 er et heltall og i er heltall i intervallet 0 i n. Binomialkoeffisientene forekommer i mange formler og må derfor derfor ofte beregnes på datamaskin, og siden alle binomialkoeffisienter er heltallige (divisjonen i (1) må altså alltid gå opp) er det rimelig å bruke heltallsvariable til slike beregninger. For små verdier av n og i går dette greit, men for litt større verdier får vi fort problemer fordi teller og nevner i (1) da kan bli større enn de største heltall som kan representeres på maskinen selv om binomialkoeffisienten i seg selv ikke er så stor. Ved å bruke flyttallsvariable i steden kan vi håndtere litt større tall, men igjen vil vi kunne få for store tall underveis selv om sluttresultatet ikke er for stort. I tillegg vil vi få avrundingsfeil når vi bruker flyttall. Det som er uheldig med formelen (1) er at selv om binomialkoeffisienten vi er ute etter ikke nødvendigvis er så stor vil teller og nevner allikevel kunne være svært store. Slikt er generelt uheldig for numeriske beregninger og bør unngås så sant det er mulig og ikke koster for mye i form av ekstra regnetid. Hvis vi ser litt nøyere på formelen (1) så ser vi at vi kan forkorte slik at ( n i ) = 1 2 i (i + 1) n 1 2 i 1 2 (n = i + 1 i + 2 1 2 n n i. Med andre ord kan vi hjelp av produktnotasjon skrive ( n som ( ) n i n i + j =. i j j=1 a) Programmer en metode for å beregne binomialkoeffisienter basert på denne formelen, og test metoden din på binomialkoeffisientene ( ) 9998 = 416083629102505, 4 ( ) 100000 = 8.14900007813826 10 249, 70 ( ) 1000 = 2.702882409454366 10 299. 500 Hvorfor må du bruke flyttall og hvilke resultater får du? 3 (1)

b) Er det nå mulig å få for store tall underveis i beregningene dersom binomialkoeffisienten vi skal beregne ikke er større enn det største flyttallet vi kan representere? c) Når vi utledet metoden vår forkortet vi i! mot n! i (1) og forenklet på den måten uttrykket for ( n. Vi kan utlede en annen metode ved i steden å forkorte (n! mot n!. Utled denne metoden på samme måte som over, og diskuter når de to metodene bør brukes (du trenger ikke programmere den andre metoden, bruk matematiske resonnementer). Oppgave 4. Ut fra teksten i kompendiet er det klart at på en datamaskin vil flyttallsaddisjonen 10 + ɛ bli regnet ut til 1 hvis bare ɛ er liten nok. Skriv et program som kan hjelpe deg til å finne det minste heltallet n slik at 10 + 2 n blir 10. Gjør dette både for 32- og 64-bits flyttall (float- og double-variable i Java). Er svarene rimelige? Oppgave 5. loven En grunnleggende egenskap ved reelle tall er den assosiative (xy)z = x(yz) (2) som sier at det ikke spiller noen rolle hvilken rekkefølge vi utfører multiplikasjoner i. Du skal i denne oppgaven sjekke om denne loven gjelder for flyttall. For å gjøre dette skal du skrive et program som går i en løkke 10000 ganger og hver gang trekker tre tilfeldige tall av typen double og så sjekker om loven gjelder (om de to sidene i (2) er like) for disse tallene. Tell opp hvor mange ganger loven svikter, og skriv til slutt ut i hvor mange prosent av tilfellene den sviktet. Skriv også ut ett sett med tre tall der loven sviktet. Tips: For å trekke tilfeldige tall kan du skrive import java.util.random aller først på programfila og deklarere en variabel som du kan kalle tilfeldig ved Random tilfeldig = new Random(); Hvis x er definert som en variabel av typen double, kan du trekke et tilfeldig tall av type double ved å si x = tilfeldig.nextdouble(); 4

Et fullstendig program som skriver ut ett tilfeldig tall kan da se ut som import java.util.random; class testrandom { } public static void main (String [ ] args) { double x; Random tilfeldig = new Random(); x = tilfeldig.nextdouble(); System.out.println("Et tilfeldig tall: " + x); } Lykke til!! 5