Algorytm wyznaczający najwłaściwszą drogę

0

Witam, oto ja, jestem początkujący i w związku z tym mam pytanie.

Jaka jest najlepsza (nie wiem czy najszybsza można używać zamiennie) droga, aby rozwikłać taką zagadkę?

while(flag) // jest sobie pętla, która sprawdza sobie ruch pokrętła
{
    if(!JOG) // jeśli pokrętło się nie rusza to idę dalej - pomijam warunki
    {
        if(ruch_w_prawo) // a jak się rusza to sprawdzam kierunek ruchu
        {
            instrukcje;
        }
        else // jeśli ruch w lewo
        {
            instrukcje;
        }
    }
    if(warunek) // jeśli coś się zmieniło (w tym przypadku: jeśli opuszczam menu)
        flag = false; // to program kończy pętlę
}

Jaka jest najwłaściwsza droga? Zapytać najpierw o ruch w prawo czy ruch w lewo? Tzn. interesuje mnie czy istnieje możliwość przyspieszenia jakoś tego algorytmu tzn. dając mu 2 możliwości wyboru jednocześnie. Jakby porównać to z życiem to co jest prostsze? Podnieść jedną rękę i potem drugą czy podnieść obie jednocześnie i wybrać właściwą? Czy tutaj jest mowa o wielowątkowości? Powiedzmy, że chodzi o najszybsze rozwiązanie. Jakie miałoby późniejsze konsekwencje podniesienie jednocześnie obu rąk?

Czy w sejmie policzono by to jako dwa głosy czy jako jeden właściwy czy proszę sobie wybrać = poddaję się - wstrzymuję się od głosu? ;) Czy jeszcze jakoś inaczej? Nie no, to chyba można sobie darować...

Bo powiedzmy, że to działa podobnie do klawiatury, gdzie cały czas sprawdzana jest aktywność użytkownika.
Pętla musi ciągle chodzić, tak?

dodanie znacznika <code class="c"> i poprawienie tytułu wątku - @furious programming

0

Mały moderatorski offtop, ale konieczny;

@haracz - po pierwsze tytułuj sensownie wątki, w skrócie podaj opis problemu, aby było od razu wiadomo o co chodzi; Po drugie wstawiaj kod w znaczniki kolorujące składnię, bo kod ze zmienną szerokością znaków i bez kolorowania jest bardzo nieczytelny, nawet jeśli jest sformatowany; Po trzecie - nie wiem czy wiesz, ale przeglądarki z powodzeniem radzą sobie z zawijaniem wierszy tekstu, więc nie musisz co dziesięc słów walić entera...

Zapoznaj się z poniższymi artykułami:

jeżeli nie chcesz w przyszłości oglądać swoich wątków w koszu; To w sumie tyle - miłego korzystania z serwisu :]

0

Może warto zapisać to inaczej:

for(flag=true;flag;flag=warunek)
{
        if(ruch_w_prawo) // jako pierwszą umieść to co częściej wystepuje
        {
            instrukcje;
        }
        else if(ruch_w_lewo)
        {
            instrukcje;
        }
}
0

Czyli czekanie w tym wypadku na ruch jest właściwszym rozwiązaniem niż sprawdzanie czy pokrętło się nie rusza. Kurde komputer to nie człowiek. Trzeba przyjąć, że komputer jest nieśmiertelny, bo człowiekowi mogłoby zabraknąć tlenu i śmierć gotowa, ew. jakieś ciężkie kompilacje, tfu... komplikacje. Chodziło mi raczej o filozofię niż kosmetykę. Potrzebowałbym bardziej wędki niż ryby. Przypuśćmy, że nie przeprowadziłem badań nad ilością występowania ruchów w prawo i w lewo. Najlepiej jakby program sam wybierał najkrótszą drogę. Jak nie drzwiami to oknami. Czy nie lepiej byłoby podzielić impuls na dwie gałęzie i po rozwidleniu skierować ten zagubiony impulsik na właściwą drogę? Czy to jest w ogóle fizycznie możliwe i jak można by nazwać takie zjawisko?

0

Nie mieszaj elektroniki z programowaniem.

0

Skoro mikrokontroler (funkcja, żeby nie mieszać) na bieżąco sprawdza stan klawiatury (czyli rozumiem, że non-stop chodzi pętla) to jakiej funkcji w C można by użyć w powyższym przykładzie do odczytywania na bieżąco stanu pokrętła? I czy podane rozwiązanie jest najlepsze? Tzn. chodzi o funkcję, która odczyta stan konkretnego klawisza bez potwierdzenia innym klawiszem.

0

Dla mikrokontrolera trzeba sprawdzić czy nie istnieje odpowiednie przerwanie.

0

Jest jakaś biblioteka w C, która zajmuje się takimi i podobnymi problemami? Czy trzeba zejść do języka niższego poziomu? Funkcja kbhit() z conio.h będzie odpowiednia w powyższym przykładzie? Z tego co czytam sprawdzany jest bufor. Można odnieść do konkretnego kodu klawisza?

0

Przerwanie polega na tym że podajesz kontrolerowi adres funkcji którą on ma wywołać jako reakcje na jakieś zdarzenie (np wciśnięcie klawisza).
Jeżeli zamierzasz używać jakiejkolwiek funkcji sprawdzającej (czyli nie przerwanie) to wracamy do: http://4programmers.net/Forum/1093395

0

Zadaję pytanie, a system w zależności od tego co napiszę zwraca się do swojej sekretarki (gwiazdeczki) i ona daje odpowiedź, nie zawsze zgodną z oczekiwaniami :) Ta gwiazdeczka też musi jakąś drogę przebyć. I tu z powrotem wracamy do pytania o drogę tego jednego impulsu, który mógł spowodować katastrofę lub euforię. W zależności od tego jak długa była droga trzeba czekać na efekt lub działanie jest natychmiastowe. Przydałby się algorytm, który pozwoliłby przewidzieć drogę, który pozwoliłby poznać efekt przed wyruszeniem w trasę. Wysłać szczura albo "ducha", który nie zabiera tyle energii co impuls. Gdyby przełożyć to na matematykę trzeba by dodać do liczby pewną wartość, a następnie z powrotem ją odjąć, ale wtedy próba byłaby jednocześnie premierą. Trzeba by wysłać coś mniejszego/lżejszego np. gaz. Lub zmniejszyć temperaturę, ew. zwiększyć w zależności od tego z czym mamy do czynienia. Do tego dochodzi ciśnienie. Wracając do tematu: chcę podać adres funkcji, która zadziała w zależności od tego jaki ruch został wykonany. Jak mam poznać zdarzenie (ruch klawiatury)? Potrzebna jest wstawka asm'a? Z tego co napisałeś wnioskuję, że kbhit() jest funkcją wyłącznie sprawdzającą. Potrafię sobie wyobrazić, że klawiatura jest tablicą dwuwymiarową, ale czy dostępną z poziomu C? Chwila... przecież i tak muszę sprawdzić czy coś jest prawdą czy fałszem, tzn. czy wiersz i kolumna styka czy nie styka. Czyli zamierzam skorzystać z przerwania, a do tego i tak potrzebna jest funkcja sprawdzająca... Można wszystko ogarnąć w C skoro istnieją operacje bitowe? Jeśli pracuję na systemie Windows to mam ograniczone pole działania?

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