[실습으로 다지는 C#] 두 개의 정수 사이의 합계 구하기

 

 이번 강의에서는 두 개의 정수를 입력 받은 후에 두 개의 정수 사이의 합계를 구하는 실습을 해 봅시다.

 먼저 어떻게 해야 문제를 해결할 수 있을지 생각한 후에 의사 코드(pseudo code) 형태로 작성해 보세요. 작성한 후에 비교해 보시기 바랍니다.

input := 정수를 입력 받는다.
 조건(정수로 변환(input,out num1)이 실패)
     오류를 출력 후 알고리즘 종료
 input := 정수를 입력 받는다.
 조건(정수로 변환(input,out num2)이 실패)
     오류를 출력 후 알고리즘 종료
 조건(num1<num2)
     두 수를 교환(ref num1, ref num2)
 sum:=두 정수 사이의 합계 구하기(num2,num1)
두 수를 교환(ref num1, ref num2)
     temp:= num1
     num1:= num2
     num2:= temp
두 정수 사이의 합계 구하기(start, end):합계
     sum:=0
     반복(value:= start->end)
         sum:= sum+value
     sum 반환   

 그리고 프로젝트를 생성한 후에 의사 코드를 주석으로 치환해 보세요. 두 수를 교환하는 부분과 두 정수 사이의 합계를 구하는 부분은 별도의 메서드로 정의해야겠죠.

 마찬가지로 여러분께서 주석을 작성한 후에 비교해 보세요.

//https://ehpub.co.kr
//실습으로 다지는 C#
//5. 반복문 실습1
//두 개의 정수를 입력받은 후에 두 수 사이의 모든 정수의 합계 구하기
using System;

namespace _005_반복문_실습1___두_개의_정수를_입력받은_후에_두_수_사이의_모든_정수의_합계_구하기
{
    class Program
    {
        static void Main(string[] args)
        {
            //input:= 정수를 입력 받는다.
            //조건(정수로 변환(input, out num1)이 실패)
            {
                //    오류를 출력 후 알고리즘 종료                
            }

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

            //조건(num1 < num2)
            {
                //    두 수를 교환(ref num1, ref num2)
            }

            //sum:= 두 정수 사이의 합계 구하기(num2, num1)            
        }

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

        //두 정수 사이의 합계 구하기(start, end):합계
        static int CalSum(int start, int end)
        {
            //sum:= 0
            //반복(value:= start->end)
            {
                //    sum:= sum + value
            }
            //sum 반환
            return 0;
        }
    }
}

 이제 주석을 코드로 편집해 봅시다.

 사용자로부터 입력받는 것은 문자열이므로 정수로 변환하는 작업이 필요합니다. 그리고 변환에 실패하였다면 사용자가 잘못 사용한 것으로 판단해야겠죠. 

Console.WriteLine("첫 번째 정수를 입력하세요.");
string input = Console.ReadLine();//input:= 정수를 입력 받는다.
int num1;
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로 설정할게요. 이를 위해 num2가 더 크면 두 수를 교환합니다.

if(num1<num2)//조건(num1 < num2)
{
    Swap(ref num1, ref num2);//    두 수를 교환(ref num1, ref num2)
}
int sum = CalSum(num2, num1);   //sum:= 두 정수 사이의 합계 구하기(num2, num1)
Console.WriteLine("{0}에서 {1}사이의 합계는 {2}입니다.", num2, num1, sum);
//두 수를 교환(ref num1, ref num2) static void Swap(ref int num1, ref int num2) {    int temp = num1;//temp:= num1   num1 = num2;//num1:= num2    num2 = temp;//num2:= temp }

 두 정수 사이의 합계를 구할 때는 합계를 0으로 초기화를 한 후에 반복해서 작은 값에서 큰 값 사이의 값들을 더하면 되겠죠. 이를 위해 반복문에서는 더해야 할 값을 작은 값으로 초기화하고 순차적으로 증가하면서 큰 값이 될 때까지 반복하게 해야 합니다. 그리고 반복해야 할 작업은 현재 합계와 변화하는 값을 더하는 작업을 해야겠죠.

//두 정수 사이의 합계 구하기(start, end):합계
static int CalSum(int start, int end)
{
    int sum = 0;//sum:= 0
    for (int value = start; value <= end; value++)//반복(value:= start->end)
    {
        sum += value;//    sum:= sum + value
    }
    return sum;//sum 반환            
}

 이제 빌드 후에 테스트를 수행하세요. 

=테스트 case1=
 첫 번째 정수를 입력하세요.
 1
 두 번째 정수를 입력하세요.
 100
 1에서 100사이의 합계는 5050입니다.
 =테스트 case2=
 첫 번째 정수를 입력하세요.
 100
 두 번째 정수를 입력하세요.
 1
 1에서 100사이의 합계는 5050입니다.
 =테스트 case3=
 첫 번째 정수를 입력하세요.
 1
 두 번째 정수를 입력하세요.
 백
 정수가 아닙니다.
 =테스트 case4=
 첫 번째 정수를 입력하세요.
 백
 정수가 아닙니다.

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

//https://ehpub.co.kr
//실습으로 다지는 C#
//5. 반복문 실습1
//두 개의 정수를 입력받은 후에 두 수 사이의 모든 정수의 합계 구하기
using System;

namespace _005_반복문_실습1___두_개의_정수를_입력받은_후에_두_수_사이의_모든_정수의_합계_구하기
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("첫 번째 정수를 입력하세요.");
            string input = Console.ReadLine();//input:= 정수를 입력 받는다.
            int num1;
            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;
            }

            if(num1<num2)//조건(num1 < num2)
            {
                Swap(ref num1, ref num2);//    두 수를 교환(ref num1, ref num2)
            }

            int sum = CalSum(num2, num1);   //sum:= 두 정수 사이의 합계 구하기(num2, num1)
            Console.WriteLine("{0}에서 {1}사이의 합계는 {2}입니다.", num2, num1, sum);
        }

        //두 수를 교환(ref num1, ref num2)
        static void Swap(ref int num1, ref int num2)
        {
            int temp = num1;//temp:= num1
            num1 = num2;//num1:= num2
            num2 = temp;//num2:= temp
        }
        //두 정수 사이의 합계 구하기(start, end):합계
        static int CalSum(int start, int end)
        {
            int sum = 0;//sum:= 0
            for (int value = start; value <= end; value++)//반복(value:= start->end)
            {
                sum += value;//    sum:= sum + value
            }
            return sum;//sum 반환            
        }
    }
}