I am Lord Opublikowano 11 Kwietnia 2010 Opublikowano 11 Kwietnia 2010 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
Konrad-GM Opublikowano 11 Kwietnia 2010 Opublikowano 11 Kwietnia 2010 Jest to pseudokod ;p int closetozero( int[] array ) { int close = 0x7fffffff; foreach( n in array ) { if( abs(n) < abs(close) ) close = n; } return close; }
I am Lord Opublikowano 11 Kwietnia 2010 Autor Opublikowano 11 Kwietnia 2010 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.
Makary155 Opublikowano 11 Kwietnia 2010 Opublikowano 11 Kwietnia 2010 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ą.
Konrad-GM Opublikowano 11 Kwietnia 2010 Opublikowano 11 Kwietnia 2010 Wtedy wartości ujemne najbliższe zeru zwrócone będą jako dodatnie ;p
Muuuuczek567 Opublikowano 11 Kwietnia 2010 Opublikowano 11 Kwietnia 2010 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.
I am Lord Opublikowano 11 Kwietnia 2010 Autor Opublikowano 11 Kwietnia 2010 No to tym sposobem mógłbym dać 14 argumentów ale potrzebne są mi tylko 3 więc na to samo wyjdzie.
Assassin Opublikowano 12 Kwietnia 2010 Opublikowano 12 Kwietnia 2010 Jeśli nie chcesz tak, to zrób sobie ifami, elsami warunki sprawdzające, która jest bliżej zera. Na 3 to proste.
candy Opublikowano 12 Kwietnia 2010 Opublikowano 12 Kwietnia 2010 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>
pablo1517 Opublikowano 6 Listopada 2010 Opublikowano 6 Listopada 2010 Już się bałem, że nikt nie zastosuje tego fora tutaj... poziom na GMclanie widzę sporo spadł.
Rekomendowane odpowiedzi
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ę