Skocz do zawartości

Instrukcja warunkowa i przedziały


Zygzak

Pomocna odpowiedź

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?

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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)?

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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 😋)

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.