Subprogramul cif, cu doi parametri, primeşte prin intermediul parametrului a un număr natural cu cel mult 8 cifre şi prin intermediul parametrului b o cifră; subprogramul returnează numărul de apariţii ale cifrei b în scrierea numărului a.

Exemplu: pentru a=125854 şi b=5, subprogramul va returna valoarea 2.

a) Scrieţi definiţia completă a subprogramului cif. (4p.)

b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu cel mult 8 cifre, dintre care cel puţin una impară, şi care determină şi afişează pe ecran, folosind apeluri utile ale subprogramului cif, cel mai mare număr natural care poate fi obţinut utilizând toate cifrele impare ale numărului n.

Exemplu: dacă n=2152331 atunci se va afişa pe ecran numărul 53311. (6p.)

Rezolvare

#include <iostream.h>

long n;int i;

int cif(long a, int b)

{

int nr=0;

while (a!=0)

{

if (a%10==b) nr++;

a=a/10;

}

return nr;

}

void main()

{

do

{

cout<<"dati n(cu cel putin o

cifra

impara)="; cin>>n;

} while (n<0 || n>99999999);

int j,t,numar=0;

for(i=9;i>=1;i=i-2)

{t= cif(n,i);

if (t!=0)

for(j=1;j<=t;j++)

numar=numar*10+i;

}

if(numar==0) cout<<"numarul nu are

cifre impare";

else cout<<numar;

}