Subprogramul Egal are un parametru, n, prin care primește un număr natural cu cel puțin o cifră impară. Subprogramul returnează valoarea 1 dacă toate cifrele impare ale lui n sunt egale între ele sau valoarea 0 în caz contrar.
Scrieți definiția completă a subprogramului.
Restricții și precizări
10 ≤ n ≤ 109
Exemplu
Dacă n=7727470 sau n=7240 atunci subprogramul returnează 1, iar dacă n=7921470 atunci subprogramul returnează 0.
Imi puteti spune ce am gresit?
#include
using namespace std;
int n, u;
int egal(int n)
{int u;
while(n!=0)
{
if(n%10%2==1)
u=n%10;
if(u=n/10%u)
return 1;
return 0;
n=n/10;
}
}
int main()
{
egal(7921470);
return 0;
}
Răspunsuri la întrebare
if(u=n/10%u)
1. "=" este pentru atribuire, nu verificare daca este egal("==").
2.!!! O atribuire returneaza intotdeauna 1, astfel "conditia" respectiva e intotdeauna adevarata.
3. Daca vroiai sa testezi egalitatea dintre u si n/10%u, restul unei impartiri nu poate fi egal niciodata cu impartitorul(teorema impartirii cu rest), astfel conditia e falsa.
int Egal(int n)//Numele subprogramului incepe cu litera mare, conteaza
{
int u,c=-1; // c tine prima cifra impara pe care am gasit-o, sau -1 daca nu am gasit una inca
while(n!=0)
{
u = n%10;
if(u%2==1){
if(c == -1)
c = u;
else if(c != u)// e cifra impara diferita de prima pe care am gasit-o? daca da, returnam 0.
return 0;
}
n=n/10;
}
return 1;//Daca am ajuns pana aici inseamna ca toate cifrele impare sunt egale, sau exista < 2 cifre impare
}