Skocz do zawartości

Aberration

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Aberration

  1. Mgła za pomocą windows.h - nóż w kieszeni się otwiera!!!
    Bo przypuśćmy, że udało ci się to zrobić (bo to nie jest aż takie trudne) ale co dalej, gdzie tekstury, światła, obroty, translację, animacje itd. Trochę się rozpędziełem, choć tak naprawdę nie wiem, co chcesz zrobić. Twój projekt jest statyczny i jeśli taki ma być to najłatwiej było by otworzyć 3DS Maxa, narysuj to sobie, zapisz do JPEG'a i wio. Jeśli jednak scena ma być dynamiczna, to nawet gdybyś przebrnął przez to całe kodowanie to i tak całość była by .... wolna. Dlatego weź sobie poczytaj o OpenGL'u (łatwiejszy) lub DirectX. OpenGL nie jest trudny, wystarczy znaleźć szkielet, a resztę sobie łatwo wpiszesz.

  2. Dozer napisał:

    jak chcesz kod to napisz maila

    Kodu nie chcę, bo doszedłem do wniosku, że to bardzo łatwe zadanie było i tak się w kurzyłem, bo byłem blisko.
    Dozer napisał:

    Ja wysylam tylko bankomaty

    Patrząc po dacie postu to chyba chciałeś powiedzieć wysłałem, bo było do 22.11.04.
    Nicon napisał:

    ale to moj pierwszy rok

    Czego pierwszy rok???
    Nicon napisał:

    jednak nie licze ze dostane za nie powyzej 40 bo testy sa napewno przerabane

    Zazwyczaj są testy poprawnościowe i wydolnościowe. Na stronie olimpiady możesz sobie ściągnąć kilka testów, w tym dla każdego zadania jest jeden duży. Ja np. w samochodzikach robiąc duży test miałem ponad 800 sekund. Po użyciu drzew czerwono-czarnych robił to w sekundę. Co do forum, dlaczego by nie, ale coś mi się wydaję, że ktoś by na nie wchodził parę dni przed olimpiadą, parę po i tyle.

    Ja zrobiłem ska, sam i sko.
    Nad bankomatami myślałem nawet długo, ale próbowałem inną metodę niż bruteforce (gdzieś nie mam przekonania do takich metod). Próbowałem programowania dynamicznego i takich innych, ale nie wyszło. Gdyby nie to, że zadania pisałem na ostatnią chwilę (o 3:30 w poniedziałek 22.11.04 poszedłem spać, a w ten sam dzień miałem próbną maturę z polaka) to może bym coś sklecił. Ale cóż... zostaje mi tylko nadzieja, że próg nie będzie aż taki wysoki i sie jakoś załapie a dalej się poduczę:).

    A co do poduczenia, macie może jakieś ebooki z algorytmiki (struktury danych, algorytmy itd)???

  3. ja mowilem o funkcji skladowej klasy(tu przyjazn ze swoja klasa jest bez sensu)

    A jak inaczej chcesz to zrobić, aby funkcja ta znajdywała się w klasie i nie była zaprzyjaźniona?

  4. Dlaczego uważasz, że na maturze z infy będzie coś z grafiki?
    Na maturze będą podstawowe algorytmy (sortowanie, horner i.t.p.).
    Wątpie w to, by jakiekolwiek zadanie z programowania było z grafiki, bo co to by miało być? Narysować okrąg czy co?

    PS. Też mam zamiar zdawać z infy

  5. ZLIB używa (o ile się nie mylę) deflacji, która też jest używana np. w ZIPach i w plikach PNG. Można poniej poczytać na RFC1950-1952.
    A jeśli chcesz nie znany format, to poprostu koduj dane przed kompresją, lub przed zapisem skompresowanych danych.

  6. Bawiąc się trochę protokołami nie spotkałem się z protokołem który używa więcej niż jednego portu (np: http - 80, ftp - 21).

    Jeżeli jednak znasz prawidłowy port to za pomocą winsock napisz sobie serwer czatujący na tym porcie i zobacz jakie dane dostajesz. Po za tym wiel informacji na temat standardowych protokołów znajdziesz na RFC.

  7. Marcin came back!!!

    Po pierwsze to sorry, że tak długo nie odpisywałem, ale nie mam stałego łącza, a ostatnio nawet przez phone mi co trochę rozłączało. Ale mam dla cierpliwych rozwiązanie.

    Po drugie to moje pierwsze wersja (ta z SetCapture) była zła. Dział ona poza obszarem okna tylko wtedy, gdy jakiś przycisk mysz jest pressed.
    A po za tym WM_NCMOUSEMOVE nie ma nic to rzeczy/

    A po trzecie:

    TRACKMOUSEEVENT tme;
            case WM_MOUSEMOVE:
                    if(firsttime){
                            firsttime = false;
                            GetClientRect(okno,&rect);
                            tme.cbSize = sizeof(tme);
                            tme.dwFlags = TME_LEAVE;
                            tme.dwHoverTime = 0;
                            tme.hwndTrack = okno;
                            TrackMouseEvent(&tme);
                            InvalidateRect(okno,0,0);
                    }
                    return 0;
            case WM_MOUSELEAVE:
                    firsttime = false;
                    InvalidateRect(okno,0,0);
                    return 0;
    

    Zmienna firsttime oznacza, czy najście na mysz jest po raz pierwszy. (Od niej zależy też wygląd buttona). Ważne jest także nowe dodane przezemnie rzeczy:WM_MOUSELEAVE i TrackMouseEvent().

    TrackMouseEvent() jest odpowiedzialna za sprawdzanie (przy podanych parametrach) czy myszka opuściła obszar kontrolki i jeśli tak to wysyła do niej WM_MOUSELEAVE. Parametrem jest wskaźnik do struktury TRACKMOUSEEVENT:

    typedef struct tagTRACKMOUSEEVENT {
        DWORD cbSize;
        DWORD dwFlags;
        HWND  hwndTrack;
        DWORD dwHoverTime;
    } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;

    cbSize - chyba wiadomo;
    dwFlags:

    #define TME_HOVER       0x00000001        - czuwanie czy mysz nie wchodzi na obszar okna
    #define TME_LEAVE       0x00000002      - czuwanie czy mysz nie opuściła
    #define TME_QUERY       0x40000000      - nie pamiętam
    #define TME_CANCEL      0x80000000      - anulowanie czuwania

    hwndTrack - okno
    dwHoverTime - czas czuwania jeśli TME_HOVER jest ustawiony

    I po czwarte:
    Już pewnie wpisujecie kod i do dzieła (tak też zrobiłem jak odnalazłem tą funkcję), a VC na to, że:
    undefinded symbol: TrackMouseEvent()
    I wogóle nie zna anie TME_LEAVE, anie WM_MOUSELEAVE czy struktury TRACKMOUSEEVENT
    Znajdują się one w jakimś nagłówku stansardowym, ale jakieś dafinicje nie pozwalają im się kompilować???
    Dlatego podałem w poście wszystkie ważne definicje i stałe

    #ifndef WM_MOUSELEAVE
    #define WM_MOUSELEAVE                   0x02A3
    #endif

    , które musicie dołączyć.
    Build.........
    No i errorów mniej, bo undefinded przechodzi w unreferenced TrackMouseEvent: znalezioną przez siebie definicję funkcji

     WINUSERAPI BOOL
    WINAPI
    TrackMouseEvent(
        LPTRACKMOUSEEVENT lpEventTrack);

    musiałem poprzedzić

    extern "C"

    i wszystko gra.

  8. clever najwyraźniej miał trudne dni, wybaczcie mu. A jeśli chodzi o to, że raz działa a raz nie, to błąd jest na pewno. Czasem się zdarza taka jakby losowa sprawność programu, ponieważ wiele błędów zależy od różnych czynników. Dość często zdarza się, że poprzez drobny błąd w programie nadpisują się inne zmienne, stos lub nawet kod programu. W zależności od tego co się uszkodziło, różne czynniki mogą spowodować błąd. A tych nie zawsze jesteśmy w stanie odtworzyć.

  9. Deklarując zmienną jako unsigned dajesz kompilatorowi do zrozumienia jakich operacji ma używać (np. przy porównywaniu lub przy mnożeniu).
    Np:

    int i = -1; //hex = 0xffffffff
    unsigned int j = -1; //hex = 0xffffffff

    Jak widać nie ma różnicy pomiędzy binarnymi rozwinięciami tych liczb, a funkcja printf domyślnie uważa, że %d oznacza signed int. Ale jest chyba jakiś format dla unsigned, poszukaj w helpie.

  10. Funkcja atoi() w większości przypadków jest dobrym rozwiązaniem, ale nie zawsze. Jeśli np. ktoś wpisze 123napis to funkcja zwróci 123.
    Jeśli jako parametr poda się tekst, to zwróci on 0. A co jeśli ktoś rzeczywiście wpisze 0.

    Najlepszym sposobem będzie czytanie bajt po bajcie.

    bool myatoi(const char *str,int *var)
    {
     char d;
     int pos = 0;
     *var = 0;
     while(true)
     {
       d = str[pos++];
       if((d>='0')&&(d<='9'))
       {
         (*var)*=10;
         (*var)+=d-'0';
       }
       else if(!d)return true;
       else return false;
     }
    }

    Funkcja zwraca true tylko wtedy, gdy wszystkie znaki w str to cyfry. Opcjonalnie można dodać sprawdzanie znaku liczby lub wprowadzić inne systemy liczbowe(2,8,16).

  11. Jeśli znasz się na systemach liczb to zapewne wiesz, że liczba która ma skończoną postać w systemie dziesiętnym nie koniecznie ma postać skończoną w systemie binarnym (albo jej rozwinięcie wykracza poza wielkość typu double)
    Pierwsze wyniki są poprawne, ponieważ najprawdopodobniej zmienna liczba przechowuje np. 0.4120000000000000012334...
    co jest zaokrąglane do 0.412 przy wyświetlaniu.
    Gdy po mnożeniu przez 10 dochodzi do stanu, w którym liczba wynosi 0.000000000012344..., to zaczyna się wyświetlać w formie 1.2344e-10, czego wcześniej nie było widać.

  12. A ja bym był za tablicą charów - łatwiej je potem pobierać/wyświetlać, nadawać wartości zmiennym, a robota z przeciążaneim operatorów taka sama. Poza tym char w C/C++ zajmuje 4 razy mniej pamięci niż int

    char zajmuje 4 razy mniej pamięci niż int, ale też przechowuje "mniej danych". Po za tym co rozumiesz przez łatwiejsze wyświetlanie? Czy mając na myśli tą tablicę charów, to chcesz w niej przechowywać kody ASCII? Bo jeśli dobrze zrozumiałem Piasia, to przez tablicę intów miał na myśli jedną dużą liczbę w systemie binarnym (na tej samej zasadzie działa typ zmiennej long (int64), który jest tego typu tablicą o dwóch polach).

  13. W C++ napisy przechowywane są w postaci tablic char[].

    Jeżeli zapisujesz:

    char *str1,*str2;
    if(str1==str2)
    

    to porównujesz nie zawartość tablicy do której odwołują się wskaźniki, ale czy wskaźniki odwołują się do tego samego adresu. Powinieneś napisać:

    char *str1,*str2;
    if(!strcmp(str1,str2))
    {
     //hasło poprawne
    }
    else //hasło niepoprawne
    

    funkcja int strcmp(const char *str1,const char *str2) porównuje dwa ciągi znaków i zwraca 0 jeśli są takie same.

  14. Bardzo się zdziwiłem, gdy zobaczyłem, że do obsługi myszuży w kontrolce FlatBtn używasz timera. Nie jestem pewien, ale ilość timerów jest chyba ograniczona(?), a co będzie jeśli będziesz chciał mieć kilka FlatButtonów (a zazwyczaj tak jest)?. Według mnie lepiej było by obsługiwać WM_NCHITTEST i SetCapture(), ReleaseCapture().

×
×
  • Utwórz nowe...