• Keine Ergebnisse gefunden

“Object-Oriented Programming for Scientific Computing”

N/A
N/A
Protected

Academic year: 2021

Aktie "“Object-Oriented Programming for Scientific Computing”"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

IWR, Heidelberg University Summer Semester 2015

Exercise Sheet 1 14. 04. 2015

Exercises for the Lecture Series

“Object-Oriented Programming for Scientific Computing”

Ole Klein

ole.klein@iwr.uni-heidelberg.de

To be handed in on 28. 04. 2015 before the lecture

Due to the unforeseen large audience of the lecture the first exercise sheet is due two weeks after re- lease, not one week as usual. This is meant as an opportunity to accustom yourself with the exercises and potentially find exercise partners. Due to the large number of participants we will most likely allow group work, details will follow. There will only be a short meeting on 16.4. and no exercise group, because things are still being set up, but you are welcome to attend if you have questions about the lecture or exercises or something else to discuss.

EXERCISE1 RATIONALNUMBERS

Write a class for rational numbers. The number should always be represented as a fully reduced fraction of the form

numerator denominator with denominator>0.

1. What is an appropriate data structure for rational numbers?

2. Start by writing a functionint gcd(int,int)(greatest common divisor), you will need it to reduce fractions.

• You can use the Euclidean algorithm to determine the greatest common divisor.

• For an algorithm seehttp://en.wikipedia.org/wiki/Greatest_common_divisor

• Implement this scheme as a recursive function.

3. Write a classRational, which represents a rational number. The constructor should have the numerator and the denominator as arguments. Be sure to check for valid input. In addition, the class has two functions numerator ()and denominator ()that return the values of the numerator and denominator. The class should have three constructors:

• a default constructor that initializes the fraction with1,

• a constructor that initializes the fraction with a given numerator and denominator and

• a constructor that initializes the fraction with a given whole number.

4. Supplement the class with operators for*= += -= /=and==.

5. Use the newly implemented methods to implement free operators* + - /. 6. Check your implementation using various test cases. Initialize three fractions

f1 =− 3

12, f2 = 4

3, f3= 0 1.

(2)

Test the operators with the following examples:

f3 =f1+f2, f3 =f1·f2, f3= 4 +f2, f3 =f2+ 5, f3 = 12·f1, f3 =f1·6, f3= f1 f2. Print the result after each operation. The corresponding solutions are:

13 12, −1

3, 16 3 , 19

3 , −3 1, −3

2, −3 16.

10 Points EXERCISE2 FAREYSEQUENCES

A Farey sequenceFN of degreeN(Farey fractions of degreeN) is an ordered set of reduced fractions pi

qi with pi ≤qi ≤N and 0≤i <|FN|

and pi

qi

< pj qj

∀0≤i < j <|FN|.

Use the classRationalfrom the first exercise to write a function void Farey(int N)

which calculates the Farey fractions up to degreeN and prints the resulting Farey sequences up to degreeN on the screen.

Algorithm:The sequences can be computed recursively. The first sequence is given by F1 = 01,11

For a known sequenceFN one can getFN+1by inserting an additional fraction pqi+pi+1

i+qi+1 between two consecutive entriespqi

i and pqi+1

i+1 ifqi+qi+1 =N+ 1holds for the sum of denominators.

Example:DeterminingF7fromF6results in the following construction:

F6 = 0

1,16

|{z}

1 7

,15, 14,13

|{z}

2 7

,25,12,35

| {z }

3 7 and 47

,23,34

|{z}

5 7

,45,56,11

|{z}

6 7

The new elements are:

0+1

1+6 = 17 ; 1+14+3 = 27 ; 2+15+2 = 37 ; 1+32+5 = 47 ; 2+33+4 = 57 ; 5+16+1 = 67 The sorted sequence then is:

F7 = 0

1,17,16,15,14,27,13,25,37,12,47,35,23,57 34,45,56,67,11

For checking:

The Farey sequences up to degree 6 F1 = 01,11

F2 = 01,12,11 F3 = 01,13,12,23,11 F4 = 01,14,13,12,23,34,11

F5 = 01,15,14,13,25,12,35,23,34,45,11 F6 = 01,16,15,14,13,25,12,35,23,34,45,56,11

.

There is a beautiful illustration of these fractions, the Ford circlesa:

aseehttp://en.wikipedia.org/wiki/Ford_circle

10 Points

Referenzen

ÄHNLICHE DOKUMENTE

insert(p, t) Inserts the element t in front of the one the iterator p points to, and returns an iterator that points to the inserted element.. insert(p, i, j) As above, but for

replace_copy(b,e,out,v,v2) Create copy of all elements in range [b:e) re- placing elements which are equal to v with v2 , return iterator to end of copy.

• Traits can be used to specify types and values that depend on one or more template parameters. • Policies can be used to specify parts of algorithms as

Since the units are only used as a template parameter, this only affects the class type but does not require memory... Example: Numbers

This header also contains functions that provide a thread ID and the functionality to detach threads that afterwards run as a separate program (fork).. Mutual Exclusion The header

~List (); // clean up the list and all nodes Node* first() const; // return a pointer to the first entry Node* next( const Node* n) const; // return a pointer to the node after n

Please modify your implementation again to obtain a doubly linked list: each element should also point to its predecessor.. What is

To understand why the size of empty classes (according to standard) is as observed, consider the following class!. struct