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

TDT4110 IT Grunnkurs Høst 2015

TDT4110 IT Grunnkurs Høst 2012

TDT4110 IT Grunnkurs Høst 2016

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Øvingsforelesning 3 Python (TDT4110)

TDT Prosedyre- og objektorientert programmering

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

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

UNIVERSITETET I OSLO

BOKMÅL Side 1 av 6. EKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Fredag 6. juni 2008 Kl

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

TDT4105 IT Grunnkurs Høst 2014

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

TDT Prosedyre- og objektorientert programmering

TDT4100 Objektorientert programmering

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

TDT4110 IT Grunnkurs Høst 2016

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

TDT4105 IT Grunnkurs Høst 2014

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

Øving 0 - Xcode TDT4102

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

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

TDT4105 IT Grunnkurs Høst 2012

Steg 1: Rest etter divisjon

TDT4105 IT Grunnkurs Høst 2016

Øvingsforelesning i Python (TDT4110)

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

FYSMEK1110 Eksamensverksted 23. Mai :15-18:00 Oppgave 1 (maks. 45 minutt)

TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting

UNIVERSITETET I OSLO

Informasjon Eksamen i IN1000 høsten 2017

TDT4110 IT Grunnkurs Høst 2014

Øvingsforelesning 5 Python (TDT4110)

TDT Prosedyre- og objektorientert programmering

Oppsummering fra sist

Eksamensoppgave i TDT4105 Informasjonsteknologi grunnkurs, med Matlab LØSNINGSFORSLAG

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

TDT Prosedyre- og objektorientert programmering

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

UNIVERSITETET I OSLO

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

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

TDT4110 IT Grunnkurs Høst 2012

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

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

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

static int skrivetidsfrist = 0; // antall overskredet tid når skrive

Kontinuasjonseksamen

UNIVERSITETET I OSLO

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Øvingsforelesning 5 Python (TDT4110)

Øvingsforelesning 1 Python (TDT4110)

GUI («Graphical User Interface») del 2

Forelesning inf Java 5

TDT4110 IT Grunnkurs Høst 2016

Forelesning inf Java 5

HØGSKOLEN I SØR-TRØNDELAG

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

Rekursjon. Binærsøk. Hanois tårn.

HØGSKOLEN I SØR-TRØNDELAG

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

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

INF Uke 10. Ukesoppgaver oktober 2012

Del 1 En oversikt over C-programmering

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

UNIVERSITETET I OSLO

TDT4110 IT Grunnkurs Høst 2014

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

TDT4110 IT Grunnkurs Høst 2017

Kontinuasjonseksamen

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

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4100 Objektorientert programmering

Transkript:

Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Løsningsforslag øving 2 Frist: DD.MM.YYYY Mål for denne øvingen: Lære om funksjoner Lære forskjellene mellom vanlige variabler og pekere Lære å skrive koden din i flere filer Lære å bruke nyttig matematiske funksjoner som sin og cos Generelle krav: Bruk de eksakte navn og spesifikasjoner som er 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 Dersom noe er uklart eller trenger en bedre forklaring ta kontakt med en studass på sal. Anbefalt lesestoff: Kapittel 3 & 4, Absolute C++ (Walter Savitch) Side 1 av 8

1 Funksjonshoder (10%) a) Lag et funksjons hode som returnerer akselerasjonen i y-retning (oppover). Akselerasjonen i y-retning er normalt et desimaltall. Denne funksjonen skal hete "accly". double accly(); b) Skriv et funksjonshode som regner ut farten i y-retning (oppover). Denne funksjonen tar inn to flyttall (double): startfart og tid. Til slutt returnerer funksjonen farten som et flyttall. Funksjonen skal hete "vely". double vely(double startvel, double t); c) Skriv et funksjonshode som regner ut farten i y-retning (oppover) med integrasjon. Denne funksjonen tar inn to flyttall (double): startfart og tid. Til slutt returnerer funksjonen farten som et flyttall. Funksjonen skal hete "velinty". double velinty(double startvel, double t); d) I denne deloppgaven skal vi lage et sett av funksjonshoder for utregning av posisjon både i X- og Y-retning. double posx(double startvel, double t); double posy(double startvel, double t); double posintx(double startvel, double t); double posinty(double startvel, double t); e) Skriv et funksjonshode som tar inn tid i sekunder og ikke returnerer noe. Denne skal hete "printtime". void printtime(double t); f) Skriv et funksjonshode som tar in startfarten i y-retning og returnere flytiden i sekunder. Denne skal hete "flighttime". double flighttime(double startvely); Side 2 av 8

2 Implementer funksjoner (20%) a) I denne oppgaven skal du implementere funksjonen fra oppgave 1a. Denne funksjonen returnerer akselerasjonen i y-retning (oppover). Til vanlig er akelerasjonen i y-retning -9.81m/s (gjenstander trekkes mot bakken). double accly(){ return -9.81; b) Denne oppgaven skal implementere funksjonen fra oppgave 1b (fart i y-retning). double vely(double startvel, double tid){ return startvel + accly() * tid; c) Nå skal vi implementere funksjonen fra oppgave 1c (fart i y-retning med integral). double velinty(double startvel, double tid){ double accvelocity = startvel; double curtime = 0; while (curtime < tid){ accvelocity += accly()*intstep; curtime += intstep; return accvelocity; Side 3 av 8

d) I denne oppgaven skal vi lage / implementere funksjonene som regner ut posisjonen i X- og Y-retning (oppgave 1d). double posx(double startvel, double tid){ double position = startvel*tid; return position; double posy(double startvel, double tid){ double position = startvel*tid + 0.5 *pow(tid,2.0) * accly(); return position; double posintx(double startvel, double tid){ double accposition = 0; double curtime = 0; while (curtime < tid){ accposition += startvel*intstep; curtime += intstep; return accposition; double posinty(double startvel, double tid){ double accposition = 0; double curtime = 0; while (curtime < tid){ accposition += velinty(startvel,curtime)*intstep; curtime += intstep; return accposition; e) Implementer funksjonen "printtime" (oppgave 1e). Vi ønsker å dele opp sekundene i timer, minutter og sekunder (sekunder kan evt være et desimaltall) for så å skrive dette til skjerm. void printtime(double tid){ int hours = (int)tid/3600; int minutes = ((int)tid - 3600*hours)/60; double seconds = tid - hours*3600 - minutes * 60; cout << hours << " hours, " << minutes << " minutes and " << seconds << " seconds" << endl; Side 4 av 8

f) Implementer funksjonen "flighttime" (oppgave 1f). double flighttime(double startvely){ return -startvely/accly()*2.0; 3 Verifiser at funksjonene fungerer (10%) a) Forsikre deg om at programmet kompilerer. b) Test hver metode fra main funksjon. Løsning (for et fullstendig oppsett se vedlagt kode): result = posx(10.0,3.0); solution = 30; deviation = pow(result-solution,2.0); if (deviation > maxerror){ cout << "PosX() is malfunctioning (returned: " << result << " expected: " << solution << ")" << endl; result = posintx(10.0,3.0); solution = 30; deviation = pow(result-solution,2.0); if (deviation > maxerror){ cout << "PosIntX() is malfunctioning (returned: " << result << " expected: " << solution << ")" << endl; result = flighttime(30.0); solution = 6.116; deviation = pow(result-solution,2.0); if (deviation > maxerror){ cout << "FlightTime() is malfunctioning (returned: " << result << " expected: " << solution << ")" << endl; 4 Implementer funksjoner (20%) a) I denne oppgaven skal vi implementere følgende funksjoner: void getuserinput(double *theta, double *absvelocity); double getvelocityx(double theta, double absvelocity); double getvelocityy(double theta, double absvelocity); void getvelocityvector(double theta, double absvelocity, double *velocityx, double *velocityy); Side 5 av 8

void getuserinput(double* angle, double* absvelocity){ cout << "Please enter a angle for \ the cannon angle:" << endl; cin >> (*angle); while(*angle < 0.1){ cout << "The angle you chose was too small, \ please select a larger one." << endl; cin >> (*angle); cout << "Please enter a velocity for \ the cannon projectile:" << endl; cin >> (*absvelocity); while(*absvelocity < 0.1){ cout << "The velocity you chose is too \ small, try again." << endl; cin >> (*absvelocity); double getvelocityx(double angle, double absvelocity){ return cos(angle)*absvelocity; double getvelocityy(double angle, double absvelocity){ return sin(angle)*absvelocity; void getvelocityvector(double angle, double absvelocity, double *velocityx, double *velocityy){ *velocityx = getvelocityx(angle, absvelocity); *velocityy = getvelocityy(angle, absvelocity); b) Implementer funksjonen "getdistancetraveled" double getdistancetraveled(double velocityx, double velocityy){ double ftime = flighttime(velocityy); double distancetraveled = posx(velocityx,ftime); return distancetraveled; Side 6 av 8

c) Implementer funksjonen "optimalangleformaxdistance" double optimalangleformaxdistance(double absvelocity){ double PI = 3.14; double bestangle = 0.001; double bestdistance = 0; double velocityx, velocityy; for (double angle = 0.001; angle < PI/2; angle+= 0.001){ getvelocityvector(angle, absvelocity, &velocityx, &velocityy); double distance = getdistancetraveled(velocityx,velocityy); if(distance > bestdistance){ bestangle = angle; bestdistance = distance; return bestangle; d) Implementer funksjonen "targetpractice". double targetpractice(double distancetotarget, double velocityx, double velocityy){ double error = distancetotarget - getdistancetraveled (velocityx, velocityy); return pow(error,2.0); 5 Verifiser at funksjonene fungerer (10%) a) Verifiser at programmet kompilerer b) Lag en kodesnutt i "main()" som tester funksjonene Funksjonene kan testes på sammme måte som er gjort i løsningsforslaget for oppgave 3b. 6 Større program (20%) a) Legg til funksjonen "playtargetpractice" til biblioteket og legg til kode i "main()" for å kjøre denne funksjonen. Side 7 av 8

void playtargetpractice(){ cout << "*******Playing target practice!******" << endl; cout << "The goal of this game is to hit the target, you will be presented with a target at some random distance from you. In order to hit a target you must specify an angle and a initial velocity for the cannonball." << endl << endl; double distancetotarget = 20.0; double maxerror = 2.0; bool win = false; cout << "*************************************" << endl; cout << "****Target is placed at " << distancetotarget << cout << "*************************************" << endl; cout << "************Happy hunting!***********" << endl; cout.precision(2); cout.setf(ios::fixed); for (int chance = 0; chance < 10; chance++){ "m range****" << endl; cout << "*************************************" << endl; cout << "***************Round: " << chance+1 << "**************" << endl; cout << "*************************************" << endl; double angle, absvelocity, velocityx, velocityy; getuserinput(&angle, &absvelocity); getvelocityvector(angle, absvelocity, &velocityx, &velocityy); double error = targetpractice(distancetotarget, velocityx, velocityy); double distancetraveled = getdistancetraveled(velocityx,velocityy); if (error < maxerror){ win = true; break; cout << "Your shot went: " << distancetraveled << "m" << endl; cout << "Distance from target: " << sqrt(error) << "m" << endl; if (distancetraveled > distancetotarget){ cout << "You overshot the target! A little less force next time maybe?" << endl; else{ cout << "You didnt reach the target. Some more force next time?" << endl; if (win){ cout << "Congratulations you won!" << endl; else{ cout << "Sorry, you lost." << endl; Side 8 av 8