Zaloguj się, aby obserwować  
UthersonL

Programowanie - pytania, problemy, przykłady programów

1812 postów w tym temacie

W tym konkretnym przypadku będę się trzymał tablicy przycisków (nie mam pojęcia, czemu wcześniej nie spróbowałem jej zadeklarować); rozwiązuje ona wszystkie moje problemy. Z mechanizmem refleksji nie miałem jeszcze styczności; przydatna wiedza. Dziękuję. :>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam kolejny problem.

Piszę grę tekstową, bo doszedłem do wniosku, że najlepszym sposobem nauki jest postawienie sobie jakiegoś wyzwania i wykorzystanie w nim szalonych pomysłów.

A więc kawałem kodu wygląda tak:

void loc1() - 1 lokacja
{
//kod
loc3();
/kod
}
void loc2(){ /*kod*/ } - 2 lokacja
void loc3(){ /*kod*/ } - 3 lokacja
int main() - menu
{
//kod
loc1();
//kod
}


Problem polega na tym, że wywala mi błąd w loc1, ponieważ loc3 nie zostało jeszcze zbudowane. Program, w którym piszę widzi odniesienie, że loc3 zaczyna się w 76 linijce i najwyraźniej rozumie o co chodzi, ale nie mogę skompilować programu.

Możecie mi pomóc z rozwiązaniem tego problemu?

I... Na zajęciach widziałem dziwną (dla mnie) rzecz, ponieważ wykładowca napisał program, który wyglądałby tak:

void loc1(){}
void loc2(){}
void loc3(){}

void loc1()
{
//kod
}
...


Czy to rozwiąże problem?

*Sprawdziłbym sam, ale nie mam przy sobie komputera z Windowsem, a mój Mac nie lubi C++*

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

W skrócie - musisz chociaż zadeklarować istnienie jakiejś funkcji (albo od razu ją zdefiniować) żeby się do niej odwołać:
http://puu.sh/djiOp/28f4bff2ef.png < takie coś oczywiście skończy się błędem.
Ale takie coś:
http://puu.sh/djiPp/f16eb1c605.png < już zadziała poprawnie.

Ot, musisz powiedzieć kompilatorowi "słuchaj no, funkcja2 nie wymaga argumentów i zwraca int".

Notabene, pisanie gry w sposób funkcyjny zamiast obiektowego... cóż, życzę powodzenia bo niezły burdel ci się zrobi w kodzie jak każda lokacja to osobna funkcja ;P Chyba wygodniej byłoby zrobić sobie coś typu klasa Mapa i klasę Lokacja - z której każda miałaby wskaźnik do dalszych lokacji do których prowadzi. Takie drzewko by powstało wówczas. Ale to tak przy okazji.

PS Jakim cudem Mac może nie lubić C++? Ściągasz Xcode i tyle, nie każdy lubi to IDE ale działa poprawnie. Poza tym masz tam przecież gcc/g++, co za problem skorzystać z Terminala o_O

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki.

Bo mój Mac jeszcze nie zaznał programowania i nie mam na nic nic zainstalowane. Mam zamiar kupić Parallels Desktop i mieć Windows (z VB2013, czy jaki tam będzie nowy jak się za niego zabiorę) obok OS X.

Na razie mam 12 lokacji i mam nadzieję, że sobie poradzę bez problemów. Programowania obiektowego w C++ jeszcze nie ogarnialiśmy na zajęciach i wole skupić się na tym, co jest teraz (co akurat nie jest ani trochę trudno) i mieć więcej czasu na inne sprawy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.12.2014 o 15:23, StrictlyBananas napisał:

Dzięki.

Bo mój Mac jeszcze nie zaznał programowania i nie mam na nic nic zainstalowane. Mam zamiar
kupić Parallels Desktop i mieć Windows (z VB2013, czy jaki tam będzie nowy jak się za
niego zabiorę) obok OS X.


O... a po co tak? :P MacOS, o ile mnie pamięć nie myli, ma jądro unixowe. A programowanie na linuxach/unixach ZWŁASZCZA w przypadku C/C++ robi się o wiele łatwiejsze (a w przypadku nieco mniej mainstreamowych języków typu Ruby/Haskell używanie Windowsa nierzadko staje się prawdziwym koszmarem)... spróbuj sobie takiego Boosta skompilować na Windowsie, po drodze nie raz będziesz przeklinać oraz zaczekasz z dwie godziny. A na Linuxie - jedna komenda :P Lepiej działa też wielowątkowość (pełna zgodność ze standardem POSIX, Windows oczywiście ma takie rzeczy gdzieś), wszystkie biblioteki lądują też w jednym miejscu, nie musisz szukać .dll po całym systemie itd. Więc na twoim miejscu mając Maca to bym korzystał z tego co oferuje, nie bez powodu to niezwykle popularna maszyna zawodowych programistów ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Prowadzący moje laboratoria wymaga znajomości konkretnego programu, którym jest Falcon C++. Wszystko w nim robimy (mam VS2013, ale jest to kiepski program to tworzenia programów konsolowych, przynajmniej moim zdaniem) i tak jakoś wyszło. Posiadanie dwóch komputerów nieco mnie denerwuje, więc kupuję Parallels pod choinkę. Korzystać z MacBooka i OS X będę, gdy zacznę bawić się na nieco wyższym poziomie.

~~
Komputerek z Windowsem wrócił, więc zabrałem się za wprowadzanie zmian, wszystko jest ładnie, ale mam kolejny problem, tak jakby.

Musiałem jakoś sprawdzać wpisywane komendy i nadawać im akcje. Kolega zasugerował compare ze <string>, ale widzę, że sposób w jaki to zastosowałem jest po prostu tragiczny z kilku powodów. Jeden, sprawdzam jaką wartość zwraca str1.compare(""), co wydaje się po prostu idiotyczne. Dwa, sprawdzanie jest "case sensitive", jeśli dobrze rozumiem działanie compare. Trzy, to nawet nie wygląda w żaden sposób.

Jest jakiś dobry sposób na porównywanie stringów w sposób "case insensitive"?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.12.2014 o 16:09, StrictlyBananas napisał:

Jest jakiś dobry sposób na porównywanie stringów w sposób "case insensitive"?


Jest.
http://www.cplusplus.com/reference/locale/tolower/

Ot, stworzyć nowy string znak po znaku korzystając z tej funkcji i porównywać tylko tak utworzone stringi.

Jest jeszcze:
http://man7.org/linux/man-pages/man3/strcasecmp.3.html
Ale coś tak czuję że to nie zadziała na Windowsie.

Podsumowując, mógłbyś zrobić taką funkcję:

bool isTheSame(string word1, string word2)
{
std::locale loc;
std::string lower_word1="";
for (unsigned int j=0; j<word1.length(); j++)
lower_word1+= std::tolower(word1[j], loc);
std::string lower_word2="";
for (unsigned int j=0; j<word2.length();j++)
lower_word2+= std::tolower(word2[j], loc);

if (lower_word1.compare(lower_word2) == 0)
return true;
else
return false;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Język Java. Chciałbym stworzyć skompresowany bezstratnie plik graficzny (najlepiej w formacie .png) na podstawie dwuwymiarowej tablicy typu int, której każdy z elementów reprezentuje piksel o barwie zakodowanej w systemie dziesiętnym.
Przykład: na bazie tablicy o wymiarach 1000x1000, w której każdy z elementów ma wartość 16777215, wygenerowany zostaje biały obrazek PNG o rozdzielczości 1000x1000.

Czy istnieje taka możliwość? Jak się do tego zabrać?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.12.2014 o 18:10, Kardithron napisał:

Czy istnieje taka możliwość? Jak się do tego zabrać?


Pewnie zacząłbym od przeczytania standardu formatu .PNG. Wikipedia tutaj pomaga:
http://en.wikipedia.org/wiki/Portable_Network_Graphics

W swoim czasie pisałem aplikację z nudów która odczytywała pliki .BMP. W C++ akurat ale metodologia podobna:
http://pastebin.com/YuNBeU1H
W przypadku bmp (który jest formatem dużo prostszym od png):
Ot, najpierw sczytać pierwsze 54 bajty - nagłówek pliku. Osiemnasty bajt to szerokość, 22 to wysokość. Potem było 68 bajtów których przeznaczenia nie potrafiłem zrozumieć więc wyrzuciłem je do kosza. A potem idzie już sama informacja o kolorze - w tym przypadku od dołu do góry, od lewej do prawej, w formacie BGR.
Efekt był całkiem niezły, wyświetlało większość plików .bmp poprawnie:
http://www.zimagez.com/zimage/screenshot-24112014-001243.php

Jeśli chcesz zapisywać plik to musisz tylko odwrócić cały proces.

http://stackoverflow.com/questions/2654480/writing-bmp-image-in-pure-c-c-without-other-libraries < tutaj przykład w C++ dla bmp.

Ot - stworzyć nagłówek pliku (wikipedia mówi że nagłówek png ma 8 bajtów), potem idą dane krytyczne (12-16 bajtów) i dodatkowe (te można pominąć) bloki. Potem informacja o kolorach itd.

To jest ta trudna metoda jeśli chcesz sobie napisać takie coś od zera. Jest też plan B:
https://code.google.com/p/pngj/
https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html

Czyli skorzystać z gotowców.

Planem C byłoby wykorzystanie dwóch rzeczy:
a) faktu że Java ma wbudowane biblioteki do wyświetlania grafiki. Ot, wyświetlić zawartość twojej tablicy.
b) możliwości wygenerowania z poziomu programu komendy Alt+Print Screen.
c) w schowku ląduje wtedy plik graficzny. Który można potraktować bezpośrednio jako strumień bajtów (fakt że to nie będzie png), tylko go sobie jakoś zapisać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.12.2014 o 18:10, Kardithron napisał:

Czy istnieje taka możliwość? Jak się do tego zabrać?

W sumie dopiszę - jeśli potrzebujesz bezstratnego formatu pliku i nie uśmiecha ci się pisać implementacji dla .PNG (która, jak pewnie zauważyłeś, jest duża) to zainteresuj się formatem .PPM:
http://en.wikipedia.org/wiki/Netpbm_format#PPM_example

Jak widać, jest bardzo prosty, o wiele bardziej niż jakikolwiek inny format graficzny. W wersji kolorowej:
P3
Szerokość Wysokość
Maksymalna_wartosc_koloru
R G B

Czyli plik który byłby czerwonym kwadratem 2x2 wygląda w ten sposób (fakt że 255 musisz zakodować jako odpowiadające mu ASCII):
P3
2 2
255
255 0 0 255 0 0
255 0 0 255 0 0

Proste i łatwe do zapisania! Dają się też otworzyć np. przez Photoshopa/Gimpa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Uczę się wzorców projektowych i zastanawiam się czy można np przy Singletonie uzyć listy? By program sam bez mojego nadzoru i jakiegoś skomplikowanego kodu mógł sam sprawdzać czy dany obiekt już istnieje?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.12.2014 o 19:44, ziptofaf napisał:

W sumie dopiszę - jeśli potrzebujesz bezstratnego formatu pliku i nie uśmiecha ci się
pisać implementacji dla .PNG (która, jak pewnie zauważyłeś, jest duża) to zainteresuj
się formatem .PPM:
http://en.wikipedia.org/wiki/Netpbm_format#PPM_example

Wielkie dzięki za zapoznanie mnie z Netpbm. Przejrzałem sobie specyfikacje i napisałem trochę obrazków PPM w ramach testów (pierwszy raz w życiu pisałem plik graficzny z poziomu notatnika; dziwne i piękne zarazem uczucie xD).

Pomysł z rzucaniem się na PNG faktycznie był dość nierozsądny; zwłaszcza, że do moich bieżących potrzeb w zupełności wystarczy banalny, monochromatyczny PBM (chcę wykorzystać swoją starą implementację dywanu Sierpińskiego do wygenerowania pliku graficznego).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.12.2014 o 18:10, Kardithron napisał:

Czy istnieje taka możliwość? Jak się do tego zabrać?

Najlepiej przeczytać dokumentację. Java ma w standardzie pełną obsługę PNG, JPG i BMP w obie strony. :) Jestem zbyt zmachany, żeby teraz tego poszukać, ale google i javadoc powinni pomóc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jako, że siedzicie w temacie programowania już jakiś czas mam do was pytanie. Powiedzcie mi, czy takie coś jest w ogóle do zrobienia:
1. Program, który odczytywałby z wrzuconego pliku wideo ilość ujęć (cięć montażowych).

2. Program, który odczytywałby z wrzuconego pliku wideo rodzaj kadru. Jest to zadanie o tyle trudniejsze, że w jednym ujęciu może być przejazd do innego kadru.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam za zadanie zrobić wizualizację ruchu wahadła matematycznego w C# (nieważne, że najbardziej skomplikowanym zadaniem na laborkach było zrobienie prostego kalkulatora) z uwzględnieniem kilku różnych zmiennych, między innymi kąta alfa. Ma to wyglądać tak, że użytkownik podaje kąt od 0 do 90 stopni, co jednocześnie ustawi wahadło w odpowiedniej pozycji startowej. Planuję poprowadzić niewidoczną linię równoległą do osi Y i poprowadzić od niej kolejną linię pod odpowiednim kątem, po czym ustawić wahadło na nowej linii. Mógłby ktoś nakierować mnie, jak to zrobić? Albo podpowiedzieć inny sposób? ;-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.01.2015 o 21:50, Rick napisał:

1. Program, który odczytywałby z wrzuconego pliku wideo ilość ujęć (cięć montażowych).

Teoretycznie bez większego problemu - analiza różnic między kolejnymi klatkami, jeśli zbyt duża to znaczy że było cięcie. Chociaż trzeba by przetestować w praktyce jakby to wyszło, ale raczej do zrobienia.

Dnia 07.01.2015 o 21:50, Rick napisał:

2. Program, który odczytywałby z wrzuconego pliku wideo rodzaj kadru. Jest to zadanie
o tyle trudniejsze, że w jednym ujęciu może być przejazd do innego kadru.

A tu już nie jestem pewien, ala raczej też powinno dać radę. Mogę się na uczelni dopytać, bo możliwe że ktoś z prowadzących siedzi w tym temacie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować