Skocz do zawartości

Instrukcja warunkowa i przedziały


Pomocna odpowiedź

Napisano

Cześć, chciałbym się dowiedzieć czy w instrukcji warunkowej mogę stosować przedziały.

Czy jeżeli będzie wyglądało to tak:

if ((x>0) or (x<10))

to spełniać ten warunek będą liczby z przedziału (0,10)?

I mam drugie pytanie. Mój robot pobiera pewną zmienną RP1 i porównuje ją z RP2. Chciałbym aby warunek był spełniony gdy RP1 będzie równe RP2 lub RP2+1 lub RP2+2 itp aż do 10 i równe RP2-1 lub RP2-2 aż do 10. Czy jest możliwe zrealizowanie tego prościej niż tak:?

if ((RP1=RP2) or (RP1=RP2+1) or (RP1=RP2+2) or (RP1=RP2+3) or (RP1=RP2+4) or (RP1=RP2+5) or 
                 (RP1=RP2-1) or (RP1=RP2-2) or (RP1=RP2-3) or (RP1=RP2-4) or (RP1=RP2-5))

Da się to zapisać w postaci przedziału albo ciągu arytmetycznego?

W jakim języku chcesz to napisać? Bo w każdym może to wyglądać trochę inaczej.

BTW: A nie przyszło Ci do głowy, by zamiast pisać post na Forum o robotach zajrzeć do podręcznika tego języka? Rozdział o operatorach logicznych (and, or) i operatorach relacji (większy, równy, mniejszy itd) jest zwykle gdzieś na początku. I tak będziesz musiał przeczytać czyjąś odpowiedź tutaj, więc ogólnie z czytaniem sobie radzisz, prawda?

marek1707, C, pisze w kompilatorze Arduino, mam podręcznik ale nie ma tam o stosowaniu funkcji (w sensie matematycznych) w instrukcji warunkowej ani o przedziałach, to podręcznik dla początkujących. Był bym wdzięczny za odpowiedź tutaj, no bo skoro w zasadzie każdy może znaleźć sobie to wszystko w internecie, albo podręczniku to może trzeba by pomyśleć o zamknięciu tego forum.

Skoro jesteś przy matematyce, to zastanów się na spokojnie jaki zbiór opisuje warunek który napisałeś:

if ((x>0) or (x<10))

Podpowiem, to liczby które są większe od 0 lub mniejsze od 10, czyli?

Nie wiem czy rozwiązania wszystkich problemów omawianych na tym Forum można znaleźć w sieci, ale opis języka Arduino na pewno:

https://www.arduino.cc/en/Reference/HomePage

Akurat w Twoim wypadku polecam rozdziały "Comparison Operators" i "Boolean Operators".

Cieszę się, że wyrosłeś z książki dla początkujących. Może warto kupić następną?

A Twój pomysł zamknięcia Forum na pewno zostanie wnikliwie przemyślany przez odpowiednich ludzi. Ja tu jestem za cienki.

Zygzak, ja bym jednak uważał z tym co jest niemożliwe, a co nie.

Zacznij od alternatywy - jak pewnie wiesz z matematyki, alternatywa jest prawdziwa, gdy chociaż jeden z jej składników jest prawdziwy.

Więc x należy do zbioru opisanego x>0 v x<10 jeśli

x > 0

lub

x < 10

lub

obie opcje

Przetestujmy x=5, mamy 5 > 0, prawda, więc 5 należy do zbioru.

To teraz x=100, ponieważ 100 > 0, więc też należy.

To może x=-10 => mamy -10 > 0 jest fałszem, ale -10 < 10, więc też należy do zbioru...

Nadal twierdzisz że to niemożliwe?

Elvis, hmmmmm, czyli powinno być &&? W sensie i zamiast lub? No bo jak by patrzeć tak czysto matematycznie to rozwiązaniem są liczby tylko w przedziale od (0,10) tak? Szczerze to nic w szkole o alternatywach nie miałem

Patrząc czysto matematycznie jest prawie tak samo jak informatycznie - jeśli użyjesz warunku w tej postaci którą napisałeś, to do x należą wszystkie liczby rzeczywiste (matematycznie) lub int (informatycznie)

Zajrzyj do książki od matematyki, powtórz podstawy logiki - a dopiero później poszukaj dobrej książki o podstawach programowania w C. Arduino nie jest do tego zupełnie potrzebne.

Zygzak, spójrz na poniższą ilustrację. Zaznaczyłem tam dwa zbiory liczby większe od 0 i mniejsze od 10. Ty chcesz uzyskać tylko część zaznaczoną na żółto. Liczba musi spełniać oba warunki (i), czy tylko jeden z nich (lub)?

Treker, Elvis, rozumiem już że oba, Logiki jeszcze w szkole nie miałem ale będzie niedługo. A macie pomysł jak mogła by wyglądać ta moja instrukcja warunkowa? Jak uwzględnić aby do niewiadomej były dodawane liczby od 1 do 10? jak mogło by to wyglądać?

Ale w tym wypadku:

if ((RP1=RP2) or (RP1=RP2+1) or (RP1=RP2+2) or (RP1=RP2+3) or (RP1=RP2+4) or (RP1=RP2+5) or
                 (RP1=RP2-1) or (RP1=RP2-2) or (RP1=RP2-3) or (RP1=RP2-4) or (RP1=RP2-5))

nie mogę skorzystać z && bo aby funkcja się wykonała nie muszą być spełnione wszystkie warunki, wystarczy mi że jedna ze ta zmienna będzie równa jednemu z tych wariantów. I czy jest możliwe aby skrócić ten zapis?

Zygzak, ja kompletnie nie rozumiem, co ten "warunek" miałby robić. Opisz to może słowami, krok, po kroku.

Chodzi o to ze mam podłączony fotorezystor którego wartości (zależnie do tego gdzie go położę, od jasności swiatła itp) przyjmuję jakąś wartość która z tego co widzę waha się do 10 w górę i w dół. Np teraz mam 855 które się waha (raz przyjmuję wartość taką, raz taką) miedzy 889 a 797, chce napisać program który będzie wykrywał ruch, to znaczy będzie wykrywał zmiany większe niż 10 jednostek. Aktualnie program pobiera do jednej zmiennej RP1 pierwszą wartość a po sekundzie do drugiej zmiennej RP2 zapisuje drugą wartość. I teraz chodzi o porównanie ich, jeżeli zmienne te różną się od siebie o więcej niż 10 to ma zostać wykonana inna funkcja. Ten kod co tam wkleiłem uwzględnia na razie tylko wahanie się odczytu o 5 jednostek. ( w teori 😋)

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...