프로그래밍/Oracle

[Oracle] 알고리즘 문제 2

eunki 2022. 6. 14. 22:11
728x90

예제 1. 3개의 숫자를 각각 물어보게 하고, 3개의 숫자에 대한 최대 공약수를 출력

accept num1 prompt '첫 번째 숫자를 입력하세요'
accept num2 prompt '두 번째 숫자를 입력하세요'
accept num3 prompt '세 번째 숫자를 입력하세요'

select max(level)
    from dual
    where mod(&num1, level) = 0
        and mod(&num2, level) = 0
        and mod(&num3, level) = 0
    connect by level <= &num3;

 

 

 

예제 2. 16과 24의 최소 공배수를 출력

select 16 * 24 / max(level)
    from dual
    where mod(16, level) = 0
        and mod(24, level) = 0
    connect by level <= 24;

 

 

 

예제 3. 피타고라스의 정리로 직각 삼각형의 여부를 출력

accept num1 prompt '밑변의 길이를 입력하세요 ~'
accept num2 prompt '높이를 입력하세요 ~'
accept num3 prompt '빗변의 길이를 입력하세요 ~'

select decode(power(&num1, 2) + power(&num2, 2), power(&num3, 2), '직각 삼각형이 맞습니다', '직각 삼각형이 아닙니다') as 결과
    from dual;

 

 

 

예제 4. 0에서 1사이의 난수를 출력

select dbms_random.value(0,1)   
    from dual;

 

 

 

예제 5. 몬테카를로 알고리즘으로 원주율의 근삿값을 출력

accept p_num prompt '정사각형 안에 들어가는 빨간점의 갯수를 입력하세요'

select sum(case when power(x, 2) + power(y, 2) <= 1 then 1 else 0 end) / &p_num * 4 as 원주율
    from ( select dbms_random.value(0,1) as x,
                   dbms_random.value(0,1) as y
                from dual
                connect by level <= &p_num );

정사각형의 넓이 : 부채꼴의 넓이 = 정사각형의 점의 개수 : 부채꼴의 점의 개수

 

 

 

예제 6. 자연 상수 e 의 값 구하기

with loop_table as ( select level as num
                        from dual
                        connect by level <= 100000 )
select result
    from ( select num, power((1+1/num), num) as result
            from loop_table )
    where num = 100000;
728x90