c++질문입니다

조회수 1187회

이미지

함수를 이용해 n까지의합, n까지의 짝수의 합, 홀수의 합을 구하고 싶습니다. 함수안에서 구현, 메인함수에서는 출력만 하는 방식입니다. 실행해 보니 초기화 되지 않은 지역변수 i,s,r을 사용하고 있다고 나옵니다. 제가 코딩하고 있는 방향이 제가 원하는 방향과 일치하는지 확인부탁드립니다. 어떤 방식으로 고쳐나가면 될지 고수님들의 조언부탁드립니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 코드같은건 사진으로 찍어서 올리지 마세요. dbwodlf3 2020.10.19 13:34
  • 그리고 포인터 변수 같은건 int* nsum 으로 하지마시고, int *nsum 으로 하세요. dbwodlf3 2020.10.19 13:35
  • int i,s,r,n; 으로 하지마세요. 변수에 특별한 이름을 주세요... int i,s,r,n; 이렇게 한줄로 선언하는거 별로 좋지 않아요. (문제는 없겠지만. 코드 질적으로.) dbwodlf3 2020.10.19 13:37
  • i가 뭐하는건데요? index start? what?? dbwodlf3 2020.10.19 13:37
  • 그리고 포인터 변수 사용하는 이유가 뭔가요? dbwodlf3 2020.10.19 13:37
  • 그렇게 사용할거면 포인터 파라미터 사용하지마시고, & 파라미터 사용하세요. dbwodlf3 2020.10.19 13:38

2 답변

  • 깊은 고뇌가 느껴지는 코드네요.

    아래 코드 참고하세요.

    • 코드
    #include<iostream>
    using namespace std;
    void sum(int n, int* nsum, int* esum, int* osum);
    
    int main()
    {
        int nsum = 0, esum = 0, osum = 0;
        int n = 0;
    
        cin >> n;
    
        sum(n, &nsum, &esum, &osum);
    
        cout << "1부터 n까지의 합: " << nsum << endl;
        cout << "1부터 n까지의 짝수의 합: " << esum << endl;
        cout << "1부터 n까지의 홀수의 합: " << osum << endl;
    
        return 0;
    }
    
    void sum(int n, int* nsum, int* esum, int* osum)
    {
        *nsum = 0;
        *esum = 0;
        *osum = 0;
    
        for (int i = 1; i <= n; i++)
        {
            (*nsum) += i;
    
            if (i % 2 == 1)
                (*osum) += i;
            else
                (*esum) += i;
        }
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 코드는 캡쳐말고, 직접 텍스트를 복사해서, 마크다운 소스코드 블럭 안에 넣어서 질문해 주세요.
    • i, s, r 변수는 main 에서 선언할 필요가 없네요. sum 함수 안의 지역변수로도 충분합니다.
    • for 루프 전에 s 초기값 0 주는 것 필요합니다.
    • brute force 로 총합, 짝수합, 홀수합을 각각 구하는 것이 코드를 읽는 입장에서도 더 이해하기 편하긴 합니다.
    • 수식을 계산해서, n 이 짝수일 때 홀수이를 때를 나누어 계산한 것 같은데, 그럴 거라면, 왜 nsum = n*(n+1)/2 로 계산하지 않나요?
    • cogi 님이 댓글로 달아놓은 조언들도 중요한 내용들입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)