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?
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:58
- Rejestracja:30 lip 2005, o 00:36
- Lokalizacja:Lublin
Re: porównywanie liczb
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 - sprawdzPytanie: 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?
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
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
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...
Tak by chyba było prościej. Ale nie wiem jakie ustawić im typy: int, long, single...
-
- -
- Posty:58
- Rejestracja:30 lip 2005, o 00:36
- Lokalizacja:Lublin
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
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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 21 gości