Jak sprawdzić znak liczby.

0

Witam wszystkich.
Jest dowolna liczba całkowita x różna od zera. Istnieje liczba y spełniająca równanie y = -x. Jak rozpoznać która z nich (x czy y) jest dodatnia a która ujemna. Do sprawdzenia można użyć dodawania, odejmowania, zmiany znaku na przeciwny i podwojenia liczby. Liczba 0 powiedzmy że nie istnieje. Chodzi o to by stworzyć jakiś wzór po podstawieniu do którego liczby dodatniej był inny wynik niż po podstawieniu liczby ujemnej niezależnie od wartości tych liczb. Wynik testu dla dowolnej x i y powinien być zawsze taki sam niezależnie od ich wartości np dawać 1 dla dodatniej a -1 dla ujemnej (lub dowolną inną liczbę ale zawsze taką samą dla danego znaku). Test może być też taki że daje zawsze ten sam wynik dla liczby dodatniej a przypadkowy (zależny od wartości liczby) dla ujemnej lub odwrotnie.

Aby trochę rozjaśnić o co mi chodzi to na przykład wzór: x +1 +y
dla x = 6 będzie: 6+1+(-6)=1
dla x = -6 też mamy: (-6)+1+6=1
więc to zły wzór bo nie rozpoznamy po wyniku kiedy x jest dodatnia a kiedy ujemna.
Działania typu: x -1 -y
dla x = 6 będzie: 6 -1 -(-6) = 11
dla x = 7 będzie: 7 -1 -(-7) = 13
więc też źle bo wynik jest zależny od wartości x (y).

Wzór nie musi zawierać x i y jednocześnie chodzi tylko o to by sprawdzić która z liczb x czy y jest dodatnia lub ujemna mając do dyspozycji tylko te działania które podałem. Liczby x i y są zapisane niejawnie więc patrząc na liczbę nie wiemy co to za liczba. Chodzi mi po prostu o wzór który dla liczb dodatnich daje inny wynik niż dla liczb ujemnych i te wyniki są zawsze takie same nie zależnie od wartości x i y ... ważny jest tylko znak liczby.

Ps. nie jest to zadanie do szkoły po prostu nie daje mi to zasnąć.

1

Moim zdaniem to co napisałeś jest bardzo nieczytelne. Daj jakiś sensowny przykład. Jaką postać mają te liczby x oraz y? To są konkretne wartości? To są zmienne? Chcesz to zastosować do jakiegoś problemu?

2

Jak by Ci to wytłumaczyć opisowo, żebyś zrozumiał? Hmmm... może przez analogię:

To jest problem z gatunku "Jak mając do dyspozycji sznurek, dwa gwoździe i jeszcze jeden sznurek sprawić, żeby każda ryba miała temperaturę 10 stopni, a kazdy żółw był zielony"

0

@enedil: to może napiszę prościej masz dwie liczby x i y gdzie x = -y. Nie wiesz która jest dodatnia a która jest ujemna (x może być 6 a y -6 albo x może być -6 a y 6). Trzeba znaleźć taki wzór do którego jak podstawisz dowolną liczbę dodatnią to da jakiś konkretny wynik a jak podstawisz dowolną ujemną to da inny wynik. Wyniki te maja być nie zależne od wartości tej liczby a mają zależeć tylko od znaku. Można użyć dodawania, odejmowania, zmiany znaku, podwojenia. Jak zrobisz x+1+y to dostaniesz zawsze 1 niezależnie czy x jest dodatni czy ujemny a trzeba znaleźć taki wzór żeby wynik zależał od znaku liczby. Dzięki za odpowiedzi.
edit: odpowiedź z innego forum jako podpowiedź/wyjasnienie (2*x-y)/x jak otrzymam 3 to x dodatnie jak -3 to x ujemne ale niestety dzielenia nie ma :(

2

Bez dzielenia wygląda mało zabawnie… W szczególności nie widzę nawet, jak miałbym uzyskać stałą wartość inną od zera gdybym wiedział już na starcie, która jest która…

Jak mam tylko dodawanie, odejmowanie, zmianę znaku (czyli mnożenie przez -1) i podwojenie (czyli mnożenie przez dwa), to siłą rzeczy otrzymam wielomian, a ten co najwyżej może być stały, ale nie może przyjmować dokładnie dwóch wartości…

4

@amba123: No to zgodnie z moją intuicją matematyczną, raczej taki wzór nie istnieje.

Dowód -
załóżmy mając wyrażenia e1 i e2 i liczbę k, można robić poniższe operacje:

  • e1 + e2 + k
  • e1 - e2
  • 2*e1
  • -e1

O ile nie mylę się, odpowiadają one temu co opisałeś(łaś?).

Zaczynamy ze zmiennymi x, oraz y = -x. Zmienna y jest niepotrzebna (wynika z reguły -e1), dlatego ją pominę. Udowodnię, że dowolne wyrażenie jakie można uzyskać, jest postaci m*x + n, gdzie m i n są jakimiś stałymi.
Dowód: przez indukcję po długości wyrażenia.
Przypadek bazowy: nie zostały wykonane żadne operacje. No to załóżmy, że zaczynamy z samym x. Wtedy m=1, k=0 spełniają założenie.
Krok indukcyjny:

  • (m1*x + n1) + (m2*x + n2) + k = (m1 + m2)*x + (n1 + n2 + k) jest dobrej postaci
  • odejmowanie tak jak wyżej
  • 2*(m*x + n) = (2*m)*x + n, również dobrej postaci
  • -(m*x + n) = (-m)*x + n, negacja również dobrej postaci.

Dlatego, nie da się uzyskać nic innego niż m*x + n, a to nic innego jak funkcja liniowa, a nie istnieje taka funkcja liniowa co dla liczb ujemnych ma stale wartość jedną, a dla dodatnich stale wartość drugą.

A jeśli pozwolić też na dzielenie, to masz problem, bo wynik takich operacji jest z konieczności funkcją ciągłą poza skończoną liczbą punktów. Funkcja co dla liczb ujemnych daje liczbę X, a dla dodatnich liczbę Y, nie może być ciągła w zerze. Wobec tego, twoja funkcja też powinna nie być ciągła w zerze, ale to znaczy, że w tym zerze ma granicę dążącą do nieskończoności (dodatniej, bądź ujemnej). To znaczy, że nie może być nigdzie tam w okolicy stała.

1

@amba123:

Po prostu przestań trollować. Próbujesz tutaj zanegować w tym momencie podstawowe własności liczb i operacji matematycznych. I to takie na poziomie pierwszych klas szkoły podstawowej.

Po pierwsze zagadnienie która liczba jest ujemna w przypadku jeżeli y = -x, jest zagadnienieniem czy x jest ujemne.
Po drugie formułuujesz temat postu "jak sprawdzić znak liczby" niezgodnie z opisem. Jak sprawdzić? Poprzez operator relacji względem zera. Natomiast to co ty masz w opisie to jest problem jak dokonać iluśtam i jakich operacji (z listy dozwolonych) na liczbie, żeby uzyskać stałą.
Po trzecie operacja podwojenia nie jest dodatkową operacją to jest po prostu dodanie do samej siebie jakiejś liczby
Po czwarte dodanie liczby ze zmienionym znakiem to jej odjęcie i na odwrót

Jedyne co jesteś w stanie zrobić to ileśtam razy (dajmy na to a) liczbę dodać i ileśtam razy (b) ja odjąć co się skróci do tego że możesz wygenerować wynik postaci c * x, gdzie c będzie stałą równą a - b. Czy sobie do niego jak w Twoich przykłądach dodasz jakąś stałą czy nie nie ma znaczenia. I tak wynik zawsze bedziesz miał zależny od x i różny co do znaku jak i wartości bezwzględnej. Jest to ostateczna postać tego co możesz zrobić mając takie załozenia jak masz.

I pytanie powinno być po pierwsze czy da się, a nie jak. Nie, nie da sie. To i tylko to jest Twój problem, niezależnie ile głupkowatych pseudorozkmin nie dodasz do tego próbując zaciemniać oczywiste rzeczy.

Zdenerwowałem się, idę się napić herbaty z melisą. :D

1

@enedil: dziękuje za wyczerpującą odpowiedź jesteś wielki człowieku.

@PanamaJoe: nie ma co się denerwować. Siedzę nad tym długo i przestaję myśleć logicznie mam świadomość że raczej to nie możliwe. Gdyby się udało to byłby pierwszy duży krok do łamania różnych algorytmów kryptografii. Podwójna melisa na mój koszt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1