联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2020-08-15 11:06

Problem Sheet 2

Introduction to C++ programming

November 1, 2019

• Exercise 1 will let you practise the use of classes and objects.

• Exercise 2 will let you practise the use of pointers and references.

• Exercise 3 will introduce you to fractals.

1

1 Circle class

Write the declaration of a class called Circle with private members radius, xpos and ypos specifying the

size and position of the circle in the x-y plane as floating point variables.

The class should contain the following public member functions:

• A constructor accepting as arguments radius, x-position and y-position, which are then assigned

to the class members. Default values should be 0.0 for all members.

• Functions getRadius(), getX() and getY() returning the value of the corresponding member

variables.

• A function getArea() returning the area A = πr2 of the circle with radius r. The value for π

should be defined as a global constant of type double with value 3.14159265 at the beginning of

your code.

• A function operator+(Circle c). This overloads the addition operator for circles. The function

should return an object of type Circle with an area corresponding to the combined areas of the

current circle and the circle c passed as an argument. The position (x, y) of the returned circle

should be halfway between the current circle and the circle c. Use public member functions to

access the parameters of c.

• A function friend ostream& operator<<(ostream& os, Circle c) returning the stream variable

os. In the body of the function, radius, x- and y-position of the current circle should be written

to os using the stream insertion operator <<. Format the output like this: radius = 0.0 at

(x,y) = (0.0,0.0)

Write a test program circle.cpp for the class Circle. In it, you should define two objects A and B of type

Circle with radius 3.0 and 4.0, respectively. A is located at (2.0, 1.0), while B is at position (5.0, 6.0).

Define another circle C obtained by adding circles A and B. The program should output the radius and

coordinates of all three circles using the << operator of the class.

In addition, answer the following questions:

• How would you have to change your code to make the members radius, xpos and ypos accessible

from outside the class object?

• Write the body of a member function for the class Circle with prototype

bool Circle::operator>(Circle c);

It should return true if the radius of the current circle is larger than that of circle c. Otherwise it

should return false.

• Write down a boolean C++-expression which is true if and only if two objects A and B of type

Circle are equal. Make only use of the operator ”>” (for example as defined in b) in comparing A

and B.

2

2 Matrix transpose

Write the following functions for variables of type double.

• Write a function void swapr(..., ...) swapping its two double arguments, passed by reference.

• Write a function void transpose(...) taking a 3×3 double array as an argument and transposing

it, i.e.

Aij −→ Aji for i 6= j.

Make use of the function swapr() above.

• Write a function void printm(...) taking a 3 × 3 double array as an argument and displaying it

in three columns and three rows.

To test these functions, write a program transpose.cpp in which you define a 3 × 3 array M of type

double. Initialize it to

0.36 0.48 −0.8

−0.8 0.6 0.0

0.48 0.64 0.6

 (1)

using comma separated lists. Using the functions above, the program should transpose and print the

array M.

3

3 Mandelbrot

The Mandelbrot set is calculated as follows: For any point P in a 2-dimensional plane with coordinates

(xP , yP ) within the range

−2.2 ≤ xP ≤ 1.0,

−1.2 ≤ yP ≤ 1.2,

and a resolution (distance between two neighbouring points) of

dx = dy = 0.02,

apply the following transformations:

yn+1 = 2xnyn + yP ,

with the initial values x0 = y0 = 0. Repeat these transformations as long as the point (xn+1, yn+1) is

within the circle with radius r = 2 and center (0, 0), i.e. fulfils the condition:

Calculate the necessary number of iterations to leave the circle for each point (xP , yP ). Please observe

that some of these points are “stable” under the transformation: they will never leave the circle. Set

N = 100 as maximal number of iterations. Print the output into a text file printing a char for every

point (xP , yP ): if the number of iterations n for a given point is equal to N, print the character ‘o’;

otherwise, print the character ‘-’.

Task: Visualise the stable solution of the Mandelbrot set, and save it to a text file. It should look like

a coarse version of this fractal image:

4


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp