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

Odpowiedz Nowy wątek
2014-12-18 18:07
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

edytowany 6x, ostatnio: furious programming, 2014-12-18 19:11

Pozostało 580 znaków

2014-12-18 19:14
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 :]


Trochę się pospieszyłem. Tytuł był trochę jak chwyt marketingowy. Postaram się na przyszłość bardziej zwracać uwagę na regulamin. A te entery... skopiowałem z edytora w razie czego jakby mi prąd czy internet odcięli w trakcie. Nic nie wiadomo. Postanawiam poprawę. Dzięki i pozdrawiam. - haracz 2014-12-18 21:10
Edytory też potrafią zawijać wiersze ;) - furious programming 2014-12-18 23:00
Oj potrafią, szczególnie wtedy jak się dd naciśnie :) - haracz 2014-12-18 23:25

Pozostało 580 znaków

2014-12-18 21:11
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;
        }
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-18 21:40
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?

Staraj się pisać na temat i tylko na temat - reszta jest niepotrzebna i wydłuża czas analizy Twoich postów; - furious programming 2014-12-18 23:00

Pozostało 580 znaków

2014-12-18 21:58
0

Nie mieszaj elektroniki z programowaniem.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-18 23:50
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.

Pozostało 580 znaków

2014-12-19 00:12
0

Dla mikrokontrolera trzeba sprawdzić czy nie istnieje odpowiednie przerwanie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-19 14:11
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?

edytowany 1x, ostatnio: haracz, 2014-12-19 14:41

Pozostało 580 znaków

2014-12-19 14:41
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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-19 15:12
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?

edytowany 20x, ostatnio: haracz, 2014-12-19 22:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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