Mă poate ajuta cineva cu acest exercițiu vă rog? Aș aprecia și o explicație Subprogramul f este definit alăturat. Indicați
valoarea f(4770777,7).
int f (int n, int k)
{ if (n!=0)
if(n%10==k) return 1+f(n/10,k);
return 0;
}
Răspunsuri la întrebare
Răspuns:
Pentru f(4770777,7), subprogramul va returna valoarea 3.
Explicație:
Daca n primeste valoarea 4770777, iar k primeste valoarea 7, subprogramul functioneaza in felul urmator:
- prima oara se verifica conditia ca numarul ,,n" (4770777) sa fie diferit de 0, conditie care este adevarata;
- apoi,se verifica daca ultima cifra a numarului n (4770777) este egala cu numarul k (7) , ceea ce este adevarat;
- intrucat n%10==k, atunci se va returna 1+f(n/10 (se elimina cifra unitatilor/ultima cifra a lui 4770777), k) , practic se aduna 1 si se continua programul cu n/10 , adica cu 4770777 fara ultima cifra, si vine 477077;
- subprogramul elimina cifra unitatilor a numarului atribuit lui n , si aduna cu 1 de fiecare data cand nu se ajunge la cazul ca cifra unitatilor lui n sa fiezero (0);
- in cazul de fata aduna 1 de 3 ori, pana ajunge la 4770, deci rezultatul este 3.
Ca sa intelegi mai bine, poti rula si tu codul acesta, care afiseaza rezultatul si totodata, sa mai schimbi valorile lui n si k sa vezi si diverse cazuri:
#include <iostream>
using namespace std;
int f (int n, int k)
{
if (n!=0)
if(n%10==k)
return 1+f(n/10,k);
return 0;
}
int main()
{
int x;
x=f(4770777,7);
cout<<x;
return 0;
}