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

Dziwny sposób przeliczenia danych - pomysły

dział ogólny

Dziwny sposób przeliczenia danych - pomysły

Nowy postprzez Corvis » niedziela, 15 czerwca 2014, 21:27

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.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Cyfrowy Baron » poniedziałek, 16 czerwca 2014, 04:38

W1 musi mieć dane z W3 zanim W3 zostanie obliczone?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Corvis » poniedziałek, 16 czerwca 2014, 08:06

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
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Cyfrowy Baron » poniedziałek, 16 czerwca 2014, 15:21

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?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Corvis » poniedziałek, 16 czerwca 2014, 16:49

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 :)
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Cyfrowy Baron » poniedziałek, 16 czerwca 2014, 17:06

Nie bardzo jednak rozumiem czego oczekujesz. Przecież na podstawie danych które przedstawiłeś nie da się opracować żadnego algorytmu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Corvis » poniedziałek, 16 czerwca 2014, 19:16

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.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Cyfrowy Baron » poniedziałek, 16 czerwca 2014, 19:40

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;
                }
        }
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Corvis » poniedziałek, 16 czerwca 2014, 20:12

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
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Darek_C++ » poniedziałek, 16 czerwca 2014, 20:43

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.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Corvis » niedziela, 22 czerwca 2014, 17:37

Rozwiązałem problem :-)

Licząc funkcję w indeksie i jej wartość wpisywałem też do indeksu i+1 :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 52 gości

cron