• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列 各項目を$n倍するプログラムソース)

配列を$n倍するプログラムソース

このQ&Aのポイント
  • 配列 @in=(10,20,30,40) の各項目を $n 倍するプログラムを作成しましたが、正しく動作しません。
  • 実行結果が意図したものと異なり、解決策がわかりません。
  • 質問内容を理解し、適切な解法を提供いただける方からの回答をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.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);

mai5891
質問者

お礼

回答ありがとうございます。 参考にさせてもらいます。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

*= のような複合代入演算子ですが $a *= $b ; は $a = $a * $b ; と同等の意味です。 (厳密には、$aが評価される回数が違うので、式によっては違いが出ることはありますが、基本は上の通りです) そう考えれば $n *= $ni_tall; → $n = $n * $ni_tall となるので、どこがおかしいかわかるでしょう。

mai5891
質問者

お礼

回答ありがとうございます。 具体的なアドバイスありがとうございます。

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

こんばんは 10行目 $n *= $ni_tall; を $ni_tall *= $n; にかえてみましょうか

mai5891
質問者

お礼

回答ありがとうございます。 具体的なアドバイスありがとうございます。

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

こんな風に書きます。 foreach $i (@in){ $i *= $n }

mai5891
質問者

お礼

回答ありがとうございます。 参考にさせて頂きます。

関連するQ&A