2011-08-02 5 views
1

평균값을 입력하도록 사용자에게 요청하여 평균값을 계산하는 프로그램을 작성할 수 있습니까?perl을 사용하여 평균값을 계산하십시오.

세 개의 숫자의 평균을 계산하는 펄 스크립트를 작성했습니다.

대신 내가 오히려 터미널에서 세 개의 숫자를 입력하라는 메시지가 내가 변수로 입력 번호의 내 코드 컴퓨팅 평균의
#usr/bin/perl 
use strict; 
use warnings; 

my $a; #variable declaration 
my $b; #variable declaration 
my $c; #variable declaration 
my $avg; #variable declaration 
my $x; #variable declaration 
my $y; #variable declaration 
my $z; #variable declaration 
my $results; #variable declaration 
my $number; #variable declaration 

$a = 2; #number 1 
$b = 6; #number 2 
$c = 7; #number 3 

$avg = avg($a,$b,$c); #Three variables to be averaged 

    sub avg { 
    ($x,$y,$z) = @_; #Store variables in array 
    $results = ($x+$y+$z)/3; #Values stored added, and divided for average 
    return $results; #return value 

      } 

    print "$avg\n"; 
    exit; 

이 평균화 될 : 여기 내 코드입니다.

print STDOUT "Enter a number: \n"; 
$averages = <STDIN>; 
print "The Average is $averages.\n"; 

내가 그것을이 제대로 내 코드에 구현 될 수있는 방법을 아무것도 출력하지 않습니다 내 코드에 이것을 추가 할 때 : 당신과 같이 몇 가지 코드를 구현해야 그런 식으로 뭔가를 할 펄 알고.

+4

Learning Perl의 처음 네 장을 읽었다면 스스로 대답 할 수 있습니다. –

+3

슬프게도 나는이 질문을 끝내기 위해 투표해야했습니다. 훌륭한 perl 문서 (perldoc 유틸리티 나 http://perldoc.perl.org에서)를 [perlintro] (perldoc.perl.org/perlintro.html)에서 읽어보십시오. "진짜"책을 보시려면 Learning Perl (bdf said)이나 Chromatic의 [Modern Perl] (http://www.onyxneon.com/books/modern_perl/index.html)을 무료로 사용해보십시오. Gabor의 [튜토리얼] (http://szabgab.com/perl_tutorial.html)도 있습니다. 언어 기본 사항을 익힌 후에는 버그/문제점을 기꺼이 도와 드리겠습니다. –

답변

3

보다 일반적인 솔루션 :

sub avg { 
    my $total; 
    $total += $_ foreach @_; 
    # sum divided by number of components. 
    return $total/@_; 
} 

당신이 평균있어 얼마나 많은 항목을 당신이 상관 없어 그런 식으로. avg()에 나와 있습니다.

다음 단계는 입력 내용을 읽는 것입니다. 당신은 할 수있는이 같은 <> 연산자 :

my @input; 
print "Enter a few numbers...\n"; 
while(<>) { 
    chomp; 
    while(m/([\d.-])/g) { 
     push @input, $1; 
    } 
} 
local $" = ', '; 
print "The average of [@input] is ", avg(@input), "\n"; 

그리고 우리는 입력의 세트를 인쇄하고, 호출하고 avg()를 인쇄하여 모두 함께 넣어 끝에

.

정규 표현식은 입력 문자열에서 숫자가 모호하게 보이는 부분을 추출합니다. 숫자 유효성 검사기와는 다릅니다.

+2

정확한 관점에서 더 나은 결과를 얻었고 args가없는 경우 더 나은 결과를 얻었습니다 :'sub avg {my $ avg; @_에 대한 $ avg + = $ _/@ _; return $ avg; }' – ikegami

+0

표준 부동 소수점 수학에서 가장 중요한 인쇄 된 숫자에서 2의 차이를 발견했습니다. Math :: BigFloat를 사용하여 1.3e-40의 차이를 발견했습니다. Ysth는 가장 큰 크기의 숫자를 가장 빨리 믹스에 넣기 위해 입력을 정렬 할 것을 제안했지만 그 결과는 내가 감지 할 수있는 결과와 바뀌지 않았습니다. undef를 반환하는 것과 예외를 던지는 것에 관해서는, 당신이 원하는 것에 달려 있다고 생각하지만, 서브 내의 모든 작업을 시작하기 전에 undef를 반환하기는 쉽습니다. 흥미로운 제안. 나는 몇 가지 대체 솔루션 인 ikegami를 사용해 봤다. :) – DavidO

+0

큰 숫자에 작은 숫자를 추가하게되므로 더 긴 순서에 영향을 미치므로 작은 숫자의 하위 비트는 완전히 손실됩니다. 예, 그 차이는 미미할 것입니다. – ikegami

0
#!/usr/bin/perl 
use warnings; 
use strict; 

my $sum = 0; 
my $n = 0; 
while (<>) { 
    $sum += $_; 
    $n++; 
} 
print $sum/$n, "\n"; 

간단히 요약하면 항목 수를 합산하고 추적하여 평균을 계산합니다. while (<>)은 명령 행에 지정된 파일 또는 STDIN에서 마술로 읽습니다 (프로그램이 대화식 일 경우에만 while (<STDIN>)을 사용하는 것이 좋습니다). 첫 번째 단계가 될 수 평균을 계산

관련 문제