raVVal Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 Piszę mały eksperyment ekonomiczny. W klasie Shop znajduje się metoda float tendencja() ma za zadanie na podstawie tablicy liczb obliczyć średni stosunek kolejnych liczb do następnej(1/2; 2/3; 3/4 itd.). Oto ona: float tendencja() { float suma = 0; //suma wszystkich stosunków for(int i=0; i<4; i++) //tablica jest 5-elementowa więc będą 4 stosunki { if(prevSell[i] == -1) // w konstruktorze zamiast zerować tbice nadałem wszystkim elementom -1; {break;} //do tablicy (jescze w innej metodzie) dodawane są elementy do indeksu zero wypychając inne //Dlatego sprawdzam czy element nie jest równy -1. else { suma += prevSell[i]/prevSell[i+1]; //dodaję kolejne stosunki } } return suma/4; //zwracam średnią czyli sumę przez ilość(4) } PROBLEM: wynik jest niepoprawny! Liczę to kalkulatorem i się nie zgadza. Poza tym gdy elementy są rosnące to wartość jest mniejsza od 1!! O co chodzi! Proszę o pomoc!
Sernat Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 To to: for(int i=0; i<4; i++) //tablica jest 5-elementowa więc będą 4 stosunki Ile elementów dodajesz ;) ? Dla i=0 => element pierwszy, dla i=1 => element drugi, dla i=2 => element trzeci, dla i=3 => element czwarty. I koniec ;) . Przecież 4 nie jest mniejsze od 4. Pozdrawiam. Edit: Ach, mój fail. Przecież nie możesz operować na elemencie n-1, bo n nie istnieje. Sorka.
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 To to: Ile elementów dodajesz ;) ? Dla i=0 => element pierwszy, dla i=1 => element drugi, dla i=2 => element trzeci, dla i=3 => element czwarty. I koniec ;) . Przecież 4 nie jest mniejsze od 4. Pozdrawiam. prevSell[i]/prevSell[i+1]; Otóż: ostatnie 'i' = 3 czyli prevSell[3]/prevSell[4] Wszystko się zgadza.
Sernat Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 Albo jestem ślepy, albo tam nie ma błędu. Podaj przykładowe dane wejścia i wyjścia. Edit: Znalazłem możliwą przyczynę. Sprawdzasz element bieżący, a następnego już nie ;) . Jeśli następny ma wartość -1, wyniki mogą być nieciekawe.
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 Albo jestem ślepy, albo tam nie ma błędu. Podaj przykładowe dane wejścia i wyjścia. TO SAMO POWIEDZIAŁEM! Z danymi to jest tak pobierane są metody sprzedającej, ale napisałem komende żeby zobaczyć to wszystko show_tendence 0.75 82 83 61 58 53 z konsoli tekst.
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 Edit: Znalazłem możliwą przyczynę. Sprawdzasz element bieżący, a następnego już nie . Jeśli następny ma wartość -1, wyniki mogą być nieciekawe. nistety tablice na których eksperymenuje nie mają -1
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 to pierwsze (0.75) to tendencja a reszta to tablica na której pracuję.
Sernat Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 http://www.wolframalpha.com/input/?i=%28+8...%2F53+%29+%2F+4 Hmm.. Czy tablica prevSell[] jest typu int? Jeśli tak, to wiadomo co z nią zrobić. A w ogóle to nie wiem czy C++ w takiej sytuacji błędu nie wywala. @Up: Wyjdź.
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 http://www.wolframalpha.com/input/?i=%28+8...%2F53+%29+%2F+4 Hmm.. Czy tablica prevSell[] jest typu int? Tak, int!
Sernat Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 1/4 * ( ~0 + ~1 + ~1 + ~1 ) = 3/4 ;) .
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 Czy to może być wina wypisywania w konsoli cout<<Tesco.tendencja()
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 1/4 * ( ~0 + ~1 + ~1 + ~1 ) = 3/4 ;) . spróbuję z flaotami!
Sernat Opublikowano 28 Czerwca 2012 Opublikowano 28 Czerwca 2012 Przecież już podałem Ci przyczynę :rolleyes: . Jeśli dzielisz liczby całkowite, to i otrzymasz liczby całkowite. Matko, jak ty nawalasz postami.
raVVal Opublikowano 28 Czerwca 2012 Autor Opublikowano 28 Czerwca 2012 Przecież już podałem Ci przyczynę :rolleyes: . Jeśli dzielisz liczby całkowite, to i otrzymasz liczby całkowite. Matko, jak ty nawalasz postami. DZIAŁA! DZIĘKI, DZIĘKI!! DZIęki 3post + 2post po raz kolejny. Nie uczysz się na błędach więc warn + 20% oraz blokada na 5 dni - Uzjel
Rekomendowane odpowiedzi