Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

porównywanie liczb

kamilmaz
-
-
Posty:12
Rejestracja:19 sie 2004, o 15:06
Lokalizacja:Rzeszów
Kontaktowanie:
porównywanie liczb

Postautor: kamilmaz » 5 sie 2006, o 11:05

Może banalne ale się już pogubiłem.

Mam dwie pary liczb integer: cala,reszta oraz cala1,reszta1 . Wszystkie 4 liczby są integer.

Pytanie: jak je porównać, która jest większa, która mniejsza. Czy najpierw je połączyć w jakiś typ i wtedy porównać, czy oddzielnie porównywać części całkowite i reszty po przecinku?

K_o_n_r_a_d
-
-
Posty:58
Rejestracja:30 lip 2005, o 00:36
Lokalizacja:Lublin

Re: porównywanie liczb

Postautor: K_o_n_r_a_d » 5 sie 2006, o 11:34

Pytanie: jak je porównać, która jest większa, która mniejsza. Czy najpierw je połączyć w jakiś typ i wtedy porównać, czy oddzielnie porównywać części całkowite i reszty po przecinku?
Najlepiej sam sprawdz oba sposoby i wybierz ten, który będzie bardziej efektywny dla Twojego programu. Bardziej zależy Ci na małej objętości kodu, czy na szybkości wykonywania - sprawdz :)

Jeśli chodzi o porównywanie bez żadnych przekształceń to cos takiego może być:

Kod: Zaznacz cały

If Cala > Cala1 Then Gosub Pierwsza_wieksza Else If Cala < Cala1 Then Gosub Druga_wieksza Else If Reszta < Reszta1 Then Gosub Druga_wieksza Else If Reszta = Reszta1 Then Gosub Rowne Else Gosub Pierwsza_wieksza End If End If End If End If Pierwsza_wieksza: Return Druga_wieksza: Return Rowne: return
- pisane na szybko więc nie jest zoptymalizowane.

A jeśli chodzi o Twój drugi pomysł to zastanów się z jakiego przedziału będą te wartości - może uda się tylko na integerach jakichś tymczasowych to zrobić, bo typ single to katastrofa :)

kamilmaz
-
-
Posty:12
Rejestracja:19 sie 2004, o 15:06
Lokalizacja:Rzeszów
Kontaktowanie:

Postautor: kamilmaz » 5 sie 2006, o 12:09

No wolałbym żeby to zmienić od razu w formę "cala,reszta" i dopiero wtedy porównywać całość czyli czy "cala,reszta" jest wieksza/mniejsza od "cala1,reszta1". Czyli żeby nie rozpatrywać każdego kawałka liczby przecinkowej (jak najmniej ifów).
Tak by chyba było prościej. Ale nie wiem jakie ustawić im typy: int, long, single...

K_o_n_r_a_d
-
-
Posty:58
Rejestracja:30 lip 2005, o 00:36
Lokalizacja:Lublin

Postautor: K_o_n_r_a_d » 6 sie 2006, o 01:23

No to w takim razie, tak jak napisałem wyżej: zastanów się z jakiego przedziału będą te wartości (chodzi o resztę i całość).
Jeśli ustalisz, że np. reszta nigdy nie będzie większa jak 100 a całość nie będzie większa jak np. 50 to możesz zrobić 2 zmienne typu integer i:
integer_pierwszy = calosc * 100 + reszta
integer_drugi = calosc1 * 100 + reszta1
i teraz te dwie zmienne porównać.
Musisz pamiętać przy tym, że zmienna Integer może przechowywać dowolną liczbę całkowitą z zakresu –32768 do +32767. Jeśli z tych obliczeń możliwe byłoby uzyskanie liczby większej (mniejszej) lub jeśli nie ma możliwości, aby calosc była ujemna to lepiej zastosować typ Word (może przechowywać dowolną dodatnią liczbę całkowitą z zakresu od 0 do 65535).
Ewentualnie zastosować typ Single, ale to jest tu zupełnie nie potrzebne.
Tak jak pisałem na początku: zastanów się z jakiego przedziału będą te wartości (chodzi o resztę i całość). Jak już się zastanowisz to daj znać a się sprawdzi który sposób jest najlepszy :)

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 29 gości