Informatică, întrebare adresată de dariatrip001, 9 ani în urmă

Imi puteti spune va rog unde m-am incurcat?
Textul problemei: Sa se afiseze toate nr nat mai mici sau egale decat n care au suma cifrelor un nr impar.




#include   <iostream> 

using namespace std;

int main()
{
int x;
int S;
int n;
int z;
cin>>n;
x=1;
S=0;

while (x<=n)
{
  z=x;
         while ( 0<z )
      {
         S=S+z%10;
         z=z/10;
      }

         if(S%2==1)
      {
          cout<<x<<" ";
      }
x=x+1;
}
return 0;
}


Razzvy: S trebuie initializat de fiecare data, in while
Razzvy: dupa z=x trebuia sa pui S=0
dariatrip001: atat e tot ce nu e bine?
dariatrip001: iti multumesc mult!!
Razzvy: Cu placere!
dariatrip001: poti sa imi spui de ce S trebuie initiat in while de fiecare data?

Răspunsuri la întrebare

Răspuns de andrei750238
4

Raspuns :

Asa cum a propus si utilizatorul Razzy in comentariu, variabila S trebuie initializata de fiecare data cu 0 la fiecare iteratie a lui X.

Astfel vom muta instructiunea "S = 0;" la inceputul blocului de instructiuni determinat de while.

Cod modificat :

#include <iostream>  

using namespace std;

int main()

{

   int x=1,S,n,z; //Declararea variabilelor pe un singur rand, nu este necesara dar ajuta la lizibilitate

   cin >> n;

   while (x <= n)

   {

       S = 0;  //Rezolvare problema. S trebuie initializat cu 0 la fiecare iteratie a lui x

       z = x;

       while (0 < z)

       {

           S += z % 10; //Schimbarea aceasta nu e necesara dar e recomandata

           z /= 10; //Schimbarea aceasta nu e necesara dar e recomandata

       }

       if (S % 2 == 1)

       {

           cout << x << " ";

       }

       ++x; //Schimbarea nu e necesara dar este recomandata.

   }

   return 0;

}

Nota :

Modul in care scriem cod conteaza ! Am mai modificat cateva elemente pentru a imbunatati lizibilitatea si eficienta programului. Aceste modificari nu sunt necesare dar sunt recomandate pentru ca promoveaza scrierea de cod optim, usor de mentinut.

O alta recomandare ar fi sa dam un nume sugestiv variabilelor :

  • In loc de "S" vom folosi "suma_cifre"
  • In loc de "x" vom folosi "iterator"
  • In loc de "z" vom folosi "copie" sau "temporar"

As recomanda si utilizarea functiilor daca ai parcurs si materia aferenta acestui capitol.

Alte întrebări interesante