TDT4102 Prosedyre og Objektorientert programmering Vår 2014



Like dokumenter
TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

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

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

TDT4110 IT Grunnkurs Høst 2014

Kanter, kanter, mange mangekanter

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

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

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

TDT Prosedyre- og objektorientert programmering

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

TDT Prosedyre- og objektorientert programmering

TDT4110 IT Grunnkurs Høst 2015

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

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

Kontinuasjonseksamen

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

Kapittel 1 En oversikt over C-språket

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

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamen

Øving 0 - Xcode TDT4102

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

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

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Debugging. Tore Berg Hansen, TISIP

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

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

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

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

TDT4100 Objektorientert programmering

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

INF109 - Uke 1b

Leksjon 3. Kontrollstrukturer

HØGSKOLEN I SØR-TRØNDELAG

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

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

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, formatert utskrift

Kontinuasjonseksamen

Repetisjon Novice Videregående Python PDF

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Del 1 En oversikt over C-programmering

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

Læringsmål og pensum. Oversikt

Sprettende ball Introduksjon Processing PDF

INF Seminaroppgaver til uke 3

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

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

Oppsummering fra sist

TDT4110 IT Grunnkurs Høst 2016

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

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

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

TDT4110 IT Grunnkurs Høst 2012

Mer om C programmering og cuncurrency

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

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

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

INF1000: Forelesning 4. Mer om arrayer Metoder

Algoritmer og Datastrukturer

Shellscripting I. Innhold

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

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

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

UNIVERSITETET I OSLO

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

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

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

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

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

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

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

Øvingsforelesning 3 Python (TDT4110)

TDT4110 IT Grunnkurs Høst 2016

Høgskolen i Oslo og Akershus. sin 2 x cos 2 x = 0, x [0, 2π) 1 cos 2 x cos 2 x = 0 2 cos 2 x = 1 cos 2 x =

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

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Kontinuasjonseksamen

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

Inn og ut i C/C++ 1. Inn og ut i C/C++

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Transkript:

Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 1 Frist: DD.MM.YYYY Mål for denne øvinga: bli kjent med C++ lære grunnleggende C++ og prosedyreorientert programmering lære hvordan programmer kan ta inn data og skrive ut på skjermen repetere grunnleggende programmering 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, Absolute C++ (Walter Savitch) It s Learning notater Side 1 av 11

1 «Input/Output» og Funksjoner (15%) a) Skriv en funksjon getandprintinteger som lar brukeren skrive inn et heltall (integer), og skriver dette tallet ut på skjermen // 1a: void getandprintinteger() { int tall = 0; cout << "Skriv inn et tall: "; cin >> tall; cout << "Du skrev: " << tall << endl; b) Skriv en funksjon getandreturninteger som lar brukeren skrive inn et heltall (integer), og returnerer dette fra funksjonen, funksjonen skal ikke skrive tallet til skjerm // 1b: int getandreturninteger() { int tall = 0; cout << "Skriv inn et tall: "; cin >> tall; return tall; c) Skriv en kommentar i koden din som forklarer hva slags returtyper disse funksjonene har, hvorfor de har dem, og forskjellen mellom disse returtypene. (minimum 5 setninger) Svar: getandprintinteger har void som returtype, siden den ikke skal returnere noe som helst. Funksjoner som ikke skal returnere noen verdi er typisk void. I dette tilfellet har vi ikke noe resultat, men skriver isteden noe til skjerm, et typisk eksempel på noe som kan være void. getandreturninteger har int som returtype, siden den skal returnere et heltall (altså en int). Denne funksjonen kan ikke være void, ettersom vi er interessert i å få returnert verdien, det eneste andre alternativet her, er long, som det er lite sannsynlig at trengs her. Forskjellen mellom int-retur og void-retur, ligger i at void-retur ikke returnerer noen verdi, mens int (eller en vilkårlig annen type retur) returnerer en verdi, som vi så kan bruke til å regne videre med. Dette kan sammenlignes med "Ans"-konseptet på kalkulatoren. Uten verdiretur ville vi måttet få verdiene skrevet inn igjen for hver gang vi trenger dem i en ny funksjon. På den annen side kan void være nyttig i tilfeller der en funksjon ikke resulterer i noen verdi. F.eks. vil en funksjon som skal printe noe til skjerm sjelden trenge å returnere noen verdi i tillegg. d) Skriv en funksjon getandprintsum som ved å bruke en av funksjonene du nå har skrevet, tar inn to heltall og skriver ut kun summen på skjermen (cout). void getandprintsum() { int number1 = getandreturninteger(); int number2 = getandreturninteger(); cout << "Summen av " << number1 << " og " << number2 << " er " << number1 + number2 << endl; e) Skriv en kommentar i koden din som forklarer hvorfor du valgte å bruke den funksjonen du valgte (minimum 5 setninger) Svar: Side 2 av 11

Her må vi bruke getandreturninteger(). getandprintsum() ville bare skrevet ut enkeltverdiene, uten å ta vare på dem på noen måte slik at vi kunne gjort noe mer med dem (som å summere dem, slik vi skal i denne oppgava). Dette demonstrerer dermed at det finnes tilfeller der vi trenger verdien som retur. Vi er heller ikke egentlig interessert i å skrive ut de verdiene vi nettopp skrev ut til skjerm ukritisk, vi vet tross alt hva vi nettopp skrev inn, og er mer interessert i å skrive ut summen av dem. Dermed vil verdiretur være riktig, og ikke verdiutskrift. 2 Løkker (10%) a) Utvid funksjonen getandprintsum som du lagde i oppgave 1 til å la brukeren velge hvor mange tall som skal summeres, enten ved å angi antallet tall først, eller ved å slutte når brukeren gir tall med sum 0. La den nye funksjonen hete getandprintmoresums // 2a - For-løkke-løsning void getandprintmoresums1() { int antalltall = 0; cout << "Hvor mange ganger vil du summere? "; cin >> antalltall; for (int i = 0; i < antalltall; i++) { int number1 = getandreturninteger(); int number2 = getandreturninteger(); cout << "Summen av " << number1 << " og " << number2 << " er " << number1 + number2 << endl; // 2a - While-løkke-løsning void getandprintmoresums2() { int sum = -1; cout << "Hvis summen er 0 avslutter vi," << " alle andre tall fortsetter" << endl; while (sum!= 0) { int number1 = getandreturninteger(); int number2 = getandreturninteger(); sum = number1 + number2; cout << "Summen av " << number1 << " og " << number2 << " er " << sum << endl; b) Skriv en kommentar i koden din som forklarer hvilken type løkke som er best egnet for hver av de to mulighetene i forrige oppgave, og hvorfor (minimum 5 setninger). Svar: Hvis vi vet hvor mange ganger vi skal repetere noe, har vi typisk en for-løkke. I det første tilfellet i oppgave 2a har vi "angi antallet tall først" i oppgaveteksten, som betyr at antallet iterasjoner er kjent før vi begynner å iterere, ergo for-løkke. Hvis vi derimot ikke vet hvor mange ganger vi skal iterere, men heller avhenger av noe som skjer underveis for å finne antallet ganger, har vi typisk en while-løkke. While-løkke kommer som navnet hinter til av at vi skal gjøre noe "så lenge" noe er sant. I dette tilfellet skal summen ikke være 0, noe vi ikke kan vite hvor mange iterasjoner vi trenger for å oppnå før den iterasjonen hvor dette resultatet oppstår. Side 3 av 11

Det er verdt å nevne at ei for-løkke også kan skrives som en while, og vica-verca, så begge alternativene i 2a KAN teknisk sett løses med begge typer løkke. Det må dog nevnes at det blir litt mer kronglete, da for-løkker ikke egentlig egner seg veldig godt til tilfellet hvor antallet iterasjoner er helt ukjent, og while-løkker har ikke tellevariabler med i grunnlaget, slik at det blir litt merarbeid om man skal skrive ei telleløkke som while-løkke. c) Skriv funksjonen getandreturndouble som skal gjøre det samme som getandreturninteger, men istedenfor å lese inn et heltall, skal denne funksjonen lese inn et desimaltall // 2c: double getandreturndouble() { double tall = 0; cout << "Skriv inn et tall: "; cin >> tall; return tall; d) Skriv en funksjon som konverterer NOK til Euro. // 2d: void convertnoktoeur() { double NOK = -1.0f; while (NOK < 0.0f) { NOK = getandreturndouble(); double EUR = NOK * 7.84; cout << setprecision(2) << fixed << NOK << " NOK er " << EUR << " EUR" << endl; /** "Magic formula" page 31 in textbook - As an alternative to << setprecision(2) << fixed cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); */ e) Skriv en kommentar i koden din som forklarer hvorfor vi ikke bør bruke getandreturninteger i forrige oppgave, men heller getandreturndouble, 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. (Minimum 5 setninger). Svar: getandreturninteger gir oss et heltall, dette vil dermed ikke ha noen desimalplasser, som vil være problematisk når vi skal regne med valuta. Rett nok vil resultatet fortsatt bli regnet ut med riktig kurs, men øre-biten av verdien vil bli borte allerede FÿR utregningen, noe som vil gi oss et svar som neppe er helt riktig. Når vi skal regne med desimaltall, bør vi derfor være nøye med å velge riktig datatype. I dette tilfellet er double tilstrekkelig, selv om double ikke er eksakt. Vi beholder dermed desimalplassene, og får et mer generelt korrekt svar fra utregningen. Det i oppgaven som legger føring på valg av datatype i dette tilfellet er ordleggingen "to desimaler", som gir oss et hint om at det her skal jobbes med desimaltall. Returtypen til funksjonen er void, siden oppgaven sier "skriv ut det vekslede beløpet", og ikke "returner det vekslede beløpet". Side 4 av 11

f) Skriv om main() slik at brukeren kan velge i en meny mellom funksjonene fra foregående oppgaver int main(int argc, char **argv) { int valg = -1; while (valg!= 0) { cout << "0) Avslutt" << endl << "1) Summer to tall" << endl << "2) Summer flere tall (for)" << endl << "3) Summer flere tall (while)" << endl << "4) Konverter NOK til EURO" << endl << "5) Skriv ut gangetabell" << endl << "6) Konverter sekunder" << endl << "7) Regn ut tips og moms" << endl << "8) Sjekk om et tall er partall/oddetall" << endl << "9) Sjekk hvilket tall som er storst" << endl << "10) ABC-formelen" << endl << "11) Laanekalkulator" << endl << "Angi valg (0-11)"; cin >> valg; cout << endl; switch (valg) { case 0: case 1: getandprintsum(); case 2: getandprintmoresums1(); case 3: getandprintmoresums2(); case 4: convertnoktoeur(); case 5: printmultiplicationtable(); case 6: convertsecondstotime(); case 7: calculatevatandtip(); case 8: checkoddeven(); case 9: printlargest(); case 10: solveandprintroots(); Side 5 av 11

case 11: calculateloanpayments(); default: cout << "Ugyldig valg" << endl; cout << endl; g) Skriv en funksjon som skriver ut en gangetabell på skjermen (cout). La brukeren gi både bredde og høyde på tabellen. void printmultiplicationtable() { int height = 0; int width = 0; cout << "Hoyde?"; cin >> height; cout << "Bredde?"; cin >> width; for (int x = 1; x <= width; x++) { for (int y = 1; y <= height; y++) { cout << x *y << "\t"; cout << endl; Legg denne funksjonen til i testmenyen 3 Flere operatorer (10%) a) Skriv en funksjon som lar brukeren skrive inn et antall sekunder (ved å bruke cin) og skriver ut (til cout) tilsvarende timer, minutter og sekunder. // 3a void convertsecondstotime() { int seconds = 0; cout << "Skriv antall sekunder "; cin >> seconds; // Antall timer er sekunder / 3600 // (desimaldelen forsvinner i int-matte) int hours = seconds / 3600; // La antall sekunder vaere resten fra divisjonen over. // Modulo (%) gir heltallsresten fra en divisjon, // f.eks. har 10/3, 3 som heltallssvar, // og 1 som rest (10 = 3 * 3 + 1). // Vi trenger ikke lengre alle sekundene som har gaatt opp // i hele timer. seconds = seconds % 3600; // Minuttene er da resterende sekunder / 60. int minutes = seconds / 60; // Og rene sekunder er resten fra denne divisjonen igjen seconds = seconds % 60; cout << hours << " time"; if (hours!= 1) { Side 6 av 11

cout << "r"; cout << ", " << minutes << " minutt"; if (minutes!= 1) { cout << "er"; cout << " og " << seconds << " sekund"; if (seconds!= 1) { cout << "er"; cout << endl; b) Skriv en funksjon som regner ut mva og tips for en resturantregning. void calculatevatandtip() { double price = 0.0f; cout << "Angi pris for maaltidet: " << endl; cin >> price; double vat = 0.0875 * price; double tip = (vat + price) * 0.18; cout << setprecision(2) << fixed << "Maaltid: " << price << endl << "MVA: $" << vat << endl << "Tip: $" << tip << endl << "---------------------" << endl << "Sum: $" << price + vat + tip << endl; Side 7 av 11

4 Kontrollstruktur (15%) a) Skriv en funksjon som lar brukeren skrive inn et heltall og sjekker om tallet er et partall eller oddetall. La funksjonen skrive resultatet ut på skjermen (cout). void checkoddeven() { int number = getandreturninteger(); if (number % 2 == 1) { cout << "Tallet er et oddetall" << endl; else { cout << "Tallet er et partall" << endl; b) Skriv en funksjon som lar brukeren skrive inn to desimaltall og skriver ut hvilket som er størst på skjermen (cout). void printlargest() { double number1 = getandreturndouble(); double number2 = getandreturndouble(); if (number1 > number2) { cout << number1 << " er storst" << endl; else if (number2 > number1) { cout << number2 << " er storst" << endl; else { cout << "Tallene er like store" << endl; c) Skriv en kommentar i koden din hvor du forklarer hva som ville vært forskjellig dersom de foregående oppgavene hadde sagt «Skriv en funksjon som tar inn to desimaltall», istedenfor «Skriv en funksjon som lar brukeren skrive inn to desimaltall». (Minimum 5 setninger) Å forstå forskjellen mellom disse to konseptene er viktig fremover i øvingsopplegget. Svar: Hvis funksjonen hadde vært "tar inn", ville den tatt inn argumenter: printlargest(double number1, double number2). Disse ville måtte bli tatt inn et annet sted, og sendt inn som parametre til funksjonen. Dette kan sammenlignes med måten vi bruker matematiske funksjoner som sin(), cos() og tan() på: Når man bruker f.eks. tan(), angir man et parameter (i grader eller radianer), tan() spør ikke brukeren om input, men får input gitt. Med andre ord ville funksjonen ikke hatt noe input internt, altså ingen cin-kall. Verdiene måtte isåfall bli lest inn i test-menyen, for så å sendes inn. Fordelen med dette er at en slik funksjon kan anvendes mer generelt. Hvis funksjonen i tillegg returnerer en verdi, istedenfor å printe den, kan den f.eks. brukes som en max()-funksjon. Side 8 av 11

5 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 internalsum som regner ut b 2 4ac og returnerer verdien (ingen utskrift til skjerm) double internalsum(double a, double b, double c) { return pow(b, 2.0) - 4 * a * c; // Alternativt: return b*b - 4*a*c; b) Skriv en funksjon positivesqrt som regner ut x dersom x er positiv eller 0, i alle andre tilfeller skal funksjonen returnere -1. double positivesqrt(double x) { if (x >= 0.0f) { return sqrt(x); return -1; c) Skriv en funksjon polyroot som bruker de to foregående funksjonene til å regne ut b 2 4ac double polyroot(double a, double b, double c) { double root = positivesqrt(internalsum(a, b, c)); return root; d) Skriv en funksjon abcformula som regner ut løsning(ene) til b ± b 2 4ac 2a der a, b og c er gitt som argumenter til funksjonen, gjenbruk funksjonene fra forrige oppgave, og skriv ut resultatene til skjerm. void abcformula(double a, double b, double c) { double root = polyroot(a, b, c); if (root > 0) { // 2 Løsninger double solution1 = (-b + root) / (2 * a); double solution2 = (-b - root) / (2 * a); cout << "Loesning 1: " << solution1 << endl; cout << "Loesning 2: " << solution2 << endl; else if (root == 0) { // 1 Løsning double solution = (-b / (2 * a)); cout << "Loesning 1: " << solution << endl; else { // Ingen reell løsning cout << "Ingen reell loesning" << endl; Side 9 av 11

e) Lag en funksjon solveandprintroots som lar brukeren skrive 3 desimaltall, bruk abcformula til å regne ut røtten til andregradsuttrykket gitt ved disse tallene void solveandprintroots() { double a = 0.0f; double b = 0.0f; double c = 0.0f; cout << "A: "; cin >> a; cout << "B: "; cin >> b; cout << "C: "; cin >> c; abcformula(a, b, c); f) Legg til solveandprintroots i testmenyen i main() g) Buk testmenyen til å regne ut røttene til andregradsuttrykket gitt ved disse tallene. Test programmet med verdier som gir 0, 1, og 2 løsninger Hint: Prøv å regne ut røttene til: 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. Side 10 av 11

6 Flere Løkker (25%) a) Skriv en calculateloanpayments funksjon som regner ut årlige innbetalinger av et lån over 10 år. Legg denne funksjonen til i testmenyen void calculateloanpayments() { double amount, interest; double total = 0; cout << "Laanesum: "; cin >> amount; cout << "Laanerente: "; cin >> interest; cout << "\t\tbetaling\trest\n"; for (int i = 0; i < 10; i++) { int payment = amount / 10 + (10 - i) / 10.0 * amount * (interest / 100.0); total += payment; cout << "Aar nr " << i + 1 << ":\t" << payment << "\t\t" << (9 - i) / 10.0 * amount << endl; cout << "Totalt:\t\t" << total << endl; 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 100000 100000000 2 90000 1000000 Hint: Bruk \t som tabulator i utskriften Side 11 av 11