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

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

Răspuns de CinevaFaraNume
12

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

}


Ghc15: multumesc, dar programul nu afiseaza nimic. "Process returned 0 (0x0)"
Ghc15: la egalul ala a fost neatentia mea, multumesc
CinevaFaraNume: Trebuie sa returneze nu sa afiseze.
CinevaFaraNume: Poti sa il apelezi asa:cout << Egal(....);
CinevaFaraNume: Si o sa iti afiseze rezultatul
Ghc15: multumesc frumos
Alte întrebări interesante