Va roooooooooooooog foarte urgent in c++ cu doua subprograme unul recursiv si unul iterativ varog dupa ce faceti programu sal explicati pe pasi cum functioneza
Se consideră tabloul liniar A[1..n] cu elemente numere naturale zecimale. Scrieţi un program care va converti elementele tabloului A[1..n] în numere octale. Programul va folosi subprogramul de convertire respectivă al unui număr zecimal.
Răspunsuri la întrebare
Varianta iterativa :
#include <iostream>
using namespace std;
long long conv_10_8(int n_10)
{
// Vector pentru stocare resturi impartiri la 8
int v_rest[100];
// Dimensiune vector
int dim = 0;
while (n_10 != 0) {
// Memoreaza restul in vector
v_rest[dim] = n_10 % 8;
// Catul devine rest
n_10 = n_10 / 8;
dim++;
}
//Construire numar in baza 8 prin parcurgere inversa vector resturi.
long long n_8 = 0;
for (int j = dim - 1; j >= 0; j--)
n_8=n_8*10+ v_rest[j];
return n_8;
}
void transformare_iterativa(int v[], int dim) {
for (int i = 0; i < dim; i++)
v[i] = conv_10_8(v[i]);
}
void afisare_vector(int v[], int dim)
{
for (int i = 0; i < dim; i++)
cout << v[i] << " ";
}
int main() {
int A[100], n, i;
//Citire vector
cin >> n;
for (i = 0; i < n; i++)
cin >> A[i];
transformare_iterativa(A, n);
afisare_vector(A, n);
}
Varianta recursiva :
#include <iostream>
using namespace std;
long long conv_10_8(int n_10)
{
// Vector pentru stocare resturi impartiri la 8
int v_rest[100];
// Dimensiune vector
int dim = 0;
while (n_10 != 0) {
// Memoreaza restul in vector
v_rest[dim] = n_10 % 8;
// Catul devine rest
n_10 = n_10 / 8;
dim++;
}
//Construire numar in baza 8 prin parcurgere inversa vector resturi.
long long n_8 = 0;
for (int j = dim - 1; j >= 0; j--)
n_8 = n_8 * 10 + v_rest[j];
return n_8;
}
void transformare_recursiva(int v[], int li, int ls) {
//Cazurile de baza
if (li > ls)
return;
if (li == ls)
v[li] = conv_10_8(v[li]);
//Vezi indicele jumatatii
int mij = (li + ls) / 2;
//Transforma elementul de la jumatate
v[mij] = conv_10_8(v[mij]);
//Aplica functia pentru fiecare jumatate
transformare_recursiva(v, li, mij-1);
transformare_recursiva(v, mij+1, ls);
}
void afisare_vector(int v[], int dim)
{
for (int i = 0; i < dim; i++)
cout << v[i] << " ";
}
int main() {
int A[100], n, i;
//Citire vector
cin >> n;
for (i = 0; i < n; i++)
cin >> A[i];
transformare_recursiva(A, 0, n - 1);
afisare_vector(A, n);
}