Mam funkcję, która rozkłada jakiś tam string na wektor stringów:

std::vector mySplit(const std::string& str);
Czy bezpiecznie jest zadeklarować ją z atrybutem pure?

__attribute__((pure))
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

std


@CamelCase: Jedne z warunków, aby funkcja była pure:
* wartość zwracana musi być zależna od parametrów (pamięć globalna na którą wskazuje jeden z parametrów nie jest uznawana za parametr),
* nie może pisać po pamięci globalnej (może natomiast czytać z niej),
* funkcja nie może
  • Odpowiedz
wartość zwracana musi być zależna od parametrów (pamięć globalna na którą wskazuje jeden z parametrów nie jest uznawana za parametr),


@8tab: nieprawda, ten warunek jest inny: wartość zwracana nie może być zależna od niczego innego oprócz parametrów (argumentów) lub/i zmiennych globalnych.
  • Odpowiedz
@pkh:
Z tym transcount - not tak, skad bym wiedzial ile razy petle for wykonac, obviously!

Dzieki za wyjasnienie tej petli.
Nie do konca jednak rozumiem, co w ten GetNextEvent wpisac?
Bo z tego co zrozumialem, funkcja wywolana przez pointer trans[]i.fn ustawia mi nastepny stan, po tym jak wykona inne
  • Odpowiedz
@jansek: I dokladnie tak sie dzieje.
Jestes w stanie INIT. I teraz dostajesz event EV. Teraz sprawdzasz wszystkie wpisy w tablciy trans, i szukasz takiego który ma stan INIT i event na EV. Wtedy wykonujesz jego funkcje, który zmienia stan na inny.

Przemysl sobie to ze w maszynie stanow, stan w jakim obecnie jestes ma wplyw na to jak event bedzie obsluzony.
  • Odpowiedz
@Hertesus: coś masz pomieszane - chodzi o to, że strcmp zwraca null pointer - i jak !i (czytaj "nie i", czyli negacja tej zmiennej) wówczas są takie same. Tam nie ma dwóch wykrzykników tylko negacja zmiennej.
  • Odpowiedz
@Hertesus: Me to, u should use dictionary, for example google translate. It work's simple, u have to copy a part of text and paste in google translate window and u may change language on Polish and it's done.
A tak na poważnie to w każdym szanującym się wstępie do programowania i w opisie języka jest opis typów podstawowych i tam znajdziesz odpowiedzi na te turbo podstawowe pytania.
  • Odpowiedz
Mireczki kochane, muszę zrobić serializację w C++. Konkretnie mam dość rozbudowaną klasę, jej obiekt chcę przy starcie programu odczytywać z pliku, a przy końcu do niego zapisywać. Jest jakiś sprawdzony sposób, żeby to zrobić? Z tego co wiem, to takie chamskie zmapowanie na dysk nie zadziała, bo kompilator sobie optymalizuje ułożenie w pamięci.
#programowanie #cpp i w sumie też #jezykc
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@CamelCase: no i pamietaj, ze jesli klasa ma virtualne metody, to "prawdopodobnie" (standard nie gwarantuje) na początku struktury masz vptr'y i jak ze wszystkimi wskaznikami nie powinienes robic robic ich płytkiej kopii.
  • Odpowiedz
#c #jezykc #programowanie
Mam pytanie. Mam w tablicy znaków taka wartosc "insert 5"
Chcę wywołać sscanf który pobierze liczbę z danej linii/tablicy znaków, w tym przypadku 5.
zaglądam do podręcznika i wyszło mi że powinienem coś takiego napisać
sscanf(instructions[i], "%[0-9]d", &arg); ale do arg wczytuje mi 0 a nie 5. w instructions[i] jest "insert 5".
jak wczytać pierwszą liczbę z danej linii ?
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #jezykc

Mircy mam takie zadania:
1) Napisz funkcję, która dla zmiennej typu unsigned char jeśli jej najmłodszy bit ma wartość 1 wyzeruje 2 najstarsze bity tej zmiennej, a pozostałe bity ustawi na wartość 1

Słabo u mnie z tymi operacjami bitowymi, czekam na jakieś podpowiedzi mądrych mirków.
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gottek: @Gottek: liczba to XOR z przesuwającą się jedynką? działa ale nie jest wydajne
dodatkowo po co 1 przesuwasz o 0 miejsc ? i najstarszy bit to ten po lewej wiec najwiecej warty

Twój kod powinien być
if (liczba & (1<<7) ) // przesówam o 7 i ląduje na 8 bicie 1 (mogę na
  • Odpowiedz
Pytanie z języka C:

Mam wyrażenie: int const *ptr;
jeśli dobrze rozumiem deklarowany jest tu stały wskaźnik do inta

Wyrażenie: const int *ptr;
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Pierwsze to wskaźnik na stały int, drugie to to samo. W obu przypadkach możesz zmieniać adres, ale nie możesz zmieniać wartości zmiennej po przypisaniu.

Generalnie const odnosi się do tego co jest po jego lewej stronie (lub do tego co po prawej, jeżeli jest pierwszy w deklaracji zmiennej/wskaźnika/referencji).
  • Odpowiedz
@Malchos:
ja tylko dodam, że chcac osiagnac "W pierwszym przypadku mogę zmienić wartość na którą wskazuje ptr, ale nie jej adres" robisz:
int * const ptr = &costam
  • Odpowiedz
@1608: Ilu uruchamiasz konsumentów, a ilu producentów?

W jaki sposób to kompilujesz? Możliwe, że kompilator zmienia kolejność wywołań i masz zakleszczenie.
  • Odpowiedz
@legolass: Dzięki za odpowiedź, ale już sobie poradziłem :) Wszystko działało tylko proces nie wypisywał nic na wyjście, wystarczyło dopisać "\n" do printa w konsumencie.
  • Odpowiedz
Mireczki, nie ogarniam przydzielania portów przy programowaniu na gniazdkach BSD.

Załóżmy, że chcę zrobić sobie malutki programik typu peer to peer, powiedzmy chat. Jeden z peerów występuje oczywiście w roli serwera, a drugi w roli klienta. Serwer musi nasłuchiwać na jakimś porcie, tylko że jak go ustalę arbitralnie (hard code) to istnieje ryzyko, że ten akurat będzie zajęty i bind() się wywali. A jak przydzielę pierwszy lepszy wolny port, to klient nie
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@SiarkoWodor: z tego co rozumiem chciałbyś z liczby typu całkowitego (int) wyciągnąć konkretną pojedynczą cyfrę.
Załóżmy, że int liczba; jest dowolną liczbą całkowitą; Np. liczba = 123456789;

aby wyciągnąć ostatnią: liczba %= 10;
przedostatnią: liczba %= 100; liczba /= 10;
3 od końca: liczba %= 1000; liczba
  • Odpowiedz
@jaskowice1: Lecisz sobie po pamięci, wyższe, niższe, jedno na prawo, jedno na lewo. W zależności od typu statku modyfikujesz swoje sprawdzanie. Np robisz sobie funkcje która zwróci false(ify na sztywno, albo kombinuj), gdy gdziekolwiek wykryje jedynkę. Jak funkcja zwróci false, to pole nie nadaje się na statek i tyle.

Zrób to tak, jak uważasz za najnaturalniejsze do ciebie. Później możesz jeszcze eksperymentować z wydajnością, ale przy statkach kilka ifów nie
  • Odpowiedz
@jaskowice1: Wklej kawałek kodu w którym masz problem, ktoś pewnie pomoże. Trochę za ogólne to pytanie.
Ogólnie odpowiadając, w zależności od języka programowania albo:
1. traktujesz 0-1 jako wartości logiczne, i po prostu robisz AND(koniunkcja) każdej pary tablicy zawierającej statek oraz pola obok niego (z wykluczeniem oczywiście sumowania dwu pol tego samego statku), alternatywa takich koniunkcji zwróci ci wartość true (czyli jest zderzenie), bądź false (czyli jego brak) - tak bym to widział.
  • Odpowiedz
Mam takie coś w dwóch funkcjach i obie funkcje zwracają takie same liczby :/ A przecież powinno inne losowe... Co zrobić, żeby losowało inne liczby?

srand(time(NULL));
int start_i=rand()%7;
srand(time(NULL));
int start_j=rand()%11;
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@jaskowice1: time(NULL) zwraca liczbę sekund od 1.01.1970, więc najprawdopodobniej wykonuje się to tak szybko, że zwraca tę samą liczbę. srand() resetuje generator liczb pseudolosowych, więc rand() znowu zwraca to samo.
  • Odpowiedz
Mirki mam pytanko. Jak w języku C odwołać się np do 1 litery danego słowa
Przykładowo chcę napisać program, który "czyta" jaka jest 3 litera danego słowa np. janusz i gdy 3litera=n wtedy wpisuje na ekran przykładowo 10.
Drugie pytanie to jak podzielić np liczbę 12 cyfrową np. 555555555555 na 3 ciągi cyfr co 4 znak czyli 5555 5555 5555
#jezykc #naukaprogramowania
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mam pewien problem. Próbuje porównać sobie działanie funckji do generowania liczb pseudolosowych, korzystając z pakietu GSL. Porównuje dwa algorytmy zwykły rand() i Mersenne Twister. Histogram jaki otrzymuje niestety nie pokazuje znaczących różnic pomiędzy algorytmami, a Mersenne Twister powinien byc wiele lepszy niż rand(). Co zrobić żeby zaprezentowac ta różnice pomiędzy tymi dwoma funkcjami?

Kod który używam do generowania liczb:

double** *RandomNumberGenerator::MersenneTwister(**int
1608 - Mam pewien problem. Próbuje porównać sobie działanie funckji do generowania li...

źródło: comment_HM1NtuNw1lUB2wp1A7bm4OWNUfJ6OBi7.jpg

Pobierz
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

niestety nie pokazuje znaczących różnic pomiędzy algorytmami, a Mersenne Twister powinien byc wiele lepszy niż rand()


@1608: Lepszy to wcale nie znaczy, że rozkład będzie "bardziej" jednostajny. MT jest lepszy, bo ma np. bardzo długi okres itp. Istnieje zbiór testów do badania jakości generatorów liczb pseudolosowych (http://en.wikipedia.org/wiki/Diehard_tests ), może spróbuj je jakoś wykorzystać, żeby pokazać wyższość MT nad rand - sam histogram różnic znaczących nie pokaże.
  • Odpowiedz
Mirki, nie ogarniam gniazd BSD.

Załóżmy, że serwer (który ma obsługiwać potencjalnie dowolnie wielu klientów jednocześnie) wisi na funkcji accept. Przychodzi połączenie, accept zwraca deskryptor klienta i co dalej? Podejrzewam, że umieszczam deskryptor w jakimś kontenerze, wątek wraca na accept, a drugi wątek stara się wykonywać funkcje odczytu i zapisu na deskryptorach klientów, tylko jak to powinno wyglądać? Na przykład read i write są blokujące. Co jeżeli zawiesi mi się write, inni
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach