nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Mar 2024 20:25



Reply to topic  [ 2 posts ] 
Tcl - создание списка из случайных чисел 
Author Message
Junior

Joined: 13 Mar 2017 15:41
Posts: 3
Reply with quote
Условия задачи следующие:
Ввод длины списка N - создаётся список соответствующей длины,
без 0, без повторов, без лакун.
Например - N = 7 -> {3 7 2 6 1 5 4}
Вот что есть на сегодняшний момент:
Code:
[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]

Попытался сделать рекурсию (proc !Spisok), каждый раз выполняется два раза, т.е. нету рекурсии :osad:
Просьба объяснить в чём недоработка ... :idea:
P.S. Бессонница..., и SpaceX в 8.10!


13 Mar 2017 17:53
Profile
Junior

Joined: 13 Mar 2017 15:41
Posts: 3
Reply with quote
Code:
  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 Bez_X {order} {   
    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]         
    }   
     return $order
}       
  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 
    }
     return $order
}     
    while 1 {
    Vvod a
   if {t == n} {
     break}
     set order [Spisok $t]
       set order [Bez_X $order]
     for {set j 1} {$j <= $t } {incr j} {
      set order [Bez_X [lappend order $j]]   
         }
      puts stdout "order = $order"   
}


26 Mar 2017 17:25
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.