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

Losowanie liczb bez powtórzeń - crash programu.

Ostatnio zmodyfikowano 2014-07-17 13:57
Autor Wiadomość
twoxu
Temat założony przez niniejszego użytkownika
Losowanie liczb bez powtórzeń - crash programu.
» 2014-07-16 21:52:14
Cześć, napisałem program z lekcji o losowaniu liczb bez powtórzeń, podczas kompilacji nie zwraca mi żadnego błędu i program się uruchamia. Podaję 10 liczb, program losuje z nich 8 ale crashuje podczas drukowania ich na ekran.
Program po crashu zwraca coś takiego:

Process returned -1073741819 (0xC0000005)   execution time : 10.114 s
Press any key to continue.

Oto kod:
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;
void wydrukuj( int IleWydrukowac, int LiczbyUzytkownika[], int Wylosowane )
{
    int ktora = IleWydrukowac + 1;
    int ta = Wylosowane;
    cout << ktora << " z nich to jest:" << LiczbyUzytkownika[ ta ] << endl;
}
bool czyBylaWylosowana( int iLiczba, int tab[], int wylosowanych )
{
    if( wylosowanych >= 0 )
    {
        return false;
    }
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < wylosowanych );
   
    return false;
}
int wylosujLiczbe()
{
    int los =( rand() % 8 ) + 0;
    return los;
}
int main()
{
    srand( time( NULL ) );
    int LiczbyUzytkownika[ 10 ];
    int wylosowane[ 8 ];
    int wylosowanych = 0;
    int ilePodac = 0;
    int IleWydrukowac = 0;
    cout << "Prosze podac 10 liczb. Program wylosuje z nich 8 bez powtorzen." << endl;
    do
    {
        cin >> LiczbyUzytkownika[ ilePodac ];
        ilePodac++;
    } while( ilePodac < 10 );
   
    do
    {
        int Liczba = wylosujLiczbe();
        if( czyBylaWylosowana( Liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowanych++;
            wylosowane[ wylosowanych ] = Liczba;
        }
    } while( wylosowanych > 8 );
   
    cout << "Oto Wylosowane Liczby: " << endl;
    do {
        wydrukuj( IleWydrukowac, LiczbyUzytkownika, wylosowane[ IleWydrukowac ] );
        IleWydrukowac++;
    } while( IleWydrukowac > 8 );
   
    return 0;
}
PS: Może i napisałem ten program dosyć łopatologicznie, ale przez dobre 2 miesiące nie miałem przypływu weny by to zrobić, więc jest tak jak jest :D
P-113881
Moorfox
» 2014-07-16 22:14:21
C/C++
wydrukuj( IleWydrukowac, LiczbyUzytkownika, wylosowane[ IleWydrukowac ] )
Nie czytam całego kodu. Po nie zbyt celnie nazwanych zmiennych zdołałem zauważyć jedynie że jako parametr podajesz liczbe pod indeksem IleWydrukowac jest ona na początku 0 i więcej się nie podniesie bo while( IleWydrukowac > 8 ) czyli while( 0 > 8 ) <=> false
Czyli pętla wykona się raz i funkcja w niej będzie próbowała wykonać LiczbyUzytkownika[ ta ] <=> LiczbyUzytkownika[ Wylosowane ] <=>
LiczbyUzytkownika[ wylosowane[ileWydrukowac] ] jesli wylosowane[ileWydrukowac] = 8 to LiczbyUzytkownika[8] pewnie nie istnieje
P-113883
twoxu
Temat założony przez niniejszego użytkownika
» 2014-07-16 22:27:52
Czyli jak to rozwiązać?
Aha, i wytłumacz mi co to znaczy <=>. W lekcji z operacjami porównania nie ma czegoś takiego, a ja śledzę tylko ten kurs więc nie mogłem się tego dowiedzieć z innego źródła.
Poza tym twój post jest źle skonstruowany i trochę się w nim pogubiłem. Używaj enter, oraz kod dawaj do
specjalnego miejsca
P-113884
Moorfox
» 2014-07-16 22:39:23
<=> równoważne, to samo xd
czyli po prostu transformuje wyrażenia
jesli int a = 0; int b = 0; int c = 1; int d = 2; int tab[] = {1,2,1};
to

tab[a] <=> tab[b]
tab[a] <=> tab[d]
ale to juz jest zle tab[a] <=> tab[c]
Tak a pro po <=> to symbol używany w matematyce nie w językach programowania za pomocą tego próbuje ci coś wytłumaczyć.
P-113888
pekfos
» 2014-07-16 22:39:50
Aha, i wytłumacz mi co to znaczy <=>. W lekcji z operacjami porównania nie ma czegoś takiego, a ja śledzę tylko ten kurs więc nie mogłem się tego dowiedzieć z innego źródła.
To nie z C++, tylko matematyki.
P-113889
twoxu
Temat założony przez niniejszego użytkownika
» 2014-07-16 23:48:56
Zamieniłem
C/C++
IleWydrukowac > 8
na
C/C++
IleWydrukowac <= 7
lecz aplikacja nadal się crashuje.
P-113896
Moorfox
» 2014-07-16 23:53:11
while( wylosowanych > 8 );
P-113897
Moorfox
» 2014-07-16 23:56:16
C/C++
void wydrukuj( int IleWydrukowac, int Wylosowane[] )
{
    cout << IleWydrukowac + 1 << " z nich to jest:" << Wylosowane[ IleWydrukowac ] << endl;
}

int main()
{
    ...
    wydrukuj( IleWydrukowac, wylosowane );
}
P-113898
« 1 » 2
  Strona 1 z 2 Następna strona