본문 바로가기

Computer Engineering/나프잘

나프잘 파랑 / 9-7번 문제풀이 및 피드백

피드백과 공부 내용

1. 'groundStart가 0보다 크다가 아니라 1이상이다'라고 표현하는 편이 좀 더 논리적인 표현이다.


 

1. 문제 이해




2. 분석





3. 설계






4. 검토



 

5. c구현
//calculateFractionsMadeOfFactorial.c
/*
파일 명칭 : calculateFractionsMadeOfFactorial.c
함수 명칭 : main
기 능 : 1부터 100까지 회차를 세며, 회차를 분자로 하고, 분모를 홀수 등차수열의 팩토리얼 값으로 하는 분수를 구하고, 홀수 회차엔 합을, 짝수 회차엔 차를 구해 출력한다. 마지막엔 최종 계산값을 출력한다.
입 력 : 없음
출 력 : 계산값
작성 일자 : 2019-11-11
*/
//매크로 영역
#include <stdio.h>

#define MAX 10
#define DIVIDER 2

//함수 선언
int main(int argc, char* argv[]);

//함수 정의
int main(int argc, char* argv[]) {
 //자동 변수 선언
 auto double calculation = 0.0;
 auto unsigned int count;
 auto unsigned int groundStart;
 auto unsigned int ground;
 auto double fraction;
 auto unsigned int remainder;

 //1. 제목을 출력한다.
 printf("회차\t\t\t분수\t\t\t\t계산값\n");
 //2. 회차가 최대값보다 작거나 같을 때 반복한다.
 for (count = 1; count <= MAX; count++) {
  //2.2. 분모기준수를 구한다.
  ground = 1;
  groundStart = 2 * count - 1;
  //2.3. 분모를 구한다.
  while (groundStart > 0) {
   ground = ground * groundStart;
   groundStart = groundStart - 1;
  }
  //2.4. 분수를 구한다.
  fraction = count * 1.0 / ground;
  //2.5. 회차의 홀짝을 확인한다.
  remainder = count;
  while (remainder >= DIVIDER) {
   remainder -= DIVIDER;
  }
  //2.6. 홀수면, 합을 구한다.
  if (remainder == 1) {
   calculation += fraction;
  }
  //2.7. 짝수면, 차를 구한다.
  else {
   calculation -= fraction;
  }
  //2.8. 회차, 분수, 계산값을 출력한다.
  printf("%d\t\t\t%f\t\t\t%f\n", count, fraction, calculation);
  //2.1. 회차를 센다.
 }
 //3. 계산값을 출력한다.
 printf("계산값 : %f\n", calculation);
 //4. 끝낸다.
 return 0;
}

 

6. 디버깅









7. JAVA 구현
//Main.java
/*
파일 명칭 : Main.java
메소드 명칭 :main
기 능 : 1부터 100까지 회차를 세며, 회차를 분자로 하고 분모를 홀수 등차수열의 팩토리얼 값으로 하는 분수를 구하고, 홀수회차엔 합을, 짝수회차엔 차를 구해 출력한다. 마지막엔 최종 계산값을 출력한다.
입 력 : 없음
출 력 : 계산값
작성 일자 : 2019-11-11
*/
//패키지 선언
package calculatefractionsmadeoffactorial;

//Main클래스
public class Main{
    //main 메소드 정의
    public static void main(String[] args){
        //상수 변수 선언
        final int MAX=10;
        final int DIVIDER=2;
        //지역 변수 선언
        double calculation=0.0;
        int count;
        int groundStart;
        int ground;
        double fraction;
        int remainder;
        
        //1. 제목을 출력한다.
        System.out.println("회차\t\t\t분수\t\t\t계산값");
        //2. 회차가 최대값보다 작거나 같을 때 반복한다.
        for(count=1; count<=MAX; count++){
            //2.2. 분모기준수를 구한다.
            ground=1;
            groundStart=2*count-1;
            //2.3. 분모를 구한다.
            while(groundStart>0){
                ground=ground*groundStart;
                groundStart=groundStart-1;
            }
            //2.4. 분수를 구한다.
            fraction=count*1.0/ground;
            //2.5. 회차의 홀짝을 확인한다.
            remainder=count;
            while(remainder>=DIVIDER){
                remainder-=DIVIDER;
            }
            //2.6. 홀수면, 합을 구한다.
            if(remainder==1){
                calculation+=fraction;
            }
            //2.7. 짝수면, 차를 구한다.
            else{
                calculation-=fraction;
            }
            //2.8. 회차, 분수, 계산값을 출력한다.
            System.out.printf("%d\t\t\t%f\t\t\t%f\n", count, fraction, calculation);
            //2.1. 회차를 센다.
        }
        //3. 계산값을 출력한다.
        System.out.println("계산값 : "+calculation);
        //4. 끝낸다.
    }
}

 

 

8. NS차트