2012-03-14 17 views
0

次のCコードをTCLに変換します。私はTCLのループのためにこれを変更する必要があり、私はTCLでforeachの機能を使用しないTCLの2つの変数を持つループ

int a[10],b[10]; 
int n=20 

for (i=1,j=1; i<=n; i+=2,j++) 
{ 
    b[j]=a[i]; 
} 

...ループ構造のため んTCLは、2つのループ変数を許可します?

+1

これは実際のコードではありませんか?アレイの終わりを読み取ることは悪い考えです。 –

+0

は実際のコードではありませんが、a []の最初の要素をb []に代入し、[]の2番目の要素を無視し、a []の3番目の要素をb []に再度代入してa []の隣接要素をb []に代入します。 – user1270123

+0

これはa []の奇数位置をb []に割り当てるのと同様のものです。 – user1270123

答えて

4

あなたがdiscussion hereを見てきました:

set n 6 
    for { 
       set i  1 
       set j  1 
      } { 
       $i < $n 
      } { 
       incr i 
       incr j 
      } { 
       puts "$i $j" 
    } 
+4

+1。よりコンパクトな外観のために改行の代わりにセミコロンを使うことができます: 'for {set i 1;集合j 1} {$ i <$ n} {incr i; incr j} {...} ' –

2

これは、あなたが探していますが、あなたが開始するためのターゲット配列を持っている必要がありますCから来ている検討している正確に何を達成していません。それはあなたの実際の目標を達成する可能性があります。

ループforeachループは、格納変数として名前のリストをとることができます。各名前は、入力リストの値の1つを取得します。そのように、あなたが入力リストから複数の値ごとに反復処理するためにそれを使用することができます:完全問題とは関係のない、だけでなく、素敵な

set result {} 
foreach {x1 x2} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} { 
    lappend result $x1 
} 
puts $result 
# 1 3 5 7 9 11 13 15 17 19 

を、それはあまりにも、複数の変数名やリストを取ることができるということです。

set result {} 
foreach {a1 a2} {1 2 3 4 5 6} b {A B C} { 
    lappend result $a1 $b $a2 - 
} 
puts $result 
# 1 A 2 - 3 B 4 - 5 C 6 
関連する問題