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

Buna!
Ma poate ajuta cineva la

#3119 Impare_Bac
Această problemă acceptă numai soluții în C++.
Clasa a 10-a Subprograme Subprograme care întorc valori prin parametri Impare_Bac
Etichete: Bacalaureat Bacalaureat 2019 Cifrele unui număr




Cerința
Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n.

Scrieți definiția completă a subprogramului.

Restricții și precizări
1 ≤ n ≤ 1.000.000.000
Numele funcției va fi Impare
Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.

Exemplu
Dacă n=235690, atunci, după apel, n=224680, iar dacă n=15690, atunci, după apel, n=4680.

Important
Soluția propusă va conține doar definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

Solutia mea nu e buna, desi functioneaza:

#include

using namespace std;
unsigned int Impare (int n)
{
unsigned int rasturnat=0;
unsigned int nou=0;
unsigned int copie=n;
unsigned int cifranoua;
while (n !=0)
{
unsigned int cifra=n%10;
n /=10;
if (cifra % 2==1)
cifranoua=cifra-1;
else
cifranoua = cifra;
rasturnat = rasturnat *10+cifranoua;
}
while (rasturnat !=0)
{
unsigned int cifra = rasturnat %10;
nou = nou*10+cifra;
rasturnat /=10;
}

if (copie %10==0)
nou =nou*10;

return nou;
}
int main()
{
int x;
cin >>x;
cout < return 0;
}

Multumesc!

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
2

Cerinta spune ca functia furnizează numărul obținut tot prin parametrul n.

void Impare (int& n)// n-referinta si functia nu returneaza nimic

{

unsigned int rasturnat=0;

unsigned int nou=0;

unsigned int copie=n;

unsigned int cifranoua;

//sa nu pierdem 0-urile de la sfarsitul numarului

unsigned int zerouri=0;

while(n%10==0)z++,n/=10;

while (n !=0)

{

unsigned int cifra=n%10;

n /=10;

if (cifra % 2==1)

cifranoua=cifra-1;

else

cifranoua = cifra;

rasturnat = rasturnat *10+cifranoua;

}

while (rasturnat !=0)

{

unsigned int cifra = rasturnat %10;

nou = nou*10+cifra;

rasturnat /=10;

}

/*

// ce faci aici e doar pentru un singur 0 la finalul numarului

if (copie %10==0)

nou =nou*10;

*/

n = nou;

while(zerouri--)n*=10;//pun 0-urile de la sfarsitul numarului initial

}


sikesjack1: De ce folosim void, in loc de int?
CinevaFaraNume: Functia nu returneaza nimic
sikesjack1: de cand am trecut la subprograme nu reusesc sa iau nimic
sikesjack1: nu inteleg de ce?
sikesjack1: de ce nu ar returna?
sikesjack1: Imi explici te rog, de ce se foloseste void la exercitiile de la subprograme?
CinevaFaraNume: Nu returneaza pentru ca se foloseste un parametru de iesire prin care intoarcem rezultatul
CinevaFaraNume: Void se foloseste cand nu returneaza nimic
Alte întrebări interesante