Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Losowanie liter

Ostatnio zmodyfikowano 2014-10-19 16:24
Autor Wiadomość
Rashmistrz
» 2014-10-19 11:32:18
Jednym z rozwiązań jest stworzenie tablicy ze znakami i korzystanie z nich. :F
char znaki[ /*liczba zanaków*/ ] = { /*elementy po kolei*/ };
P-118840
b0r0
Temat założony przez niniejszego użytkownika
» 2014-10-19 13:49:22
1. oputyk - a niby o jakiej metodzie od samego początku cały czas tu pisze że mam z nią problemy?

2. Monika90 - wątpliwa sprawa że jest błąd w kodzie bo to pierwsza funkcja która się uruchamia i obecnie jedyna w momencie debugowania, z kodowaniem ascii mało prawdopodobne bo ten sam problem występuje na Bladzie do którego mam dostęp na uczelni. A robiąc zwykłe wypisanie pętlą wszystkich znaków (w innym programie) to normalnie wypisuje wszystko jak trzeba. Problem wydaje mi się ze leży w randzie.

3. Rashmistrz -  i jak dobrze rozumiem rand odnieść do tej tablicy?
P-118881
Rashmistrz
» 2014-10-19 14:03:17
Nie wiem co rozumiesz przez "odnieść". Ja połowy zapisu
twojego kodu nie rozumiem, bo na razie nie jestem na
takim poziomie programowania...

Jednak mam takie pytanie, do czego
służy Ci ta koniunkcja bitowa?
=( rand() & 25 ) + 65;

EDIT:
[...]to że niema poszczególnych liter nie oznacza że kod jest zły to tylko przypadek[...]
Też mam problem z rand(), bo ta funkcja
pseudolosowa z połączeniu z czasem daje
nierównomierne szanse na wylosowanie się
różnych liczb. :/
P-118883
b0r0
Temat założony przez niniejszego użytkownika
» 2014-10-19 14:11:28
oto co miałem na myśli przez odniesienie się do tablicy z alfabetem:

C/C++
Struktura ** losowanie( int N )
{
    srand( time( NULL ) );
    Struktura ** tab;
    char Li[ 27 ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //<- tu mam tablice znaków
    tab = new Struktura *[ N ];
   
    for( int i = 0; i < N; i++ )
    {
        tab[ i ] = new Struktura;
        ( tab[ i ] )->b = Li[( rand() % 26 ) ]; // tu odnoszę się do tablicy znaków Li a jako indeks(komórkę) tej tablicy biorę wartość z rand
        ( tab[ i ] )->a =( rand() % 1000001 );
       
        ( tab[ i ] )->c = 0;
    }
   
    return tab;
}

Po co ta koniunkcja już tłumacze

normalnie jak podasz
C/C++
rand() & 5
to ta funkcja ci losuje liczby z zakresu od 0  do 4

a to +65
C/C++
=( rand() & 5 ) + 5;

powoduje że przesuwasz się o tą wartość i w efekcie możesz losować liczby liczby z przedziału od 5 do 9


a co do faktu że to był przypadek z randem to aż w głowie mi się nie mieści ze na 20 kompilacji i 9 344 444 losowania w każdej kompilacji ani razu nie padały aż 4 litery
P-118885
pekfos
» 2014-10-19 14:15:57
Po co ta koniunkcja już tłumacze

normalnie jak podasz
C/C++
rand() & 5
to ta funkcja ci losuje liczby z zakresu od 0  do 4
& to nie %.
P-118888
Rashmistrz
» 2014-10-19 14:28:57
rand() & 5;

Czyli:
xxxx &
0101

Takie cuś zwróci nam tylko:
0000, 0001, 0100, 0101
Dziesiętnie
0,1,4,5


=( rand() & 5 ) + 5;

Czyli:
xxxx &
1010

A takie cuś zwróci nam tylko:
0000, 0010, 1000, 1010
Dziesiętnie:
0,2,8,10

Prawie czysty chaos... xD
Wyszło by ci tak jak mówisz gdybyś użył
modulo, zamiast koniunkcji bitowej.

EDIT:
a co do faktu że to był przypadek z randem to aż w głowie mi się nie mieści ze na 20 kompilacji i 9 344 444 losowania w każdej kompilacji ani razu nie padały aż 4 litery
To już wiemy w czym problem. :D
Nie mają prawa się wylosować
przy tej koniunkcji bitowej...
P-118893
b0r0
Temat założony przez niniejszego użytkownika
» 2014-10-19 16:24:48
Słów mi brak że nie zauważyłem tego & zamiast %, moja wina, moja wina, moja bardzo wielka wina.


Dzięki wszystkim za pomoc
P-118919
1 « 2 »
Poprzednia strona Strona 2 z 2