- ベストアンサー
配列を$n倍するプログラムソース
- 配列 @in=(10,20,30,40) の各項目を $n 倍するプログラムを作成しましたが、正しく動作しません。
- 実行結果が意図したものと異なり、解決策がわかりません。
- 質問内容を理解し、適切な解法を提供いただける方からの回答をお待ちしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> print "@inを"; ダブルクォートでくくると配列の値が展開されるので、 シングルクォートでくくるか、エスケープしましょう。 $ni_tallは、foreachブロック内でのみ有効な変数になります。 foreachブロック終了と同時に、なくなります(printしても何も表示されません)。 > $n *= $ni_tall; これは、変数$nに数値を代入することになります。 略さず書くと、 $n = $n * $ni_tall; 最終的に、$n = 7*10*20*40の値(1680000)が入ります。 > $ave = $n * @in; これは、$ave = 1680000 × 4(配列の個数)となります。 Perlは色々な書き方がありますので、以下のようにも書けます。 ご参考までにどうぞ。 my @in = qw(10 20 30 40); print '@inを何倍しますか?:'; chomp(my $n=<>); map { $_ *= $n } @in; print "結果:", join(',', @in);
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
*= のような複合代入演算子ですが $a *= $b ; は $a = $a * $b ; と同等の意味です。 (厳密には、$aが評価される回数が違うので、式によっては違いが出ることはありますが、基本は上の通りです) そう考えれば $n *= $ni_tall; → $n = $n * $ni_tall となるので、どこがおかしいかわかるでしょう。
お礼
回答ありがとうございます。 具体的なアドバイスありがとうございます。
- moon_piyo
- ベストアンサー率60% (88/146)
こんばんは 10行目 $n *= $ni_tall; を $ni_tall *= $n; にかえてみましょうか
お礼
回答ありがとうございます。 具体的なアドバイスありがとうございます。
- shiren2
- ベストアンサー率47% (139/295)
こんな風に書きます。 foreach $i (@in){ $i *= $n }
お礼
回答ありがとうございます。 参考にさせて頂きます。
お礼
回答ありがとうございます。 参考にさせてもらいます。