2016-03-19 25 views
0

PERLを使用して文字を連結して繰り返す方法が混乱しています。親切に私を助けてください。私はTCLを使ってピラミッドを印刷する必要があります。以下は私のコードです。 >TCLを使用してピラミッドを印刷


print "Please Enter Pyramind Height:"; 
my $height = <>; chomp($height); # strip of new lines 

my $char='^'; 

for(my $i=1; $i<=$height; ++$i){ 
    print ' ' x ($height-$i) . $char x (2*$i-1), "\n"; 
+0

TCL *&NOT PERLを使用して文字を連結して繰り返す方法が混乱しています。 –

+0

また、質問を追加した後、入力したコードの形式が正しくありません。親切に私のそばにいてください。同じ、親切な助けのための解決策を知っている場合。連結{$ spaceChar X( - $ I $高さ) "{セットI 1}、{$ I <= $高} {INCR I} { セットYの セットpyramidChar^ 」 –

+0

セット高さ10 セットspaceChar" } {$ pyramidChar x(2 * $ i - 1)} " puts $ y } プリント –

答えて

1

concatを作品

のTcl


set height 10 
set spaceChar " " 
set pyramidChar^

for {set i 1} {$i <= $height} {incr i} { 
    set y "concat {$spaceChar *($height - $i)} {$pyramidChar * $i} " 
    puts $y 
} 

PERL <はリスト演算子ではなく、文字列演算子です。

perlのxオペレータは文字列を繰り返します。これをTclの*に翻訳することはできません。 string repeatコマンドを使用する必要があります。

Tclで文字を連結するには、単にそれらを隣り合わせに配置するだけです。

set y "[string repeat { } 5][string repeat {^} 2]" 

ここではわかりやすくするために引用符を使用していますが、この場合は実際には必要ありません。または、string catコマンドを使用します。

+0

Bradさん、ありがとうございます。論理はうまくいく。私の疑いを解決した。 –

2

exprコマンドで算術演算を行う必要があります。また、perlの. => TCL appendとperlのx =>のTclコードの長い行は、すべてのネストされた括弧を読むためには非常に難しいことができますがstring repeat

TCLあなたのperlの翻訳は

for {set i 1} {$i <= $height} {incr i} { 
    puts [string cat [string repeat " " [expr {$height - $i}]] [string repeat $char [expr {$i*2-1}]]] 
} 

です。おそらく:

for {set i 1} {$i <= $height} {incr i} { 
    set indent [string repeat " " [expr {$height - $i}]] 
    set tier [string repeat $char [expr {$i*2-1}]] 
    puts "$indent$tier" 
} 
+0

ありがとうグレン。私は今とてもよく理解しています。すてきな一日を。 –

+0

読者の利益と明確さのために。追加部分に欠けているもの...? 2番目のコードは正常に動作します。 {$ I <= $高} {INCR I} { プット{iは1セット}の セット高さ3 セットチャー^ [ストリングリピート "" [式expr {$高付加 - ] $ Iを}] [文字列繰り​​返し$チャー[式expr {$ iは2-1 *}]]]} それは印刷 - (。。ではなくピラミッドスペースが初めに来ていない) ^ ^^^ ^^ ^^^ –

+0

最初の例の 'append'には変数名がありません。 –

関連する問題