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

Lekcja 21- Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2013-08-03 13:49
Autor Wiadomość
zsefb1
Temat założony przez niniejszego użytkownika
Lekcja 21- Losowanie bez powtórzeń
» 2013-08-02 15:22:06
Witam wszystkich. W skrócie program ma losować liczby bez powtórzeń. Funkcja szukacz przeszukuje tablice w celu sprawdzenia czy liczba wylosowana za pomocą funkcji losuj nie jest równa któremuś z elementów tablicy. Jeśli nie jest to zwraca wartość tego elementu. Przy kompilacji wyskakują takie błędy.

invalid conversion from 'int' to 'int*' [-fpermissive]
initializing argument 1 of 'int szukacz(int*, int)' [-fpermissive]

Bardzo proszę o pomoc w zrozumieniu moich błędów. Za pomoc z góry dziękuję, za złe sformatowanie przepraszam.

C/C++
#include<iostream>
#include<time.h>
#include<stdlib.h>



using namespace std;

int szukacz( int tablica[], int liczba )
{
   
    for( int i = 1; i < 10; i++ )
    {
        if( liczba == tablica[ i ] )
        {
            i--;
        }
        if( liczba != tablica[ i ] )
        {
            return tablica[ i ];
        }
    }
}

int losuj()
{
    return(( rand() % 10 ) + 1 );
}

int main()
{
   
    int tab[ 10 ];
    int l;
    srand( time( 0 ) );
    for( int i = 0; i < 10; i++ )
    {
        tab[ i ] = 0;
    }
   
    for( int i = 1; i < 10; i++ )
    {
        l = losuj();
        tab[ i ] = szukacz( tab[ 10 ], l );
    }
    return 0;
}
P-89284
MrPoxipol
» 2013-08-02 17:18:02
Musisz wysłać adres tablicy (adresem jest jej nazwa) do funkcji szukacz.

@down
No, ta, mój błąd :<
P-89292
pekfos
» 2013-08-02 17:20:56
C/C++
tab[ i ] = szukacz( tab[ 10 ], l );
Przekazujesz element (za tablicą), zamiast tablicy.

adresem jest jej nazwa
Identyfikator tablicy nie jest wskaźnikiem na nią, ale jest niejawna konwersja na wskaźnik ;)
P-89294
zsefb1
Temat założony przez niniejszego użytkownika
OK
» 2013-08-02 19:03:21
Teraz program działa ale niestety liczby się powtarzają. Czy widzi ktoś błąd logiczny w moim programie?
P-89318
MrPoxipol
» 2013-08-02 20:01:51
Bo nie sprawdzasz czy się powtarzają..zobacz na przykład w kursie.
P-89321
zsefb1
Temat założony przez niniejszego użytkownika
zrobione
» 2013-08-03 13:49:13
Po paru godzinach wymyślania napisałem wreszcie działający kod( Nie chciałem żeby był taki sam jak na kursie dlatego się was pytałem, i kombinowałem po swojemu). Bardzo dziękuję za tą uwagę o tablicach. Teraz już będę wiedział co w trawie piszczy gdy pojawią się podobne błędy. Poniżej kod mojego programu.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int czy( int tablica[], int liczba )
{
    bool sygnal;
    int i = 0;
    do
    {
        if( tablica[ i ] == liczba )
        {
            sygnal = true;
            liczba = 0;
        }
        if( tablica[ i ] != liczba )
        {
            sygnal = false;
            i++;
        }
    } while( sygnal == false && i < 10 );
   
    return liczba;
}
int losuj()
{
    return(( rand() % 30 ) + 1 );
}
int pokaz( int tablica[] )
{
    for( int i = 0; i < 10; i++ )
    {
        cout << tablica[ i ] << "\n\n";
    }
}

int main()
{
    srand( time( 0 ) );
    int tab[ 10 ];
    int liczba;
    for( int i = 0; i < 10; i++ )
    {
        liczba = losuj();
       
        if( czy( tab, liczba ) == 0 )
        {
            i--;
        }
        if( czy( tab, liczba ) > 0 )
        {
            tab[ i ] = liczba;
        }
    }
    pokaz( tab );
    return 0;
}
P-89388
« 1 »
  Strona 1 z 1