👤

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ăspuns :

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

}

Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!


ID Learners: Alte intrebari