Zaloguj się, aby obserwować  
Bartuc

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

1979 postów w tym temacie

Ktoś się zna i jest w stanie powiedzieć, jak w Visual c++ 2010 stworzyć event na otwarcie nowego okna (wywołanie utworzonej formatki)? Mimo, że to rzecz dosyć postawowa, w necie nie znalazłem dobrej instrukcji.
Sam event wygląda tak:
private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) { }
W nawiasach na końcu powinna być instrukcja otwarcia Form2.h (z jakiegoś Form1), z czego samej nazwy Form2 nawet nie rozpoznaje (a użyłem wcześniej #include).
Jak temu podołać prosiłbym o odpowiedź.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam problem z C#, piszę program którego jedną z funkcji jest liczenie kątów trójkąta na podstawie podanych jego boków. Doszedłem do czegoś takiego:

public int cosinusy(double a, double b, double c)
{
double cosinus = (b * b + c * c - a * a) / (2 * b * c);
if (cosinus < 0) cosinus = cosinus*(-1);
for (int x = 0; x < 90; x++)
{
if ((cosinus>=cos[x]) && (cosinus<=cos[x+1]))
{
if (mod(cosinus - cos[x]) < mod(cosinus - cos[x+1])) return x; else return x+1;
}
}
return 0;
}

Problem polega na tym, że funkcja ta zawsze zwraca mi to, co stoi przy returnie w ostatniej linijce (w tym wypadku 0), tak jakby w ogóle nie zwracała uwagi na returny w pętli. mod() to moja funkcja zwracająca moduł z liczby (nie mogłem jakoś znaleźć gotowej funkcji w samym C#), a cos[x] to tablica, w której mam zapisane wartości cosinusów dla kolejnych kątów. Proszę o pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na pewno chęci ;)
Jeśli chodzi o zagadnienia, to z podstaw standardowo wypisywanie tekstu, Scanner, for, int, if, if else, while.
Program do pisania programów - na przykład BlueJ.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 11.06.2012 o 23:06, Sigu napisał:

Co trzeba wiedzieć i mieć do nauk Javy od początku (mam już podręcznik)? :)

Poza chęciami potrzebne Ci zainstalowane środowisko JDK (obecna wersja 1.7u4). Składa się na niego prosty kompilator wierszowy i maszyna wirtualna - jest to absolutne minimum. Jednak niewystarczające do nauki.
Do nauki potrzebny Ci jeszcze wygodny edytor i pewna wiedza jak kompilować i odpalać produkt kompilatora, czyli pliki .class i .jar. Sprawę całościowo załatwiają edytory zintegrowane, czyli IDE, które pozwalają edytować i organizować pliki źródłowe, kompilować je, uruchamiać oraz debugować (szukać błędów wykonania/koncepcyjnych) i profilować (szukać błędów wydajności). Ponieważ Java pozwala na wykrycie mnóstwa błędów w trakcie kompilacji, to nacisk na te dwa ostatnie zadania jest w Javie mniejszy, za to pozwala na automatyczne generowanie GUI wytworzonego w edytorze "wizualnym". Tak więc edytor taki, to dodatkowy bonus programów IDE.
Obecnie są dwa konkurencyjne IDE o stosunkowo wysokiej jakości, a jednocześnie całkowicie darmowe: Netbeans i Eclipse. Oba mają wszystkie wyżej wymienione cechy. Są oczywiście pakiety lepsze jak InteliIdea, ale są one już komercyjne, więc wtedy nie wystarczą same chęci (bez kasy).
Ostatnio wygodą używania nieco góruje Netbeans - ma świetny edytor pozwalający na zmianę nazw każdej rzeczy, która jest gdziekolwiek użyta - na przykład zmieniasz nazwę metody czy zmiennej, a zmiana ta jest wprowadzana od razu we wszystkich miejscach, gdzie występuje. Z kolei Eclipse ma domyślnie powiązane polecenie paste z reformatem, dzięki czemu przeniesiony lub skopiowany kod od razu ładnie się układa (w Netbeans trzeba pozamieniać skróty w opcjach zaawansowanych aby to samo uzyskać).

Są pakiety obu IDE połączone od razu z JDK (JDK bundled) dzięki czemu wystarczy taki pakiet zainstalować, aby od razu bez żadnej konfiguracji móc pisać i uruchamiać programy w Javie. Netbeans ma tu pewną przewagę ponieważ wszystkie programy demonstracyjne tutoriala używają projektów Netbeans, więc wystarczy je otworzyć i od razu działają (w Eclipse trzeba tworzyć projekty od zera lub importować - dla początkującego to horror).
Java, a właściwie Java VM ma niestety bardzo archaicznie (=prymitywnie) rozwiązane ładowanie plików wykonywalnych .class (i archiwów .jar) przez co powoduje to sporo frustracji początkującym. Na przykład lista poleceń programu java.exe (i javaw.exe) pochodzi jeszcze z czasów antycznych i jest wyjątkowo nieprzyjazna (unix friendly:). Podaje się w niej nazwę klasy (a nie plik .java), a położenie plików .class jest zawarte w osobnej specyfikacji jako podopcje. Do tego dochodzą pakiety, które są w Javie formalnie katalogami (ale katalogi używają nieprzenośnych ścieżek innych dla systemów unixowych, maca i windozy). Dlatego pierwszą tajemnicą wiary dla początkującego jest załapanie, że klasa w pakiecie musi znajdować się w podkatalogu (lub całej ich serii - zależnie od pakietu), ale uruchomiona musi być z katalogu "powyżej". Jedyny wypadek kiedy katalogi się zgadzają jest używanie pakietu domyślnego (czyli brak polecenia packet), który dla utrudnienia początkującym nie jest zalecany (bo to powoduje w zamian inne problemy). Z tego powodu klasę z metodą main warto umieszczać w pakiecie domyślnym (bez pakietu), a całą resztę w pakietach mających nazwy. Ułatwi to później ominięcie takich problemów, że wszystko działa w IDE, a bez niego nic - bo się żadna klasa nie ładuje. Dodatkowo w Javie katalogiem domyślnym jest katalog domowy, a nie katalog bieżący, co pod Windows trochę utrudnia życie.

Jest szansa, że problemy ze ścieżkami przestaną męczyć bo w najnowszej Javie 1.7 wreszcie po latach wprowadzono uniwersalne klasy Path oraz FileChannel, a to daje szanse, że w końcu unixowaty bajzel ze ścieżkami i generalny syf w obsłudze plików przestanie być zmorą Javy. Te dwie klasy z Javy 7 są aktualnie "must know" dla początkującego jeżeli nie chce się babrać z archaizmami poprzednich wersji. Efektem nieprzenośnych ścieżek i starej klasy File jest używanie pod Windows nazw katalogu poprzedzonego kropką jako katalogu ukrytego, albo takich bzdurnych choć działających często kombinacji jak: "C:/całkowicie/zła/ścieżka/do/plik.txt"

Co jeszcze należy wiedzieć? To czego używanie (lub nawet znajomość) należy olać. Oto nazwy ważnych starych klas do olania zimnym moczem (nawet jeżeli wymuszają to stare podręczniki):
1. Vector (dzisiaj ArrayList i interfejs List)
2. HashTable (dzisiaj HashMap i interfejs Map)
2. File (dzisiaj Path)
3. InputStream/OutputStream (dzisiaj FileChannel i jej pochodne oraz rodzina klasy ByteBuffer)
4. Thread/wait/notifyAll (należy znać, ale nie używać tak jak warto znać assemblera, ale nie warto w nim pisać - obecnie zastępuje to rodzina klas interfejsu Executor czy klasy ForkJoin, SwingWorker, Timer itp.).
5. Wszystko z adnotacją @deprecated.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 12.06.2012 o 00:17, Sigu napisał:

Kupiłem sobię Thinking in Java. Myślałem, że to książeczka, a nie Tom na 1300 stron...

A ilość informacji taka jakby miała 4k stron... (w innych podręcznikach autorzy ordynarnie przepisują sobie Javadoca i jeszcze biorą za to kasę :)
Pociesz się, że jest to pełne kompendium języka w wersji 5 (i trochę 6), które przydawać się będzie przez lata. Nawet stary wyga po nią sięga.
Gdyby pojawiła się TiJ 5ed. zaktualizowana dla Javy 7, to sam bym od razu kupił mimo iż mam edycje 2, 3, 4. Ta pozycja to must have jak dla C podręcznik "K&R: Język C".

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wow xD
Jak zobaczyłem co napisałeś, to doszedłem do wniosku, że muszę się przespać i dopiero teraz przeczytałem.
Bardzo fajny opis, jednak jak to powiedział kiedyś jeden pan... "Nurtuje mnie pewne pytanie. "

Jak mniemam w Javie można napisać jakiś prosty kalkulator. Jeśli tak, to jaka jest różnica (trudności, złożoności i ilości kodu) między takim w CPP i w Javie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 12.06.2012 o 11:17, Sigu napisał:

Jak mniemam w Javie można napisać jakiś prosty kalkulator. Jeśli tak, to jaka jest różnica
(trudności, złożoności i ilości kodu) między takim w CPP i w Javie?

Taka, że cały kod kalkulatora z widokiem standardowym bez problemu mieści się na jednej stronie A4, jego elementy gui są z natury relokowalne niezależnie od wielkości i kształtu okna, wszystko ma czytelny kod i na dodatek jest to przenośne na wszystkie możliwe plaftormy (z Java SE). Dla odmiany w C++ naprodukujesz 4 strony nieprzenośnego, słabo czytelnego kodu ze sztywnym gui. Już kod w czystym C byłby bardziej czytelny od C++.
Jednak dobrze napisany program w obu językach może być napisany przejrzyście - różnica polega na tym, że Java to trochę wymusza, a w C++ to jest wyłącznie Twoja dobra wola. Pomijam już fakt, że gui w C++ jest zależne od użytego narzędzia, a w Javie nie. Przede wszystkim dlatego, że gui w C++, a ściślej w Windows jest tylko statycznym zasobem, a w Javie może być zarówno częścią kodu jak i zasobem (tyle, że dynamicznym - możesz też do niego wprowadzać zmiany). W Javie kod ten jest przenośny, a w C++ brak przenośności objawia się już na poziomie wersji systemu Windows, kompilatora i bibliotek, a różnych systemach kończąc. W C++ nie napiszesz kalkulatora na nieznanej Ci graficznej stacji roboczej bez przewertowania jakiejś cegły do systemu i jego gui, a w Javie każdy program który kiedykolwiek napisałeś jest do uruchomienia od razu, jak pstryknięcie palcem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 12.06.2012 o 14:29, Inquis1t0r napisał:

Pytanie nie do końca bezpośrednio związane z językiem, no ale...
Da się jakoś wyłączyć autouzupełnianie składni w netbeans ?

Tools/Options/Editor/Code Completion i tu możesz wybrać z listy "All languages" żeby wyłączyć wyskakujące okna, włączyć je *nawet bardziej* oraz "Java" aby ewentualnie dopasować to do własnych upodobań. Generalnie jeżeli nie potrzebujesz podpowiedzi do kodu, to wystarczy, żebyś to olewał i pisał dalej to co potrzebujesz. Podpowiedzi, to tylko propozycje ze zbioru możliwości jakie rozpoznaje IDE.

Mi czasem te podpowiedzi się przydają ponieważ dzięki temu czasem natykam się na możliwość wykorzystania jakiejś metody, której użycie nie przyszłoby mi do głowy. Czasem daje mi to oszczędność czasu - sporo energii wielu ludzi traci na wyważanie otwartych drzwi i programowanie kodu, który powiela jakiś kod istniejący już w dostępnych od ręki bibliotekach, które są częścią Javy. Nierzadko zdarza się komuś męczyć z ładowaniem jakiejś bibliotecznej kobyły tylko dlatego, że nie zorientował się, że coś czego potrzebuje istnieje już w kodzie runtime w bardziej uniwersalnej postaci, albo co gorzej - zostało dodane w nowszej edycji Javy, eliminując konieczność użycia starszych kobylastych bibliotek. Jednym z przykładów jest choćby biblioteka GWT od Google''a, której sporo użytecznych rozwiązań zastosowano w Java 7. Ktoś kto tylko tych rzeczy potrzebował nie musi już więc utrzymywać powiązania z GWT.
Nierzadko też podpowiedzi przydają się w jeszcze jednym celu - jeżeli w podpowiedziach nie ma czegoś co wiem, że powinno być, to już wiem, że schrzaniłem w konfiguracji, powiązaniu bibliotek itp.

Brak podpowiedzi pozwala skupić się podczas pisania, ale z drugiej strony nierzadko jest tak, że skupia się na pisaniu, a zwyczajnie brakuje czasu na skupienie się nad tym czy to co się pisze jest właściwe, potrzebne i czy tego co chce się osiągnąć nie da się zrobić lepiej. Podpowiadacz przeszkadza w skupianiu się nad taką pisarską produkcją. Ona sama wcale nie jest czymś dobrym ponieważ potem tę masę wyprodukowanego za jednym ciągiem kodu trzeba nierzadko wiele godzin debugować, żeby uzyskać to czego się oczekiwało.
Z mojego doświadczenia wynika, że nie warto. Dlatego podpowiadacz się przydaje bo oszczędza czas na kilka sposobów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.06.2012 o 13:58, Sigu napisał:

Ty jesteś jakimś informatykiem czy entuzjastą? :)

Żyję z projektowania i tworzenia swoich programów. To jakbyś to zdefiniował? :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.06.2012 o 14:38, Sigu napisał:

Ale studiowałeś informatykę?
Bo jeśli nie to jesteś bardziej programistą-amatorem :P


Nie trzeba studiować informatyki żeby być programistą ;) Programujesz też na kierunkach związanych np. z elektroniką czy telekomunikacją. Kiedyś kierunku ''informatyka'' nie było i ludzie dawali sobie radę, programowali... Chociaż studiowanie na ''informatyce'' poszerza pewne horyzonty ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.06.2012 o 14:38, Sigu napisał:

Ale studiowałeś informatykę?

Tak. Chociaż weź pod uwagę, że poziom tego co nazywa się w Polsce informatyką to w innych krajach odpowiednik dobrego technika. Poza tym w pewnych środowiskach nazwanie projektanta czy programisty informatykiem, to obelga. :)
Stało się tak po ataku na uczelnie mające ten kierunek przez ludzi, którzy nawet tego nie lubią, a po prostu zwietrzyli łatwą i wygodną kasę, a przez studia przechodzili na zasadzie kupowania projektów. Już pomijam fakt, że jeszcze nie tak dawno temu "informatykiem" był sprzedawca w sklepie komputerowym. :)

W wielu firmach programują zawodowo ludzie którzy pokończyli najróżniejsze studia, a nawet bez studiów. Ponieważ w tej dziedzinie wiedza zmienia się tak szybko, papier uczelni jest zasadniczo zdezaktualizowany już w momencie otrzymania go. Uznanie, że to co się nauczyło na uczelni (o ile cokolwiek) ma wartość nie większą niż zeszłoroczny śnieg jest po prostu konieczne. W drugą stronę to też działa - wystarczająco zdeterminowana osoba z ulicy może przelecieć szybko program studiów (współczesnych, np. dowolnie renomowanej uczelni) i sama nabyć umiejętności wystarczających nie tylko do pracy najemnika, ale nawet do założenia własnej firmy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Właśnie ja mam zamiar zaliczyć Wrocław i tam właśnie inżynierię oprogramowania.
Co do samego pisania, to wiem, można, ale tak po prawdzie to nie znam dużo nie-informatyków, którzy cokolwiek robią w tym kierunku. Toteż pierwsze pytanie, jeśli programujesz, to czy skończyłeś informatykę.

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ć