Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmienna nie zwiększa się

Ostatnio zmodyfikowano 2012-05-11 00:48
Autor Wiadomość
Unlimited
Temat założony przez niniejszego użytkownika
Zmienna nie zwiększa się
» 2012-05-10 23:19:48
Pewnie pomyślicie banalny problem ale ja już nie rozumiem tego. Powinno działać przecież a tu lipa. Zmienna n nie zwiększa się. Taka błachostka a tak mnie przyćmiło.
C/C++
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;

void losuj( int tablica[], int & n )
{
    tablica[ n ] =( rand() % 98 ) + 1;
    n++;
}

void dodaj( int tablica[], int & n )
{
    cout << "\n\t     Podaj wartosc: ";
    cin >> tablica[ n ];
    n++;
}

void szukaj( int tablica[], int & n )
{
    int c;
    cout << "\n\t     Podaj liczbe do usuniecia: ";
    cin >> c;
    for( int x = 0; x <= n; x++ )
    {
        if( tablica[ x ] == c )
        {
            for( x; x < n; x++ )
            {
                if( x != n - 1 )
                {
                    tablica[ x ] = tablica[ x + 1 ];
                }
            }
            n--;
        }
    }
}

void pokaz( int tablica[], int n )
{
    cout << "\n\t     ";
    for( int x = 0; x <= n; x++ )
    {
        cout << tablica[ x ] << ", ";
    }
    cout << "\n\n";
    system( "pause" );
}

void wspak( int tablica[], int n )
{
    cout << "\n\t     ";
    for( int x = n; x >= 0; x-- )
    {
        cout << tablica[ x ] << ", ";
    }
    cout << "\n\n";
    system( "pause" );
}

int main()
{
    int n = 0;
    char wybor;
    int wybor2;
    int tablica[ 100 ];
   
    srand( time( NULL ) );
   
    do
    {
        system( "cls" );
        cout << "\n\n\t     ------------------------------------------------------";
        cout << "\n\t     |  Dodaj: d  |  Usun ostatni: o  |  Usun wybrany: u  |";
        cout << "\n\t     ------------------------------------------------------";
        cout << "\n\t     |  Pokaz: p  |  Pokaz wspak: w   |  KONIEC: q        |";
        cout << "\n\t     ------------------------------------------------------";
        cout << "\n\n\t     Twoj wybor to: ";
        cin >> wybor;
       
        switch( wybor )
        {
        case 'd':
            {
                cout << "\n\t     [1] Wylosuj automatycznie";
                cout << "\n\t     [2] Podaj sam";
                cout << "\n\n\t     Twoj wybor: ";
                cin >> wybor2;
               
                switch( wybor2 )
                {
                case 1:
                    {
                        losuj( tablica, n );
                        break;
                    }
                case 2:
                    {
                        dodaj( tablica, n );
                        break;
                    }
                }
            }
        case 'o':
            {
                n--;
                break;
            }
        case 'u':
            {
                szukaj( tablica, n );
                break;
            }
        case 'p':
            {
                pokaz( tablica, n );
                break;
            }
        case 'w':
            {
                wspak( tablica, n );
                break;
            }
        }
    } while( wybor != 'q' );
   
    return 0;
}
P-56444
malan
» 2012-05-11 00:04:26
C/C++
void szukaj( int tablica[], int & n )
{
    int c;
    cout << "\n\t     Podaj liczbe do usuniecia: ";
    cin >> c;
    for( int x = 0; x <= n; x++ )
    {
        if( tablica[ x ] == c )
        {
            for( x; x < n; x++ )
            {
                if( x != n - 1 )
                {
                    tablica[ x ] = tablica[ x + 1 ];
                }
            }
            // ---------->
            n--;
            // <----------
        }
    }
}
P-56445
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-05-11 00:05:38
To jest akurat dobrze bo bez tej funkcji też nie działa.

Jak dla mnie to nie ma co w tym programie być do spieprzenia więc to może wina kompilatora? Coś mu się stało? Może spróbujcie u siebie skompilować dodać 2 liczby i spróbować je wyświetlić. Jeśli Wam wyświetli 2 to wina mojego kompilatora jeśli 1 to znaczy że jednak błąd.
P-56446
malan
» 2012-05-11 00:11:39
Faktycznie, źle spojrzałem - to jest dobrze :P Ogólnie to wszędzie zaczynasz wypisywać albo do
x <= n
 lub od
x = n
. Pamiętaj, że tablice numeruje sie od zera, także jeżeli tablica ma 3 elementy to ostatni element to:
tablica[ 2 ]
 :)
P-56447
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-05-11 00:13:34
Tak wiem dlatego na początku n = 0; i tu nie ma co zepsuć a jednak nie działa. Może wina kompilatora...
P-56448
malan
» 2012-05-11 00:35:28
Użyj debuggera - on prawdę Ci powie!!! Mi powiedział i powiem Ci, że błąd wynika z... roztrzepania :P
Jeżeli znajdziesz ten błąd i na ekranie zobaczysz dziwne liczby, wyglądające jak z kosmosu to przeczytaj sobie mój powyższy post.
P-56450
ison
» 2012-05-11 00:46:17
brakuje 1 breaka
C/C++
switch( wybor )
{
case 'd':
    {
        cout << "\n\t     [1] Wylosuj automatycznie";
        cout << "\n\t     [2] Podaj sam";
        cout << "\n\n\t     Twoj wybor: ";
        cin >> wybor2;
       
        switch( wybor2 )
        {
        case 1:
            {
                losuj( tablica, n );
                break;
            }
        case 2:
            {
                dodaj( tablica, n );
                break;
            }
        }
    }
    /////////////////// <-------- tu ;)
case 'o':
    {
        n--;
        break;
    }

i w funkcji pokaz powinno byc < zamiast <=
w wspak też od złego indeksu lecisz
P-56452
malan
» 2012-05-11 00:48:24
@ison: On to miał znaleźć, czy Ty...? :]
P-56453
« 1 » 2
  Strona 1 z 2 Następna strona