Dzień dobry to mój debiut więc prosiłbym o wyrozumiałość ;) Otóż piszę program zamieniający tekst z pliku na bity i doszedłem do momentu, w którym muszę zakłócić strumień (takie zadanie). Mam string złożony z jedynek oraz zer i chciałbym żeby losowo zmieniło mi się n elementów tego ciągu. Chciałem rozwiązać ten problem poprzez pętle for w drugiej pętli for wykonującą funkcję swap ale wtedy zamieniało miejscami wyrazy stringa aż osiągnęło zadane wcześniej maksimum. Za bardzo nie wiem jak podejść do tematu losowania miejsc w ciągu, czy ktoś mógłby mnie naprowadzić?
CarnariusXx napisał(a):
Za bardzo nie wiem jak podejść do tematu losowania miejsc w ciągu
W sensie że nie wiesz jak wylosować liczbę z zakresu od 0
do dlugosc_stringa - 1
?
Tak, i np. podmienić ją na jakąś inną liczbę.
Użyj std::shuffle()
Dla długich tekstów std::shuffle()
jak najbardziej ale gdy mamy przykładowo "11001011" i chcemy chcemy zakłócić 25% długości czyli dwie pozycje, to np zamiana pierwszej pozycji z czwartą nie da żadnej namacalnej zmiany gdy zadziałamy na ciąg funkcją shuffle. Zamiast tego chciałbym aby czwarta pozycja zmieniła wartość na przeciwną (operuję jedynie na zerach i jedynkach).
losujesz n*x% liczb liczby z zakresu 0
.. n-1
i je negujesz.
Dzięki ale jak mam połączyć wylosowane liczby z konkretnym miejscem dla ciągu? Przepraszam za takie laickie pytanie ale dopiero zaczynam swoją przygodę z c++
ciąg jest tablicą? wtedy ciag[wylosowane_miejsce] = nowa_wartosc
raczej ciag[wylosowane_miejsce]^=1;
Dziękuję bardzo za pomoc wszytko działa, temat do zamknięcia