2016-09-20 3 views
-1

私は、トーラスの種類、トーラスの表面積、表面積、および2つの入力半径に基づいてトーラス/ペインティングのコストを決定するプログラムに取り組んでいます:rmajorとrminor。 唯一の複雑な部分は、論理演算子や比較文を使用できないことです。トーラスに関連する表面積、体積、およびコストを決定することができますが、製造コードを決定することはできません。対応する製造コードは以下の通りである:論理演算子を使用せずにCで2文字を印刷する方法は?

  1. Riを:リングトーラス(rmajor> rminor)
  2. Hnの:ホーントーラス(rmajor = rminor)
  3. Spのスピンドルトーラス。 (rmajor < rminor)

対応する製造コードを各トーラスタイプに正しく印刷するにはどうすればよいですか?ここ

は私の現在のコードである:ここ

#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); 
} 

は私の例の出力のいくつかである:1リングトーラス(RI)と出力2であることが想定される

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 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 

出力であるべきですホーントーラス(Hn)。どんな助けもありがとう、ありがとう!

+1

あなたのコードでは、明確な目的を持たない多くの「魔法の」数字と変数が使用されます。あなたは、より簡単な、より簡単な例を提示することを検討すべきです。私は、この行が何を意味するかを理解するときに、どこで始めるべきか分かりません:char1 =(factor1 *(82-65))+(factor2 *(72-65))+(factor3 *(83-65)); –

+0

2つの数値を比較するのに3つの要因が必要なのはなぜですか? – dasblinkenlight

+0

ASCII文字で数学ゲームをする代わりに、 'if'ステートメントを分解して使用することはできませんか? – infixed

答えて

3

あなたのコードが間違ってfactor1factor2を計算:char1char2の計算内部の乗算は正確にfactor1の1、factor2、およびfactor31でなければならず、残りのものがなければならないことを示唆しながら、値が等しいとき、彼らは1滞在しますゼロである。

あなたは(factor3+1)%2によってfactor1factor2を乗じてこの問題を解決することができます

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); 

注計算から'A'を因数分解すると、あなたがはるかに簡単forumlaに到着することができますことを。

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]); 
関連する問題