Hirdetés

Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz KB.Pifu #3995 üzenetére

    Üdv KB.Pifu!

    Tehát. Ez egy buborék algoritmus. Két ciklusból áll. A belső (LOOP) a tömb végétől at elejéig lépked végig. Ha az indexelt érték (amire a ciklusváltozó mutat) nagyobb, mint az őt követő, akkor felcseréli a kettőt.
    Ezt a ciklust egy külső ciklus tartalmazza, ami addig ismétlődik, amíg volt csere.

    A #Sort_done egy boolean, amit annak jelzésére használ, hogy a belső ciklus végigfutása során volt-e csere.
    Ha nem volt, akkor a rendezés kész és kilép (a külső ciklusnak ekkor van vége).

    A #Sort_done változót minden alkalommal a belső ciklus elején TRUE állapotba állítja be a

    SET
    S #Sort_done;

    Utasításokkal. Amikor adatcserét hajt végre a ciklusmagban, akkor a #Sort_done-t FALSE állapotúra állítja az

    SET
    R #Sort_done

    utasításokkal. Így amikor a ciklus lefut, a #Sort_done TRUE lesz ha nem volt adatcsere és FALSE lesz ha volt. Ezért a külső ciklus kilép ha a #Sort_done TRUE, mert akkor a rendezés készen van.

    Az RLO-t azért kell SET-be állítani, mert az S #Sort_done utasítás feltételes. Avagy a #Sort_done csak akkor kerül TRUE állapotba, ha az RLO is TRUE! egyébként nem nyúl hozzá. Az R #Sort_done szintén feltételes, csak akkor törli a #Sort_done-t, ha az RLO TRUE!

    Mindez kiderül az S és R utasítások leírásából is.

    Description of instruction

    "S (set bit) places a "1" in the addressed bit if RLO = 1 and the switched on master control relay MCR = 1. If MCR = 0, the addressed bit does not change."

    A bit feltétel nélkül így állítható meghatározott állapotba.
    De így is:

    SET
    = #Sort_done

    vagy

    CLR
    = #Sort_done

    Én ezt a változatot szoktam használni, mert (nekem) beszédesebb.

    "azért büszkén mondom, hogy magamtól rájöttem, m003 után az AR-t egyszerűbben is lehet növelni"

    Elárulod nekünk a módszeredet? :-)

    [ Szerkesztve ]

Új hozzászólás Aktív témák