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

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 de vevez
3

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;

}


UwU23: Mulțumesc
Alte întrebări interesante