Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 20.01.2014 o 17:41, Daronn_Darker napisał:

BTW. można tworzyć obiekty typu class A w klasie B? np.

class B{
};
class A{
B bab;
};


Można. Często jedna klasa jest składnikiem drugiej. Ewentualnie możesz dziedziczyć i wielodziedziczyć:
class A{};
class B{}''
class C : public A, public B {}; - klasa C ma wszystkie składniki klasy A i klasy B.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie mogę poradzić sobie ze zrozumieniem Eventhandlera -
załóżmy że mam 10 przycisków na JPanelu, nazwane po prostu 1-10. Jak zrobić eventhandlera który dla tablicy doda 2 jeśli kliknięto na button o numerze parzystym, a 1 jeśli nie parzystym? Przykład abstrakcyjny, ale zawierający chyba wszystko, czego w tym nie rozumiem :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Temat rzeka, przewijający się wielokrotnie. Potrzeba mi jakiegoś źródła, nie jakiegoś lania wody, ale treściwych informacji do powtórki/nauki o C++, symfonia nie jest najlepiej napisana. Może ktoś mi coś polecić? Może być po angielsku, nie mam z nim dużych problemów, a słownik w domu jest.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.01.2014 o 21:43, Daronn_Darker napisał:

Temat rzeka, przewijający się wielokrotnie. Potrzeba mi jakiegoś źródła, nie jakiegoś
lania wody, ale treściwych informacji do powtórki/nauki o C++, symfonia nie jest najlepiej
napisana. Może ktoś mi coś polecić? Może być po angielsku, nie mam z nim dużych problemów,
a słownik w domu jest.


Coś bardziej przystępnego niż Symfonia? Z tym może być już dość ciężko.
Możesz spróbować:
http://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-vi-stephen-prata,cppri6.htm#spis-tresci
Z tego co widziałem to jest dosyć szczegółowa i, co dla mnie przynajmniej ma znaczenie, omawia sporo zagadnień z C++11 i biblioteki standardowej (choćby takie rzeczy jak wektory i mapy bez których ciężko poruszać się w realnym programowaniu).

Ewentualnie u siebie na półce mam jeszcze to:
http://helion.pl/ksiazki/jezyk-c-pierwsze-starcie-zbigniew-koza,jcppps.htm#spis-tresci
To krótka książka (niecałe 300 stron) ale omawia większość zagadnień z C++. Dobra lektura jeśli chcesz np. szybko sprawdzić jakieś zagadnienie bo nie pamiętasz konkretnej składni albo jakiegoś zastosowania języka. Nauka z niej JEST wykonalna choć uczciwie przyznam że obiektowość wytłumaczona jest tam w sposób bardzo toporny i najzwyczajniej w świecie za krótki.

Za to mogę odradzić:
Thinking in C++ (bardzo hermetyczny podręcznik).
Programowanie. Teoria i praktyka z wykorzystaniem C++. Co prawda jest to dzieło autorstwa samego Stroustrupa, głównego twórcy C++ ale... to właśnie jest powód dla którego nawet bez dogłębnego jej przejrzenia (widziałem ją w księgarni i z ciekawości zerknąłem) mogę ją odradzić - ona jest przeznaczona dla programistów z długim stażem. Nie powiem - ilość szczegółów w niej zawarta jest znaczna ale to wcale nie upraszcza lektury.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.01.2014 o 21:43, Daronn_Darker napisał:

Temat rzeka, przewijający się wielokrotnie. Potrzeba mi jakiegoś źródła, nie jakiegoś
lania wody, ale treściwych informacji do powtórki/nauki o C++, symfonia nie jest najlepiej
napisana. Może ktoś mi coś polecić? Może być po angielsku, nie mam z nim dużych problemów,
a słownik w domu jest.


Miałeś styczność ze szkołą programowania napisaną przez Stephen''a Prata?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Dnia 24.01.2014 o 23:18, eNcore napisał:

Miałeś styczność ze szkołą programowania napisaną przez Stephen''a Prata?

Uczyłem się z niej C i bardzo mi się podobało, ale słyszałem że nowe wydanie 6. C++ jest ''gorzej'' napisane niż wydanie 5.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy mógłby mi ktoś podać jakąś książkę do nauki algorytmów dla kompletnie zielonego w tym temacie ?

Chodzi mi o jakąś książkę z ćwiczeniami na której można by poćwiczyć tworzenie algorytmów bez dostępu do kompa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 25.01.2014 o 09:49, Daronn_Darker napisał:

Uczyłem się z niej C i bardzo mi się podobało, ale słyszałem że nowe wydanie 6. C++ jest
''gorzej'' napisane niż wydanie 5.

Można na ten temat sporo dyskutować. To chyba jedyny podręcznik na rynku który od razu omawia zmiany w C++11 i całkiem sporo bibliotek a to ma spore znaczenie. Autor Symfonii trochę za bardzo starał się przekazać tylko podstawowe funkcje języka nawet jeśli istniały rozwiązania po prostu wygodniejsze (wektor kontra tablica dynamiczna, funkcje lambda, rozszerzone listy inicjalizacyjne) itp.
To co można temu podręcznikowi zarzucić to ten sam problem z jakimi boryka się w zasadzie każdy inny - tak naprawdę nie wiesz co jest RZECZYWIŚCIE używane w rzeczywistych projektach programistycznych. Ot, dowiesz się o przestrzeniach nazw które są używane w rzeczywistości BARDZO często ale w podręczniku to po prostu jeden z wielu działów. No i po prostu w każdym z nich brakuje praktycznego zastosowania - np. jak zrobić jakąś aplikację graficzną (a bądźmy szczerzy, nikt nie uczy się C++ żeby pisać aplikacje konsolowe). Tak samo brakuje jakiejś listy tego co może zrobić dla ciebie biblioteka standardowa. A nawet krótkie zestawienie tego wszystkiego (choćby w formie listy) potrafiłoby w olbrzymim stopniu pomóc programiście.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 26.01.2014 o 23:09, Daronn_Darker napisał:

/.../
To zakładając, ze znam podstawy. Jaką książkę zakupić? Gdzie będzie to co napisałeś.


Ha, zależy co chcesz konkretnie robić!
Jeśli interesują cię możliwości biblioteki standardowej C++ to na naszym rynku jest chyba tylko jeden podręcznik:
http://helion.pl/ksiazki/c-biblioteka-standardowa-podrecznik-programisty-nicolai-m-josuttis,cpbspp.htm#spis-tresci
Algorytmy sortujące, kontenery, obsługa stringów, często wykorzystywane funkcje. Z doświadczenia mogę powiedzieć że u siebie na zajęciach miałem ręczne tworzenie takich bzdur jak drzewa binarne, kolejki itp - miło wiedzieć jak to działa i sobie to zaprogramować ale właśnie po to jest biblioteka standardowa żeby zrobić to w jednej linijce kodu a nie ręcznie.

http://helion.pl/ksiazki/wiecej-niz-c-wprowadzenie-do-bibliotek-boost-bj-rn-karlsson,morecp.htm
Biblioteka boost (a co za tym idzie, C++11)
Albo też:
http://helion.pl/ksiazki/c-11-nowy-standard-cwiczenia-andrzej-stasiewicz,cwcp11.htm

A jeśli chodzi o pozostałe zastosowania to niestety... nie mogę tutaj niczego zaproponować. Niestety C++ to dość stary język a jego standardowe biblioteki są właśnie tym - standardem. Który może się przydać każdemu. Co prawda w C++11 masz kilka rozwiązań rozszerzających jego działanie np. o sieć (asio) albo wątki (thread) ale wszystkie bardziej praktyczne zastosowania to już inna kategoria do której nie ma podręczników. To niestety nie Java bądź C#.

Jeśli chcesz tworzyć aplikacje graficzne to interesujące są w tej chwili Qt i wxWidgets. Ten pierwszy to framework bezpośrednio pod tworzenie całych programów graficznych, ma własne funkcje obsługujące prawie wszystko co się da (sieć, wątki, obsługa szyfrowania, przeglądarki internetowe, XML i wiele innych). Drugi jest prostszy, to tylko GUI.

W przypadku chęci tworzenia gier to też masz mnóstwo możliwości. Pierwszym co możesz sprawdzić jest biblioteka Allegro - całkiem niezły framework z obsługą grafiki 2D, dźwięku, klawiatury, myszki, ekranu itp.
Ewentualnie Irrlicht bądź Ogre3D - te z kolei obsługują 3D.
Sporo dobrego słyszałem jeszcze o clanlib.


Ogólnie rzecz biorąc - jeśli uważasz że C++ znasz już na dość sensownym poziomie i co najwyżej od czasu do czasu zdarzy ci się syntax error to najrozsądniej po prostu zająć się ćwiczeniami praktycznymi - jakieś proste projekty z wykorzystaniem zewnętrznych bibliotek nauczą cię o wiele więcej niż jakikolwiek podręcznik.
Jeśli jednak nadal masz problemy z tym co w ogóle może zrobić sam język to najrozsądniej wziąć coś pokroju Język C++. Szkoła Programowania i dokształcić się w tym zakresie.

Biblioteka STL i C++11 w grę wchodzą dopiero w realnych projektach gdy chcesz zrobić coś co powinno być proste i oczywiste ale C++03 po prostu tego nie wspiera.
Przykładami takich zastosowań mogą być np. wątki. Bo to wyjątkowo głupie blokować sobie całą aplikację bo w tej chwili pobiera update. Wolałbyś żeby program sobie działał a w międzyczasie w tle ściągał aktualizację. I wtedy sięgasz po C++11 i bibliotekę <thread> i robisz to dosłownie w dwóch linijkach:
thread dow (download, "filelink");
dow.detach;

Albo np. musisz posortować jakieś dane w sposób klucz->dana. To czego używasz? <map>. A co jeśli tych danych będzie nie wiadomo ile? Np. kluczem miałby być int ale już danymi powinny być 2 stringi, 1 int i jeszcze jakaś klasa? To wtedy używasz tumble z C++11.

Te biblioteki istnieją po to żeby ci ułatwić życie a nie odwrotnie. Zainteresuj się nimi dopiero jeśli zaistnieje taka potrzeba, nie ma sensu poznawać całego STL-a i zmian w C++11 od razu bo to nuuuudne. Zdecydowanie lepiej zająć się programowaniem czegoś ciekawego a po drodze sprawdzić czy przypadkiem STL/C++11 przypadkiem nie oferują rozwiązania konkretnego problemu na 3 linie kodu zamiast samemu pisać 500.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam problem z C++, mianowicie mam dwie klasy gdzie w jednej jest obiekt typu drugiej klasy, ale o dziwno kompilator tego nie przyjmuje. Poniżej zamieszczam obydwa pliki.

#include "Grafika.h"

class Mechanika
{
friend class Grafika;
(...)
};


#include "Mechanika.h"


class Grafika
{

Mechanika a;
(...)
);


error C2146: syntax error : missing '';'' before identifier ''a''


Jestem laikiem jesli chodzi o programowanie, więc prosze o porady.


Udostępnij ten post


Link to postu
Udostępnij na innych stronach

>
Problem solved, wywaliłem #include "Grafika.h" z klasy Mechanika, nie wiem czemu działa, ale działa o.O.
Jak ktos ma jakieś wyjasnienie to chetnie poczytam.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To "nie wiem czemu" bierze się stąd, że się oba te pliki wzajemnie includują. Grafika includuje Mechanika a Mechanika includuje Grafikę - czyli by się bez końca wzajemnie includowały. I niestety nie jest to opisywane żadnym normalnie brzmiącym błędem tylko taką informacją o braku średnika. Wydaje mi się, że include''owanie "Grafika.h" nie jest potrzebne bo nie korzystasz z obiektów tej klasy, tylko trzymasz ją jako klasę zaprzyjaźnioną. I w momencie kompilacji jej nazwa będzie już znana "w środowisku".

Problem wzajemnego includeowania jest dość znany w C++. Rozwiązania są różne, różniste - umieszczanie obu takich klas w jednym pliku, przenoszenie implementacji do pliku .h (bez pliku .cpp), wykorzystanie sygnałów i slotów (jeśli korzystasz z Qt) itepe. No albo po prostu wykorzystać #ifndef. Poczytaj sobie na ten temat - a jeśli szukasz hasła do wrzucenia w Google, to "C++ include recursion".

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 01.02.2014 o 23:12, Murith napisał:

class Mechanika
{
friend class Grafika;
(...)
};

Dnia 01.02.2014 o 23:12, Murith napisał:


#include "Mechanika.h"


class Grafika
{

Mechanika a;
(...)
);


Twoim problemem jest zły wzorzec. Nawet jeśli już rozwiązałeś ten problem, to bym się zastanowił nad tym.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam problem. Piszę sobie aplikację do uproszczenia mojej pracy. Wszystko dzieje się w świecie C#, a problem polega na tym, że moje pojęcie o bazach danych jest zerowe ;], a wydaje mi się, że to właśnie SQL byłby mi teraz niezbędny. Wynika to z tego, że program ma wczytywać z plików csv wzorce tabel wejść/wyjść/flag/timerów robota itp. w różnych językach, a następnie po wybraniu urządzeń zainstalowanych na robocie generować wyjściowy plik csv, którego zawartość (wejścia/wyjścia/flagi itp.) odpowiadałyby właśnie tym zainstalowanym urządzeniom. Starałem się googlować i wynika z moich eksploracji, że na zwykłym windowsie to za bardzo chyba nie mam czego szukać. Czy może się mylę? Nie chciałbym robić tego przez obróbkę stringów, bo to będzie koszmarna ilość kodu i pokrętne pętle.
Tak wygląda próbka kilkunastu wejść takiego robota wraz z ich opisami w drugiej kolumnie.
E41 Uvolneni 1 robot 1 < robot 2
E42 Uvolneni 2 robot 1 < robot 2
E43 Uvolneni 3 Robot < Robot
E44 Uvolneni 4 robot 1 < robot 2
E45 Uvolneni 5 Robot < Robot
E46 Uvolneni 6 Robot < Robot
E47 Uvolneni 7 robot 1 < robot 2
E48 Uvolneni 8 Robot < Robot
E49 Uvolneni 9 robot 1 < robot 2
E50 Uvolneni 10 Robot < Robot
E51 Uvolneni 11 Robot < Robot
E52 Uvolneni 12 robot 1 < robot 2
E53 Uvolneni 13 Robot < Robot
E54 Uvolneni 14 Robot < Robot
E55 Uvolneni 15 Robot < Robot
E56 Uvolneni 16 Robot < Robot

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Mógłbyś pokazać jak wygląda fragment pliku csv którego używasz? Bo jak rozumiem to właśnie z wczytywaniem danych masz największy problem i po prostu chcesz to sobie ładnie "pociąć" na plasterki? Bo teoretycznie CSV to po prostu ciąg danych oddzielonych przecinkiem, byle użyć dobrze regexpa, obeszłoby się bez SQL-a wtedy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.03.2014 o 20:39, ziptofaf napisał:

/.../

Mógłbyś pokazać jak wygląda fragment pliku csv którego używasz? Bo jak rozumiem to właśnie
z wczytywaniem danych masz największy problem i po prostu chcesz to sobie ładnie "pociąć"
na plasterki? Bo teoretycznie CSV to po prostu ciąg danych oddzielonych przecinkiem,
byle użyć dobrze regexpa, obeszłoby się bez SQL-a wtedy.

Dzisiaj już i tak dałem spokój. Ale i tak myślę, że fajnie by było pojąć o co chodzi w tym całym SQLu. Udało mi się dojść do takiego banału jak to, że wystarczy dodać projekt bazy danych do projektu programu, ale dalej to już klops.
Mogę to mniej więcej zobrazować istotę tych plików. Plik jak widać składa się z dwóch kolumn. W pierwszej jest np. numer wejścia E1,E2... W drugiej znajduje się opis znaczenia sygnału np. w uproszczeniu "błąd spawarki".
Sygnały są podzielone na przedziały np. E705-E785 odpowiada za kleszcze zgrzewalnicze nr 1 itd. Niektóre zakresy są zawsze takie same - tak jak właśnie kleszcze, chyba że robot nie ma kleszczy, wtedy ten przedział jest opisany jako "nieużywane" - inne są zależne od programu np. blokady między robotami, komunikacja z PLC itd.
Poniższy plik to pożądany plik wynikowy. Myślę, że pliki źródłowe składałyby się z pojedynczych zakresów odpowiadających różnym urządzeniom. Zakresy są z góry określone przez standard VW.
http://speedyshare.com/zTDHF/KAAPA1112200R01.cs.zip

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli chodzi o to że wybierasz jakie elementy ma robot, a program drukuje listę wejść dla tych elementów w danym języku?

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ć