Zaloguj się, aby obserwować  
Bartuc

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

1979 postów w tym temacie

Dnia 07.06.2014 o 06:28, ziptofaf napisał:

W sumie przez lata dużo się nie zmienia pod kątem tematyki (poznajesz konstrukcje języka
a nie jego realne praktyczne zastosowania) więc jeśli zależy ci na opanowaniu programowania
to patrzenie na to co jest w programie szkolnym i dostosowanie się do niego sensu za
dużo nie ma.



Tak jak pisałem wątku studia, za rok maturka i planuje na studia informatyczne bo kocham komputery, a specjalizować chciałbym się jako programista i grafik, dlatego chciałbym już teraz zacząć przygodę z C/C++ python itp, co chciałbym osiągnąć?. aplikacje graficzne pod każdy system + gry :P .

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.06.2014 o 22:25, Kubson023 napisał:

Tak jak pisałem wątku studia, za rok maturka i planuje na studia informatyczne bo kocham
komputery, a specjalizować chciałbym się jako programista i grafik, dlatego chciałbym
już teraz zacząć przygodę z C/C++ python itp, co chciałbym osiągnąć?. aplikacje graficzne
pod każdy system + gry :P .


No to zalecałbym zacząć od Pythona. Jak uznasz że cię już nie zadowala (a swoje wady też ma, choćby taką że jest z 40x wolniejszy od C++ - cena którą się płaci za to że osiągasz te same efekty w 5-10x mniejszej ilości linii kodu) to wtedy jeśli poważnie nadal będziesz poważnie myślał o pisaniu gier to możesz się przerzucić na C++. Radzę też sobie zainstalować np. Xubuntu 14.04 czy innego Linuxa, choćby na maszynie wirtualnej i poćwiczyć codzienną pracę i programowanie na nim.

Ale już typowo pojmowane aplikacje graficzne to dość skomplikowana tematyka - w przypadku C++ w MIARĘ uniwersalną biblioteką jest np. Qt (pełen framework do tworzenia aplikacji graficznych pod Windowsa/Maca/Linuxa, żeby móc go wykorzystywać musisz mieć dobrze opanowane programowanie zorientowane obiektowo czyli włącznie z dziedziczeniem i poświęcić dobre kilka tygodni).

Prostszy xWidgets pozwoli ci utworzyć okienko (taki sam kod na Linuxie i Windowsie) ale już dodanie np. obsługi internetu do niego będzie wymagać innych rozwiązań w przypadku Linuxów a innych w przypadku Windowsów. Prościej jest w przypadku Javy, tam masz taki sam kod niezależnie od systemu operacyjnego (po to zresztą ten język powstał). Ale jest to decyzja nad którą się zbyt szybko nie będziesz zastanawiać.

Ot, bylebyś nie zaczynał nauki programowania od C++ bo ten język, śmiem twierdzić, już by nie żył gdyby nie jego popularność. Jeśli chcesz czegoś "trudnego" (ale nie tak przestarzałego) zamiast Pythona to wówczas zainteresuj się C# albo Javą. Oba są dość podobne do C++ pod względem składni ale korzystają z nowszych rozwiązań (bez paradygmatu programowania obiektowego nigdzie w nich nie dojdziesz więc czy tego chcesz czy nie będziesz musiał go opanować) i mają o wiele bogatszą bibliotekę standardową zawierającą choćby właśnie takie rzeczy jak wspomaganie tworzenia aplikacji graficznych. Jasne, on MA też zalety które są nieocenione przy niskopoziomowym programowaniu gdzie NAPRAWDĘ liczy się wydajność... ale są to rzeczy których nie wykorzystasz i będziesz uznawał za niepotrzebne/upierdliwe jeszcze przez bardzo długi czas.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Proste pytanie, ale wyniki z googla utrudniają, zamiast ułatwić. Jak zrobić w Netbeans przycisk, który uruchamia domyślny program wczytujący zawartośc pliku tekstowego w katalogu javy/w jakimś adresie względnym (np. C:\)?
Google pokazuje same wczytywanie pliku do javy.

Udostępnij ten post


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

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;


A znasz może jakieś dobre opracowanie zagadnień związanych z <thread> i wielowątkowością w C++ (jakiś tutorial najlepiej)? Mile widziane po polsku, chociaż po angielsku też ogarnę spokojnie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dwa pytania.
1. Gdzie są definicje funkcji z bibliotek(np. printf)? Jak działa cout(jego definicja)?
2. Jak działają mnemoniki? jak się nauczyć jak w tym programować? Skąd mam wiedzieć jak np wyliczyć 0 z liczby w jakiejś komórce?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.06.2014 o 19:17, tykus napisał:

A znasz może jakieś dobre opracowanie zagadnień związanych z <thread> i wielowątkowością
w C++ (jakiś tutorial najlepiej)? Mile widziane po polsku, chociaż po angielsku też ogarnę
spokojnie.


http://helion.pl/ksiazki/jezyk-c-i-przetwarzanie-wspolbiezne-w-akcji-anthony-williams,jcpppw.htm#szczegoly
Polska wersja książki autorstwa Anthoniego Williamsa, jednego z twórców biblioteki thread.
Od razu jednak uprzedzam - to jest trudna lektura bogata w język techniczny. Jednocześnie za to dostajesz to wyczerpujący podręcznik, omawiający zmienne atomowe, semafory, muteksy, pule wątków itd. napisany przez kogoś kto dla odmiany naprawdę wie o czym mówi. Książka godna polecenia o ile jesteś osobą która rzeczywiście potrafi programować i ma jakieś doświadczenie w realnych i sporych aplikacjach a nie tylko się bawi w kodowanie aplikacji typu hello world na studiach.

Na darmowe tutoriale bym się nie nastawiał - C++11 i zwłaszcza wielowątkowość jest skomplikowaną tematyką i raczej na blogach nie znajdziesz dobrych poradników do tego. Chyba że do unixowych forków i standardu POSIX bo ten istnieje od 20 lat, wtedy może upolujesz coś ciekawego.

Alternatywą jest jeszcze znacząco tańsza:
http://helion.pl/ksiazki/programowanie-wspolbiezne-systemy-czasu-rzeczywistego-pawel-majdzik,prowsp.htm#szczegoly
Tej jednak nie czytałem więc wolę się nie wypowiadać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.06.2014 o 22:03, Dregorio napisał:

Dwa pytania.
1. Gdzie są definicje funkcji z bibliotek(np. printf)? Jak działa cout(jego definicja)?


http://www.cplusplus.com/reference/cstdio/printf/

/* printf example */
#include <stdio.h> - deklaracja/prototyp której szukasz jest w pliku stdio.h, definicja różni się w zależności od użytego systemu środowiska np:
http://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/printf.c;h=4c8f3a2a0c38ab27a2eed4d2ff3b804980aa8f9f;hb=3321010338384ecdc6633a8b032bb0ed6aa9b19a
http://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c;h=fc370e8cbc4e9652a2ed377b1c6f2324f15b1bf9;hb=3321010338384ecdc6633a8b032bb0ed6aa9b19a

Co do drugiej części tego pytania do cout - słowa definicja użyłeś celowo aka chcesz jego kod źródłowy czy tylko wyjaśnienie co to jest?
Jeśli to drugie:
cout jest obiektem klasy ostream który odpowiada strumieniowi stdout (standardowego wyjścia).
Wywołując cout << "hello" tak naprawdę wywołujesz konkretną instancję klasy std::ostream z przeładowanym operatorem <<.

A jak działają i co to są strumienie (czyli pliki, internet, standardowe wejście/wyjście) to radzę przeczytać np. tutaj:
http://www.cprogramming.com/tutorial/c++-iostreams.html

A jeśli chcesz definicji obiektu cout - to ma w sobie... NAPRAWDĘ dużo linii kodu. Jesteś pewny ze chcesz się w to wczytywać? ;P Jeśli zrozumiesz jak działają strumienie to wówczas zresztą zrozumiesz jak działa właśnie cout który po prostu definiuje jeden z wielu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Ja bym taką zabawę zaczął od linuxa, pomalutku zapoznał się o co chodzi tak naprawdę w tych całych wątkach itd. a potem sobie spokojnie przeszedł na win. Chyba, że nie masz czasu.
>Książka godna polecenia o ile jesteś osobą która rzeczywiście potrafi programować i ma jakieś doświadczenie >w realnych i sporych aplikacjach a nie tylko się bawi w kodowanie aplikacji typu hello world na studiach.
Raczkuje dopiero w C++, wole C i asm, ale nawet ja zrozumiałem(umiejąc napisać wielowątkową apke w linuxie)tą książką(tą pierwszą). Jest bardzo fajna napisana i nie zauważyłem by trzeba mieć do jej czytania jakąś straszną wiedzę.

Udostępnij ten post


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

/.../
Ja bym taką zabawę zaczął od linuxa, pomalutku zapoznał się o co chodzi tak naprawdę
w tych całych wątkach itd. a potem sobie spokojnie przeszedł na win. Chyba, że nie masz
czasu.


Pthread? Trochę miałem do czynienia, ale w sumie nieznacznie. Głównie mi chodzi o to, żeby wyrobić sobie choćby podstawową wiedzę na ten temat, w sumie aż tak nie spieszy mi się od razu z całym <thread>. Ot, zauważyłem że jest to punktowane w ofertach o pracę, a sam nie miałem do tej pory za bardzo potrzeby korzystania z tych rozwiązań, a wypadałoby się dokształcić.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Tym bardziej zacznij od Linuxa, w większości firm na początku systemem w którym piszesz to linux(inny unix). Korpo nie lubi windowsa, w sumie małe firmy też nie :P (jeśli się mylę, poprawić). Tylko pod linuxem to inna biblioteka. Zacznij od SO z mimuw.wazniak, tam są fajne opisane, co to wątek, proces itd.

Udostępnij ten post


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

Ja bym taką zabawę zaczął od linuxa, pomalutku zapoznał się o co chodzi tak naprawdę
w tych całych wątkach itd. a potem sobie spokojnie przeszedł na win. Chyba, że nie masz
czasu.


Teoretycznie C++11 i thread jest uniwersalne i możesz go używać tak samo na linuxie jak i na windowsie. Choć jasne, programowanie na Linuxach już nawet pomijając POSIX i forki jest po prostu wygodniejsze (nie musisz dorzucać jakichś losowych .dll z internetu).

Dnia 14.06.2014 o 23:13, Daronn_Darker napisał:

>Książka godna polecenia o ile jesteś osobą która rzeczywiście potrafi programować
i ma jakieś doświadczenie >w realnych i sporych aplikacjach a nie tylko się bawi w
kodowanie aplikacji typu hello world na studiach.

Dnia 14.06.2014 o 23:13, Daronn_Darker napisał:

Raczkuje dopiero w C++, wole C i asm, ale nawet ja zrozumiałem(umiejąc napisać wielowątkową
apke w linuxie)tą książką(tą pierwszą). Jest bardzo fajna napisana i nie zauważyłem by
trzeba mieć do jej czytania jakąś straszną wiedzę.


To ty chyba jeszcze nie spotkałeś pseudoprogramistów którzy narzekają że Symfonia C++ jest pisana zbyt trudnym językiem ^_^ A jednak wielowątkowość to jest już szkoła wyższa w programowaniu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Dnia 15.06.2014 o 00:07, ziptofaf napisał:

To ty chyba jeszcze nie spotkałeś pseudoprogramistów którzy narzekają że Symfonia C++
jest pisana zbyt trudnym językiem ^_^ A jednak wielowątkowość to jest już szkoła wyższa
w programowaniu.

Sam dobrze wiesz, że mój skill nie jest wysoki, ale "szybko" wzrasta. Sam nie lubię Symfonii(nie dlatego, ze nie rozumiem:P). Może patrzę na problem przez pryzmat zaliczenia SO, ale nie uważam to za wyższą szkołę jazdy. Już więcej problemu sprawia mi programowanie obiektowe:P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Już nie przesadzajmy, Symfonia jest wybitnie prostym podręcznikiem :P Doświadczenie mam głównie ze studiów + staż w Comarchu w zeszłe wakacje (ale jako, że studiuję elektronikę i telekomunikację to wrzucili mnie na projekt związany z moimi studiami i mimowolnie musiałem się nauczyć podstaw Javy) ;)

@Daronn_Darker - kontakt z pthreads właśnie miałem ze względu na SO ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 15.06.2014 o 00:22, Daronn_Darker napisał:

Sam dobrze wiesz, że mój skill nie jest wysoki, ale "szybko" wzrasta. Sam nie lubię Symfonii(nie
dlatego, ze nie rozumiem:P). Może patrzę na problem przez pryzmat zaliczenia SO, ale
nie uważam to za wyższą szkołę jazdy. Już więcej problemu sprawia mi programowanie obiektowe:P


Na problemy z programowaniem obiektowym to polecam ściągnąć Qt. Gdzie albo dziedziczysz klasy albo nie jesteś w stanie nic zrobić. Albo to i to :D Samemu teraz w nim tworzę dość skomplikowaną aplikację i takie dziwactwa się w nim wyprawia (funkcja1 wywołująca inną funkcję1 który wywołuje inną funkcję3 na której wywołanie czeka jeszcze inna funkcja4 żeby wiedzieć że może już bezpiecznie skorzystać z danych obrabianych przez funkcję1) że człowiek tylko myśli "dlaczego nie uczyłem się normalnego języka a wybrałem C++" ^_^

A programowanie wielowątkowe naprawdę POTRAFI być skomplikowane - bądźmy szczerzy, fakt że nawet najnowsze gry z wielomilionowym budżetem rzadko kiedy wykorzystują dobrze więcej niż 2 o czymś świadczy. Musisz sobie zawczasu przygotować dobry model pamięci, pracować tak żeby w miarę możliwości nie trzeba było używać muteksów (które potrafią zarżnąć wydajność kodu), zadbać o synchronizację między wątkami... to się wydaje proste w krótkich aplikacjach gdzie po prostu ustawiasz jedną zmienną kontrolną, 3 wątki z thread.detach które po skończeniu swojej pracy dodają do niej 1 i tylko co jakiś czas sprawdzasz czy to już. Ale jeśli piszesz coś co ma podprocesów z 50, jest bardzo trudne do podzielenia na równe fragmenty itd, musisz napisać dobry menadżer zasobów, określać poziom priorytetów... nagle całość robi się diabelsko trudna.

Samemu tego typu kod widziałem w tworzeniu tylko raz (konkretny moduł pod aplikację sieciową który trzeba było przepisać w C++ bo jego poprzednia jednowątkowa wersja pisana w Ruby była zwyczajnie 200x za wolna) i to miało tak z kilka... tysięcy linii. Śmiem twierdzić że coś tej klasy to może będę w stanie napisać za 5 lat...

Chociaż i tak nic nie przebije tego z czym zetknął się mój znajomy - tak z 30-letni kod w jednym z systemów bankowych. Pisany nawet nie funkcyjnie. Czyste goto. Wyobraź sobie debugowanie takiego szajsu.

@ tykus
Jeśli miałeś staż w Comarchu to znaczy że masz realne doświadczenie więc możesz śmiało sięgać po tę książkę :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 15.06.2014 o 01:05, ziptofaf napisał:

Chociaż i tak nic nie przebije tego z czym zetknął się mój znajomy - tak z 30-letni kod
w jednym z systemów bankowych. Pisany nawet nie funkcyjnie. Czyste goto. Wyobraź sobie
debugowanie takiego szajsu.


Branża finansowa to w ogóle jest specyficzna. Dość powiedzieć, że ciągle masa softu napisana jest tam w COBOLu ( https://pl.wikipedia.org/wiki/COBOL ), chyba najbardziej porytym języku programowania wykorzystywanym produkcyjnie, bijącym swoją dziwnością nawet niektóre języki napisane tylko dla jaj. Legenda głosi, że obecnie poszukują nie tyle programistów COBOLa, co osób, które chciałyby takimi programistami zostać - czyli nie musisz go znać, musisz tylko chcieć się go nauczyć i później tą wiedzę wykorzystywać.
W dodatku wszystkie zmiany w finansach są drogie, bo muszą być setki razy przetestowane. Dlatego niektóre systemy bankowe są starsze, niż klienci tych banków - bo bardziej opłaca się je łatać i rozwijać, niż przepisywać od zera.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 15.06.2014 o 00:36, tykus napisał:

Już nie przesadzajmy, Symfonia jest wybitnie prostym podręcznikiem :P Doświadczenie mam
głównie ze studiów + staż w Comarchu w zeszłe wakacje (ale jako, że studiuję elektronikę
i telekomunikację to wrzucili mnie na projekt związany z moimi studiami i mimowolnie
musiałem się nauczyć podstaw Javy) ;)


Politechnika Poznańska, EiT?
Jeśli tak, to rok temu skończyłem ten elitarny kierunek :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 15.06.2014 o 11:38, SiDi napisał:

Jeśli tak, to rok temu skończyłem ten elitarny kierunek :D

Łoo, gratuluję, ja teraz na III roku - projekt z symulki oddany i wybroniony w piątek (na 5!), teraz tylko oddać pozostałe projekty i walka z sesją ;) Jak perspektywy po studiach?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To gratuluję Tyszera. Ja miałem spore problemy z symulacją i napisaniem programu do niego, ale udało mi się uzyskać czwóreczkę. Zawsze miałem problemy z programowaniem, więc na ostatnim roku poszedłem w sieci. Staż w Glaxo jeszcze będąc studentem, a z dniem ukończenia studiów od razu etat ;) Jednakże stwierdzam, że dobrym progamistom łatwiej odnaleźć się na rynku pracy - przynajmniej w Poznaniu.

Jeszcze dodam, że skoroś na III roku i miałeś staż Comarchu to masz wielkiego boosta do znalezienia pracy po skończeniu studiów, o których wielu może sobie pomażyć.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Takie pytanie - jak rozpoznać, że mam ostatnie wywołanie funkcji rekurencyjnej? Piszę algorytmy sortujące i wyniki ich działania mam zapisywać do pliku. Teraz jestem przy quicksorcie i mam go napisanego rekurencyjnie. Mogę po prostu wrzucić w funkcję wpisanie do pliku, ale wtedy wykonuje się ono przy każdym wywołaniu i strasznie wydłuża czas pracy programu, na co nie mogę sobie pozwolić, bo mam te czasy zmierzyć i przeprowadzić analizę.

Tak, wiem, że mogę po prostu zwrócić w tej funkcji wskaźnik na tablicę i wypisać ją np w mainie, ale chciałbym się od Was dowiedzieć, czy da się to zrobić w inny sposób. ;p

Kod: http://pastebin.com/9DtTPqc2

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ć