Ввод длины списка N - создаётся список соответствующей длины,
без 0, без повторов, без лакун.
Например - N = 7 -> {3 7 2 6 1 5 4}
Вот что есть на сегодняшний момент:
Code: Select all
[color=#0000BF]proc Vvod {a} {
global t
puts stdout { Vvedite a:}
set a [gets stdin]
set t [format "%d" $a]
}
proc Ldelete {list value} {
set ix [lsearch -exact $list $value]
if {$ix >= 0} {
return [lreplace $list $ix $ix]
} else {
return $list
}
}
proc Spisok {t} {
for {set i 1} {$i <= $t } {incr i} {
set j [expr {round(rand()*$t)}]
if {$j == 0} {
set k [expr {$j + 1}]
} else {
set k $j
}
lappend order $k
}
foreach valume $order {
set m [lsearch -all $order $valume]
set y [lrange $m 1 end]
foreach val $y {
lset order $val X
}
set order [Ldelete $order X]
}
puts stdout "order = $order"
return $order
}
proc !Spisok {t order} {
set dlina [llength $order]
if {$dlina < $t} {
set order1 [Spisok [expr $t - $dlina]]
set dlina2 [llength $order1]
set order [concat $order $order1]
set dlina [expr $dlina + $dlina2]
!Spisok $dlina $order
} else {
return $order
}
}
while 1 {
Vvod a
set order [Spisok $t]
set x [!Spisok $t $order]
puts stdout "x = $x"
}[/color]

Просьба объяснить в чём недоработка ...

P.S. Бессонница..., и SpaceX в 8.10!