[실습으로 다지는 C#] 두 개의 정수를 입력받아 작은 수가 큰 수의 약수인지 판별

 

 이번 강의에서는 두 개의 정수를 입력받아 작은 수가 큰 수의 약수인지 판별하는 실습을 할 거예요.

 

 이를 위해 먼저 어떠한 알고리즘으로 수행해야 하는지 고민해 보세요. 그리고 난 후에 의사 코드(pseudo code)를 작성해 봅시다. 여러분께서 먼저 작성하고 난 후에 비교해 보세요. 

input := 정수를 입력 받는다.
조건(정수로 변환(input,out num1)이 실패)
     오류를 출력 후 알고리즘 종료
input := 정수를 입력 받는다.
조건(정수로 변환(input,out num2)이 실패)
     오류를 출력 후 알고리즘 종료
큰 수를 num1에 작은 수를 num2로 설정
조건(num1을 num2로 나누었을 때 몫이 0)
      num2는 num1의 약수
아니면
     num2는 num1의 약수가 아님
두 수를 교환(ref num1, ref num2)
    temp:= num1
    num1:= num2
    num2:= temp 

 이와 같이 의사 코드를 작성하였다면 프로젝트를 생성하고 주석을 달아보세요.

//https://ehpub.co.kr
//실습으로 다지는 C#
//5. 조건문 if else 실습2 - 두 개의 정수를 입력받아 작은 수가 큰 수의 약수인지 판별
using System;

namespace _005_조건문_실습2___두_개의_정수를_입력받아_작은_수가_큰_수의_약수인지_판별
{
    class Program
    {
        static void Main(string[] args)
        {
            //input:= 정수를 입력 받는다.
            //조건(정수로 변환(input, out num1)이 실패)
            {
                //오류를 출력 후 알고리즘 종료                
            }

            //input := 정수를 입력 받는다.
            //조건(정수로 변환(input, out num2)이 실패)
            {
                //오류를 출력 후 알고리즘 종료                
            }

            //큰 수를 num1에 작은 수를 num2로 설정
            //조건(num1을 num2로 나누었을 때 몫이 0)
            {
                //num2는 num1의 약수
            }
            //아니면
            {
                //num2는 num1의 약수가 아님
            }
        }

        //두 수를 교환(ref num1, ref num2)
            //temp:= num1 
            // num1:= num2
            //num2:= temp
    }
}

 두 개의 정수를 입력받는 부분을 작성합시다. 실제 사용자가 입력한 것은 문자열로 받기 때문에 정수로 변환하는 작업이 필요하다는 것은 이전 강의에서 살펴보았어요.

Console.WriteLine("첫 번째 정수를 입력하세요.");
string input = Console.ReadLine();//input:= 정수를 입력 받는다.
int num1 = 0;
if (int.TryParse(input, out num1) == false)//조건(정수로 변환(input, out num1)이 실패)
{
    Console.WriteLine("정수가 아닙니다.");//오류를 출력 후 알고리즘 종료
    return;
}

Console.WriteLine("두 번째 정수를 입력하세요.");
input = Console.ReadLine();//input := 정수를 입력 받는다.
int num2;
if (int.TryParse(input, out num2) == false)//조건(정수로 변환(input, out num2)이 실패)
{
    Console.WriteLine("정수가 아닙니다.");//오류를 출력 후 알고리즘 종료
    return;
}
//큰 수를 num1에 작은 수를 num2로 설정
if (num1 < num2)
{
    Swap(ref num1, ref num2);
}
if(num1% num2 == 0)//조건(num1을 num2로 나누었을 때 몫이 0)
{
    Console.WriteLine("{0}은 {1}의 약수", num2, num1);//num2는 num1의 약수
}
else//아니면
{
    Console.WriteLine("{0}은 {1}의 약수가 아닙니다.", num2, num1);//num2는 num1의 약수가 아님
}
//두 수를 교환(ref num1, ref num2)
private static void Swap(ref int num1, ref int num2)
{
    int temp = num1;//temp:= num1 
    num1 = num2;// num1:= num2
    num2 = temp;//num2:= temp
}

 이와 같이 코드를 작성하였다면 테스트를 수행해야겠죠. 작은 수가 큰 수의 약수일 때, 약수가 아닐 때, 잘못 입력하였을 때를 고려하여 테스트를 수행하세요.

= 테스트 case1 =
 첫 번째 정수를 입력하세요.
 2
 두 번째 정수를 입력하세요.
 8
 2은 8의 약수
 = 테스트 case2 =
 첫 번째 정수를 입력하세요.
 8
 두 번째 정수를 입력하세요.
 3
 3은 8의 약수가 아닙니다.
 = 테스트 case3 =
 첫 번째 정수를 입력하세요.
 8
 두 번째 정수를 입력하세요.
 dl
 정수가 아닙니다.
 = 테스트 case4 =
 첫 번째 정수를 입력하세요.
 vkf
 정수가 아닙니다.

 다음은 이번 실습에서 사용한 전체 소스 코드입니다.

//https://ehpub.co.kr
//실습으로 다지는 C#
//5. 조건문 if else 실습2 - 두 개의 정수를 입력받아 작은 수가 큰 수의 약수인지 판별
using System;

namespace _005_조건문_실습2___두_개의_정수를_입력받아_작은_수가_큰_수의_약수인지_판별
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("첫 번째 정수를 입력하세요.");
            string input = Console.ReadLine();//input:= 정수를 입력 받는다.
            int num1 = 0;
            if (int.TryParse(input, out num1) == false)//조건(정수로 변환(input, out num1)이 실패)
            {
                Console.WriteLine("정수가 아닙니다.");//오류를 출력 후 알고리즘 종료
                return;
            }

            Console.WriteLine("두 번째 정수를 입력하세요.");
            input = Console.ReadLine();//input := 정수를 입력 받는다.
            int num2;
            if (int.TryParse(input, out num2) == false)//조건(정수로 변환(input, out num2)이 실패)
            {
                Console.WriteLine("정수가 아닙니다.");//오류를 출력 후 알고리즘 종료
                return;
            }

            //큰 수를 num1에 작은 수를 num2로 설정
            if (num1 < num2)
            {
                Swap(ref num1, ref num2);
            }

            if(num1% num2 == 0)//조건(num1을 num2로 나누었을 때 몫이 0)
            {
                Console.WriteLine("{0}은 {1}의 약수", num2, num1);//num2는 num1의 약수
            }
            else//아니면
            {
                Console.WriteLine("{0}은 {1}의 약수가 아닙니다.", num2, num1);//num2는 num1의 약수가 아님
            }
        }

        //두 수를 교환(ref num1, ref num2)
        private static void Swap(ref int num1, ref int num2)
        {
            int temp = num1;//temp:= num1 
            num1 = num2;// num1:= num2
            num2 = temp;//num2:= temp
        }
    }
}