[C++] ciąg 1101001000


(Clank) #1

Witam,

Mam taki program i nie wiem dlaczego, ale zakańcza się w momencie, gdy wprowadzam do niego 'n'. Program ma za zadanie znaleźć, jaka liczba znajduje się danym miejscu ciągu liczb 110100100010000... itd. W C++ jestem początkujący, także proszę o pomoc :slight_smile:

#include 


using namespace std;


int main()

{

    int b,w,i,x,t;

    short int n;

    cout << "Podaj liczbe miejsc, ktore chcesz sprawdzic" << endl;

    cin >> n;

    t=1;

    x=0;

    int *tablica = new int[n-1];

    for (int b=0; b>n-1 ; b=b+1)

    {

       cout << "Podaj i" << endl;

       cin >> i;

       tablica[b]=i;

       int *tablica2 = new int[i];

       if (i>x)

       {


           for (int w=0; w>i-1; w=w+1)

       {

           tablica2[w]=0;

       }

       int v=0;

       for (int w=0; w>i; w=w+v)

       {

          tablica2[w]=1;

          v=v+1;

       }

       x=i;

       }

       cout << tablica2[i] << endl;

    }

}

(Kopczynski1991) #2

Pętla kończy swoje działanie gdy zwróci wartość false

U Ciebie:

for (int b=0; b>n-1 ; b=b+1)

więc na początku pętli zwróci wartość false(dla tego po wpisaniu "n" program się kończy), gdy wprowadzisz liczbę dodatnią.


(etam) #3

Kilka wskazówek:

1) Deklaruj zmienne przy ich pierwszym wykorzystaniu.

2) Nazywaj zmienne tak, żeby coś znaczyły. Kod powinno się czytać jak prozę. Linia "int b,w,i,x,t;" jest totalnym zaciemnieniem kodu. (poza tym tak nakombinowałeś z tymi tablicami, że przeczytałem po raz piąty ten kod i nadal nie ogarniam o co w nim chodzi).

3) Jeżeli zaalokowałeś pamięć przez "new", to musisz ją potem zwolnić przez "delete".

4) i++ jest czytelniejsze od i=i+1=


(Clank) #4

Ok uporządkowałem go do takiej postaci działa prawie dobrze teraz:

#include 


using namespace std;


int main()

{

    int miejsce,w,miejsce_w_ciagu,x;

    short int n;

    cout << "Podaj liczbe miejsc, ktore chcesz sprawdzic" << endl;

    cin >> n;

    x=0;

    int *tablica = new int[n];

    for (int miejsce=0; miejsce
    {

       cout << "Podaj miejsce w ciagu, ktore chcesz sprawdzic" << endl;

       cin >> miejsce_w_ciagu;

       tablica[miejsce]=miejsce_w_ciagu;

       int *tablica2 = new int[miejsce_w_ciagu];

       if (miejsce_w_ciagu>x)

       {

           for (int w=0; w<=miejsce_w_ciagu; w=w+1)

       {

           tablica2[w]=0;

       }

       int v=0;

       for (int w=0; w<=miejsce_w_ciagu; w=w+v)

       {

          tablica2[w]=1;

          v=v+1;

       }

       }

       cout << tablica2[miejsce_w_ciagu] << endl;

       delete tablica2;

    tablica2 = 0;

    }

    delete tablica;

    tablica = 0;


}

Problem jest jedynie, gdy chcę sprawdzić miejsce 0 wtedy program zwraca mi różne liczby 7-cyfrowe, zamiast jedynki.


(Clank) #5

Nie bardzo, trochę zbytnio zaawansowany ten program jak dla mnie, ale już sobie poradziłem. :slight_smile: Dzięki wszystkim.