Extras din referat
Problema din Siracuza
Fie n un număr natural oarecare citit de la tastatură. Dacă n este număr par, se împarte la 2, iar dacă este număr impar, se înmulțește cu 3 și se adaugă 1. Algoritmul se repetă până când se ajunge în final cu n=1. Să se genereze iterativ și recursiv valorile succesive ale lui n.
Varianta iterativă
Această modalitate de rezolvare a problemei propuse presupune construirea unui subprogram iterativ care realizează efectiv generarea de numere conform condițiilor impuse de cerință și a funcției principale în care se citește un număr de la tastatură și se apelează subprogramul numit Iterativ care primește numărul citit ca parametru.
#include<iostream>
#include<conio.h>
using namespace std;
void Iterativ(int p)
{ cout<<p<<',';
while(p!=1)
{if(p%2==0) {p=p/2;
cout<<p<<',';}
else {p=p*3+1;
cout<<p<<',';}
}}
void main()
{int n;
cout<<"Introduceti un numar natural!"<<endl;
cin>>n;
Iterativ(n);
getch();
}
Varianta recursivă
În cazul acestui tip de rezolvare se folosește funcția recursivă denumită Recursiv. Singura modificare pe care o suferă funcția principală față de varianta iterativă este schimbarea numelui funcției apelate. În funcția recursivă, condiția de oprire este ca valoarea numărului primit prin intermediul parametrului să fie 1. Numerele căutate se generează și se afișează prin autoapelarea funcției.
#include<iostream>
#include<conio.h>
using namespace std;
int Recursiv(int p)
{cout<<p<<' ';
if(p==1) return 1;
else if(p%2==0) return Recursiv(p/2);
else if(p%2==1) return Recursiv(3*p+1);
}
void main()
{int n;
cout<<"Introduceti un numar natural!"<<endl;
cin>>n;
Recursiv(n);
getch();
}
I.2. Problema indianului
În anul de grație 0001, un indian a depus la banca statului său suma de s0. După n ani, indianul vrea să vadă suma din contul său, știind că, anual, dobânda este p% (dobândă compusă).
Varianta iterativă
Pentru a afla valoarea sumei existente în contul indianului după n ani, ne folosim de o funcție care calculează această sumă, utilizând formula suma_finală=suma_inițială*(1+dobânda)^număr_ani. În funcția principală se realizează citirea de la tastatură a datelor de intrare (suma depusă inițial, dobânda anuală și numărul de ani după care indianul dorește să facă verificarea contului), apelarea funcției Iterativ și afișarea sumei căutate pe ecran.
Preview document
Conținut arhivă zip
- Portofoliu de Probleme Ingineria Programarii.docx