Friday, March 23, 2007
Perl 펄] 분수 약분 함수 구현; Reduce a Fraction
분수를 약분하는 함수를 만드는 방법입니다. 아래의 reduceFraction 이라는 함수가, 완성된 결과물입니다.
참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.
스크립트 파일명: example.pl
분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc
참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.
분수 약분 예제
스크립트 파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;
# 5/10 (10분의 5)
printFraction(reduceFraction(5, 10));
# 출력 결과: 1/2
# 1/2 (2분의 1)
printFraction(reduceFraction(1, 2));
# 출력 결과: 1/2
# 2940/3150 (3150분의 2940)
printFraction(reduceFraction(2940, 3150));
# 출력 결과: 14/15
# 6/63 (63분의 6)
printFraction(reduceFraction(6, 63));
# 출력 결과: 2/21
# 63/6 (6분의 63)
printFraction(reduceFraction(63, 6));
# 출력 결과: 21/2
# 1/1 (1분의 1)
printFraction(reduceFraction(1, 1));
# 출력 결과: 1/1
# 555/555 (555분의 555)
printFraction(reduceFraction(555, 555));
# 출력 결과: 1/1
# 0/1 (1분의 0)
printFraction(reduceFraction(0, 1));
# 출력 결과: 0/1
# 1/0 (0분의 1)
printFraction(reduceFraction(1, 0));
# 출력 결과 (에러): NaN/NaN
# 0/0 (0분의 0)
printFraction(reduceFraction(0, 0));
# 출력 결과 (에러): NaN/NaN
# 분수 출력 함수
# (분자 분모가 든 배열을 입력받아 출력)
sub printFraction {
print $_[0], "/", $_[1], "\n";
}
# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
sub reduceFraction {
my @frac = @_;
if ($frac[1] == 0) { return "NaN", "NaN"; } # 분모가 0일 경우에 에러 반환
my $gcd = gcd(@frac);
return ($frac[0] / $gcd, $frac[1] / $gcd);
}
# 최대 공약수 계산 함수
sub gcd {
my $a = $_[0];
my $b = $_[1];
while ($b != 0) {
my $temp = $a % $b;
$a = $b;
$b = $temp;
}
return abs($a);
}
use strict; use warnings;
# 5/10 (10분의 5)
printFraction(reduceFraction(5, 10));
# 출력 결과: 1/2
# 1/2 (2분의 1)
printFraction(reduceFraction(1, 2));
# 출력 결과: 1/2
# 2940/3150 (3150분의 2940)
printFraction(reduceFraction(2940, 3150));
# 출력 결과: 14/15
# 6/63 (63분의 6)
printFraction(reduceFraction(6, 63));
# 출력 결과: 2/21
# 63/6 (6분의 63)
printFraction(reduceFraction(63, 6));
# 출력 결과: 21/2
# 1/1 (1분의 1)
printFraction(reduceFraction(1, 1));
# 출력 결과: 1/1
# 555/555 (555분의 555)
printFraction(reduceFraction(555, 555));
# 출력 결과: 1/1
# 0/1 (1분의 0)
printFraction(reduceFraction(0, 1));
# 출력 결과: 0/1
# 1/0 (0분의 1)
printFraction(reduceFraction(1, 0));
# 출력 결과 (에러): NaN/NaN
# 0/0 (0분의 0)
printFraction(reduceFraction(0, 0));
# 출력 결과 (에러): NaN/NaN
# 분수 출력 함수
# (분자 분모가 든 배열을 입력받아 출력)
sub printFraction {
print $_[0], "/", $_[1], "\n";
}
# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
sub reduceFraction {
my @frac = @_;
if ($frac[1] == 0) { return "NaN", "NaN"; } # 분모가 0일 경우에 에러 반환
my $gcd = gcd(@frac);
return ($frac[0] / $gcd, $frac[1] / $gcd);
}
# 최대 공약수 계산 함수
sub gcd {
my $a = $_[0];
my $b = $_[1];
while ($b != 0) {
my $temp = $a % $b;
$a = $b;
$b = $temp;
}
return abs($a);
}
분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc
tag: perl
Perl | 펄
<< Home