Program wypisujacy liczbe kolejno cyframi do tabeli.

0

Witam forumowiczow. W staraniach napisania programu wypisujacego kolejne cyfry liczby do tabeli natknalem sie na problem i nie wiem co mam z tym poczynic, wiec zwracam sie do ludzi, ktorzy maja tuzin wiecej wiedzy ode mnie. Bardzo prosze o pomoc i z gory uprzejmie dziekuje :).

#include <iostream>

using namespace std;

int *T;
int rozmiar;
int x;
int y;

int main()
{

  cin>>x;
  rozmiar =0;
  y=x;

    do
    {
        y=y/10-(y%10);
        rozmiar++;
    }while (y=0);

    int *T = new int [rozmiar];

    for(int i=1; x>=0; i++)
    {
        T[rozmiar-i]=x%10;
        cout<<T[rozmiar-i]<<endl;
        x=(x/10)-(x%10);
    }

  return 0;
}

 

W wyniku tego programu wpisujac liczbe np. 123, wypisane sa liczby [3, 9] zamiast [3, 2, 1].

1
  y=x;
 
    do
    {
        y=y/10-(y%10);
        rozmiar++;
    }while (y=0);
 
    int *T = new int [rozmiar];

Kłania się podstawowa matematyka.
Do policzenia liczby cyfr w liczbie wystarczy Ci logarytm.

x=(x/10)-(x%10);

To jest dziwne.
x /= 10; powinno wystarczyć.

No i while (y=0); też jest błędne, = to operator przypisania, a nie porównania (==).

Btw, dlaczego wszystkie zmienne są u Ciebie globalne?

0

Błąd (jeden z wielu) jest tutaj

 x=(x/10)-(x%10);

Zobacz co się dzieje
Pętla pierwsza
x = 123
T[..] = 123%10 = 3
x = (123/10) - (123%10) = 12 - 3 = 9

Pętla truga
x = 9
T[..] = 9%10 = 9
itd.

Nie wiem po co jest -(x%10); procesor by sobie świetnie poradził bez tego ;)

Kolejne błędy:

while (y=0);

na while (y!=0);

 
+=
nie zwalniasz zaalokowanej pamięci :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1