• 締切済み

*至急 perl 違うところの修正と説明をお願いします。

この間質問したのですが、全く解決できないので再度お願いします。 Aというファイルを読み込んで、最大最小・平均を求めたいです。専門用語をできるだけ使わないで答えてください!! #!/usr/bin/perl # 12345 STDIN use strict; use warnings; open ( FILEHANDLE , " < A " ) ;  #Aを読み取ってnumbersに当てはめる my $Minimum=$ARGV[0]; #最小値に一番最初の値を当てはめる。 my $Maximum=$Minimum; #ひとまず最大値=最小値(両方とも一番最初)とおく my $Sum=$Minimum;     #?  my $temp=0;        #?temp my $i=1;    #numbersの最初の値iを初期化 while ( $i < $Num_arg){  #?(iと最初の値を比べる??) $temp=$ARGV[$i];      #? if ( $Minimum > $temp ) { #最小値と数字を比べる。 $Minimum = $temp;     #小さかったらその値を最小値と置く }elsif ( $Maximum < $temp ){ #最小値に当てはまらなかったら最大値と比べる。 $Maximum = $temp;    #大きかったらその値を最大値と置く。 } $Sum = $Sum + $temp;  #? $i++;         #最初の値iに1を足す。そしてループさせる } my $Average = $Sum / $Num_arg; #平均=合計÷全部の数 my $w =          #wをしたのforeach文で出た値と置く。 foreach my $w(0..$#Numbers){  #Numbersの最初から最後までやる(Σシグマとおなじ) ($Num_arg - $Average) ** / $Num_arg;  #Numbersのi番目の値から平均値を引き2剰そしてNumbersの数で割る。 } my $Standarddivitation = sqrt ($w); #標準偏差=wの平方根 print "Average value = $Average \n"; print "Maximum Value = $Maximum \n"; print "Minimum Value = $Minimum \n"; print "Standard devitation = $Standarddevitation; 私がやっていると思っているのが#のところです。?の部分はよく分かりません><。 何で違うかと間違っているところを(簡単なものを使って)修正してください。 気がついたのはNumbersとNum_arg(i番目をあらわしていることと総数を表している)とがばらばらなことです。 よろしくお願いします。

noname#108711
noname#108711
  • Perl
  • 回答数1
  • ありがとう数4

みんなの回答

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.1

>最大最小・平均を求めたいです。 前の質問にコピペで動くものを貼ってます。 標準偏差も欲しければ、必要なモジュールをインストールしてsakusaker7さんのスクリプトをコピペして下さい。 モジュールのインストール方法は、LinuxならCPAN、WindowsのActivePerlならppmでググればすぐ分かります。

noname#108711
質問者

お礼

そうなのですか! このパソコンではperlが使えないので試せないのです>< そのプログラムが動くかすらも分からないという初心者で。。。。。 さっそくググってみます。 ありがとうございました。

関連するQ&A

  • perl 初心者です。 わかりやすくお願いします。

    Perlを始めたのですが、本や色いろんなサイトを見てもよく分かりません。 Aと言うデータを読み込んで最大最小・平均・標準偏差を求めたいです。 (1)どこが間違っているのか1部づつでもいいので詳しく教えてください。 (2)一つ一つの意味がちゃんとはつかめていないと感じるので流れを教えてください。 #!/usr/bin/perl # 12345 STDIN use strict; use warnings; open ( FILEHANDLE , " < A " ) ; my @Str=<STDIN>; foreach my $Row (@Str ){ print $Row; } my $Minimum=$ARGV[0]; my $Maximum=$Minimum; my $Sum=$Minimum; my $temp=0; my $i=1; while ( $i < $Num_arg){ $temp=$ARGV[$i]; if ( $Minimum > $temp ) { $Minimum = $temp; }elsif ( $Maximum < $temp ){ $Maximum = $temp; } $Sum = $Sum + $temp; $i++; } my $Average = $Sum / $Num_arg; my $w = foreach my $w(0..$#Numbers){ ($Num_arg - $Average) ** / Num_arg; } my $Standarddivitation = sqrt ($w); print "Average value = $Average \n"; print "Maximum Value = $Maximum \n"; print "Minimum Value = $Minimum \n"; print "Standard devitation = $Standarddevitation;

  • 「Learning Perl」(第4章、問3)

    Perl初心者です。 「Learning Perl」(オライリー社、第5版)を勉強中なのですが、4章の練習問題3でつまずいています。 #!/usr/bin/perl use strict; sub total { my $sum; foreach (@_) { $sum += $_; } $sum; } sub average { if(@_ == 0) {return} my $count = @_; my $sum = total(@_); $sum/$count; } sub above_average { my $average = average(@_); my @list; foreach my $element (@_) { if($element > $average) { push @list, $element; } } @list; } my $average = average(100, 1..10); print "\$average = $average\n"; my $barney = above_average(100, 1..10); print "\$barney = $barney\n"; とやったのですが、結果が $average = 14.0909090909091 $barney = 1 となってしまいます。 ($averageの値は正しいのですが、$barneyの値が100となってほしいのに、1になってしまっています。) すみませんが、識者の方、どこが悪いのか、ご教授お願いします。

    • ベストアンサー
    • Perl
  • C言語 入力した数値の平均値の近似値(関数を利用)

    double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素の平均を値として返す関数 double average(double a[], int n) および、double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素のなかで、それら n 要素の平均値と最も近い値を返す関数 double closest_to_average(double a[], int n) を作成して、main関数で、平均値と最も近い値を出力しろ という問題をやってみたのですが、私のプログラムでは実行して、数値を入力した後強制終了されてしまいます。 どこが間違えているのか教えていただけないでしょうか? 以下が私の作ったプログラムです。 ---------------------------------------------------------------------- #include <stdio.h> double average(double a[], int n) { int i; double sum,avg; sum=0; for(i=0;i<n;i=i+1){ sum=sum+a[i]; } avg=sum/n; return(avg); } double closest_to_average(double a[], int n) { int i; double avg,num1,num2,ans; avg=average(a,n); num1=avg-a[0]; if(num1<0){ num1=num1*(-1); } for(i=1;i<n;i=i+1){ num2=avg-a[i]; if(num2<0){ num2=num2*(-1); } if(num1>num2){ num1=num2; ans=a[i]; } } return(ans); } int main (void) { int i,n; double a[100]; double ans; scanf("%d",&n); for(i=0;i<n;i=i+1){ scanf("%d",a[i]); } ans=closest_to_average(a,n); printf("%f",ans); return(0); } ---------------------------------------------------------------------- ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずです。 よろしくお願いします。

  • 平均値の出し方

    お世話になります。 Javaのアプレットを使ったプログラムを作成しているのですが、 どうしても表示がおかしくなってしまうのでお助けいただきたいのです。 まず、乱数で数字を10個表示させ、 その下にその平均値を出すというプログラムなのですが、 肝心の平均値が黒い四角で出てきてしまって 平均値が全く読めません(というか数字じゃない)。 エラーも出ていないので、どこがおかしいのかわからないのです。 なお、プログラムは以下のとおりです。 import java.awt.*; import java.applet.*; public class Average extends Applet{ public void paint(Graphics g){ int [] numbers = new int [10]; for (int i=0; i<numbers.length; i++){ numbers[i] = (int)(Math.random()*12+1); g.drawString(""+numbers[i], 30+30*i, 30); } int sum=0; int average; for (int i=0; i<numbers.length; i++){ sum = sum + numbers[i]; average = sum/10; g.drawString("平均値は,"+average, 30, 60); } } } まず適当に乱数で数字を10個表示し、 合計(sum)をとりあえず0としておいて、 合計に乱数の変数numbers[i]を10回足していくというつもりで書きました。 どなたかご教授いただけると助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • この英訳でよいでしょうか?

    海外にメールで依頼をしたいので要望を英語にしましたが、これで通じるでしょうか? 日本語での内容は「最大値と最小値を除いた平均値か単純な平均値を用いるか選べるようにしてほしい。」です。 英語「Please choose the average except the maximum and the minimum or simple average.」 です。

  • Basicのプログラミングについて・・・。

    Basicのプログラミングについて・・・。 以下のプログラムの最小値の出力をプラスの値にしたいのですが、 どうしても-1を入力すると最小値が-1になってしまします。 While n >=0で定義してあるのになぜでしょう? わかる方教えてください。 Sum = 0 Ave = 0 Counter = 0 Input "数を入力して下さい。"; n Maxim = 0 Minimum = 0 While n >=0 Sum = Sum + n Counter = Counter + 1 Input "数を入力して下さい。"; n P=P+n^2 SD=(P/Counter-Ave^2)^1/2 If n>Maxim Then Maxim = n End If If n<=Minimum Then Minimum = n End If Wend SD=(P/Counter-Ave^2)^1/2 If Counter > 0 then Ave = Sum/Counter Print "入力回数 = ";Counter Print "和 = ";Sum Print "平均 = ";Ave Print"標準偏差=";SD Print"最大値=";Maxim Print"最小値=";Minimum End if End

  • C言語 勉強始めた所で、まだ良く解りません、教えてください!

    C言語 勉強始めた所で、まだ良く解りません、教えてください! このプログラムを実行すると、5,5と表示されると思うのですが? /*****************************************************************************/ #include <stdio.h> int average( int *data, int count ) { int i, sum=0; for( i=0; i<count; i++ ) sum+=data[i]; return sum/count; } int main(void) { int numbers [] = { 2, 3, 5, 7, 9, 11, 13, 15, 17,19 }; printf("%d\n",average(numbers,5)); return 0; } /*******************************************************************************/ 5、だけしか表示されません、これでよいのでしょうか?

  • 電卓のJavaScriptで

    大学でプログラミング基礎の講義を取っているのですが、そこで配られたテキストをなぜそうなるのか理解できなかったのでご教授お願いします。 電卓のJavaScriptなのですが、 <script language = "JavaScript"> count = 0; sum = 0; num = 0; flag = 0; list = new Array( "0", "0", "0", "0", "0" ); これはグローバル変数ですべてのfunctionに適応させるためのものだと 思うのですが、sum = 0;num = 0;というのはこのJavaScriptでどのような 意味を持ったものなのでしょうか? function clist( ) { for( i = 0 ; i < 5 ; i++ ) { list[ i ] = 0; } } このlist[ i ] = 0;というのは配列変数を使っているのですが、何を意味しているのでしょうか? また、このループを使うことによってどのような意味があるのでしょうか? function aclear( ) { count = 0; sum = 0; num = 0; flag = 0; clist( ); display.value = 0; } function calc1( ) { num = sum; clist( ); display.value = num; flag = 1; } function calc2( ) { num = sum; clist( ); display.value = num; flag = 2; } function calc3( ) { num = sum; clist( ); display.value = num; flag = 3; } function calc4( ) { num = sum; clist( ); display.value = num; flag = 4; } これらのcalc1からcalc4のなかの式の意味がよくわかりません(>_<) function equal( ) { if(flag == 1) { sum = num + sum; } else if(flag == 2) { sum = num - sum; } else if(flag == 3) { sum = num * sum; } else if(flag == 4) { sum = num / sum; } else { aclear( ); } display.value = sum; } function push1( ) { list[count] = 1; sum = list[count]; ↑ この部分は何を意味しているのでしょうか? for( i = 0 ; i < count ; i++ ) { temp = 1; for( j = i ; j < count ; j++) { temp = temp * 10; } sum += list[i] * temp; } count += 1; display.value = sum; } list[count] = 1; 以下同様に function push9 まで続く。 ちょっと長すぎるので、全部書きたかったのですが、無理でした。 正直さっぱりなので、困っています。

  • Perl 内で実行される Perlで使用した変数を受け取りたい

    No.908814の質問と類似しています。 source.plとdest.plという2つのソースがあったときに、 source.pl側では複数個の引数と共にdest.plを呼び出します。dest.pl側で引数を受け取り、その値を変更します。 変更した引数を再度、source.pl側で利用するというようなことを行いたいです。 Cでいう関数の引数にポインタを渡して、受け側で値を変更するようなイメージです。 条件として戻り値は正常/異常のstatusに利用することと、 dest.plはサブルーチンにはしないということがあります。 ご回答、よろしくお願いします。 -------------------------○ source.pl my $arg = 1; $argを引数にしてdest.plの呼び出し ・ ・ dest.plで変更された$argを使用 -------------------------○ dest.pl $argを受け取り、値を変更する。 いくつかの print ""; ・ ・ $argを戻す。 No.908814で回答を頂いていますが、 違うのは、dest.plでのprint文はまま標準出力として表示し、 最後に結果だけを戻すというように処理したいのです。

  • C言語 入力した数値の平均値の近似値

    n個の数値を入力して、その平均値にもっとも近い値を求めよ。(double型の配列を用いること) nは実数データの前に最初に入力するものとする。 必要ならばnは100以下と仮定せよ。 答えは指数なしの表現で、欄の最小幅は8とし、精度は3とする。 という問題なのですが、作ってみたプログラムでは正しく動作できませんでした。 どこが違うのか教えてください。 以下が私の作ったプログラムです。 _____________________________________________________________________________________________________________________ #include <stdio.h> int main (void) { int i,n; double c[100],sum,avg,num1,num2,ans; sum=0.0; scanf("%d",&n); for(i=0;i<n;i=i+1) { scanf("%lf",&c[i]); sum=sum+c[i]; } avg=sum/n; num1=avg-c[0]; if(num1<0){ num1=num1*(-1); } for(i=1;i<n;i=i+1){ num2=avg-c[i]; if(num2<0){ num2=num2*(-1); } if(num1>num2); num1=num2; } printf("%8.3f",num1); return(0); } _____________________________________________________________________________________________________________________ ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずなのですが、 私のでは「4.667」と表示されてしまいます。 よろしくお願いします。

専門家に質問してみよう