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

sprawdzenie czy zmienne mają taką samą wartość

Ostatnio zmodyfikowano 2017-10-15 19:30
Autor Wiadomość
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
C/C++
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:
C/C++
wynik == * tablica //- nie działa
wynik == tablica[] //- nie działa
P-165782
kistel66
» 2017-10-15 18:22:54
Użyj pętli.

C/C++
for( int i = 0; i < ROZMIAR_TABLICY; i++ )
     if( wynik == tablica[ i ] ) cout << wynik << endl;

P-165786
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:
C/C++
do
{ //                                                                tutaj zaczyna się pętla do
    ...
    for( int i = 0; i < 150; i++ )
    { //                                                            tutaj zaczyna się pętla for
    } while( wynik == tablica[ i ] ); //                            tutaj kończy się pętla for//     tutaj powinna kończyć się pętla do
   
} //                                                                tutaj kończy się pętla do//      tutaj powinna kończyć się pętla for
(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ą
P-165787
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):
C/C++
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.
P-165788
Breakermind
» 2017-10-15 18:56:59
Lub coś takiego:

C/C++
int i = 0;
const int len = 150;
int tablica[ len ]

while( wynik != tablica[ i ] && i < len ) {
    // zrób coś
   
    // zwieksz licznik
    i++;
}
P-165789
michal11
» 2017-10-15 19:30:16
Może nie najprostsze ale pewnie najczytelniejsze rozwiązanie
C/C++
#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
C/C++
std::any_of( std::begin( tab ), std::end( tab ),[ & var ]( int arg ) { return arg == var; } );
P-165791
« 1 »
  Strona 1 z 1