CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Dziwny sposób przeliczenia danych - pomysły
Strona 1 z 1

Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: niedziela, 15 czerwca 2014, 21:27
przez Corvis
Witam,

Mam kawałek programu który, który dokonuje mi przeliczeń na danych według funkcji napisanych przez użytkownika. Przykład:

W0 - Dane()
W1 - Dodaj(W0, 100)
W2 - SMA(Dane)

Mam jednak problem jak napiszę taką "strategię"

W0 - Dane()
W1 - Zmiana( W3 ) // <-----
W2 - Przeliczenie_1(W1)
W3 - if(W2 > 10)

Normalnie dokonywałem przeliczenia w następujący sposób.

KOD cpp:     UKRYJ  
for(int w = 0; w < wykresy.size(); ++w) {
    for(int i = POCZATEK_DANYCH; i < KONIEC_DANYCH; ++i) {
        LiczFunkcje(wykresy[w].Adres);
    }
}


Tylko, że taki sposób nie zadziała dla 2 przypadku opisanego przeze mnie :/

Myślałem, żeby napisać to tak:

KOD cpp:     UKRYJ  
for(int i = POCZATEK_DANYCH; i < KONIEC_DANYCH; ++i) {
    for(int w = 0; w < wykresy.size(); ++w) {
        LiczFunkcje(wykresy[w].Adres);
    }
}


Tylko, że jeżeli mam 30 wykresów + milion danych to przeliczenie będzie trwało wieki. Ale to też nie będzie działać. Może ktoś by spojrzał świeżym okiem na taki problem i coś podpowiedział ? :-)

Mam nadzieję, że jasno to opisałem. Chodzi o to, że W1 musi mieć dane z W3.

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 04:38
przez Cyfrowy Baron
W1 musi mieć dane z W3 zanim W3 zostanie obliczone?

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 08:06
przez Corvis
No taki jest przypadek :/ Kombinowałem na różne sposoby, na podwójne przeliczanie, na branie do bieżącego przeliczenia wyliczenia poprzedniego i jakoś nic mi nie chce zadziałać dobrze

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 15:21
przez Cyfrowy Baron
Nie dostrzegasz tutaj żadnego konfliktu? Jak W1 może pobrać dane z W3 skoro W3 nie zostało jeszcze obliczone, czyli w zasadzie nie istnieje. Brak w tym logiki. Dodatkowo masz W3 obwarowane warunkiem, czyli nie zawsze W3 będzie obliczane - co wtedy?

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 16:49
przez Corvis
Przykład z załącznika. Który ma sens :-)

Funkcja zmiana ma się wykonać wtedy gdy wynik z funkcji licz będzie = 5. Jeżeli będzie to spełnione to musi się wykonać zmiana. i przeliczenie na nowo. I to ma sens :)

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 17:06
przez Cyfrowy Baron
Nie bardzo jednak rozumiem czego oczekujesz. Przecież na podstawie danych które przedstawiłeś nie da się opracować żadnego algorytmu.

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 19:16
przez Corvis
KOD cpp:     UKRYJ  
        #define _wykresy        3
        #define _dane           10

        double b[_wykresy][_dane];

        for(int i = 0; i < _wykresy; ++i) {
                for(int j = 0; j < _dane; ++j) {
                        b[i][j] = 0;
                }
        }

        for(int i = 0; i < _wykresy; ++i) {
                for(int j = 0; j < _dane; ++j) {

                        if(j>0) {
                                b[0][j] = b[1][j-1] + b[2][j-1];
                        }

                        b[1][j] = 3;
                        b[2][j] = 3;
                }
        }
 


Testowałem taki kod -> wpierw przeliczenie 0 pozycji następne branie poprzedniego elementu to wyliczenia.

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 19:40
przez Cyfrowy Baron
Przecież te pętle są identyczne, więc całe przeliczanie można zagnieździć w dwóch pierwszych.

KOD cpp:     UKRYJ  
for(int i = 0; i < _wykresy; ++i) {
                for(int j = 0; j < _dane; ++j) {
                        b[i][j] = 0;
                                               
                                                 if(j>0) {
                                b[0][j] = b[1][j-1] + b[2][j-1];
                        }

                        b[1][j] = 3;
                        b[2][j] = 3;
                }
        }

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 20:12
przez Corvis
Patrząc jednak na przykład z obrazka muszę zastosować taki sposób przeliczenia -> pionowy czyli dla każdej danej przeliczyć wszystkie wykresy
KOD cpp:     UKRYJ  
#define _wykresy        3
        #define _dane           10

        double b[_wykresy][_dane];

        for(int d = 0; d < _dane; ++d) {
                for(int w = 0; w < _wykresy; ++w) {
                        b[w][d] = 0;

                        if(d>0) { b[0][d] = b[1][d-1] + b[2][d-1]; }

                        b[1][d] = 3;
                        b[2][d] = 3;
                }
        }
 


Nie jest to chyba zbyt optymalne niestety

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: poniedziałek, 16 czerwca 2014, 20:43
przez Darek_C++
Corvis napisał(a):Mam kawałek programu który, który dokonuje mi przeliczeń na danych według funkcji napisanych przez użytkownika.

Może zastosowanie języków skryptowych rozszerzających program w C++ jak python lub lua często używane w grach okażą się pomocne do pisania tych funkcji przez użytkownika.

Re: Dziwny sposób przeliczenia danych - pomysły

Nowy postNapisane: niedziela, 22 czerwca 2014, 17:37
przez Corvis
Rozwiązałem problem :-)

Licząc funkcję w indeksie i jej wartość wpisywałem też do indeksu i+1 :)