Lekcja 21- Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2013-08-03 13:49
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. #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; }
|
|
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 :< |
|
pekfos |
» 2013-08-02 17:20:56 tab[ i ] = szukacz( tab[ 10 ], l );
Przekazujesz element (za tablicą), zamiast tablicy. Identyfikator tablicy nie jest wskaźnikiem na nią, ale jest niejawna konwersja na wskaźnik ;) |
|
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? |
|
MrPoxipol |
» 2013-08-02 20:01:51 Bo nie sprawdzasz czy się powtarzają..zobacz na przykład w kursie. |
|
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. #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; }
|
|
« 1 » |