Se consideră şirul definit de următoarea relaţie de recurenţă:


a) Scrieţi numai antetul unui subprogram p, care primeşte prin intermediul parametrului n un număr natural de maximum 8 cifre, şi care returnează cel mai mare termen al şirului de mai sus mai mic sau cel mult egal cu n.

Exemplu: dacă n=83 atunci subprogramul va returna valoarea 80. (4p.)

b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural s (s≤10000000) şi realizează scrierea lui s ca sumă de termeni distincţi ai şirului dat, folosind  apeluri utile ale subprogramului p. Numerele se vor scrie în fişierul Numere.txt, pe prima linie a acestuia, separate prin câte un spaţiu.

Exemplu: dacă valoarea citită de la tastatură este 63, atunci fişierul Numere.txt va avea următorul conţinut: 40 20 3. (6p.)

REZOLVARE

#include <iostream.h>

#include <fstream.h>

unsigned long p(unsigned long n)

ofstream g(“Numere.txt”);

unsigned long s,n;

unsigned long sub (unsigned long n)

{

unsigned long t=5;

if (n>5)

{ while (n>t) t=2*t;

t=t/2;

}

else t=n;

return t;

}

void main()

{

do

{ cout<<”s=”;

cin>>s;

}

while (s>10000000);

while (s>0)

{

n=sub(s);

g<<n<<’ ‘;

s=s-n;

}

g.close();

}