Oblig3-forklaringer (særlig π -oppgaven)

Like dokumenter
Oblig 4Hybelhus litt mer tips enn i oppgaven

Oblig3Pi- en matematisk rettet obligatorisk oppgave nr. 3 (av 4) i INF1000 ett av to alternativer for oblig 3.

Oblig3Pi - en matematisk rettet obligatorisk oppgave nr. 3 (av 4) i INF1000 høsten 2010 ett av to alternativer for oblig 3.

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Oblig3Pi en matematisk rettet variant av oppgave nr. 3 (av 4) i INF1000 våren 2009 ett av to alternativer for oblig 3.

Oblig4Pi- en matematisk rettet obligatorisk oppgave nr. 4 (av 5) i INF1000 høsten 2013 ett av to alternativer for oblig 4.

Oblig 3 tips litt mer tips enn i oppgaven

Oblig 3 tips litt mer tips enn i oppgaven

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

Først: Parametre til oppstart av programmet, Hvordan kan vi bruke args[]? String [] args. Parameteren args[] blir laget av deg

Repetisjon. INF gruppe 13

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Beregning av med svært mange desimaler

Oppgaven består av to deler, del A og del B. Alle skal besvare både del A og del B, men det finnes noen valgmuligheter innenfor hver del.

Gulbrand Grås Husleiesystem

Oblig3Hybelhus (INF Høst 2011) én av to mulige oppgaver for oblig3 (du løser denne eller Oblig3Pi)

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

Null, && og søppeltømmeren. INF Forelesning 9: Mer om objekter og klasser, tips til oblig 3. Eksempel Student med én konstruktør

Stringer er ordentlige objekter. Uke 8 - Mer om objekter og klasser. Tips Oblig3. Eksempel Student med en konstruktør

Oblig4 - forklaringer

INF1000 Metoder. Marit Nybakken 16. februar 2004

Obligatorisk oppgave nr. 3 (av 4) i INF1000, V-2007

Framgangsmåte for å løse oblig 4 i INF1000

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

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

UNIVERSITETET I OSLO

TOD063 Datastrukturer og algoritmer

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

INF1000: Forelesning 7. Konstruktører Static

NB!!!! VIKTIG ANGÅENDE DATAFILA:

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Hva er en metode. Hva skjer når vi kaller en metode

Gulbrand Grås husleiesystem

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

UNIVERSITETET I OSLO

INF1000: Forelesning 7

Oblig4Hybelhus (INF Høst 2013) én av to mulige oppgaver for oblig4 (du løser denne eller Oblig4Pi)

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Nøkkelspørsmål til eller i etterkant av introduksjonsoppgaven:

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

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

Kanter, kanter, mange mangekanter

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Mer om likninger og ulikheter

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

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

Klasser, objekter, pekere og UML. INF gruppe 13

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

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

Oblig 3 to versjoner. INF Forelesning 8: Objekter, klasser og pekere. Verden består av mange objekter: noen ganske like, andre ulike

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

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

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

Programmering Høst 2017

INF 1000 høsten 2011 Uke september

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

Innledning. Mål. for opplæringen er at eleven skal kunne

(! )! #!! *#+,$&!! &#$

3 #$ *#+,$&!! &#$ (! )! #! 6 &#)%#. / 5$ #%#.67 / "## #&! %# # & #!!& %&$ # $!!!!# $#

INF1000: noen avsluttende ord

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Mesteparten av kodingen av Donkey Kong skal du gjøre selv. Underveis vil du lære hvordan du lager et enkelt plattform-spill i Scratch.

Uttrykket 2 kaller vi en potens. Eksponenten 3 forteller hvor mange ganger vi skal multiplisere grunntallet 2 med seg selv. Dermed er ) ( 2) 2 2 4

Sensorveiledning Oppgave 1

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

ALGORITMER OG DATASTRUKTURER

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

HØGSKOLEN I SØR-TRØNDELAG

2 Om statiske variable/konstanter og statiske metoder.

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

Forelesning inf Java 4

UNIVERSITETET I OSLO

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

! " ##$ % 4 2, &/ ( & +, )-. &* &/ ),* 0, 1 1 ( &/ 2& &, & &/ &,, &/" 2 &/ 2 ) *

( & ( &/ 2& , )-. &* &/ ),* 0, &/ 2 ) *

Emnekode: LV121A Dato: Alle skrevne og trykte hjelpemidler

Oblig4 - forklaringer. Arne og Ole Christian

Uke 7 Mer om Objekter, klasser og pekere; 27. Sept og 4. okt. 2011, Arne Maus Inst. for informatikk, UiO

Transkript:

Dagens oversikt Oblig3-forklaringer (særlig π -oppgaven) Arne Maus Inst for informatikk, 20.okt. 2006 I) Om konstruktører og this Feil dere gjør nå: Dere må lage metoder i klassene og kalle dem II) Generelt om hvordan lage OO-programmer III) En god del tips til π -oppgaven, grovskisse av en løsning IV) Noen tips til Husleie-oppgaven (rette uklarhet om fortjeneste til Gulbrand mm.) I) Konstruktører startmetoder i klasser Eksempel Student med en konstruktør Når vi lager et objekt av en klasse med new, kaller vi egentlig en metode som heter det samme som klassen (derfor parentesen bak klassenavnet). Vi får automatisk med en slik konstruktør-metode fra oversetteren dersom vi ikke skriver en slik konstruktør selv. Den vi får automatisk er uten parametere og gjør ingen ting. Konstruktører nyttes i all hovedsak til å gi fornuftige startverdier for variable i objektet som dannes. De konstruktørene vi skriver kan ha parametere. Konstruktørene skal ikke ha noen type foran seg, heller ikke void. Vi kan ha flere konstruktører i en klasse, men da må parameterne være ulike i antall eller typen av parametrene class Student { String navn; Kurs [] minekurs = new Kurs[3]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++;

Eksempel Student med 2 konstruktører class Student { String navn; Kurs [] minekurs = new Kurs[3]; Student() { minekurs = new Kurs[0]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; this Av og til trenger vi en peker til det objektet metoden vi utfører er inne i. Java-ordet this gir oss alltid det. Brukes i to situasjoner: Vi har en konstruktor, og parametrene til denne heter det samme som objekt-variable i objektet. Eks: class A { int antall; A (int antall ){ this.antall = antall; // end A.. A apek = new A(2); Vi skal kalle en metode i et annet objekt (gjerne av en annen klasse). Da kan vi bruke this for å overføre en parameter til denne metoden om hvilket objekt kallet kom fra. II) Slik lager du OO-prgrammer Hvilke typer av objekter har jeg i problemet? Lag en klasse for hver slik type av gjenstander Hvilke data er lagret i et objekt av hver slik klasse Deklarér disse dataene i toppen av klassene Hvaskalde ulikeobjektenekunnegjøre? Lag en metode for hver av disse operasjonene i den tilhørende klassen Når du kjører programmet: I main: Les evt. parametere i String-arrayen args Lag de objektene du har oversikt over si new på den/de klassene dette gjelder Kall (minst) en metode i ett av objektene du har laget (enten konstruktøren eller en annen i objektet) I enhver metode som kalles: Lag evt. nye objekter (med new) som du trenger der Gjør evt. egne beregninger Kall evt. andre metoder i objekter du har pekere til for å gjøre deler av det denne metoden skal gjøre

III) π-oppgaven tan(4º) = tan(π/4) = Gi trening i bruk av klasser og objekter, arrayer og enkel utskrift til fil samt presis programmering av (kjente) matematiske metoder. π = Forholdet mellom diameter og omkrets av en sirkel Gitt to formler Machins formel (løs denne) Størmers formel (vis hvordan løses med denne etter å ha løst Machin) π = 4 π/4 =arctan() π = 4 arctan 4 6 arctan 4 arctan 3* 3 + arctan * = 6 + 3 3* * 7* 7 + K 7* 7 + K L π = 6 arctan 4 Leddene i de to Arctan-rekkene 4 arctan 3* 3 + * = 6 + 3 3* * 7* + K 7* + K 2i =, og Li = Li for i (2i + ) * 0 > 2 2i L =, og L i = L i for i 2 (2i + ) * 7 0 > 7 0 0 Problem Vi skal lage to arctan-rekker løser vi den ene, så løser vi lett den andre (bare ett tall forkjellig ( mot ) Skal (må) bruke heltalls-regning Vi skal ha 0 000 siffer i heltallsarrayer 4 sifre i hvert heltall ca. 200 tall i en slik array

Regning med flere sifre i en gruppe mellom to mange-sifrete tall Multiplikasjon i oppgaven ) Addisjon to-og-to (a = a + b) : mente -> 32 87 77 94 a + 0 44 22 6 b -------------------- = 34 32 00 ny verdi av a 2) Multiplikasjon to-og-to (a = a * b) 87 27 94 * 74 44 ---------------------- 38 40 29 36 64 8 67 6 ---------------------- = 64 97 07 8 36 Nøyaktig forklaring på den første linjen i multiplikasjonen: 94*44 = 436, 36 noteres og 4 blir mente. Neste: 27* 44 = 88, Vi legger til menten, 4 fra forrige multiplikasjon, og får 88+4=229; 29 noteres som svaret og 2 blir mente til neste siffergruppe. Så 87*44 = 3828 + mente 2 = 3840. 40 noters for denne siffergruppen og 38 blir menten. Siden menten til neste er mindre enn 00, går denne enkelt som mente til neste gruppe igjen. På forestående side er multiplikasjonen mellom to tall, hver med mange sifre I oppgaven blir multiplikasjon og divisjon mellom et mangesifret tall og ett (enkelt) heltall (int). Det blir enklere enn det forklaringen foran tyder på, men vanskelig nok for multiplikasjon. π -oppgaven skisse av ett mulig program som løser oppgaven Løsningen skal bestå av 3 klasser: Oblig3Pi: Inneholder main, lager ett objekt av Pi-klassen og kaller en metode i dette Pi-objektet som regner ut svaret skriver ut svaret (som nå ligger i Pi-objektet) Pi: Inneholder en int-array med plass til de første 0 000 sifrene i π Lager to objekter av klassen Arctan, og kaller metoder i hver av disse som regner ut verdien av hver sin Arctan-rekke Adderer/subtraherer disse to rekkene sammen til et svar på verdien av π som lagres i dette Pi-objektet Arctan Har to int-arrayer: en for verdien av nåværende ledd og en for summen (så langt) av hele rekka (begge med plass til 0 000 sifre) Går i løkke: Regner ut verdien av neste ledd (i arrayen med 0 000 sifre) Adderer/subtraherer denne til verdien av hele rekka, siffergruppe for siffergruppe Skisse av Arnes programkode til: Oblig3Pi, Pi og Arctan. class Oblig3Pi{ public static void main(string[] args) { if (args.length!= 2 ) { System.out.println("bruk: >java Pi <ant sifre> <resultatfil>"); else{ Pi p = new Pi(new Integer(args[0]), args[]); p.print(); class Pi{ <data, bla. array for pi > Pi(int numdigits, String file) {... void print() { void add (Arctan a) { void sub (Arctan a) { <noen flere metoder?> // end class Pi p Pi-objekt Arctanobjekt Arctanobjekt class Arctan{ <data, bla. array for neste ledd og hele arctan-rekka> Arctan(...) { void beregnserie() { void lagnesteledd(int i) { void div (long div) { void mult (int mult) { void addtoseries(){ void subfromseries() {

Hvordan representere: Hva er svaret Pi (svaret) Verdien av en arctan-rekke Verdien av ett ledd i en slik arctan-rekke svar på alle: ledd Hver som en int-array med litt over 0000/4 = ca. 200 elementer Eks ett Ledd i en arctan rekke siffer nr.: 0,,2,3 4,,6,7... 99996, 99997, 99998, 99999 Fasit: De første sifrene er: 3.4 926 389 7932 3846 2643 3832 790 2884 97 og på plass 76 etter komma finner vi: 4999 9998 3729 (merk seks 9-tall på rad) og de siste sifrene er 6999 8922 69 9688 92 060 00 62 637 678 ( og fra plass 000): 667 2279 669 ; og som nevnt i tips 6, kan de aller siste sifrene være gale. Mindre og mindre ledd hvordan regne ut negative ledd. Du vet at rekkene du skal regne ut konvergerer og at hvert ledd er mindre enn det foregående og at svaret bare har ett siffer foran komma (slik at det blir en del tester du slipper å gjøre i koden). Det lønner seg å regne ut hele tiden å regne den positive verdien av hvert ledd i arctanrekkene og så hhv. trekke fra og legge denne til arrayen som holder summen av rekka.

Litt flere sifre enn 0 000 Ikke multipliser opp en unøyaktighet Du bør av regne med litt flere sifre, f.eks. 4 ekstra, enn det kravet oppgaven stiller (0 000) fordi de siste sifrene lett blir unøyaktige (du vet ikke om alle de små bidragene fra de leddene utenfor det siste leddet du regner ut, ville gi ett tillegg i det siste, og evt. også det nest siste sifferet,...) Det kan lønne seg, når du regner ut neste ledd, å foreta multiplikasjonen før divisjonen (gir mindre feil i de siste sifrene). start ikke helt til toppen av arrayen Skriv med regnereglene nøyaktig Du bør i tillegg gjøre arrayene dine -2 plasser lengre i hver ende enn det som skal til for å representere de ca.0004 sifrene du regner på. Dvs. at du plasserer 3 (heltallsdelen av pi) i plass nr. og ikke nummer 0 i arrayene dine. Dette fordi når du regner på en array a, så vil du ofte referere til a[i-] og a[i+] uten at du hele tiden ønsker å sjekke om du har kommet utenfor arrayen.. Det lønner seg å grundig å skrive ned reglene for de fire regneartene (regnes det fra venstre mot høyre eller høyre mot venstre, hvordan og når overføres mente og må resultatet i en siffergruppe normaliseres etter utregningen,...). Her vil du få bruk for % og / operatorene (rest og heltallsdivisjon).

Utskrift med 0 også først i siffergruppe Regn bare på de deler av et ledd som er 0 Hvis du skriver ut med easyio i siffergrupper med fire tall og med en blank mellom (f. eks 0 slike siffergrupper per linje), vil du oppleve at eventuelle null først i en slik gruppe ikke skrives ut. Hvis du først omgjør tallene til en String med følgene metode, får du også med 0-er først i siffergruppa som så kan skrives ut med metoden for å skrive ut en String i easyio: String lagstring(int a) { String s = ""+a; while ( s.length() < 4) s= "0" + s; return s;. Det vil halvere regnetiden hvis du passer på hvor langt ned i arrayen leddene i den arctan-rekken du nå regner ut alle har blitt null. Når du så begynner beregning av neste ledd, begynner du på det stedet fordi du vet at neste ledd er mindre. Husk at ved multiplikasjon vil du kunne heve denne nullgrensen (midlertidig). 2. I programmet heter denne grensen: iszero, og peker på det ord i arrayen hvor alle ord ovenfor dette = 0 (så langt vi hittil er kommet i utregning av neste ledd ) En av add-metodene (max = 0 000) Størmers formel er nå lett π = 4 ( 44arctan 7 2 arctan 682 + + 7arctan 24arctan ) 2943

II) Husleie-oppgaven en rekke krav Feil/unøyaktigheter i oppgaven Grådig hybel-vert 4 x 7 hybler + 4 fellesrom B C D E gang A: felles-arealer H G F s2:..har programmet gått i 2 måneder med 32 ledige hybler i den første og 28 i den neste, viser dette tallet 60. Kommentar siden det max er 27 ledige hybler, er dette lett uforstålig (kommer fra en versjon av med dobbelt så mange hybler) Hvem får torpedogebyret på kr. 000.-? Gulbrand (det står i teksten), men da har han utgifter tillegg og utregningen av han totale fortjeneste blit gal Torpedoen?, men da er teksten feil (og torpedogebyret skal da ikke inkluderes i Gulbrands fortjeneste Svar: Velg den løsningen dere foretrekker og skriv det inn som en kommentar i programmet Bevisste uklarheter i oppgaven Meny Gulbrands fortjeneste kan være både: for én student på én måned. For én måned totalt hele hybelhuset I sum for alle måneder Finn ut fra situasjonen hva det er snakk om. Avslutt 2. Skriv liste over ledige hybler 3. Registrer ny leietager 4. Registrer frivillig flytting av leietager. Måneds-kjøring av husleie med strøm 6. Registrer betaling fra leietager 7. Sjekk om noen leietagere skal kastes ut 8. Skriv økonomirapport

Tre filer Hvodan sikre at Månedskjøring med husleie bare kjøre én gang? HaiHus.data Skrives og leses Fil med opplysninger om hyblene Er databasen for systemet Torpedo.txt Skrives ordre til en håndfast venn Lysregning.data Leses bare strømforbruk (husk å hoppe over/spesialbehandle fellesrommene) Du må vel førstspørre Gulbrand hvilken måned han registrerer for Så må du ha i programmet ha opplysning om hvilken måned som sist ble registrert Skal denne ligge også på fil? Format på filene HaiHus.data eksempel på format Tipsene Opplysninger om hver hybel: int gang; char bokstav; String studentnavn; int saldo; Et eksempel på en linje kan være: 2; C; Albert Aalesund; 2339; For tomme hybler settes studentnavn lik TOM HYBEL og saldo er mindre eller lik 0 (hvordan den kan bli negativ er beskrevet under). Etter dette skal det stå en linje med format :. Programstrukturen de 4 klassene: Oblig3, HybelHus, Hybel og Student - står i oppgaven 2. Konstruktører se foran 3. Testing på null 4. Konvertering til/fra bokstav til tall. Åpning av en fil med appand skriving sist på filen, ikke overskriving. int totaltantallmåneder; int antallhybelmånedermedtommehybler; int totalfortjeneste