2016-09-20 2 views
-1

저는 토러스의 종류, 토러스의 부피, 표면적 및 2 개의 입력 반경 : rmajor 및 rminor을 기반으로 한 페인팅/페인팅 비용을 결정하는 프로그램을 작업 중입니다. 유일한 복잡한 부분은 논리 연산자 나 비교 문을 사용할 수 없다는 것입니다. 토러스와 관련된 표면적, 부피 및 비용을 결정할 수 있지만 인쇄 문에 표시된대로 제조 코드를 결정할 수는 없습니다. 해당 제조 코드는 다음과 같다 :논리 연산자를 사용하지 않고 C에서 2 문자를 인쇄하는 방법은 무엇입니까?

  1. 리 : 링 원환 (rmajor> rminor)
  2. HN : 혼 원환 (rmajor = rminor)
  3. SP : 스핀들 원환. (rmajor < rminor)

해당 제조 코드를 각 토러스 유형으로 올바르게 인쇄하려면 어떻게해야합니까?

출력 1 링 원환 체 (RI)로 가정하고
Please input major radius (meters): 10 
Please input minor radius (meters): 5 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
Manufacturing Code: ? 
Surface Area  :  1973.92 
Volume   :  4934.80 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
Cost of building torus ($): 371343.87 
Cost of painting torus ($):  26944.02 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
52 lpvinslogin01.itap.purdue.edu ~/CS159/labs/lab03 % a.out 
Please input major radius (meters): 7 
Please input minor radius (meters): 7 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
Manufacturing Code: ▒▒ 
Surface Area  :  1934.44 
Volume   :  6770.55 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
Cost of building torus ($): 509483.78 
Cost of painting torus ($):  26405.14 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 

출력 2는이어야한다 : 여기

#include<stdio.h> 
#include<math.h> 
//GLOABAL DECLARATIONS 

#define COST 75.25 
#define PAINT 13.65 

int main() 
{ 
    //LOCAL DECLARATIONS 

    int rmajor; 
    int rminor; 
    int factor1; 
    int factor2; 
    int factor3; 
    char char1; 
    char char2; 
    double area; 
    double volume; 
    double cost; 
    double paint; 

    //EXECUTABLES 

    printf("Please input major radius (meters): "); 
    scanf("%d" , &rmajor); 
    printf("Please input minor radius (meters): "); 
    scanf("%d", &rminor); 
    printf("\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"); 

    volume = (M_PI * pow(rminor,2)) * (2*M_PI*rmajor); 
    area = (4 * pow(M_PI,2) * rmajor * rminor); 

    factor1 = rmajor/rminor; 
    factor2 = rminor/rmajor; 

    factor1 = (factor1 + 2) % (factor1 + 1); 
    factor2 = (factor2 + 2) % (factor2 + 1); 
    factor3 = (factor1 * rmajor) + (factor2 * rminor); 
    factor3 = factor3/(factor1 + factor2); 

    char1 = (factor1 * ('R' - 'A')) + (factor2 * ('H' - 'A')) + (factor3 * ('S' - 'A')); 
    char2 = (factor1 * ('i' - 'A')) + (factor2 * ('n' - 'A')) + (factor3 * ('p' - 'A')); 
    //printf("\nchar1: %c\n", char1); 
    //printf("char2: %c\n", char2); 

    cost = COST * volume; 
    paint = PAINT * area; 

    printf("Manufacturing Code: %c%c\n ", 'A' + char1, 'A' + char2); 
    printf("Surface Area  : %13.2f\n", area); 
    printf("Volume   : %13.2f\n", volume); 
    printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); 
    printf("Cost of building torus ($): %12.2f\n", cost); 
    printf("Cost of painting torus ($): %12.2f\n", paint); 
    printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); 

    return(0); 
} 

내 예컨대 출력의 일부이다 : 여기

내 현재 코드 경적 토러스 (Hn). 어떤 도움을 주셔서 감사합니다, 감사합니다!

+1

코드에는 분명한 목적이없는 많은 "마법"번호와 변수가 사용됩니다. 따라하기 쉬운 최소한의 예제를 제시하는 것이 좋습니다. 나는이 라인이 무엇을 의미하는지 알아낼 때 어디에서 시작해야할지 모른다. char1 = (factor1 * (82 - 65)) + (factor2 * (72 - 65)) + (factor3 * (83 - 65)); –

+0

두 숫자를 비교하는 데 왜 세 가지 요인이 필요합니까? – dasblinkenlight

+0

아스키 문자로 수학 게임을하는 대신에'if'명령문을 쓰고 사용하면 안 될까요? – infixed

답변

3

코드는 factor1 계산하고 factor2 잘못 : 값이 동일한 경우 char1char2의 계산 내부 곱셈 정확히 factor1 중 하나 factor2factor31해야하며, 나머지 사람이해야한다고 제안하면서 그들은 1을 유지 0이된다.

당신은 (factor3+1)%2으로 factor1factor2를 곱하여이 문제를 해결할 수 계산에서 'A'을 감안하면 당신은 훨씬 간단 제조법에 도달 할 수 있음을

factor1 = rmajor/rminor; 
factor2 = rminor/rmajor; 

factor1 = (factor1 + 2) % (factor1 + 1); 
factor2 = (factor2 + 2) % (factor2 + 1); 
factor3 = (factor1 * factor2); // rmajor == rminor 
factor1 *= (factor3+1) % 2; // rmajor > rminor 
factor2 *= (factor3+1) % 2; // rmajor < rminor 

char1 = (factor1 * 'R') + (factor2 * 'S') + (factor3 * 'H'); 
char2 = (factor1 * 'i') + (factor2 * 'p') + (factor3 * 'n'); 

printf("Manufacturing Code: %c%c\n ", char1, char2); 

참고.

Demo. 다음과 같이

+0

내 논리의 오류를 지적 해 주셔서 감사합니다! 6-8 행은 내가 찾고 있던 곳입니다. 정말 고맙습니다! –

1

당신은 2의 범위는 0에서 단일 인덱스로 factor1factor2을 변환 할 수 있습니다

int mfindex = 2 * factor1 + factor2 - 1; 

는 그 다음 인덱스를 사용하여 제조 코드를 찾고의 문제이다.

static const char mfcode[3][2] = { "Sp", "Ri", "Hn" }; 

    printf("Manufacturing Code: %.2s\n ", mfcode[mfindex]); 
관련 문제