Informatică, întrebare adresată de sdlkjhgfdsgs, 8 ani în urmă

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

Răspuns de andrei750238
1

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);

}

Alte întrebări interesante