TDT4102 Prosedyreog objektorientert programmering Vår 2016



Like dokumenter
TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

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

Øving 0 - Xcode TDT4102

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

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

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

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

TDT4110 IT Grunnkurs Høst 2015

TDT4110 IT Grunnkurs Høst 2014

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

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

TDT Prosedyre- og objektorientert programmering

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi,

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kapittel og 5. september Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 4.

Kontinuasjonseksamen

UNIVERSITETET I OSLO

TDT Prosedyre- og objektorientert programmering

Kanter, kanter, mange mangekanter

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

Repetisjon Novice Videregående Python PDF

Debugging. Tore Berg Hansen, TISIP

Kontinuasjonseksamen

INF109 - Uke 1b

TDT4110 IT Grunnkurs Høst 2016

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

Kapittel 1 En oversikt over C-språket

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

Løse reelle problemer

Algoritmer og Datastrukturer

Øvingsforelesning i Python (TDT4110)

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

UNIVERSITETET I OSLO

TDT4110 IT Grunnkurs Høst 2012

Steg 1: Rest etter divisjon

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

Kontinuasjonseksamen

TDT4110 IT Grunnkurs Høst 2016

INF Seminaroppgaver til uke 3

HØGSKOLEN I SØR-TRØNDELAG

TDT4105 IT Grunnkurs Høst 2016

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

MAT1030 Diskret matematikk

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

TDT4105 IT Grunnkurs Høst 2014

Øvingsforelesning TDT4105

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

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

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

HØGSKOLEN I SØR-TRØNDELAG

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å.

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

TDT4100 Objektorientert programmering

Oppsummering fra sist

Studentene skal kunne. gjøre rede for begrepene naturlige, hele, rasjonale og irrasjonale tall. skrive mengder på listeform

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

HØGSKOLEN I SØR-TRØNDELAG

Matematikk Øvingsoppgaver i numerikk leksjon 4 Løsningsforslag

Del 1 En oversikt over C-programmering

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

UNIVERSITETET I OSLO

Dublettsammenslåing. GolfBox A/S Sensommervej 34 F 8600 Silkeborg, Danmark Tlf.: :info@golfbox.no Web:golfbox.

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Kontinuasjonseksamen

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

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

UNIVERSITETET I OSLO

Øvingsforelesning 5 Python (TDT4110)

Leksjon 3. Kontrollstrukturer

KONTINUASJONSEKSAMEN

Transkript:

Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 2 Frist: 2016-01-29 Mål for denne øvingen: lære grunnleggende C++ og prosedyreorientert programmering lære hvordan programmer lese inn data fra brukeren og skrive tekst ut på skjermen lære hvordan funksjoner kan ta inn data som parametre og returnere verdier Generelle krav: Bruk de eksakte navn og spesifikasjoner gitt i oppgaven. Det er valgfritt om du vil bruke en IDE (Visual Studio, Xcode), men koden må være enkel å lese, kompilere og kjøre. Anbefalt lesestoff: Kapittel 1, 2 og 3, Absolute C++ (Walter Savitch) Side 1 av 6

1 Funksjoner og «Input/Output» (25%) For at programmer ikke skal bli uoversiktlige deler man dem opp i funksjoner, som inneholder gjenbrukbar kode. Denne koden kan bli kjørt fra andre steder i programmet ved hjelp av et funksjonskall. (Alle programmer har minst en funksjon. Når programmet startes vil operativsystemet kjøre funksjonen som heter main.) I det følgende eksempelprogrammet har vi to funksjoner i tillegg til main-funksjonen. Den ene, add, tar inn to argumenter og legger de sammen, for deretter å returnere verdien til det stedet i programmet der funksjonen ble kjørt. Utskriften av resultatet til skjerm skjer der funksjonen ble kjørt fra, dvs. main-funksjonen. Den andre, inputintegersandprintproduct, har ingen parametre, men leser inn data fra brukeren og skriver ut til skjerm. Den returnerer ingenting, og har derfor returtypen void. #include <iostream> // En funksjon som har paramtre og returverdi // Sagt på en annen måte: En funksjon som tar inn argumenter og // returnerer en verdi int add(int a, int b) { return a + b; // En funksjon som leser inn input fra bruker og skriver ut til skjerm void inputintegersandprintproduct() { int x = 0; int y = 0; std::cout << "Skriv inn to heltall: "; std::cin >> x; std::cin >> y; int product = x * y; std::cout << x << " * " << y << " = " << product << std::endl; int sumofoneandtwo = add(1, 2); std::cout << "1 + 2 = " << sumofoneandtwo << std::endl; // Funksjonskall kan settes rett inn der man vil ha verdien: std::cout << "2 + 2 = " << add(2, 2) << std::endl; inputintegersandprintproduct(); I dette faget er det viktig å forstå forskjellen mellom konseptene «lese inn fra brukeren» og parametre/argumenter i funksjoner, samt mellom konseptene å «skrive ut til skjerm» og det å returnere verdier fra funksjoner. Hensikten til denne oppgaven er at vi skal bli sikrere på dette. Side 2 av 6

a) Skriv en funksjon som heter inputandprintinteger som lar brukeren skrive inn et heltall og skriver det ut til skjerm. Test funksjonen ved å kjøre den fra main, slik: inputandprintinteger(); Eksempel på resultat av å kjøre programmet: Skriv inn et tall: 42 Du skrev: 42 b) Skriv en funksjon som heter inputinteger som lar brukeren skrive inn et heltall og returnerer dette. Test funksjonen ved å kjøre den fra main, slik: int number = inputinteger(); std::cout << "Du skrev: " << number; Eksempel på resultat av å kjøre programmet: Skriv inn et tall: 123 Du skrev: 123 c) Skriv en funksjon inputintegersandprintsum som ved å bruke en av funksjonene du nå har skrevet, leser inn to heltall fra brukeren og skriver ut kun summen til skjermen. Eksempel på resultat av å kjøre programmet: Skriv inn et tall: 3 Skriv inn et tall: 4 Summen av tallene: 7 d) Skriv en kommentar i koden din som forklarer hvilken funksjon av inputandprintinteger og inputinteger du brukte for å lage inputintegersandprintsum, og hvorfor. e) Skriv en funksjon som heter isodd, som tar inn et heltall og returnerer en boolsk verdi. Funksjonen skal returnere true dersom argumentet er et oddetall og false ellers. Den skal ikke lese noe inn fra brukeren eller skrive ut noe til skjermen. En effektiv måte å teste funksjonen på ved hjelp av en for-løkke kan se slik ut: for (int i = 10; i < 15; i++) { if (isodd(i)) { std::cout << i << " er et oddetall." << std::endl; else { std::cout << i << " er et partall." << std::endl; Eksempel på resultat av å kjøre programmet: 10 er et partall. 11 er et oddetall. 12 er et partall. 13 er et oddetall. 14 er et partall. Side 3 av 6

f) Skriv en funksjon som heter printhumanreadabletime som tar inn antall sekunder som en parameter, og skriver dette ut til skjerm i et menneskevennlig format. For eksempel vil 10000 sekunder skrives ut som «2 timer, 46 minutter og 40 sekunder». Programmet ditt trenger ikke være grammatisk korrekt, du kan med andre ord skrive ut «1 minutter». (Hvis du ønsker å gjøre programmet ditt grammatisk korrekt, kan du skrive ut entallbøyningen av time, minutt og sekund etterfulgt av «r» eller «er» hvis (if) antallet ikke er 1.) Hint: Du kan bruke modulo-operatoren (%) for å forenkle koden din. Modulo gir resten om man dividerer venstre side av utrykket på høyre. For eksempel vil 72 % 60 gi 12. 2 Løkker (15%) a) Lag en funksjon som heter inputintegersusingloopandprintsum, som tar utgangspunkt i koden i funksjonen inputintegersandprintsum fra oppgave 1. Den nye funksjonen skal la brukeren velge hvor mange tall som skal summeres, enten ved å angi antallet tall først, eller ved å slutte når brukeren skriver inn tallet 0. b) Den forrige deloppgaven kan løses enten ved at brukeren angir antall tall som skal summeres i forkant, eller at man fortsetter å lese inn tall helt til brukeren skriver inn 0. Skriv en kommentar i koden din som forklarer hvilken type løkke som er best egnet for hver av de to alternativene, og hvorfor. c) Skriv funksjonen inputdouble som skal gjøre det samme som inputinteger fra oppgave 1, men istedenfor å lese inn et heltall, skal denne funksjonen lese inn og returnere et desimaltall. d) Skriv en funksjon som konverterer NOK til Euro. La brukeren gi beløpet som skal konverteres som et positivt desimaltall. Hvis brukeren gir et negativt tall skal programmet spørre etter et nytt tall. Skriv ut det vekslede beløpet med to desimaler. Bruk 1 EUR = 9,64 NOK. Gjenbruk tidligere skrevne funksjoner så langt som mulig, og test funksjonen fra main(). e) Skriv en kommentar i koden din som forklarer hvorfor vi ikke bør bruke inputinteger i forrige oppgave, men heller inputdouble, legg spesielt merke til hva i oppgaveteksten som legger føring på denne bruken. Kommenter også på returtypen til funksjonen du skrev i forrige oppgave. Side 4 av 6

3 Menysystem (10%) a) Hittil har vi testet funksjonene vi har skrevet på en ganske usystematisk måte, ved å prøve dem ut i main. Dette skal vi nå rydde opp i. Skriv om main slik at brukeren kan velge i en meny mellom funksjonene fra foregående oppgaver, eksempel: Velg funksjon: 0) Avslutt 1) Summer to tall 2) Summer flere tall 3) Konverter NOK til EURO. Angi valg (0-3): Hvis brukeren f.eks. velger 2, skal funksjonen som lar brukeren angi tall for summering kjøre, når denne er ferdig, skal menyen kjøre på nytt, programmet skal ikke avslutte før brukeren selv velger dette ved å angi menyvalget for «Avslutt». b) Skriv en funksjon som skriver ut en gangetabell på skjermen (cout). La brukeren gi både bredde og høyde på tabellen. Velg selv navn for funksjonen. Hint: Løkke i løkke. Legg denne funksjonen til i testmenyen 4 Bruk av funksjoner i funksjoner, og røtter (25%) I funksjonene under skal du tolke hva som skal være argumenter til funksjonen, og lære å bruke funksjoner i funksjoner. Generelt heretter i faget, skal funksjoner returnere verdier, og ikke skrive ut noe til skjerm, med mindre annet er spesifisert. a) Skriv en funksjon discriminant som regner ut b 2 4ac og returnerer verdien (ingen utskrift til skjerm). b) Skriv en funksjon printrealroots som finner de reelle røttene til andregradsligningen ax 2 + bx + c = 0 ved å bruke formelen x = b ± b 2 4ac 2a der a, b og c er gitt som argumenter til funksjonen. Gjenbruk funksjonene fra de forrige deloppgavene, og skriv ut løsningene til skjerm. Hint: Bruk en funksjon fra standardbiblioteket til å finne kvadratroten. Slå gjerne opp på http://www.cplusplus.com/ for å finne ut hvilke funksjoner som er tilgjengelige. Ligningen har 2, 1, eller 0 reelle løsninger (vi ser bort fra imaginære løsninger). Dette bestemmes ved at: Du kan anta at a 0. 2 løsninger dersom b 2 4ac > 0 1 løsning dersom b 2 4ac = 0 ingen løsninger dersom b 2 4ac < 0 c) Lag en funksjon solvequadraticequation som lar brukeren skrive inn 3 desimaltall og bruk printrealroots til å regne ut røttene til andregradsuttrykket gitt ved disse tallene. Side 5 av 6

d) Legg til solvequadraticequation i testmenyen i main(). e) Bruk testmenyen til å finne røttene til disse andegradsligningene. Sjekk at programmet fungerer med tall som gir 0, 1, og 2 løsninger. x 2 + 2x + 4 = 0 4x 2 + 4x + 1 = 0 8x 2 + 4x 1 = 0 NB: Generelt i øvingsopplegget bør dere gjøre noe tilsvarende dette for å teste at koden deres fungerer som den skal. 5 Flere løkker (25%) a) Skriv en calculateloanpayments funksjon som regner ut årlige innbetalinger av et lån over 10 år. La brukeren spesifisere lånebeløp og rente. La programmet for hver innbetaling skrive ut (cout) størrelsen på innbetalingen og det gjenstående lånet. Utskriften skal være i et lettleselig format. Bruk følgende formel for å regne ut innbetalingene: Innbetaling = TotaltLån AntallAvdrag + Rente 100 GjenståendeLån Du trenger kun regne med én innbetaling i året, og denne skjer ved slutten av året. Renter skal ikke legges til eller trekkes fra det gjenstående lånebeløpet, men kun regnes med i innbetalingen. Legg denne funksjonen til i testmenyen. b) Utvid funksjonen fra forrige deloppgave til å skrive ut oversikten over innbetalinger som en pen og pyntelig tabell, som ser ca slik ut: År Innbetaling Gjenstående Lån 1 14500 90000 2 14000 80000 Hint: Bruk \t som tabulator i utskriften. Side 6 av 6