No i potrafisz mi wyjaśnić czemu nie umieściłeś tego pdfa w pierwszym poście? o_O Bo ja nie pojmuje.
1 I(1,0,8) -> if z[1] = z[0] goto 8
2 S(2) -> z[2]=z[2]+1
3 I(1,2,8) -> if z[1]=z[2] goto 8
4 S(2) -> z[2]=z[2]+1
5 S(0) -> z[0]=z[0]+1
6 I(1,2,8) -> if z[1]=z[2] goto 8
7 I(1,1,0) -> if z[1]=z[1] goto 0
8 koniec ;]
Czyli tak na oko: w z[1] mamy liczbę do podzielenia. Do z[2] dodajemy w każdym obiegu po 2, do z[1] dodajemy po 1 i czekamy aż w z[2] będzie tyle samo co w z[1]. Czyli działanie jest takie:
x = 6
wynik (z[0]) = 0
z[2] = 0
Pierwszy obieg:
z[2] = z[2]+1+1 = 2
wynik = z[0] = z[0]+1 = 1
Czy z[2] = x? Nie, wracamy na początek.
Drugi obieg:
z[2] = z[2]+1+1 = 4
wynik = z[0] = z[0]+1 = 2
Czy z[2] = x? Nie, wracamy na początek.
Trzeci obieg:
z[2] = z[2]+1+1 = 6
wynik = z[0] = z[0]+1 = 3
Czy z[2] = x? Tak! Wynik zajduje się w z[0] i wynosi 3.
W kodzie jest ten myk:
2 S(2) -> z[2]=z[2]+1
3 I(1,2,8) -> if z[1]=z[2] goto 8
4 S(2) -> z[2]=z[2]+1
Tzn że nie dodajemy od razu 2 do z[2] tylko dodajemy 1 i testujemy, bo trzeba brać pod uwagę liczby nieparzyste. 7/2 = 3 a nie 4.
edit: i mogę się z tobą założyć że treść zadania wcale nie była "wykazać że funkcja jest licznikowo logiczna" tylko raczej "wykazać że funkcja jest ML-obliczalna" albo coś w tym stylu jeśli już...