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

[c++] Warunki i składnia kodu sprawdzającego kombinacje

Ostatnio zmodyfikowano 2018-12-11 19:19
Autor Wiadomość
gz08
Temat założony przez niniejszego użytkownika
[c++] Warunki i składnia kodu sprawdzającego kombinacje
» 2018-12-11 18:13:58
Witam,
chciałem napisać prosty program który pomógłby mi znaleźć kombinacje spełniające pewien warunek(wiem że jest wykonalny). Niestety pętle działają w sposób niezrozumiały dla mnie. Proszę o pomoc/poprawienie kodu w miejscach w których moja nikła wiedza spowodowała błędy uniemożliwiające poprawne działanie programu.
P-173201
gz08
Temat założony przez niniejszego użytkownika
» 2018-12-11 18:17:04
Oto kod
C/C++
#include <iostream>

using namespace std;

int main()
{
    for( int i = 0; i <= 3; i++ )
    {
        int wynik = 176;
        int silnik;
        if( i == 0 )
             silnik = 0;
        else if( i == 1 )
        {
            wynik += 10;
            silnik = 1;
        }
        else if( i == 2 )
        {
            wynik += 18;
            silnik = 2;
        }
        else if( i == 3 )
        {
            wynik += 29;
            silnik = 3;
        }
        for( int ii = 0; ii <= 3; ii++ )
        {
            int uklad;
            if( ii == 0 )
                 uklad = 0;
            else if( ii == 1 )
            {
                wynik += 6;
                uklad = 1;
            }
            else if( ii == 2 )
            {
                wynik += 13;
                uklad = 2;
            }
            else if( ii == 3 )
            {
                wynik += 17;
                uklad = 3;
            }
            for( int iii = 0; iii <= 3; iii++ )
            {
                int opony;
                if( iii == 0 )
                     opony = 0;
                else if( iii == 1 )
                {
                    wynik += 7;
                    opony = 1;
                }
                else if( iii == 2 )
                {
                    wynik += 15;
                    opony = 2;
                }
                else if( iii == 3 )
                {
                    wynik += 22;
                    opony = 3;
                }
                for( int j = 0; j <= 3; j++ )
                {
                    int zawieszenie;
                    if( j == 0 )
                         zawieszenie = 0;
                    else if( j == 1 )
                    {
                        wynik += 7;
                        zawieszenie = 1;
                    }
                    else if( j == 2 )
                    {
                        wynik += 15;
                        zawieszenie = 2;
                    }
                    else if( j == 3 )
                    {
                        wynik += 22;
                        zawieszenie = 3;
                    }
                    for( int jj = 0; jj <= 3; jj++ )
                    {
                        int hamulce;
                        if( jj == 0 )
                             hamulce = 0;
                        else if( jj == 1 )
                        {
                            wynik += 5;
                            hamulce = 1;
                        }
                        else if( jj == 2 )
                        {
                            wynik += 9;
                            hamulce = 2;
                        }
                        else if( jj == 3 )
                        {
                            wynik += 14;
                            hamulce = 3;
                        }
                        for( int jjj = 0; jjj <= 3; jjj++ )
                        {
                            int ecu;
                            if( jjj == 0 )
                                 ecu = 0;
                            else if( jjj == 1 )
                            {
                                wynik += 8;
                                ecu = 1;
                            }
                            else if( jjj == 2 )
                            {
                                wynik += 18;
                                ecu = 2;
                            }
                            else if( jjj == 3 )
                            {
                                wynik += 25;
                                ecu = 3;
                            }
                            for( int k = 0; k <= 3; k++ )
                            {
                                int wr;
                                if( k == 0 )
                                     wr = 0;
                                else if( k == 1 )
                                {
                                    wynik += 4;
                                    wr = 1;
                                }
                                else if( k == 2 )
                                {
                                    wynik += 7;
                                    wr = 2;
                                }
                                else if( k == 3 )
                                {
                                    wynik += 11;
                                    wr = 3;
                                }
                                for( int kk = 0; kk <= 3; kk++ )
                                {
                                    int turbo;
                                    if( kk == 0 )
                                         turbo = 0;
                                    else if( kk == 1 )
                                    {
                                        wynik += 6;
                                        turbo = 1;
                                    }
                                    else if( kk == 2 )
                                    {
                                        wynik += 13;
                                        turbo = 2;
                                    }
                                    else if( kk == 3 )
                                    {
                                        wynik += 18;
                                        turbo = 3;
                                    }
                                    for( int kkk = 0; kkk <= 3; kkk++ )
                                    {
                                        int nitro;
                                        if( kkk == 0 )
                                             turbo = 0;
                                        else if( kkk == 1 )
                                        {
                                            wynik += 6;
                                            turbo = 1;
                                        }
                                        else if( kkk == 2 )
                                        {
                                            wynik += 13;
                                            turbo = 2;
                                        }
                                        else if( kkk == 3 )
                                        {
                                            wynik += 19;
                                            turbo = 3;
                                        }
                                        if( wynik == 250 )
                                             cout << silnik << " " << uklad << " " << opony << " " << zawieszenie << " " << hamulce << " " << ecu << " " << wr << " " << turbo << " " << nitro;
                                       
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    int a;
    cin >> a;
    return 0;
}
P-173203
pekfos
» 2018-12-11 18:22:52
Kod jest strasznie przekombinowany. Najlepiej zacznij od jego uproszczenia.
C/C++
for( int i = 0; i <= 3; i++ )
{
    int wynik = 176;
    int silnik;
    if( i == 0 )
         silnik = 0;
    else if( i == 1 )
    {
        wynik += 10;
        silnik = 1;
    }
    else if( i == 2 )
    {
        wynik += 18;
        silnik = 2;
    }
    else if( i == 3 )
    {
        wynik += 29;
        silnik = 3;
    }
silnik jest zawsze równe i, więc nie ma sensu robić z tego dwóch zmiennych. Wartość dodawana do wyniku powinna być przechowywana w tablicy, by nie musieć robić tylu warunków.
C/C++
int wartosc_silnik[ 4 ] = { 0, 10, 18, 29 };
//..

for( int silnik = 0; silnik <= 3; silnik++ )
{
    int wynik = 176 + wartosc_silnik[ silnik ];
    //..
}
P-173204
gz08
Temat założony przez niniejszego użytkownika
» 2018-12-11 18:44:14
Uprościłem kod, teraz wygląda dużo czytelniej i jest o połowę krótszy, jednak całość dalej nie wyświetla żadnego wyniku. Sprawdziłem czy warunek jest wykonywalny i ewidentnie jest (250=176+29+19+13+13). Wklejam kod po poprawkach.
C/C++
#include <iostream>

using namespace std;

int main()
{
    int wartosc_silnik[ 4 ] = { 0, 10, 18, 29 };
    int wartosc_uklad[ 4 ] = { 0, 6, 13, 17 };
    int wartosc_opony[ 4 ] = { 0, 7, 15, 22 };
    int wartosc_zawieszenie[ 4 ] = { 0, 5, 11, 17 };
    int wartosc_hamulce[ 4 ] = { 0, 5, 9, 14 };
    int wartosc_ecu[ 4 ] = { 0, 8, 18, 25 };
    int wartosc_wr[ 4 ] = { 0, 4, 7, 11 };
    int wartosc_turbo[ 4 ] = { 0, 6, 13, 18 };
    int wartosc_nitro[ 4 ] = { 0, 6, 13, 19 };
    for( int silnik = 0; silnik <= 3; silnik++ )
    {
        int wynik = 176 + wartosc_silnik[ silnik ];
        for( int uklad = 0; uklad <= 3; uklad++ )
        {
            wynik += wartosc_uklad[ uklad ];
            for( int opony = 0; opony <= 3; opony++ )
            {
                wynik += wartosc_opony[ opony ];
                for( int zawieszenie = 0; zawieszenie <= 3; zawieszenie++ )
                {
                    wynik += wartosc_zawieszenie[ zawieszenie ];
                    for( int hamulce = 0; hamulce <= 3; hamulce++ )
                    {
                        wynik += wartosc_hamulce[ hamulce ];
                        for( int ecu = 0; ecu <= 3; ecu++ )
                        {
                            wynik += wartosc_ecu[ ecu ];
                            for( int wr = 0; wr <= 3; wr++ )
                            {
                                wynik += wartosc_wr[ wr ];
                                for( int turbo = 0; turbo <= 3; turbo++ )
                                {
                                    wynik += wartosc_turbo[ turbo ];
                                    for( int nitro = 0; nitro <= 3; nitro++ )
                                    {
                                        wynik += wartosc_nitro[ nitro ];
                                        if( wynik == 250 )
                                             cout << silnik << " " << uklad << " " << opony << " " << zawieszenie << " " << hamulce << " " << ecu << " " << wr << " " << turbo << " " << nitro;
                                       
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    int a;
    cin >> a;
    return 0;
}
P-173208
pekfos
» 2018-12-11 19:03:29
Wszystkie wartości powinieneś zsumować w najbardziej zagnieżdżonej pętli.
P-173211
gz08
Temat założony przez niniejszego użytkownika
» 2018-12-11 19:19:53
Dzięki za pomoc, działa, spodziewałem się że jest tych kombinacji mniej (jest ich coś koło 4000). Do zamknięcia.
P-173214
« 1 »
  Strona 1 z 1