Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Potrzebuję funkcji która by zwracała tą wartość z danego zbioru wartości która jest najbliżej zera.

Przykłady :

 

closeToZero(100,-100,-10) zwróciła by liczbę -10

closeToZero(100,-100,10) zwróciła by liczbę 10

Opublikowano

Jest to pseudokod ;p

int closetozero( int[] array )
{
    int close = 0x7fffffff;
    foreach( n in array )
    {
        if( abs(n) < abs(close) )
            close = n;
    }

    return close;
}

Opublikowano

Ok przetłumaczyłem sobie to na GML.

Za wyjątkiem " foreach( n in intarray )" ale będą mi potrzebne zawsze 3 liczby to też pozwoliłem sobie to ominąć i zrobiłem:

 

GML
close = $7fffffff;

 

if ( abs(argument0) < abs(close) )

close = argument0;

 

if ( abs(argument1) < abs(close) )

close = argument1;

 

if ( abs(argument2) < abs(close) )

close = argument2;

 

return close;

Na razie działa, dzięki.

Opublikowano

min(abs(argument0),abs(argument1),abs(argument2))

 

najmniejsza dodatnia jest jednocześnie najbliższa 0. Tylko trzeba potem dać warunek jeśli wejściowa była ujemna to żeby zwróciło ujemną.

Opublikowano

Da sie to zrobic na dowolna liczbe argumentow - jesli poda sie ich liczbe.

Podam taki kod:

GML
var a,b;

a = 1

b = abs(argument1)

repeat(argument0)

{

if(abs(argument[a]) < b) b = argument[a]

a += 1

}

return b

argument0 - liczba podawanych wartosci

Powinno dzialac, choc nie sprawdzalem.

PS: sorry, ze nie ma polskich znakow, pisze na angielskim netbooku...

PS2: chodza sluchy, ze da sie to zrobic nawet bez podawania liczby argumentow - jakoby metoda if(variable_local_exists()), ale to juz nie moja broszka.

Opublikowano

Może tak:

GML
tab[0]=-1;//w tablice ta wpisz zbior swoich liczb

tab[1]=1;

tab[2]=2;

min0=tab[0];//najblizej zera jest tab[0] (tak zakladamy)

for(i=1;i<=2;i+=1)

if(abs(tab)<abs(min0))//jezeli kolejna wartosc w tablicy jest mniejsza od min0,

min0=tab;//to wartosc tab jest teraz najblizej zera (wszystko na wartosciach bezwzglednych)

else if(abs(tab)==abs(min0)&&tab>min0)//jezeli chcesz aby liczby dodatnie byly uprzywilejowane w przypadku gdy

min0=tab;//wartosci bewzgledne liczb sa sobie rowne (jezeli nie to usun ten warunek)</span></span>

  • 6 miesięcy temu...

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ę...