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

Wypisywane wartości są nie zgodne z programem (tablica, referencja)

Ostatnio zmodyfikowano 2015-03-08 12:33
Autor Wiadomość
Grisza
Temat założony przez niniejszego użytkownika
Wypisywane wartości są nie zgodne z programem (tablica, referencja)
» 2015-03-08 10:58:08
Witam drogich programistów. Mam pewien problem z moim programikiem. Wszystko pięknie sprawdziłem, ale po odpaleniu programu jako wynik dostaję tablicę(która tak bardzo chciałem)lecz liczby zawarte w niej są dziwnie duże i non stop takie same. Szukałem błędu "rozbierając program" i nie mogę go wyeliminować. Mógłby ktoś pomóc?


C/C++
#include <iostream>
#include <cstdlib>
#include<time.h>
#include<conio.h>
using namespace std;


void ustaw( int & refx, int & refy )
{
    losuj:
    refx = rand() / 8;
    refy = rand() / 8;
    if( refx > 8 || refy > 8 ) goto losuj;
   
}

int main()
{
   
    srand(( int ) time( NULL ) );
    int tab[ 8 ][ 8 ];
    int i, j, p, x, y;
   
   
    cout << "Podaj ilosc powt:" << endl;
    cin >> p;
   
   
    for( i = 0; i < p; i++ )
    {
        ustaw( x, y );
        tab[ x ][ y ] = tab[ x ][ y ] + 1;
    }
   
   
    for( i = 0; i < 8; i++ )
    {
        for( j = 0; j < 8; j++ )
        {
            cout << "  " << tab[ i ][ j ];
        }
        cout << endl;
    }
   
   
   
   
    return 0;
   
}
P-127936
Brunon3
» 2015-03-08 10:59:35
Wstaw kod w [.cpp] //Kod [./cpp] (bez kropek), to będzie można pomyśleć. ;)

Edit: Ok, już jest. :)
P-127937
Pokropow
» 2015-03-08 11:15:28
Co ten program ma robić? Na pierwszy rzut oka wygląda to tak:
losowy element tablicy zwiększ o jeden.
P-127938
Grisza
Temat założony przez niniejszego użytkownika
» 2015-03-08 11:20:29
Tak ma dzialac.  Ze podajemy ilosc "operacji" i pozniej za kazdym razem sa losowane inne wspolrzedne punktu. Jesli w wczesniej byla tam wartosc to zostaje zwiekszona o jeden. NA koncu wypisuje tablice. Z tym, ze z wypisaniem jest cos nie tak, albo z petlą która zwiększa wartość. Kiedyś miałem podobny problem tylko nie pamiętam jak go rozwiązałem :(


PS: Dlatego tak to wygląda, bo takie są warunki =/
P-127939
Pokropow
» 2015-03-08 11:22:42
Może zeruj tablicę na początku
P-127940
Brunon3
» 2015-03-08 11:26:20
Nie lepiej usunąć to sprawdzanie czy jest > niż 8 i po prostu losować z zakresu?

To goto w ogóle nie jest tam potrzebne.
P-127941
Grisza
Temat założony przez niniejszego użytkownika
» 2015-03-08 11:31:15
C/C++
#include <iostream>
#include <cstdlib>
#include<time.h>
#include<conio.h>
using namespace std;


void ustaw( int & refx, int & refy )
{
    losuj:
    refx = rand() / 8;
    refy = rand() / 8;
    if( refx > 8 || refy > 8 ) goto losuj;
   
}

int main()
{
   
    srand(( int ) time( NULL ) );
    int tab[ 8 ][ 8 ];
    int i, j, p, x, y;
   
   
    cout << "Podaj ilosc powt:" << endl;
    cin >> p;
   
    for( i = 0; i < 8; i++ )
    {
        for( j = 0; j < 8; j++ )
        {
            tab[ i ][ j ] = 0;
        }
    }
   
   
    for( i = 0; i <= p; i++ )
    {
        ustaw( x, y );
        tab[ x ][ y ] = tab[ x ][ y ] + 1;
    }
   
   
    for( i = 0; i < 8; i++ )
    {
        for( j = 0; j < 8; j++ )
        {
            cout << "  " << tab[ i ][ j ];
        }
        cout << endl;
    }
   
   
   
   
    return 0;
   
}

Tak wystarczyło wyzerować tablicę. Tylko przy duzej ilości wprowadzanych danych program sie zawiesza. Np. przy 15
- sprawdzenie musi byc zeby nie wyjsc poza tablice
- obojetnie czy go to / while (tak mi sie wydaje ? )

Dziwne sprawdziłem kilkanaście razy i czasem się wywali, a czasem nie :(
Dev-cpp 5.9.2 na laptopie płynnie chodzi i spokojnie jakąkolwiek liczbę przyjmuje. Code Blocks ma focha przy 10 :D
P-127942
Brunon3
» 2015-03-08 11:48:03
Nie, goto i while to nie to samo, gdy nie masz uzasadnienia na użycie goto, to go nie używaj, gdyż powoduje bałagan w kodzie. (Taka rada.)
P-127945
« 1 » 2
  Strona 1 z 2 Następna strona