sprawdzenie czy zmienne mają taką samą wartość
Ostatnio zmodyfikowano 2017-10-15 19:30
Corvette653 Temat założony przez niniejszego użytkownika |
sprawdzenie czy zmienne mają taką samą wartość » 2017-10-15 18:02:48 w moim kodzie mam pewien problem krótko opisując: mam tablice z 50 zmiennymi. Musze sprawdzić czy zmienna wynik == tablica[ 0 ] || wynik == tablica[ 1 ] ||...|| wynik == tablica[ 49 ] || wynik == tablica[ 50 ]
teraz jestem w stanie to napisać ręcznie jednak może wystąpić przypadek że ta tablica będzie zawierać 1000 zmiennych czy można to skrócić? próbowałem tak: wynik == * tablica wynik == tablica[]
|
|
kistel66 |
» 2017-10-15 18:22:54 Użyj pętli. for( int i = 0; i < ROZMIAR_TABLICY; i++ ) if( wynik == tablica[ i ] ) cout << wynik << endl;
|
|
Corvette653 Temat założony przez niniejszego użytkownika |
:( to ja umiem » 2017-10-15 18:39:48 problem polega na tm że za 1 razem muszą sprawdzić się wszystkie opcje mogę zrobić to tak: do { ... for( int i = 0; i < 150; i++ ) { } while( wynik == tablica[ i ] ); }
(usunąłem środek pętli ponieważ jest bez znaczenia) niestety nawiasy źle się łączą teraz pętla for jest w środku pętli do a powinna się zaczynać w środku i kończyć poza nią |
|
maly7 |
» 2017-10-15 18:52:00 Nie da się tak zrobić, żeby blok zachodził na jakiś inny blok, musi być cały umieszczony w nim. To by było w ogóle bez sensu :D Możesz zrobić np. coś takiego (tylko propozycja): bool ok = true; for( int i = 0; i < ROZMIAR_TABLICY; i++ ) { if( wynik != tab[ i ] ) { ok = false; break; } } Na końcu zmienna ok zawiera info czy wszystkie elementy są takie same czy też nie. |
|
Breakermind |
» 2017-10-15 18:56:59 Lub coś takiego: int i = 0; const int len = 150; int tablica[ len ]
while( wynik != tablica[ i ] && i < len ) { i++; }
|
|
michal11 |
» 2017-10-15 19:30:16 Może nie najprostsze ale pewnie najczytelniejsze rozwiązanie #include <algorithm> #include <iterator> #include <functional>
int tab[] { 1, 2, 3, 4, 5, 6 }; int var = 3;
cout << std::any_of( std::begin( tab ), std::end( tab ), std::bind( std::equal_to < int >(), std::placeholders::_1, var ) ) << endl; cout <<( std::find( std::begin( tab ), std::end( tab ), var ) != std::end( tab ) ) << endl;
var = 7;
cout << std::any_of( std::begin( tab ), std::end( tab ), std::bind( std::equal_to < int >(), std::placeholders::_1, var ) ) << endl; cout <<( std::find( std::begin( tab ), std::end( tab ), var ) != std::end( tab ) );
dodatkowo masz jeszcze funkcje http://www.cplusplus.com/reference/algorithm/all_of/http://www.cplusplus.com/reference/algorithm/none_of/Edit. W zasadzie lepiej chyba byłoby użyć lambdy std::any_of( std::begin( tab ), std::end( tab ),[ & var ]( int arg ) { return arg == var; } );
|
|
« 1 » |