# Session 1

### Examen 2017-2018 - Session 1

Part A:test

#### Getting start code - Part B

Start code: code_session1.tar.gz

Download the start code, upack it and copy the top directory `examen` in a new directory, named `examen-YourFamilyName`, or `examen-YourFamilyName1_YourFamilyName2` if you work in binome. You should develop your solutions in the new directory.

``````cd
tar xzvf examen-start.tar.gz
cp -r examen examen_YourFamilyName
cd examen_YouFamilyName
``````

#### Task 1: `shape`

The given code in `readShape.cxx` is buggy. Correct the compilation warnings, errors and the program behavior.

#### Task 2: `perfect`

A perfect number is a number that is half the sum of all of its positive divisors (including itself).

Compute the list of perfect numbers between 1 and 10000 (you should find 6, 28, 496, 8128).

A boolean function `isDivisor` of two integer arguments is provided with prototype:

``````bool isDivisor (int multiple, int divisor)
``````

It returns true if and only if `divisor` divides `multiple`.

1. Define a function `fillDivisorList` according to the prototype below, given `divisors`, a vector of integer, it fills this vector with the list of divisors.

`````` void fillDivisorList (int number, vector<int>& divisors)
``````
2. Define a function `getDivisorSum` according to the prototype below, given `divisors`, the list of divisors as a vector of integer, it returns the sum of the list.

`````` int getDivisorSum (vector<int>& divisors)
``````
3. Define a function `isPerfect` according to the prototype below. It returns true if and only if the int argument `number` is a perfect number.

`````` bool isPerfect (int number)
``````

#### Task 3: `histogram`

The program `testHistogram.cxx` can be used to display histograms in a terminal output. It uses two classes: `Histogram` and `Generator`.

1. Implement the `Histogram` class member function `fill()` which implementation is missing in the given code.

2. Add (implement) an evaluation and printing of the number of generated values which were outside the histogram range.

3. Extend the program and add another histogram, which will be filled with a new random numbers distribution and then displayed in terminal.

#### Task 4: `isotopes`

Implement a program `isotopes.cxx`, which will process the provided data file `isotopes.dat`, evaluate the read data and display the isotope(s) which data meet the following condition:

• the abundance must be greater than 10 percent
• the half-life must be greater than 100 years

The class `Isotope`, which can be used to hold the data read from a file, is provided.

The data file format:

``````ISOTOPE
NAME URANIUM
Z 92
A 235
HALFLIFE 703800000
ABUNDANCE 0.72
END_ISOTOPE
``````

where Z and A represent the number of protons and nucleons respectively; HALFLIFE is the isotope half-life time in years and ABUNDANCE is the isotope abundance in percent.

``````cd