carlosmay |
» 2016-08-14 18:27:25 Tylko co? Tam nie ma błędu. Małpa (hi hi);) @Gibas11 dał ci dwie dobre wskazówki. Albo to zrozumiesz, albo nie. (ta małpka przed loginem zawsze rozbawia jak czyta się dosłownie) Pomyśl o tym tak: Przekazujesz coś do funkcji, a funkcja to odbiera, coś na zasadzie przypisania. void printNumber( int argument ) { }
void printArray( int argument[] ) { }
int main() { int arrayOfNumbers[] = { 1, 2, 3 }; printNumber( arrayOfNumbers[ 0 ] ); printArray( arrayOfNumbers ); }
|
|
chrust |
» 2016-08-14 18:28:55 Jestem świeżakiem, ale zauważyłem, że masz błąd: "if( tab[ i++ ] == iLiczba )". Postinkrementacja powinna być za " return true; ", ponieważ pierw musisz porównać tab[0] z nowa wylosowana liczba, czy nie są takie same. Nawet masz to w kodzie napisane z lekcji. Pierwszy raz pisze na forum. Sory za formatowanie ;)
|
|
carlosmay |
» 2016-08-14 18:31:37 ponieważ pierw musisz porównać tab[0] z nowa wylosowana liczba, czy nie są takie same. Nawet masz to w kodzie napisane z lekcji. |
Ten kod właśnie to robi. Najpierw porównuje wartości, następnie wykonuje się postinktrementacja na zmiennej 'i'. Poczytaj o różnicach między preinkrementacjią a postinkrementacją. Postinkrementacja powinna być za " return true; ", |
To nie ma sensu, bo wejście do if'a skutkuje wykonanie return i opuszczenie funkcji, więc do inkrementacji nawet nie dojdzie. |
|
chrust |
» 2016-08-14 18:36:12 Przeczytałem, mój błąd, teraz zapamiętam:) Dobrze jest tak pisać? Zawsze parę linijek mniej w programie. |
|
carlosmay |
» 2016-08-14 18:40:09 W prostych przykładach tak, bo okiem ogarniasz co się dzieje. W bardziej skomplikowanych kodach lepiej wyróżniać inkrementację, dekrementację. Zyskasz na czytelności, a o to w tym chodzi, żeby na pierwszy rzut oka było widać co robi dany fragment kodu. |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-08-14 18:57:26 Panowie nie wkleiłem całego kodu, mój błąd. Staram się zrozumieć ale kod mi nie trybi, pomału do celu staram się dotrzeć. Gibas11 ładnie to napisał ale mam problem z przepisaniem tego na do while i nie chcę tego przeskoczyć z forem bo nie o to chodzi. int tab[ 2 ] = { - 1, - 1 } Kolega to wytłumaczył ale zdałem sobie sprawę że nie umiem sobie tego wyobrazić, w rożnych tematach ludzie obchodzą się bez wartości -1 i nie wiem jak to obejść, napisać poprawnie. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i++ ] == iLiczba ) return true; } while( i < ile ); return false; }
void podjaliczbe( int tab2[] ) { int i = 0; int liczba = 0; cout << "Podaj 3 liczby: " << endl; do { cout << "Liczba: "; cin >> liczba; tab2[ i++ ] = liczba; } while( i < 3 ); }
int losowanie() { int liczba = rand() % 3; return liczba; } int main() { srand( time( NULL ) ); int tab2[ 3 ]; int tab[ 2 ] = { - 1, - 1 }; int los = 0; int i = 0; podjaliczbe( tab2 ); i = 0; do { los = losowanie(); if( czyBylaWylosowana( los, tab2, 2 ) ) { tab[ i++ ] = tab[ los ]; cout << tab2[ tab[ i ] ] << endl; } } while( i < 2 ); return 0; } [ cpp ] |
|
chrust |
» 2016-08-14 19:12:36 Nie losujesz liczb które podał użytkownik, tylko losujesz nowe. Rand jest źle napisany. Zrobiłem coś takiego:
int losy(int tab[]) { return (rand()%3)+0; }
i
int zbior_liczb[3]; int losowanie = zbior_liczb[losy(zbior_liczb)];
Zapewne nie jest to profesionalne, ale działa :D
|
|
carlosmay |
» 2016-08-14 19:17:30 do { los = losowanie(); if( !czyBylaWylosowana( los, tab, i ) ) { tab[ i++ ] = los; } } while( i < 2 );
for( int i = 0; i < 2; ++i ) { cout << tab2[ tab[ i ] ] << ' '; } cout << '\n'; To jest dość proste, więc tłumaczenie chyba nie jest potrzebne. @chrust: return( rand() % 3 ) + 0; ==> return rand() % 3; Dodanie zera nic nie zmienia w wyniku działania. edit: edytowałem kod, skopiowałem nie tego for'a. |
|
1 « 2 » 3 4 |