#cpp #programowanie

Prosty program obliczający średnią arytmetyczną z podanych kolejno liczb. Problem polega na tym, że nie znamy ilości tych liczb, a użytkownik będzie je podawał do momentu w którym poda inne znaki niż liczby (pomijając minus oczywiście). Jak więc można rozpoznać kiedy podana informacja jest liczbą do policzenia, a kiedy komunikatem przerywającym to wczytywanie? Zastanawiam się nad tym i nie mam lepszego pomysłu.
#programowanie #cpp

#!$%@? szlag mnie trafi. Zaczynasz pisać projekt, główna funkcjonalność zaczęła działać, więc piszesz resztę. Piszesz, piszesz nowe klasy, moduły, i tak sobie piszesz, główna funkcjonalność jest całkowicie autonomiczna więc nawet jej nie tykasz, no i tak piszesz. W pewnym momencie testujesz program i główna funkcjonalność nie działa. XDDD Idę skoczyć z dachu samochodu bo to nie ma sensu...
@asdasty: testuje najlepszym debuggerem na świecie:

cout << "WEJDZIESZ TU #!$%@? CZY NIE" << endl;


Mój problem polegał na tym że moja aplikacja magicznie przestała nasłuchiwać na porcie. Okazało się ze któregoś wieczora kiedy na śpiącego coś tam pisałem, musiałem #!$%@?ć klasy i podmieniłem strukturę adresową w bindzie mojego socketu, zamiast w jakimś innym...
@kuhar: Nie. :) KrzaQ2 podał niewątpliwie lepsze rozwiązanie, bo kontenery są bezproblemowe, w przeciwieństwie to ręcznej alokacji pamięci. Ale zadałeś pytanie w taki sposób, że myślałem, że się na nią uparłeś (bo na przykład prowadzący Ci kazał). Jeżeli tylko możesz, to jasne że powinieneś użyć wektora.
#cpp #programowanie

Dobra załóżmy, że mam wektor intów i chce go posortować, jak to zrobić ładnie? Ale żeby zera były na końcu?

Niby mogę zrobić sort i później jakoś wyłuskać te zera i przerzucić na koniec, ale nie wydaje mi się to optymalne ;/ A operatora porwania nie da rady napisać, żeby sorta oszukać...
#programowanie #cpp

Mam pytanie, może trochę nietypowe, ale jak są dobre praktyki includowania plików?

Mam na myśli przypadek.

#include "1.h"

#include "2.h"

#include "3.h"

Ale tak się składa, że 3.h ma w sobie 1 oraz 2. I teraz pytanie includować tak, żeby się kompilowało możliwie najkrótszą listę. Czy includować więcej małych plików na wypadek, gdyby na przykład z tego większego coś usunięto?

Ja wiem, że preprocesor wszystko zaincluduje tylko raz, ale pytam
Ja wiem, że preprocesor wszystko zaincluduje tylko raz


@kasper93: Z tym to naprawdę różnie bywa. Ogólnie wypada dawać guardy w postaci

#ifndef 1_H
#define 1_H
// treść pliku

#endif // 1_H
wokół plików nagłówkowych.

Wtedy w ogóle nie musisz przejmować się kolejnością, ale jak dołączasz dużo nagłówków to wypada najpierw standardowe (<>) alfabetycznie, a potem własne ("") alfabetycznie.

Natomiast jeżeli chodzi o ilość, to zawsze powinieneś jawnie załączać wszystko to czego
@Jonarz: Jak zwykle rozpętała się gadka o szybkości, charakterystyczna dla fanboyów C++ :) już widzę tę potrzebę przechodznia do nowej lini milion razy na sekunde :D jakiakolwiek konsola/plik nie wyrobi 100x prędzej i będzie wąskim gardłem niż "\n" vs endl;

Nie znam się na C++, ale samo \n jako "przejść do nowej linii" nie brzmi dobrym rozwiązaniem, bo co innego oznacza nowa linia na windowsie, na linuxie, na macu. Nie wiem
@sylwke3100: Na Linuksie to bym użył

setitimer() / timercreate()

jak timer się skończy to odpala signal handler a ten z kolei ustawia jakąś zienną typu sig
atomitc_t. W głównej pętli trzeba taką zmienną gdzieś sprawdzić i ewentualnie reagować.
Co zmienić w kodzie, żeby przyspieszyć działanie takiego prostego programu?

#include 


using
```**```
 
```**```
namespace
```**```
 std;
```**```
int
```**```
 main() {
``````
        
```**```
int
```**```
 v,t;
``````
        
```**```
while
```**```
(cin>>v>>t)
``````
                cout<

**

return

**
 0;


}

#programowanie #cpp
Podświetlanie składni na Wykopie.

http://wykop-code.appspot.com/

Jakiś czas temu zauważyłem, że można tak jakby podświetlać składnie na wykopie. Zrobiłem mały projekcik dla sportu i dzięki temu zapoznałem się z pygments. Czas chyba nie przekroczył 10 godzin. Coś zaczęło działać, więc dziele się z wami.

Zasady podświetlania:

* Słowa kluczowe są pogrubione.

* Ciągi znaków i komentarze są pochyłe.

* Pogrubianie słów built-in dla niektórych języków działają.

* Pogrubianie tagów dla HTML.

* Spacje
@binerek: Nie odpowiedziałeś na pytanie jakiego typu jest

delta
, ale spodziewam się, że

int
. Błąd polega na tym, że jest kilka przeciążonych wersji sqrt:

sqrt(float)
,

sqrt(double)
,

sqrt(long double)
i kompilator nie wie, do jakiego typu promować inta. Dlatego trzeba mu to powiedzieć jawnie.
#programowanie #cpp #sfml

W związku z sesją (a właściwie chwilową od niej przerwą) postanowiłem napisać mini grę. Na razie C++ z SFML, do tego WIP, ale jak skończę i znajdę chwilę czasu to przepiszę na Androida i być może Windows Phone.

Gra będzie polegała na unikaniu potworów przychodzących ze wszystkich stron, które będą podzielone na trzy typy:

- lewiatany - wolniejsze od gracza i poruszające się w linii prostej, ale zmieniające kierunek,
źródło: comment_GgjWfTIyg2z2BA295NygAfa2URTFjJNT.jpg
#cpp #programowanie

Jak to jest powiedzcie mi:

recvfrom(fd, buffer, 1, 0, cliaddr, &len);


Jeśli hipotetycznie otrzymałem datagram o długości np. 10 bajtów, a ja pobieram sobie w pętli po jednym znaku (sprawdzam czy dany znak to umówiony znak 'stopu'), to cliaddr nadpisuje się za każdym razem. Powiedzcie mi tylko jak to działa? Czy każdy bajt w buforze ma przypisane informacje o EndPoincie z któergo przyszedł, czy cały zakres bajtów czy jak? A
@deekox: rzeczywiście, teraz doczytałem:

This call returns the length of the incoming message or data. If a datagram packet is too long to fit in the supplied buffer, datagram sockets discard excess bytes.


Czyli mój sposób pobierania danych po jednym bajcie jest nie tylko mało wydajny, ale też po prostu nie działa. ;_;
@Jonarz: @binerek: @Pierwiastek_z_Czech:

Dobra, już wiem.

Założmy, że używacie dwóch różnych bibliotek (np. Foo i Bar). Z jednej używacie funkcji Dupa(), a z drugiej Wacek(). Po jakimś czasie, biblioteka Bar zostaje zaktualizowana i oferuje również nową funkcję Dupa(). W kodzie wystąpi konflikt, bo w miejscach gdzie zostanie wywołana funkcja Dupa() kompilator nie domyśli się, z której biblioteki pochodzi.

Tak samo może być w przyszłości z biblioteką standardową, w której
@Pierwiastek_z_Czech: To nie jest tak, ƶe jest zawsze niepoprawne.

Niepoprawne jest gdy uƶywasz tego w plikach nagłówkowych, zdradziecko zmieniając znaczenie programu uƶytkownika Twojej biblioteki. Równie dobrze byś mógł zostawić otwarty namespace.

Na poziomie funkcji (ew. co najwyƶej plików .cpp) jest to imo dopuszczalne, jeśli upraszcza kod. Np jeśli piszesz przeładowanie operatora

<<
to moƶna #!$%@? dostać od tych

std::


width
,

fill
,

left
,

right
itd. Tak samo, porównaj upierdliwość
#cpp

#programowanie

Witam ponownie mirki, nawiązując do poprzedniego mojego posta jestem aktualnie w trakcie nauki z poleconej przez was książki symfonia c++ ale mam jedno pytanie, mianowicie w książce nie jest sugerowane w jakim środowisku kompilować kod, na zajęciach używaliśmy do tego celu dev c++

ale doszedłem do wniosku, że chyba najwyższa pora nauczyć się obsługiwać coś innego i stąd moje pytanie jakie środowisko polecacie? Słyszałem, że visual c++ jest sensowny ale
@Jonarz: Szybkie, przenośne, potęƶne, konfigurowalne, darmowe.

Szybkie - nie czekasz kilku sekund na przejście do pliku nagłówkowego z deklaracją

przenośne - linux/mac/windows? Wszędzie działa prawie tak samo

potęƶne - dobry model kodu, zaawansowane opcje nawigacji, refaktoringu itd

konfigurowalne - od kolorystyki po skróty klawiszowe trywialna konfiguracja

darmowe - ;)
@chilling: w main w pierwszych dwóch pętlach tworzone są wątki: 4 konsumentów i 8 producentów , (void)&konsument i (void)&producent to wskaźniki na funkcje które te wątki będą wykonywały. w kolejnych dwóch pętlach wywoływana jest funkcja pthreadjoin która czeka aż podany wątek się wykona, czyli w tym momencie główny wątek stoi.

każdy wątek wykonuje pętle, w kolejnych iteracjach pętli jest blokowany mutex, jeśli inny wątek będzie chciał zablokować mutex będzie musiał
Ok, nie będę dalej udawał, że ogarniam programowanie dlatego czas na ekspertów, aby nasz coin ruszył do przodu, zapraszam do współpracy osoby ogarniające kod coinów/kompilację na windowsie, doświadczenie z coinami mile widziane.

Co mamy przygotowane:

- wszystkie parametry, obmyślony marketing

- wstępny fork dogecoina, działa ale trzeba dokładnie sprawdzić, czy nie #!$%@?łem czegoś

- pełny layout, logo itp.

Co do zrobienia:

- sprawdzenie kodu

- kompilacja na mac/windows

Gdy to będzie spełnione
@esio: No właśnie sęk w tym, że nie widzę powodu dla którego miałoby być droższe, pobierz, zapisz w bazie, coś policz, zawołaj jakiś szablon i już.

//edit

A to już nie ten C++ co kiedyś, że pamięć uciekała, fora do iterowania mapy pisało się na trzy linijki itp.
@WolverinePL: Są frameworki do tworzenia stron w C++, ale to podejście nie ma najmniejszego sensu. Dlaczego?

- Pisanie testów jednostkowych w C++ to droga przez mękę (zwłaszcza w źle napisanych systemach)

- Brak refleksji, przez co IoC przez DI jest dość ciężkie

- Kompilacja na serwerze musi się odbyć przed odpaleniem jakiejkolwiek usługi - a to zajmuje dużo czasu i zasobów

- Słabość samego języka, który ma więcej

undefined
w treści
#windows #msvc #microsoft #programowanie #crt #cpp

Trafiliśmy na ciekawego buga w CRT. W skrócie crash z błędem "0xC000001D: Illegal Instruction" jest spowodowany dość głupim przeoczeniem przez MS. Mianowicie gdy procesor obsługuje zestaw instrukcji AVX i tak się "przedstawia" to będzie ten zestaw instrukcji używany. Niby ok, ale AVX nie działa na win 7 bez sp1 i starszych, a tego już nie sprawdzają... i mamy crash na przykład w

pow()
...

Taka #