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

-Un număr natural se numeşte ABC dacă are exact a cifre, prima cifră este b şi ultima cifră este c. sa se afle daca numarul x este abc, sa se afiseze Da in caz contrar NU.
-As vrea sa mi se explice pasi pe care trebuie sa ii parcurg si de ce. Am incercat sa rezolv dar nu stiu cum sa aflu daca x este abc.
-aceasta este rezolvarea mea partiala:
#include

using namespace std;

int main() {
int a, b, c, x;
cin >> a >> b >> c >> x;
while ( x != 0 ) {
x = x / 10;
}
cout << a << " ";
while ( b > 10 ) {
b = x / 10;
}
cout << b << " ";
while ( c > 10 ) {
c = x % 10;
}
cout << c << " ";

if ????????????

cout << "DA ";
}else{
cout << "NU";
}
return 0;
}

Răspunsuri la întrebare

Răspuns de sanzianagrecu
3

Buna! Ca sa verifici daca un numar este ABC trebuie sa urmezi urmatorii pasi:

1. Verific daca ultima cifra a numarului (n % 10) este egala cu c, daca nu, inseamna ca sigur nu este ABC.

2. Daca trecem de pasul 1,  verificam ca prima cifra sa fie egala cu c, daca nu este putem sa spunem direct ca nu este ABC.

3. Daca am trecut si de 1, si de 2, nu mai ramane decat sa verificam ca numarul de cifre sa fie egal cu a. Daca este spunem "DA", altfel spunem "NU".

Cam asa arata codul (o sa pun si comentarii ca sa intelegi mai bine cum functioneaza):

#include<iostream>

using namespace std;

int main()

{

   int a, b, c, x;

   cin >> a >> b >> c >> x;

   /// Pasul 1: verific ultima cifra

   if(x % 10 != c) /// daca ultima cifra nu este egala cu c, atunci este clar ca nu este ABC

       cout << "NU"; /// si afisam "NU"

   else{ /// altfel:

       /// Pasul 2: aflu prima cifra;

       int cx = x; /// aici iau o copie a lui x;

       while(cx > 9) /// aflu prima cifra

           cx /= 10;

       /// verific daca nu este egala cu b

       if(cx != b)

         cout << "NU";

       else{ /// altfel trecem la urmatorul pas:

           ///  Calculam numarul de cifre:

           int nrcif = 0;

           while(x){

               nrcif++;

               x /= 10;

           }

           /// verific daca nrcif == a;

           if(nrcif == a)

               cout << "DA"; /// pentru ca respecta toate conditiile;

           else

               cout << "NU";

       }

   }

   return 0;

}

Daca ai nelamuriri, ma poti intreba in comentarii!


costeamirela47: am rescris codul dar nu imi mai afisaza nimic, ce am scris gresit la el?#include

using namespace std;

int main() {
int a, b, c, x;
cin >> a >> b >> c >> x;
int cxP = x;

while ( cxP > 9 ) {
cxP = x / 10;
}
cout << cxP << " ";

int cxU = x;

while ( cxU > 9 ) {
cxU = x % 10;
}
cout << cxU << " ";
int nrCif = 0;

while ( x != 0 ) {
nrCif++;
x = x / 10;
cout << nrCif << " ";
}

if ( cxP == b && cxU == c && nrCif == a ){

cout << "DA ";
}else{
cout << "NU";
}

return 0;
}
sanzianagrecu: 1. Poti sa le pui in orice ordine atat timp cat stii ca "a" reprezinta numarul de cifre (puteai sa redenumesti variabilele ca sa-ti fie mai usor), "b" - prima cifra si "c" ultima cifra. Incearca sa pui sursa mea intr-un compiler online si pune diverse numere ca sa vezi cum functioneaza.
sanzianagrecu: 2. Nu ai nevoie de o copie a lui x la ultima cifra pentru ca nu ii strici valoarea, adica ca sa afli ultima cifra trebuie sa afli restul acelui numar la 10, iar pentru a afla restul avem operatorul '%' (modulo). De exemplu, daca spun ca x % 10 = 9, spun ca ultima cifra a lui x este 9, iar lui x nu-i schimb in niciun fel valoarea.
sanzianagrecu: La prima cifra insa trebuie sa imparti incontinuu numarul la 10 (x /= 10) (ca sa elmini cifrele din coada una cate una), pana x ramane o singura cifra. Aici ii schimb valoarea lui x, de aceea imi iau o copie (daca nu as mai fi avut nevoie de valoarea initiala pentru a afla numarul de cifre, nu as mai fi luat-o).
sanzianagrecu: Referitor la sursa ta: la primul while (acolo ai incercat sa afli prima cifra, nu?), ai bucla infinita (adica nu se incheie), pe copia lui x o imparti la 10 (CxP /= 10, nu Cxp = x / 10)
sanzianagrecu: La al doilea while, (acolo probabil ai vrut sa afli ultima cifra), poti sa verifici direct care este ultima cifra, fara o structura repetitiva.
sanzianagrecu: In plus, nu trebuie sa afisezi numarul de cifre (aici ai pus in structura repetitiva comanda de afisare si cand o sa-ti afiseze o sa-ti dea urat) sau ultima cifra. Trebuie sa afisezi numai "DA" sau "NU" (cel putin asta am inteles eu din cerinta)
sanzianagrecu: P.S. Daca vrei sa intelegi mai bine informatica, iti recomand sa te uiti la zecelainfo pe youtube (https://www.youtube.com/channel/UCVPVuGB9ew80C8CvJk6OeAw). Eu de acolo am invatat...
sanzianagrecu: Daca mai ai intrebari, mi le poti pune
costeamirela47: multumesc pt ajutor a fost de mare folos:D
Alte întrebări interesante