Skocz do zawartości

Jeśli dane w tablicy się powtarzają, zmień je.


Roki

Rekomendowane odpowiedzi

Jak zrobić coś takiego, mam sobie tablice np.

a[1] = 1

a[2] = 1

a[3] = 1

a[4] = 2

I w stepie(oczywiście tablica jest większa), chce zrobic, tak:

GML
if a[liczba] = a[liczba]+1 and a[liczba] = a[liczba]+2 { a[liczba] = random(5) }

Tylko ze jesli liczba losowa będzie taka sama, jak na początku, to już jej nie zmieni, więc jak powtarzać taki proces w nieskończoność, dopóki 3 liczby koło siebie w tablicy będą inne?

Tablica jest dosyć spora.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if a[liczba] = a[liczba]+1 and a[liczba] = a[liczba]+2 { a[liczba] = random(5) }
ten kod się nigdy nie wykona bo nie ma sensu (jeżeli a=a+1...)

chyba chodziło o

GML
if a[liczba] = a[liczba+1] and a[liczba] = a[liczba+2] { a[liczba] = random(5) }

jeżeli tak to:

E: Coś popętliłem :(

E2: Już wiem co zaraz poprawię

E3: też źle

E4:

GML
for (i = 0; i < wielkosc_tablicy; )

{

a = random(5);

 

abc=0;

for (j = 0; j < i; j++)

{

if (a[j] == a)

{

abc= 1;

break;

}

}

if (abc!=1) i++;

}

na tej samej zasadzie co 1 tyle żę z mniejszą liczbą pętli

Odnośnik do komentarza
Udostępnij na innych stronach

taki proces można powtarzac w nieskonczonosc w pętli while

 

while( 1 )

{

if( a[liczba] == a[liczba+1] ) and( a[liczba] == a[liczba+2] ){ a[liczba] = random(5); }

else{ break; }

}

po pierwsze- blokuje program.

po drugie jak ma tablicę o wielkości 1000 to sobie może wpisywać...

tu masz mój poprawiony kod:

GML
for (i = 0; i < wielkosc_tablicy; )

{

a = random(5);

 

abc=0;

for (j = 0; j < i; j++)

{

if (a[j] == a)

{

abc= 1;

break;

}

}

if (abc!=1) i++;

}

random musi być większy niż tablica

Odnośnik do komentarza
Udostępnij na innych stronach

moje while blokuje tak samo program jak twoje for wiec nie wiem o co Ci chodzi ;p

 

w każdym razie: i++ , sorki ale GM to nie c++ i takie coś tu nie zadziała :)

Po za tym twój sie zapętla w nieskonczonosc :D

bierzemy a[0(i=0)] i porownojemy z a[0(j=0)] w zwiazku z tym musza byc identyczne wiec program przerywa 2 pętle for ale nie dodaje do "i" z pierwszej pętli i tak w kołko

 

GML
b=0;

while( b<rozmiar_tablicy )

{

c=0;

for(c=0;c<rozmiar_tablicy;)

{

if( b!=c )&&( a==a[c] )

{

a=random(5);

}

else{ c+=1; }

}

b+=1;

}

Ten kod o ile nie ma nigdzie błędu powinien sprawic by nie powtorzyla sie żadna wartosc w tej tablicy

Odnośnik do komentarza
Udostępnij na innych stronach

w każdym razie: i++ , sorki ale GM to nie c++ i takie coś tu nie zadziała

kompiluje w vc bo gm-a nie mam, a o tym zawsze zapomne :P

gdzie mój stopuje program?

GML
for (i = 0; i < 50; )//rozpoczynamy pętle która ma max wymiar 50

{

a = random(89);//a=randomowi

abc=0;//zmienna pomocnicza zaś wynosi 0.

for (j = 0; j < i; j++)//pętla od 0 do aktualnego i

{

if (a[j] == a)//jeżeli a[j]=a

{

abc= 1;//zmienna pomocnicza wynosi 1

break;//przerywamy tą pętlę.

}

}

if (abc!=1) i++;//jeżeli abc!=1(czyli jest =0) czyli nie wykrył równości to sprawdzamy następną część tablicy. Jeżeli =1 to cały cykl od nowa

}

e: jeżeli nie chcesz aby losował z góry to dajesz a=random(86) na początek pierwszego if-a

Odnośnik do komentarza
Udostępnij na innych stronach

no tak i wykonaj sobie pierwsze okrążenie w tym kodzie

 

i=0

a= random( np 3)

a[0]= random( np 3)

 

abc=0

 

j=0

a[j]=3

a[0]=3

 

a[0] juz wyznaczylismy i jest to jakas losowa liczba wyznaczona za pierwszym razem( tutaj dla przykładu 3 )

 

porównujemy a[0] i a[0] jak sie domyslasz wynik będzie pozytywny więc

abc=1 i wychodzimy z fora.

jako ze a=1 to nie zwiekszy sie "i" wiec zabawe zaczynamy od nowa znowu dla a[0]

Odnośnik do komentarza
Udostępnij na innych stronach

no tak i wykonaj sobie pierwsze okrążenie w tym kodzie

 

i=0

a= random( np 3)

a[0]= random( np 3)

 

abc=0

 

j=0

a[j]=3

a[0]=3

 

a[0] juz wyznaczylismy i jest to jakas losowa liczba wyznaczona za pierwszym razem( tutaj dla przykładu 3 )

 

porównujemy a[0] i a[0] jak sie domyslasz wynik będzie pozytywny więc

abc=1 i wychodzimy z fora.

jako ze a=1 to nie zwiekszy sie "i" wiec zabawe zaczynamy od nowa znowu dla a[0]

zauważ szczególik

for (j = 0; j < i; j++)
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...