2014-01-22 2 views
0

제 프로그램 개선을 제안하십시오. 이 프로그램은 4 비트 바이너리 증분 o/p를 제공합니다 불필요한 코드가있는 곳에서 최적화를 찾고 있습니다.순차 바이너리 TCL

제 프로그램 개선을 제안하십시오. 이 프로그램은 4 비트 바이너리 증분 o/p를 제공합니다 불필요한 코드가있는 곳에서 최적화를 찾고 있습니다. 내 프로그램 개선을 제안하십시오. 이 프로그램은 4 비트 바이너리 증분 o/p를 제공합니다 불필요한 코드가있는 곳에서 최적화를 찾고 있습니다.

 #!/bin/sh 
      # This 
       puts "+++++++++++++++++\n" 
      set ipaddr "0.0.0.0" 
      set limit 4 
      set splitip [split $ipaddr "."] 
       puts "Split ip address = $splitip" 

      # MAIN ROUTINE 
        set ilength [llength $splitip] 
        puts "Length of string is $ilength" 

        set first [lindex $splitip 0] 
        set sec [lindex $splitip 1] 
        set third [lindex $splitip 2] 
        set four [lindex $splitip 3] 
         for { set limit 1} { $limit >0} {} { 

          for { set first $first } { $first <= $limit} {} { 

            for { set sec $sec } { $sec <= $limit} {} { 

              for { set third $third } { $third <= $limit} {} { 

               for { set four $four } { $four <= $limit} {} { 
                puts " f:$first $sec $third $four" 
                incr four 
               } 
             set four 0 
             incr third;              #puts " t:$four $third $sec $first\n" 


              } 
             set third 0 
            incr sec 

            } 
                   #puts " f:$four $third $sec $first" 
             set sec 0 
           incr first 

          } 
         incr limit -1 
         } 

      # End Main 


       puts "\n++++++End Program+++++++++++" 
+0

는, 어쩌면 한 번 봐 가지고 : 당신의 의도는 이진수의 순서를 인쇄 할 경우 최종 참고로

는,이 방법으로 그렇게하기 훨씬 쉽다 tcllib ip 패키지도 있습니다. (http://tcllib.sourceforge.net/doc/tcllib_ip.html) – schlenk

+0

그 링크에 대해 감사합니다 schlenk. – user3211264

답변

1

귀하의 프로그램은 기본적으로 이러한 목표를 달성합니까?

for { set first 0 } { $first <= 1} {incr first} { 
    for { set sec 0 } { $sec <= 1} {incr sec} { 
     for { set third 0 } { $third <= 1} {incr third} { 
      for { set four 0 } { $four <= 1} {incr four} { 
       puts " f:$first $sec $third $four" 
      } 
     } 
    } 
} 

그렇다면 기본 제안은이 외의 모든 것을 제거하는 것입니다. 또한

: [llength $splitip] 당신에게 $splitip 문자열 길이지만, 목록 길이를 제공하지 않습니다. 그것들은 다르다.

매우 둥근 방식을 사용하여 first 외에도 값을 할당하고 있습니다. 대신

lassign $splitip first sec third four 

lassign이 Tcl 8.5에 추가되었습니다. 당신은 Tcl의 이전 버전을 사용하는 경우, 대신 foreach에 의해 할당을 사용

foreach {first sec third four} $splitip break 

for { set limit 1} { $limit >0} {incr limit -1} { ... } 

단순히 의미 구조 "를 실행 ... 정확히 한 번만"는 영향을주지 않습니다 어떤 식 으로든 프로그램의 실행. 코드를 제거하더라도 (내부 코드를 본문 인수로 유지하면) 내부에 있던 코드는 여전히 정확히 한 번 실행됩니다.

명확한 설명을 위해 incr x 호출은 네 번째 본문 인수가 아닌 for의 세 번째 인수 안에 있어야합니다. 당신이 정말로 IP의 adresses을 처리 할 경우

for {set i 0} {$i < 16} {incr i} { puts [format %04b $i] } 
+0

예! 나는 그렇게 생각한다. 그냥 각 루프 (??) 후 0으로 재설정해야하지만 당신 말이 맞아. – user3211264

+0

0으로 재설정 할 필요가 없습니다. 이미 발생합니다. –

+0

와우! 당신의 제안에 감사드립니다 !! 내 프로그래밍이 훨씬 더 좋아질 것입니다. – user3211264