이번 강의에서는 두 개의 정수를 입력받아 작은 수가 큰 수의 약수인지 판별하는 실습을 할 거예요.
이를 위해 먼저 어떠한 알고리즘으로 수행해야 하는지 고민해 보세요. 그리고 난 후에 의사 코드(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 } } }