Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - mis02

Strony: [1] 2 3 4
1
Matematyka i fizyka / [Algorytm] Złożoność czasowa
« dnia: Maj 18, 2011, 22:32:22 »
Witam,
próbuję policzyć złożoność czasową dwóch algorytmów. Książka "Algorytmy i struktury danych" niewiele mi w tym pomaga.
Gdyby ktoś mógł pokazać mi jak to liczyć, byłbym bardzo wdzięczny.

Pierwszy kod to wstawianie do listy posortowanych elementów:
std::list<int> List;
std::list<int>::iterator it;

int n, t;
std::cin >> n;

while(n--)
{
std::cin >> t;

for(it=List.begin(); it!=List.end(); it++) if(*it > t) break;

List.insert(it, t);
}

Drugi:
std::list<int> List;
std::list<int>::iterator it;

int n, t, x;
std::cin >> n;

while(n--)
{
std::cin >> t;

x = 0;

for(it=List.begin(); it!=List.end(); it++)
{
if((*it) > t) break;

t -= (*it);
x++;
}
}
troszkę bardziej zamieszany. Nie ma co tłumaczyć, oba wycinałem z większego projektu.

Nie wiem nawet jak to ugryźć :/



// EDIT:
Rozwiązane na innym forum, wyszło O(n^2) :p

2
Szkółka / Odp: [GDI] Problem z BitBlt
« dnia: Styczeń 14, 2011, 22:17:40 »
Dogrzebałem się do rozwiązania:
http://peb.pl/programowanie/831646-podwojne-buforowanie.html

Bitmapa utworzona przy pomocy kontekstu otrzymanego przez CreateCompatibleDC jest monochromatyczna, dlatego miałem tylko kolor czarny/biały (w zależności od ROPa).

3
Szkółka / Odp: [GDI] Problem z BitBlt
« dnia: Styczeń 13, 2011, 22:27:52 »
Nie pomogło, dalej to samo, konkretnie tak to wygląda:

Jak mówiłem - czarny prostokąt w miejscu w którym powinna być bitmapa i o takich samych wymiarach. Jeśli wklejam go ręcznie, pomijając te wszystkie funkcje i obiekty to jest normalnie.
Koniec na dzisiaj, będę rozkminiał to jutro.

Zostawiam kod gdybyś mógł to przejrzeć:

inicjalizacja/ deinicjalizacja obiektu bitmapy CDDBBitmap
/*
// loading method
*/
bool CDDBBitmap::Load(HINSTANCE in_hInstance, std::wstring in_strFileName)
{
// load bitmap from given file
this->m_hBitmap = (HBITMAP)LoadImage(NULL, in_strFileName.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

// check if loaded successfully
if (!this->m_hBitmap)
{
MessageBox(NULL, TEXT("LoadBitmap() - FAILED"), TEXT("Error"), MB_ICONERROR);
return false;
}

// create hdc and set bitmap
this->m_hDC = CreateCompatibleDC(NULL);
SelectObject(this->m_hDC, this->m_hBitmap);

// fill BITMAP structure
GetObject(this->m_hBitmap, sizeof(BITMAP), &this->m_Bitmap);

// get bitmap width and height
this->m_cxBitmap = m_Bitmap.bmWidth;
this->m_cyBitmap = m_Bitmap.bmHeight;

return true;
}


/*
// unloading method
*/
bool CDDBBitmap::Unload()
{
// delete device context
Free::DelDC(&this->m_hDC);

// delete handle to a bitmap
Free::GDIobj(&m_hBitmap);

return true;
}


Bufor ustawiam przy tworzeniu okna w oddzielnej funkcji (wyżej wrzucałem, ale teraz trochę przerobiłem):
/*
// initialize back-buffer
*/
bool CEngine::InitBackBuffer()
{
// create buffers hdc
this->Buffer.m_hDC = CreateCompatibleDC(NULL);

// create bitmap compatible with this context
this->Buffer.m_hBitmap = CreateCompatibleBitmap(this->Buffer.m_hDC, this->m_cxWindow, this->m_cyWindow);

// check if created successfully
if (this->Buffer.Empty())
{
MessageBox(NULL, TEXT("CreateCompatibleBitmap() - FAILED"), TEXT("Error"), MB_ICONERROR);
return false;
}

// select this bitmap in device context
SelectObject(this->Buffer.m_hDC, this->Buffer.m_hBitmap);

// set width and height members
this->Buffer.m_cxBitmap = this->m_cxWindow;
this->Buffer.m_cyBitmap = this->m_cyWindow;

return true;
}

Podstawowa funkcja rysująca (wywoływana z pętli komunikatów czasu rzeczywistego):
/*
// basic display procedure
*/
bool CEngine::Display(float in_fTimeDelta)
{
// call display function
if(!this->OnDisplay(in_fTimeDelta))
{
MessageBox(NULL, TEXT("CEngine::OnDisplay() - FAILED"), TEXT("Error"), MB_ICONERROR);
return false;
}

// create device context
this->m_hDC = GetDC(this->m_hWnd);

// test if is correct
if (!m_hDC)
{
MessageBox(NULL, TEXT("GetDC() - FAILED"), TEXT("Error"), MB_ICONERROR);
return false;
}

// blit buffer to screen
BitBlt(m_hDC, 0, 0, m_cxWindow, m_cyWindow, this->Buffer.m_hDC, 0, 0, SRCCOPY);

// fill back-buffer with white color
PatBlt(this->Buffer.m_hDC, 0, 0, this->m_cxWindow, this->m_cyWindow, WHITENESS);

// release device context
Free::RelDC(this->m_hWnd, &this->m_hDC);

return true;
}

No i na koniec właściwa funkcja rysująca:
virtual bool OnDisplay(float in_fTimeDelta)
{
Draw::Bitmap(&this->Buffer, 10, 20, this->bmp.m_cxBitmap, this->bmp.m_cyBitmap, &this->bmp, 0, 0, SRCCOPY);

return true;
}

4
Szkółka / Odp: [GDI] Problem z BitBlt
« dnia: Styczeń 13, 2011, 21:30:44 »
Drugą tworzę w funkcjach inicjalizujących, tak to wygląda:
bool CEngine::InitBackBuffer()
{
// create device context compatible with screen
HDC t = GetDC(this->m_hWnd);
HDC _hDC = CreateCompatibleDC(t);
ReleaseDC(this->m_hWnd, t);

// create bitmap compatible with this context
this->Buffer.m_hBitmap = CreateCompatibleBitmap(_hDC, this->m_cxWindow, this->m_cyWindow);
//this->Buffer.m_hBitmap = (HBITMAP)LoadImage(NULL, L"sprite001.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

// check if created successfully
if (this->Buffer.Empty())
{
MessageBox(NULL, TEXT("CreateCompatibleBitmap() - FAILED"), TEXT("Error"), MB_ICONERROR);
return false;
}

// set width and height members
this->Buffer.m_cxBitmap = this->m_cxWindow;
this->Buffer.m_cyBitmap = this->m_cyWindow;

// delete created device context
Free::DelDC(&_hDC);

return true;
}

Zaraz po utworzeniu okna.


EDIT:
z tym buforem chyba coś jest nie tak, bo jak ręcznie (bez używania bufora) wyrysuję bitmapę (bmb.m_hBitmap) na kontekście urządzenia głównego to wszystko jest dobrze, natomiast jak przepuszczam ją przez bufor to traci zawartość.

5
Szkółka / Odp: [GDI] Problem z BitBlt
« dnia: Styczeń 13, 2011, 21:09:00 »
Mam bufor (typu CDDBBitmap), jak napisałem, i na nim chcę rysować. Dopiero po zakończeniu rysowania przerysowuję bufor na okno (tu raczej problem nie leży: BitBlt(m_hDC, 0, 0, m_cxWindow, m_cyWindow, _hdcBuffer, 0, 0, SRCCOPY); )

Draw::Bitmap ma przekopiować jedną bitmapę na drugą, dlatego dostaje 2 wskaźniki na CDDBBitmap i dla każdego z tych obiektów potrzebuję kontekstu urządzenia.

Może trochę rozjaśniłem sytuację, może nie :D ale podstawowe pytanie to dlaczego ROP w BitBlt (wywoływanym przez Draw::Bitmap) ustawiony na BLACKNESS daje mi czarny prostokąt, WHITENESS biały prostokąt a SRCCOPY nie daje nic?

6
Szkółka / [GDI] Problem z BitBlt
« dnia: Styczeń 13, 2011, 19:17:35 »
Napisałem sobie klasę bitmapy i funkcję do operowania na nich (w zasadzie tylko bit blit). Teraz po kolei:

Klasa CDDBBitmap: (najistotniejsze elementy)
bool Load(HINSTANCE, std::wstring);

HBITMAP m_hBitmap;
BITMAP m_Bitmap;
int m_cxBitmap;
int m_cyBitmap;

W funkcji Load() mam m.in. wczytanie bitmapy i ustawienie rozmiaru:
this->m_hBitmap = (HBITMAP)LoadImage(NULL, in_strFileName.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(this->m_hBitmap, sizeof(BITMAP), &this->m_Bitmap);
this->m_cxBitmap = m_Bitmap.bmWidth;
this->m_cyBitmap = m_Bitmap.bmHeight;


Teraz całkiem inna klasa (Draw) ze statyczną metodą rysującą(Bitmap()):
void Draw::Bitmap(CDDBBitmap* in_ddbDest, int in_xDest, int in_yDest, int in_cxDest, int in_cyDest,
CDDBBitmap* in_ddbSrc, int in_xSrc, int in_ySrc, DWORD in_dwROP)
{
// create destination hdc and select bitmap
HDC _hdcDest = CreateCompatibleDC(NULL);
SelectObject(_hdcDest, in_ddbDest->m_hBitmap);

// create source hdc and select bitmap
HDC _hdcSrc = CreateCompatibleDC(NULL);
SelectObject(_hdcSrc, in_ddbSrc->m_hBitmap);

// make bit blit
BitBlt(_hdcDest, in_xDest, in_yDest, in_cxDest, in_cyDest, _hdcSrc, in_xSrc, in_ySrc, in_dwROP);

// delete source hdc
Free::DelDC(&_hdcSrc);

// delete destination hdc
Free::DelDC(&_hdcDest);
}


No i na koniec próbuję coś narysować:
Draw::Bitmap(&this->Buffer, 0, 0, this->bmp.m_cxBitmap, this->bmp.m_cyBitmap, &this->bmp, 0, 0, SRCCOPY);'Buffer' to back-buffer aplikacji, 'bmp' to jakiś obiekt CDDBBitmap z wczytanym plikiem narysowanym w Paintcie (24bit/pixel))

Problem jest taki że na ekranie nic się nie dzieje, nic nie wyświetla, bufor jest czarny cały czas.

Dla testu ustawiłem ROP na WHITENESS i co najdziwniejsze, wtedy na buforze mam biały prostokąt o rozmiarach utworzonej bitmapy, więc chyba wczytuje się dobrze.

Może ktoś rzucić okiem na te kody?

7
Skrypty / Odp: [Python] Przetłumaczenie kodu
« dnia: Grudzień 04, 2010, 23:09:21 »
Trzeba było drobnej poprawki:
for(int i = 0; i < stream.size(); ++i)
    {
        int symbol ;
        symbol = (int)stream[i]-48 ;
        state = fsa[state][symbol] ;
    }
bo 'int()' w Pythonie zamienia string na int o takiej samej zawartości, a nie na odpowiedni kod ascii.

W każdym bądź razie wydaje się teraz działać.

Co do algorytmu, to powinien sprawdzać podzielność liczb w dowolnym systemie liczbowym, niestety zbytnio go nie rozumiem, ale to nie jest istotne.

Dzięki za pomoc.

8
Skrypty / [Python] Przetłumaczenie kodu
« dnia: Grudzień 04, 2010, 21:32:43 »
Witam
Znalazłem w internecie taki kod:
def infinite_stream_divisor(base, divisor, stream):
k = -1
fsa = {}
for state in range(divisor): # Does the trick :)
fsa[state] = []
for input in range(base):
k = (k+1) % divisor
fsa[state].append(k)

state = 0
for symbol in stream:
state = fsa[state][int(symbol)]

if state == 0:
return True
return False

Próbuję to przetłumaczyć na C++, C# czy nawet PHP. Uzbrojony w ebook z kursem Pythona napisałem tyle:
bool infinite_stream_divisor(int base, int divisor, std::string stream)
{
int k = -1 ;
std::vector< std::vector<int> > fsa(divisor) ;
for(int state=0 ; state<divisor ; ++state)
{
fsa[state].resize(0) ;
for(int input=0 ; input<base ; ++input)
{
k = (k+1) % divisor ;
fsa[state].push_back(k) ;
}
}
int state = 0 ;
// nie wiem jak zakodować ten fragment

if(state == 0) return true ;
return false ;
}

Proszę o pomoc w dokończeniu.

9
Szkółka / Odp: [DX9] IDirect3DVertexBuffer9::Lock i crash aplikacji
« dnia: Wrzesień 12, 2010, 22:12:20 »
Ivian, problem już rozwiązany.

10
Szkółka / Odp: [DX9] IDirect3DVertexBuffer9::Lock i crash aplikacji
« dnia: Wrzesień 12, 2010, 21:18:29 »
@up
właśnie przed chwilą to zauważyłem.
Wstyd się przyznać ale obiekt tworzyłem w ten sposób: "mesh = new DXFWMesh (_d3d9dev, L"ver.txt") ;", a na dysku miałem plik "vert.txt" i w ten sposób vertex buffer miał rozmiar 0.

Przepraszam i dzięki za pomoc ;)

11
Szkółka / Odp: [DX9] IDirect3DVertexBuffer9::Lock i crash aplikacji
« dnia: Wrzesień 12, 2010, 18:18:31 »
Ustawiłem co pisałeś, ale skąd mam podać ten output? z debuggera msvc?
Mam to:

12
Szkółka / [DX9] IDirect3DVertexBuffer9::Lock i crash aplikacji
« dnia: Wrzesień 12, 2010, 16:37:24 »
Witam
Mam klasę DXFWMesh. Dwa jej pola to _d3d9dev (urządzenie directx) i _vb (vertex buffer).
W konstruktorze jest taki kod:
    _d3d9dev->CreateVertexBuffer ( intreader * sizeof (DXFWVertex),
D3DUSAGE_WRITEONLY,
DXFWVertex::FVF,
D3DPOOL_MANAGED,
&_vb,
NULL) ;

DXFWVertex* vertices ;
/* błąd */
_vb->Lock (0, 0, (void**)&vertices, 0);
for (int i=0 ; i< sizeof (vertices)/sizeof (DXFWVertex) ; ++i)
{
file >> vertices[i]._x >> vertices[i]._y >> vertices[i]._z >> vertices[i]._color ;
}
_vb->Unlock () ;

W miejscu gdzie powinien być blokowany _vb aplikacja wyłącza się z komunikatem że program przestał działać. Co robić?

13
Szkółka / Odp: [C#] Metoda zwracająca listę
« dnia: Sierpień 01, 2010, 22:33:17 »
Aaa, bo zapomniałem że lista też jest obiektem  :/
W międzyczasie znalazłem to też na msdnie
http://msdn.microsoft.com/en-us/library/4y7h161d(VS.71).aspx

Dzięki za pomoc!

14
Szkółka / [C#] Metoda zwracająca listę
« dnia: Sierpień 01, 2010, 22:25:35 »
Witam
Dzisiaj zacząłem naukę C# i w ramach ćwiczeń postanowiłem sobie przepisać prosty programik z C++.

Mam taką metodę:
Kod: (csharp) [Zaznacz]
        public List<string> GetBindsList ()
        {
            List<string> sBinds;

            int iBegin = 0;
            int iEnd = 0;

            while (true)
            {
                iBegin = sFileContent.IndexOf(BINDNAME, iEnd);
                if (iBegin == -1) break;
                iBegin += BINDNAME.Length;
                iEnd = sFileContent.IndexOf(BINDSTART, iBegin);
                if (iEnd == -1) break;
                sBinds.Add(sFileContent.Substring(iBegin, iEnd - iBegin));
            }

            return sBinds;
        }
i w linijce 'return sBinds;' dostaję błąd 'error CS0165: Use of unassigned local variable 'sBinds''

Co jest źle i jak to naprawić?

Ewentualnie jeśli nie mogę tak zrobić, to może można jakoś do tej metody przekazać wskaźnik/referencję na obiekt List<T>.

15
Szkółka / Odp: [C++/WinAPI] Wskaźnik do procedury zdarzeniowej
« dnia: Czerwiec 04, 2010, 13:20:48 »
Dzięki, zrobiłem jak pisałeś.

Teraz pozostaje mi problem statycznej procedury zdarzeniowej. Spróbuję coś implementować z tego tematu:
http://forum.warsztat.gd/index.php/topic,1200.0.html
Ciekawe jednak jak to jest zrobione w MFC (CWnd::WindowProc)
http://msdn.microsoft.com/en-us/library/8k57wfbs(v=VS.80).aspx

Strony: [1] 2 3 4