Zaloguj się, aby obserwować  
UthersonL

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

1812 postów w tym temacie

Dnia 29.06.2014 o 01:38, nightfaler napisał:

http://pastebin.com/LA4MSrYg
Potrzebuję do czegoś 12 linijki? Do czego ona w ogóle służy?


Pętla wyświetlająca menu do momentu aż wybrana zostanie wartość z zakresu 1-5. Niepotrzebny jest nawias z linii nr 4. Brakuje jeszcze początku kolejnej pętli do - while, która to kończy się w linijce nr 56. W wierszu 10 wypadałoby dopisać do { aby program mógł się wykonywać dopóki użytkownik nie wybierze 5. No i po takich zmianach trzeba wykasować do{ z wiersza nr 13.

Bez tych zmian niepotrzebnie się wykonuje pętla wyglądająca tak:
while(x<5 || x>1)
do { praktycznie cały program} while (x!=5);
Czyli poza pierwszym razem kiedy to x=0 czyli zawsze wejdzie w pętlę while(x<5 || x>1) to program będzie sprawdzał i wykonywał się w całości dopóki x nie będzie równy 5, bo wtedy się zakończy. Jeśli użytkownik nie wybierze dostępnej opcji (czyli wpisze np 8) to i tak wykonana zostanie instrukcja switch. W tym wypadku jest to mały problem ale przy rozbudowanym programie gdzie niezależnie od wyboru użytkownika są wykonywane obliczenia, a następnie jest brana pod uwagę odpowiednia opcja to użytkownik mógłby niepotrzebnie czekać na ponowne zapytanie o odpowiednią opcję.

Wydaje mi się że założenie pętli while(x<5 || x>1) to było wyświetlanie menu do momentu wybrania przez użytkownika jednej z dostępnych opcji.
Pętla do { praktycznie cały program} while (x!=5); miła mieć natomiast zadanie aby program wykonywał się dopóki użytkownik nie zechce go zakończyć.

Oprócz tego w shwitch case brakuje opcji default, nawet z jakimś bzdurnym komunikatem typu "ops coś poszło nie tak." żeby było wiadomo, że coś się nabroiło w kodzie.

No mam nadzieję że nic nie namieszałem o tak późnej porze.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czytałem to wczoraj, ale nic nie zczaiłem xD Teraz też nie bardzo.
Zaczne inaczej, same menu wyglądało tak http://forum.komputerswiat.pl/topic/17300-c-menu-w-c/ możesz mi w tym wypadku powiedzieć co znaczy ta deklaracja while? Ona zapętla cout dopóki nie wybiore od 1-5?

Z kolei "do {program} while(x!=5);" wykombinowałem sam, ponieważ zależało mi na tym, żeby wpisać dane (opcja nowy wektor), a potem wykonywać wg upodobań inne opcje. I tak robi w tym wypadku nie potrzebuję już całej tej linijki 12 tak?

I jak w c++ zrobić pustego readln; albo jakieś waituntilkeypressed? Próbowałem w linijce 38 std::cin.ignore(); ale jakoś nie działa od razu po wyniku wyświetla menu i jest trochę tłoczno.

> Oprócz tego w shwitch case brakuje opcji default, nawet z jakimś bzdurnym komunikatem typu "ops coś poszło
> nie tak." żeby było wiadomo, że coś się nabroiło w kodzie.
tzn?
edit dobra mam, ale program nadal glupieje, odświerza się na menu jak głupi, jeśli zamiast cyfry na początku wybiorę znak/literke

O i strasznie głupie błedy w postaci wykładniczej mnie atakują jak nie wpiszę żadnego wektora, a przejde prosto do dodawania albo odejmowania ;p

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 29.06.2014 o 12:54, nightfaler napisał:

możesz mi w tym wypadku powiedzieć co znaczy ta deklaracja while? Ona zapętla cout dopóki
nie wybiore od 1-5?


Deklaracja while (warunek) {polecenia} wykonuje polecenia dopóki warunek jest spełniony. Może być tak że polecenia nie zostaną wykonane ani razu jeśli już na początku nie spełnisz warunku.
działa podobnie do deklaracji do {polecenia} while (warunek). Różnica jest jednak taka, że w tym drugim przypadku polecenia wykonają się przynajmniej raz.

Dnia 29.06.2014 o 12:54, nightfaler napisał:

Z kolei "do {program} while(x!=5);" wykombinowałem sam, ponieważ zależało mi na tym,
żeby wpisać dane (opcja nowy wektor), a potem wykonywać wg upodobań inne opcje. I tak
robi w tym wypadku nie potrzebuję już całej tej linijki 12 tak?


Nie do końca bez linijki 12 jeśli użytkownik wybierze opcję nie wymienioną w menu to wykona się cały program, co jest w tym wypadku bez sensu, bo czekasz na wartość z zakresu 1-5. O ile w takim małym programie nie zauważysz różnicy to przy dużym programie może to nawet powodować błędy jeżeli oczekujesz, że zadana wartość ma być z zakresu.

Dnia 29.06.2014 o 12:54, nightfaler napisał:

I jak w c++ zrobić pustego readln; albo jakieś waituntilkeypressed? Próbowałem w linijce
38 std::cin.ignore(); ale jakoś nie działa od razu po wyniku wyświetla menu i jest trochę
tłoczno.


Masz odpowiedź w kodzie wygląda ona tak: system("PAUSE"); można też użyć funkcji getchar();

Dnia 29.06.2014 o 12:54, nightfaler napisał:

edit dobra mam, ale program nadal glupieje, odświerza się na menu jak głupi, jeśli zamiast
cyfry na początku wybiorę znak/literke


No i tak ma być. Program ma czekać aż użytkownik wybierze jakąś sensowną wartość. Możesz zamiast całe menu umieszczać w pętli while walnąć coś takiego po cout<<"wybieram:";
do cin>>x; while (x>5 || x<1);
Nie będzie wtedy całe menu odświeżane ale program nie ruszy dopóki użyszkodnik nie wybierze wartości z zakresu 1 - 5.

Dnia 29.06.2014 o 12:54, nightfaler napisał:

O i strasznie głupie błedy w postaci wykładniczej mnie atakują jak nie wpiszę żadnego
wektora, a przejde prosto do dodawania albo odejmowania ;p


Bo nie inicjalizujesz zmiennych na w linii 26 wobec czego mają losową wartość. Spróbuj tą linijkę zapisać w tym stylu:
double a=0, b=0, c=0;
tylko dla swoich zmiennych. Inną opcją jest dodanie jakiejś zmiennej która będzie przechowywała informację czy były wpisywane jakieś wartości i dopiero wtedy pozwoli wybrać opcję inną niż 1 lub 5.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Macie może jakieś strony/PDF`y gdzie jest dobrze opisany problem FTP? Chce zrobić własny serwer bo tata kupił sobie SmartTV :P, to tylko pretekst bo już wcześniej o tym marzyłem. Jeśli się nie uda, to nie, ale zamierzam spróbować. Chce to zrobić na mikroporcesorze + dysk, dlatego moje pytanie, czy serwer ftp różni się(mówię tutaj o sposobie przesyłu, bo na SO miałem serwer/klient i jestem obznajomiony trochę, wydaje mi się, że napisanie własnego softu do obsługi FTP nie powinno mi sprawić strasznie dużego problemu) od serwera www? Dobrym pomysłem wydaje się chyba Qt?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.07.2014 o 00:33, Dregorio napisał:

dlatego moje pytanie, czy serwer ftp różni się(mówię tutaj o sposobie przesyłu,
bo na SO miałem serwer/klient i jestem obznajomiony trochę, wydaje mi się, że napisanie
własnego softu do obsługi FTP nie powinno mi sprawić strasznie dużego problemu) od serwera
www?


http://daniel.haxx.se/docs/ftp-vs-http.html

Dnia 21.07.2014 o 00:33, Dregorio napisał:

Dobrym pomysłem wydaje się chyba Qt?

Serwer FTP w Qt? Klienta napiszesz bez problemu, pewnie nawet jest wbudowana klasa... ale serwer będzie nieco trudniej. Przez nieco mam na myśli:
http://puu.sh/ajZh7/91dd2c005e.png
To jest gotowa implementacja serwera FTP w Qt właśnie (link: http://voidrealms.com/index.php?r=source/view&id=6). I ma ok. 4000 linii kodu.

Proponuję jeszcze zerknąć na czyste C++ (wsparte Boostem):
http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/examples.html#boost_asio.examples.http_server
Nieco krótsze, może zdołasz dostosować to do pracy w roli serwera ftp.

Cóż, pozostaje mi życzyć powodzenia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.07.2014 o 00:59, Dregorio napisał:

By się upewnić. Jeśli chcę przesłać plik, nie muszę go dzielić? Podaje ścieżkę "i już"?


Jeśli dobrze pamiętam - to tak. Tylko uwaga - to co przesyłasz to strumień a nie "plik". Czysty binarny ciąg danych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
No fajnie, ale to dla mnie chyba nie ma znaczenia? Tzn. nie utracę danych? Jak mniemam ja będę musiał zająć się konwersją plików na string?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.07.2014 o 01:07, Dregorio napisał:

No fajnie, ale to dla mnie chyba nie ma znaczenia? Tzn. nie utracę danych?

Nie jestem pewny co konkretnie implementujesz w tej chwili więc ciężko mi powiedzieć czy to ma mieć znaczenie dla ciebie. Raczej danych nie utracisz chyba że będziesz nadpisywać oryginalny plik. Ot, po prostu stwierdzam że nie możesz "ot tak" przesłać 600MB stringa na przykład a musi być potraktowany jako strumień.

>Jak mniemam ja będę musiał zająć się konwersją plików na string?
Tak też można ale nie jestem pewny czy to rozsądne bo zeżresz bardzo prosto całą pamięć operacyjną w ten sposób przy przesyłaniu większego pliku. Nie znam dokładnej specyfikacji FTP ale obstawiam że jeśli już to raczej ściąga kilka bajtów z pliku, konwertuje do odpowiedniego formatu, przesyła, pobiera kolejne kilka bajtów, konwertuje itd.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

jak dużych umiejętności, nakładów finansowych itp wymagałoby postawienie na serwerze skryptu wykonującego się przez całą dobę i restartującego się przy crashu? są może jakieś darmowe serwery które to pozwalają? Dzialalność bota polega na klikaniu przycisków, wypełnianiu formularzy, parsowaniu jsonow i porówywaniu wartości z aktualnie badanej części marketu z wartościami wpisanymi do bazy danych sqlite. Skrypt mocno prymitywny i jedzie amatorką na pewno (nieskończona pętla jako trzon programu, brak obsługi błędów itp), ale działa i sporo się przy nim nauczyłem...

Mam napisanego w ruby bota (całkiem sprawnego), i chciałbym żeby chodził 24/7 monitorując market. Zacząłem czytać w internecie i wygląda to jak czarna magia, nigdy nie miałem do czynienia z żadnymi aplikacjami, a tu jakieś uploadowanie kodu na githuby i inne takie cuda... Jeżeli to bardzo trudne to po prostu zostawie skrypty tak jak teraz, wywoływane z poziomu konsoli i tyle, ale może nie jest to jednak takie trudne jak malują to pierwsze strony gugli?

Byłbym wdzięczny za jakąś wskazówkę czego szukać (hasła które googlować) i samą informację czy podoła temu ktoś kto nigdy nie miał z tym żadnego związku, nie trzeba mi rozwiązania na tacy podawać, lubię się bawić tylko nie wiem jak się za ten temat zaczepić, bo to co googlowałem tylko mnie przeraziło :P

ach, istotna jest też kwestia bezpieczeństwa: bot jest oparty na mechanize i ma wpisane "na chama" hasła, więc chodzi mi o coś względnie sensownego pod tym względem (aby nikt poza mną nie mógł się dorwać do skryptu po prostu)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Odpowiedź brzmi - 10 zł miesięcznie.
http://www.ovh.pl/vps/
Potrzebny ci po prostu VPS z własnym systemem operacyjnym nad którym masz pełną kontrolę. Działa całodobowo, możesz na niego wrzucić wszystko od C po Scalę czy jakieś serwery WWW.

Ot, kupujesz sobie choćby i takiego z linka, wybierasz np. Ubuntu 14.04, dostaniesz dane niezbędne do połączenia się przez SSH. Jeśli ogarniasz jako tako linuxa to w zasadzie masz już problem z głowy.

Zasadniczo - uruchamianie skryptu co X sekund to typowa robota dla Crona ( http://spece.it/linux/cron-czyli-automatyzujemy-dzialania-w-linuxie). Można też napisać aplikację działającą jako daemon bądź użyć komendy screen i skryptu który po prostu używa funkcji sleep żeby robił to co chcesz co X sekund ( http://lekka.cba.pl/software/ubuntu/linux_command_screen_beginnings.htm).

Dalej - coś co miałoby się restartować po crashu. Jeśli skrypt jest po prostu wykonywany przez Crona co X minut to problem jest niewielki bo jeśli ci go wywali raz to po prostu ustawiasz by się uruchamiał co minutę. Można też oczywiście pokusić się o bardziej profesjonalne rozwiązania np. daemon nadzorujący działanie twojej aplikacji (która wówczas powinna umieć używać wyjątki i zwracać np. kod -1 albo 1 oznaczający błąd w takiej sytuacji zamiast 0 który oznacza poprawne wykonanie).

Dalej, kwestia bezpieczeństwa - o ile ktoś nie zna twojego hasła do SSH (które możesz też zastąpić 128 bitowym kluczem) to raczej dużo nie zrobi. Chyba że robisz coś w rodzaju zdalnej administracji i twój skrypt jest zbindowany na jakimś porcie i można się do niego dobrać np. poprzez telnet. Wtedy co prawda możesz trzymać hasełko bezpośrednio w kodzie ale wypadałoby je sobie zahashować (np. 32768 iteracjami sha256 lub jakimś bcryptem/scryptem) i dodać salt. Chociaż i tak nikt nie będzie w stanie zerknąć do "środka" tego skryptu chyba że postawisz serwer WWW i wsadzisz go do jego katalogu public.

Co do tego czy podoła temu ktoś bez doświadczenia - jeśli miałeś na zajęciach obsługę Linuxa przez terminal to tak. Ot, na razie z tego co zrozumiałem to to co chcesz zrobić zbyt wymagające nie jest.

Zaś co do uploadowaniu kodu na githuba - um... tak w ogóle to jest bardzo dobry pomysł i ogólnie warto się tego nauczyć. Git jest systemem kontroli wersji i u mnie z 90% rzeczy nad którymi pracuję siedzi pod jego kontrolą. Z prostego powodu - piszesz sobie skrypt, działa. Zapisujesz zmianę w gicie jako "działająca". Rozwalasz fragment kodu i zapominasz gdzie to było, już nie działa. Więc jedna komenda i wracasz do ostatniej działającej wersji. Niezbyt przydatne jeśli masz skrypt który pewnie jest jednym plikiem .rb ale jeśli tych plików jest np. 30 powiązanych ze sobą to już potrafi się przydać.

Więc ogółem twój problem duży nie jest. Dam ci tylko radę jeśli już będziesz mieć vps-a:
sudo apt-get install fail2ban
Po 5 nieudanych próbach logowania przez SSH (a próby włamania są na to częste i gęste) banuje IP osoby która próbuje to zrobić. Proste i skuteczne. Możesz też zmienić port na inny itp itd. Samym bezpieczeństwem "skryptu" się nie przejmuj nadmiernie (bo to tak proste jak wejście na twój komputer i przejrzenie plików jakie tam masz) a raczej możliwością wbicia wprost na serwer.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach


Dziękuję serdecznie, wydaje mi się, że podołam. A i Cron będzie świetny, bo mam też takie skrypty które chętnie wykonywałbym co jakiś czas (raz dziennie / raz na godzinę), więc jak widać jest to dokładnie to, czego bym potrzebował!

Jeszcze jedno pytanie mam- polecasz coś do pisania w Ruby (obecnie siedzę na Windowsie ale Linux też mnie interesuje gdyż reinstallacja systemu na dniach i postawię tam też Linuxa)? Wcześniej używałem RubyMine które było fajne gdyż samo robiło wszystko, ale licencja testowa się skończyła i muszę się na inne wygodne coś przesiąść.

Nie musi być to bezmózgie IDE które tylko się installuje i samo skonfiguruje środowisko, ale o coś sprawdzonego i względnie popularnego, abym miał szansę samodzielnie skonfigurować środowisko z pomocą internetów (jeszcze tego nie robiłem nigdy).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wiem, że można podrobić maila z tym Kto go wysłał.
Jednak jak jest możliwe, że E-mail z Adresem Do kogoś Dociera Do kogoś Innego. Dostaje e-maile przeznaczone do jakiejś baby z widocznym adresem do niej, a mojego w nim niema.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.08.2014 o 15:52, SiDi napisał:

Taki programista, a nie wie?

Pole BCC. Tam zapewne jest twój email.

Nie znam się na webowych rzeczach. To nie moja brożka.

Czyli reasumując
Mail był
Do: Yolo@swag.pl
UDW: ja@moja_poczta.pl

EDIT. Przetestowałem. Rzeczywiście tak działa, że nie widać swojego maila.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.08.2014 o 15:20, Thrandir napisał:

Dziękuję serdecznie, wydaje mi się, że podołam. A i Cron będzie świetny, bo mam też takie
skrypty które chętnie wykonywałbym co jakiś czas (raz dziennie / raz na godzinę), więc
jak widać jest to dokładnie to, czego bym potrzebował!

Cóż, Linux ma mnóstwo fajnych rzeczy wbudowanych w system (zresztą do programowania jest tak 50x wygodniejszy niż Windows... ile ja się namęczyłem żeby w swoim czasie skompilować Boosta na Windowsie pod mingw...brrr... a na Linuxie trwało to całe 5 sekund), Cron to tylko jedna z wielu :P

Dnia 04.08.2014 o 15:20, Thrandir napisał:

Jeszcze jedno pytanie mam- polecasz coś do pisania w Ruby (obecnie siedzę na Windowsie
ale Linux też mnie interesuje gdyż reinstallacja systemu na dniach i postawię tam też
Linuxa)? Wcześniej używałem RubyMine które było fajne gdyż samo robiło wszystko, ale
licencja testowa się skończyła i muszę się na inne wygodne coś przesiąść.


Vim lub Emacs (zakładając że pracujesz w terminalu)? :D Ewentualnie Aptana Studio jeśli masz środowisko graficzne:
http://aptana.com/products/radrails
A na Windowsie to nie mam pojęcia. O wygodzie zresztą też dużo tutaj nie powiem bo samemu zazwyczaj korzystam ze starego dobrego nano (czasem wspartego Aptana jeśli akurat mogę sobie wziąć kod do siebie lokalnie a nie edytować bezpośrednio na zdalnej maszynie) który zdecydowanie NIE pomaga użytkownikowi w niczym poza wyświetleniem numeru linii :P

Dnia 04.08.2014 o 15:20, Thrandir napisał:

Nie musi być to bezmózgie IDE które tylko się instaluje i samo skonfiguruje środowisko,
ale o coś sprawdzonego i względnie popularnego, abym miał szansę samodzielnie skonfigurować
środowisko z pomocą internetów (jeszcze tego nie robiłem nigdy).


Jedynym co mogę zalecić to to że jeśli masz już Linuxa to zamiast zwykłego sudo apt-get install ruby raczej pobierz go sobie przez RVM i skompiluj u siebie:
http://octopress.org/docs/setup/rvm/ - taki skrócony poradnik.

Bo standardowo dostaniesz po prostu 1.9.3 w generycznej wersji. Korzystając z RVM możesz sobie wybrać jaką wersję chcesz (a jednak 1.9.3 jest już dość wiekowe) a nawet mieć kilka naraz, dostaniesz też skompilowaną paczuszkę dokładnie pod twój system operacyjny.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 04.08.2014 o 17:24, ziptofaf napisał:

Cóż, Linux ma mnóstwo fajnych rzeczy wbudowanych w system (zresztą do programowania jest
tak 50x wygodniejszy niż Windows... ile ja się namęczyłem żeby w swoim czasie skompilować
Boosta na Windowsie pod mingw...brrr... a na Linuxie trwało to całe 5 sekund), Cron to
tylko jedna z wielu :P

xD. Są gorsze rzeczy. Jako kompilowanie Open Sourcu pod windowsem i się okazuje np, że coś masz za nowego i
musisz ręcznie kompilować. Albo jeszcze jakieś inne.

Co do Boosta, to to idzie szybko, bo wszędzie są tutki. Czasem rekompiluje, bo raz potrzebuje do minigw, a raz do Windowsowego cpp.(Szkoda mi miejsca na 2 wersje).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.08.2014 o 18:53, SurgeonOfDeath napisał:

xD. Są gorsze rzeczy. Jako kompilowanie Open Sourcu pod windowsem i się okazuje np, że
coś masz za nowego i
musisz ręcznie kompilować. Albo jeszcze jakieś inne.

Ach, to też znam. "Najlepsze" są linuxowe paczuszki z plikami configure. Ostatnim razem zajęło mi chyba z godzinę na znalezienie brakujących bibliotek i doinstalowanie msysa. A na linuxie wystarcza apt-get install <nazwabiblioteki> i zazwyczaj znajdzie ;(

Dnia 04.08.2014 o 18:53, SurgeonOfDeath napisał:

Co do Boosta, to to idzie szybko, bo wszędzie są tutki. Czasem rekompiluje, bo raz potrzebuje
do minigw, a raz do Windowsowego cpp.(Szkoda mi miejsca na 2 wersje).


Bodajże na mingw-w64 z GCC 4.9.0 kompilacja Boosta na Windowsie po prostu kończyła mi się errorami (zresztą mingw akurat czasem lekko przegina z szukaniem warningów i errorów w kodzie i czasem wręcz muszę zmieniać kompilator jak potrzebowałem konkretnych zewnętrznych bibliotek) i musiałem ściągnąć nieco starszą wersję żeby ruszyło. Upierdliwe.

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ć