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

MAT-INF 2360: Obligatorisk oppgave 3

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

MAT-INF 2360: Obligatorisk oppgave 2

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

UNIVERSITETET I OSLO

MAT-INF 2360: Obligatorisk oppgave 2

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

INF 1000 høsten 2011 Uke september

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 v2008

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Beregning av med svært mange desimaler

2 Om statiske variable/konstanter og statiske metoder.

Reelle tall på datamaskin

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

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

INF Uke 10. Ukesoppgaver oktober 2012

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

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

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

INF1000 : Forelesning 1 (del 2)

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

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

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

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

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

UNIVERSITETET I OSLO

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

VELKOMMEN TIL MAT-INF 1100

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Ukeoppgaver INF1000: 12. feb 16. feb

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

Endret litt som ukeoppgave i INF1010 våren 2004

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Velkommen til. INF våren 2016

Programmeringsspråket C

INF1000 : Forelesning 3

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

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Emnebeskrivelse og emneinnhold

Husk å registrer deg på emnets hjemmeside!

VELKOMMEN TIL MAT-INF1100

Oversikt. Uke 2, INF 1000, 30 aug Variable, tilordninger og uttrykk. Repetisjon: Java programmering

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Løse reelle problemer

Jentetreff INF1000 Debugging i Java

Forside. MAT INF 1100 Modellering og beregninger. Mandag 9. oktober 2017 kl Vedlegg (deles ut): formelark. Tillatte hjelpemidler: ingen

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

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

UNIVERSITETET I OSLO

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

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Forelesning inf Java 4

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

2 Om statiske variable/konstanter og statiske metoder.

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

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

INF Obligatorisk innlevering 5

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Transkript:

3. september, 2004 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 17/9-2004, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels hus senest kl. 14.30 fredag 17/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. 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 2 50 og 2 30. Sjekk om svaret stemmer med den riktige verdien som er 2 80 1208925819614629174706176. 1

b) Bruk double-variable, multipliser sammen de to tallene 10 200 og 10 300 (tallet 10 200 kan angis som en double med 1.0e200), og skriv ut svaret. Blir det 10 500? c) Adder 1 og ta kvadratroten til svaret i oppgave (b). 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 2 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 i1 i er definert ved 6 i 1 2 3 4 5 6. i1 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. Oppgave 3. a) 30 i1 i. b) 20 i3 2. c) 10 i1 i3. d) 100 i5 1/i. e) 4 i 4 i/(i + 1). Binomialkoeffisientene ( n er definert ved ( ) n n! i i! (n! (1) 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 2

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 j1 i + j. j a) Programmer en metode for å beregne binomialkoeffisienter basert på denne formelen, og test metoden din på binomialkoeffisientene ( ) 10000 166616670000, 3 ( ) 100000 1.353770149276343 10 281, 80 ( ) 1000 2.702882409454366 10 299. 500 Hvorfor må du bruke flyttall og hvilke resultater får du? 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 3

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 addisjonen 1 + ɛ 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 1 + 2 n blir 1. 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 (x + y) + z x + (y + z) (2) som sier at det ikke spiller noen rolle hvilken rekkefølge vi utfører addisjoner 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 1000 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(); Et fullstendig program som skriver ut ett tilfeldig tall kan da se ut som import java.util.random; 4

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