wm geom .konsola 667x664+321+12; wm geom .output 309x348+265+64; wm withdraw .; kons_font 15 kons_font 16 load ./q3.so ## generator permutacji # proc wypelnijListe li { set w {} for {set i 0} {$i<$li} {incr i} {lappend w 0} set w } fiber create 1 start proc Inicjalizacja nr { fiber$nr alias _puts _puts fiber$nr alias maineval eval fiber$nr alias wypelnijListe wypelnijListe fiber$nr eval "set nr $nr; set run 1" fiber$nr eval { set liElem 3 proc start {} { set ::bity [wypelnijListe $::liElem] set ::wynik [wypelnijListe $::liElem] # + dwie zmienne globalne... permutacja 0 } proc permutacja li { if {$li>=$::liElem} { maineval "set zm {$::wynik}" fiber switchto main set ::run; # jesli blad to koniec dzialania fibera! return } for {set i 0} {$i<$::liElem} {incr i} { if {[lindex $::bity $i]==0} { lset ::wynik $i $li lset ::bity $i 1 permutacja [expr {$li+1}] lset ::bity $i 0 } } } } } Inicjalizacja 0 fiber error proc Restart nr { if { [lindex [fiber error] $nr]!="" } { fiber restart $nr } else { fiber$nr eval {unset ::run}; fiber switchto $nr # + jedyny sposob zeby przerwac prace fibera !!! fiber$nr eval {set ::run 1}; fiber restart $nr } } Restart 0 # + restartowanie fiber0; # UWAGA: (9.10.2014) nie restartowac PRZED pierwszym odczytem permutacji !!! fiber0 eval {set ::liElem 4} #% 4 fiber switchto 0; set zm #% 0 2 1 3 #% 0 1 3 2 #% 0 1 2 3 # + odczytujemy kolejne permutacje... exit