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

Optymalizacja funkcji

Ostatnio zmodyfikowano 2015-12-06 20:27
Autor Wiadomość
nats
Temat założony przez niniejszego użytkownika
Optymalizacja funkcji
» 2015-12-06 18:13:34
Witam, mam problem z optymalizacją swojego kodu:

C/C++
if( * ruchg == 'd' ) {
    cout << "Twoje możliwe ruchy to: " << endl << "prawo(p), dół-prawo(i), dół(d), dół-lewo(j), lewo(l)." << endl << "Wybierz ruch: " << endl;
    krok = _getch();
    switch( krok ) {
    case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //p
    case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //d
    case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //l
    case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dp
    case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dl
        default: cout << "Zły wybór ruchu."; break;
    }
    * ruchg = krok;
}
else if( * ruchg == 'l' ) {
    cout << "Twoje możliwe ruchy to: " << endl << "lewo(l), góra-lewo(h), dół-lewo(j), dół(d), góra(g)." << endl << "Wybierz ruch: " << endl;
    krok = _getch();
    switch( krok ) {
    case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //d
    case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //l
    case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dl
    case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //gl
    case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //g
        default: cout << "Zły wybór ruchu."; break;
    }
    * ruchg = krok;
   
    //....tu kilka podobnych else if
   
    else {
        cout << "Wybierz ruch: " << endl;
        krok = getch();
        switch( krok ) {
        case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dp
        case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dl
        case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //gl
        case 'y': ruch( - 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //gp
        case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //p
        case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //d
        case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //l
        case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //g
            default: cout << "nic" << endl;
        }
        * ruchg = krok;
    }
   
}

Chciałabym "zmniejszyc objetosc kodu, czy jest to wykonalne?
P-141512
carlosmay
» 2015-12-06 19:06:58
Usunięcie kodu z poprzedniego tematu jest najdelikatniej mówiąc chamskie.
Tematy mają też służyć innym.
Otrzymałaś pomoc i zawijasz manele. Teraz te ochłapy, które tam zostały są nieczytelne dla innych.

Nie zdziwiłbym się gdybyś nie otrzymała już więcej pomocy.


Nabierz doświadczenia to będziesz umiała optymalizować kod.
Nie skracanie kodu, tylko poprawianie czytelności jest lepszym rozwiązaniem (organizacja kodu, wzorce projektowe itp.).
P-141515
Gibas11
» 2015-12-06 20:01:30
@up Wyluzuj, sądzisz że ktoś spamiętuje nicki takich użytkowników i więcej im nie pomaga? Ale spina.

Wracając do meritum - Zmienia się tylko część argumentów przekazywanych dalej do funkcji, zamiast wielokrotnie powtórzonych wywołań możesz zapamiętać tylko potrzebne dane, np. tak:
1. Kod na którym się wzorowałem:
C/C++
else {
    cout << "Wybierz ruch: " << endl;
    krok = getch();
    switch( krok ) {
    case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dp
    case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //dl
    case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //gl
    case 'y': ruch( - 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //gp
    case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //p
    case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //d
    case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //l
    case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; //g
        default: cout << "nic" << endl;
    }
    * ruchg = krok;
}
2. Efekt:
C/C++
else
{
    cout << "Wybierz ruch: " << endl;
    krok = getch();
   
    int a = 0, b = 0;
    bool ok = true;
   
    switch( krok )
    {
    case 'i':
        a = 1;
        b = 1;
        break;
    case 'j':
        a = 1;
        b = - 1;
        break;
    case 'h':
        a = - 1;
        b = - 1;
        break;
    case 'y':
        a = - 1;
        b = 1;
        break;
    case 'p':
        a = 0;
        b = 1;
        break;
    case 'd':
        a = 1;
        b = 0;
        break;
    case 'l':
        a = 0;
        b = - 1;
        break;
    case 'g':
        a = - 1;
        b = 0;
        break;
    default:
        cout << "nic" << endl;
        ok = false;
    }
    if( ok )
         ruch( a, b, x, x_gr, y_gr, x_s, y_s, v, gracz );
   
    * ruchg = krok;
}

Kod może i jest dłuższy, ale tutaj nie robi to różnicy, a poprawę w czytelności chyba widać na pierwszy rzut oka.
P-141534
carlosmay
» 2015-12-06 20:06:46
Wyluzuj, sądzisz że ktoś spamiętuje nicki takich użytkowników i więcej im nie pomaga? Ale spina.
 Po porostu poświęciłem czas na pomoc, a na koniec taki zonk.
P-141535
Gibas11
» 2015-12-06 20:09:11
Trochę smutne, ale pomóc wypada, po prostu wrzucaj duże kawałki kodu to nikt się ich nie pozbędzie. Będzie materiał dla potomnych.
P-141536
carlosmay
» 2015-12-06 20:25:05
po prostu wrzucaj duże kawałki kodu to nikt się ich nie pozbędzie.
 Cenna uwaga. (Zrozumiałbym, gdyby to była wielka wartość intelektualna).
Poza tym ja ten kod mam, więc i tak już wyciekł. ;)

edit: Już mi zeszło. Nie jestem taki.
P-141541
Gibas11
» 2015-12-06 20:27:00
To go wrzuć w tamtym temacie, może komyś się przyda. ^^
P-141542
« 1 »
  Strona 1 z 1