Skocz do zawartości

Pseudolosowe przyporządkowanie wartości zmiennym


Wojtek

Pomocna odpowiedź

K.G. A po resecie uC ci się wyniki nie powtarzały? Dziwne bo używasz tego nieszczęsnego RND i nie zapisujesz nic w EEPROMIE?

A co do mojego kodu ,który niby faworyzuje wartość zmiennej "a" czyli 1 to tak naprawdę wynika z tego tylko tyle ,że na pewno wartość 1 przy pierwszym naciśnięciu przycisku się z permutuje ale potem będą pod zmienną "a" się kryć inne wartości (nie wiadomo jakie).

Link do komentarza
Share on other sites

K.G. A po resecie uC ci się wyniki nie powtarzały? Dziwne bo używasz tego nieszczęsnego RND i nie zapisujesz nic w EEPROMIE?

Program jest tak przygotowany, aby mógł losować różne permutacje, ale po ponownym włączeniu pewnie pojawią się te same dane, co na początku po wcześniejszym włączaniu. Jeśli chcesz, aby po każdym włączeniu były inne permutacje musisz zapisywać pamięć EEPROM. Możesz też wykorzystać jakieś szumy lub coś podobnego, o czym wspominał BlackJack. Jednak liczba tych permutacji jest skończona, więc za którymś razem musi się powtórzyć, któreś dopasowanie (jest 8! możliwych sposobów).

Link do komentarza
Share on other sites

Znalazłem w swoim programie błąd! A ptrzecież proiłem żeby sprawdzić mój program

If Pind < 255 OR Pina < 15 Then 'jeżeli zostanie naciśnięty któryś z przycisków. (Przyciski będą zwierłay
                               'do masy a stan spoczynkowy pinów będzie wynosił Portd = &B11111111 i 
                               'Porta = &Bxxxx1111 - tu gdzie x to i tak nie ważne)
Incr Pomoc                       ' to z wielką częstotliwością będzie zmieniać się wartość zmiennej 
If Pomoc = 7 Then Pomoc = 0      ' pomoc w przedziale od 0 do 6
Blok = 0
Else                             'gdy w końcu przycisk zostanie zwolniony
If Blok = 0 Then                 'tutaj taki bit pomocniczy( gdy już nie będe chciał aby się zmienne
                                'permutowały to ustawie go na 1 i w ten sposób to zablokuje)
Select case pomoc                'w zależności od wartości zmiennej "pomoc" zostają zamienione
case 0:                          ' wartości poszczególnych zmiennych
pomoc =a: a = b : b = pomoc    
Case 1:
pomoc=a : a = c : c = pomoc
Case 2:
pomoc=a : a = d : d = pomoc
Case 3:
pomoc=a : a = e : e = pomoc
Case 4:
pomoc=a : a = f : f = pomoc
Case 5:
pomoc =a: a = g : g = pomoc
Case 6:
pomoc =a : a = h : h = pomoc
Blok = 1
End If
End Select                       'koniec
End If

Otóż proszę zwrócić uwagę na zmienną bitową "Blok". Musi być tak ustawiona aby program mógł tylko 1 raz wykonać permutacje po zwolnieniu przycisku! Co gorsza kompletnie źle napisałem fragmenty bezpośrednio odpowiadające za permutacje! Powinno być pomoc = a (nie a = pomoc!)

[ Dodano: 25-02-2012, 19:58 ]

A teraz jeszcze najważniejsze. Jeśli na prawdę chcecie mi pomóc to proszę sprawdzić mi tylko poniższy kod. Udało mi się zrobić to na zmiennej tablicowej w taki sposób że "losują" się 2 parametry (parametr pomoc1 przez zwykłą ikrementacje a parametr pomoc2 przez zmniejszanie wartości o 2). Parametr pomoc1 służy do odczytania jednej wartości ze zmiennej tablicowej a parametr pomoc2 do odczytania drugiej (służą jako adresy do kolejnych komórek zmiennej tablica) . Następnie ulegają one permutacji i ponownie ładowane są do zmiennej tablica.

Czy w poniższym programie nie mam błędów? Szczególnie proszę zwrócić uwagę na deklaracje zmiennej tablicowej (Dim Tabela(8) As Byte ). Czy dobrze ją zadeklarowałem? Czy dane do zmiennej tablicowej mają być na początku czy na końcu programu?

Oto kod:

Tabela:                                'tutaj wpisuje wartości do zmiennej tablicowej
Data 1,2,3,4,5,6,7,8

'tutaj wszystkie konfiguracje portów itp.

Dim Tabela(8) As Byte                  'tutaj zadeklarowałem zmienną tablicową
'tutaj zadeklarowanie innych zmiennych których uzyłem

Do
If Pind < 255 OR Pina < 15 Then         'jeżeli nacisnę przycisk  
   pomoc1 = pomoc1 + 1                 'to z wielką częstotliwością pomoc1 będzie zwiększał się o 1
   pomoc2 = pomoc2 - 2                 'a pomoc2 bedzie zmniejszać się o 2
   If Pomoc1 = 9 Then Pomoc1 = 1       'tutaj ustalam granicę gdyż wartości tych zmiennych muszą mieścić
   If Pomoc2 = 0 Then Pomoc2 = 8       'się w zbiorze liczb <1;8>
   Blok = 0                            'odblokowuje możliwość permutacji
Else
   If Blok = 0 Then                    'jeżeli możliwość permutacji jest odblokowana
      PomocA = Tabela(pomoc1)          'to pobieram wartość ze zmiennej tablicowej z pod adresu ustalonego 
      PomocB = Tabela(pomoc2)          'przez zmienną pomoc1 i pomoc2 (pomoc1 i pomoc2 mają wartości "losowe")

      pomoc = PomocA                   'zwykła procedura zamiany wartości zmiennych PomocA o PomocB           
      PomocA = PomocB                  
      PomocB = pomoc

      Tabela(pomoc1) = PomocA          'Ponowne wgranie już zpermutowanych wartości do zmiennych
      Tabela(pomoc2) = PomocB          ' tablicowych
      Blok = 1                         'blokada dalszych permutacji (po naciśnięciu ponownym przycisku
    End If                             'permutacja zostanie odblokowana)
End If
Loop
End
Link do komentarza
Share on other sites

Tablica jest dobrze zadeklarowana. Natomiast w dwóch pierwszych liniach stworzyłeś stała tablicę o tej samej nazwie, co zmienna tablicowa i w dodatku ustawiłeś ją w złym miejscu (powinna być po instrukcji End). Domyślam się, że chciałeś zainicjalizować tablicę, ale tego nie robi się w ten sposób tylko podobnie jak ze zmiennymi przykładowo:

Tabela(1) = 1
Tabela(2) = 2
Tabela(3) = 3

Takie stałe tablicowe używa się na przykład do dekodowania kodu BCD lub obsługi multipleksowej matrycy LED.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay


 'tutaj wszystkie konfiguracje portów itp.

   Dim Tabela(8) As Byte                  'tutaj zadeklarowałem zmienną tablicową
   'tutaj zadeklarowanie innych zmiennych których uzyłem

   Do
   If Pind < 255 OR Pina < 15 Then         'jeżeli nacisnę przycisk 
       pomoc1 = pomoc1 + 1                 'to z wielką częstotliwością pomoc1 będzie zwiększał się o 1
       pomoc2 = pomoc2 - 2                 'a pomoc2 bedzie zmniejszać się o 2
       If Pomoc1 = 9 Then Pomoc1 = 1       'tutaj ustalam granicę gdyż wartości tych zmiennych muszą mieścić
       If Pomoc2 = 0 Then Pomoc2 = 8       'się w zbiorze liczb <1;8>
       Blok = 0                            'odblokowuje możliwość permutacji
   Else
       If Blok = 0 Then                    'jeżeli możliwość permutacji jest odblokowana
          PomocA = Tabela(pomoc1)          'to pobieram wartość ze zmiennej tablicowej z pod adresu ustalonego
          PomocB = Tabela(pomoc2)          'przez zmienną pomoc1 i pomoc2 (pomoc1 i pomoc2 mają wartości "losowe")

          pomoc = PomocA                   'zwykła procedura zamiany wartości zmiennych PomocA o PomocB           
          PomocA = PomocB                 
          PomocB = pomoc

          Tabela(pomoc1) = PomocA          'Ponowne wgranie już zpermutowanych wartości do zmiennych
          Tabela(pomoc2) = PomocB          ' tablicowych
          Blok = 1                         'blokada dalszych permutacji (po naciśnięciu ponownym przycisku
        End If                             'permutacja zostanie odblokowana)
   End If
   Loop
   End

Tabela(1) = 1
Tabela(2) = 1
Tabela(3) = 1
Tabela(4) = 1
Tabela(5) = 1
Tabela(6) = 1
Tabela(7) = 1
Tabela(8) = 1

Czy teraz jest dobrze, bo nie mam wolnego uC żeby to sprawdzić?

Link do komentarza
Share on other sites

Chyba raczej tak:

   'tutaj wszystkie konfiguracje portów itp.

       Dim Tabela(8) As Byte                  'tutaj zadeklarowałem zmienną tablicową
       'tutaj zadeklarowanie innych zmiennych których uzyłem

   Tabela(1) = 1
   Tabela(2) = 2
   Tabela(3) = 3
   Tabela(4) = 4
   Tabela(5) = 5
   Tabela(6) = 6
   Tabela(7) = 7
   Tabela(8) = 8

       Do
       If Pind < 255 OR Pina < 15 Then         'jeżeli nacisnę przycisk
           pomoc1 = pomoc1 + 1                 'to z wielką częstotliwością pomoc1 będzie zwiększał się o 1
           pomoc2 = pomoc2 - 2                 'a pomoc2 bedzie zmniejszać się o 2
           If Pomoc1 = 9 Then Pomoc1 = 1       'tutaj ustalam granicę gdyż wartości tych zmiennych muszą mieścić
           If Pomoc2 = 0 Then Pomoc2 = 8       'się w zbiorze liczb <1;8>
           Blok = 0                            'odblokowuje możliwość permutacji
       Else
           If Blok = 0 Then                    'jeżeli możliwość permutacji jest odblokowana
              PomocA = Tabela(pomoc1)          'to pobieram wartość ze zmiennej tablicowej z pod adresu ustalonego
              PomocB = Tabela(pomoc2)          'przez zmienną pomoc1 i pomoc2 (pomoc1 i pomoc2 mają wartości "losowe")

              pomoc = PomocA                   'zwykła procedura zamiany wartości zmiennych PomocA o PomocB           
              PomocA = PomocB                 
              PomocB = pomoc

              Tabela(pomoc1) = PomocA          'Ponowne wgranie już zpermutowanych wartości do zmiennych
              Tabela(pomoc2) = PomocB          ' tablicowych
              Blok = 1                         'blokada dalszych permutacji (po naciśnięciu ponownym przycisku
            End If                             'permutacja zostanie odblokowana)
       End If
       Loop
       End
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Natomiast w dwóch pierwszych liniach stworzyłeś stała tablicę o tej samej nazwie, co zmienna tablicowa i w dodatku ustawiłeś ją w złym miejscu (powinna być po instrukcji End).

Powyższy cytat mnie skłonił żeby umieścić te zmienne na końcu.

Ale teraz już chyba rozumiem o co chodzi.

Jeśli mam stałą tablicę w formie:

Tabela:

Data : itp.

to umieszczam ją za poleceniem end.

A jeśli mam zmienną tablicową to wartości zamieszczam na początku w formie

Tabela(1) = tu jakaś wartość

Tabela)2) = jakaś wartość

itp.

Link do komentarza
Share on other sites

Natomiast w dwóch pierwszych liniach stworzyłeś stała tablicę o tej samej nazwie, co zmienna tablicowa i w dodatku ustawiłeś ją w złym miejscu (powinna być po instrukcji End).

Powyższy cytat mnie skłonił żeby umieścić te zmienne na końcu.

Źle przeczytałeś moją wypowiedz ewidentnie widać, że dotyczyła stałej tablicy, którą zrobiłeś na początku programu 😉 .

Z stałej tablicy możesz odczytywać także dzięki Lookup(indeks , nazwa_tablicy).

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.