2016-05-03 20 views
0

私はあなたの知恵が必要です。大した問題ではないようですが、私は方法が必要です。 まず、コードを共有します。このコードは正しいですが、私はいくつかの追加が必要です。ループ内の基準は、電圧がパーセンテージより大きい場合はOKですが、すべて正しいと思います。私は2つのループを持っていますが、ただ一つのプロンプトが必要です。 混乱している場合は、元の質問を共有できます。君たちありがとう。2ループの場合1つの結果

私は元の質問を置く:

電圧読み取りは、変電所から6時間毎に1回時間を得た(その6つの 測定値があります)されています。変電所について以下のチェックを実行するCプログラムを作成します。 a)平均と10%以上異なるすべての電圧を表示します。 b)1時間の電圧から次の電圧への変化が平均値の15%を超える連続した時間のすべてのペアを表示します。平均値が213.2ボルトで210.1 223.2 189.6 206.2 235.1 215.0 :

例1

6つの電圧を入力してください。 10%= 21.3ボルト。 15%= 32.0ボルト。

次の問題が発生しました: 1.時間3の電圧は189.6ボルト(差は23.6ボルト)でした。 2.時間5の電圧は235.1ボルト(21.9ボルトの差)であった。 3.時間2から時間3への電圧変化は33.6ボルトであった。平均値が221.1ボルトで233.1 201.0 221.5 240.2 222.7 208.1 :

例2

6つの電圧を入力してください。 10%= 22.1ボルト。 15%= 33.2ボルト。

問題は発生しませんでした。

#include <stdio.h> 
#include <math.h> 
#include <string.h> 

int i; 
float volt[6]; 
float avg, avg10, avg15, total, a, b; 

    int main() { 

    total= 0 ; 
    avg = 0; 
    printf("Enter 6 Volts of Machine\n"); 

    for (i=0; i<6; i++) { 
    printf("Type %d. volt", i+1); 
    scanf("%f",&volt[i]); 

    total = total + volt[i]; 
} 
avg = total/6; 
avg10 = (avg * 10)/100; 
avg15 = (avg * 15)/100; 
printf("------------------------------------------\n"); 
printf("The machine Avarage Voltage is %.2f\n", avg); 
printf("The Machine Avarage is%.2f\n", avg10); 
printf("The Machine 15 Avarage is%.2f\n\n\n", avg15); 


    for (i=0;i<6;i++) { 
     a = fabs(volt[i] - avg); 

     if(a > avg10) { 
    printf("\nVoltage at hour %d was %.2f volts (diffrence of %.2f volts)\n\n", i+1, volt[i], a); 
     } 
    } 


    for (i=0; i<5; i++) { 

     b = fabs(volt[i+1] - volt[i]); 
     if(b > avg15) { 
    printf("\nVoltage change from hour %d to hour %d was %.2f\n\n", i+1, i+2, b); 
     } 
    } 
+0

は、あなたの質問は、どのように第二の例では「いいえ問題は発生しなかった」印刷していますか? –

+0

はい、実際には、私はただ1つの "問題は発生しませんでした"という回答が必要なためです。私は何度も試してみましたので、forループの可能性を見たので、11 "問題はありませんでした"、またはループの下に3.ifを追加したところ、電圧が正しいと表示され、 "問題はありませんでした"という結果も表示されました。 – Axis

答えて

0

あなただけの1つのループしてみてください、このようなものが必要な場合:あなたは何も問題が発生しなかったときにメッセージを印刷したい場合はいずれか、またはどのように多くのエラーが報告された場合、あなたは覚えておく必要があります

for (i=0;i<6;i++) 
{ 
    if((a = fabs(volt[i] - avg)) > avg10) 
    { 
     printf("\nVoltage at hour %d was %.2f volts (diffrence of %.2f volts)\n\n", i+1, volt[i], a); 
    } 
    if((i < 5 && (b = fabs(volt[i+1] - volt[i])) > avg15) 
    { 
     printf("\nVoltage change from hour %d to hour %d was %.2f\n\n", i, i+1, b); 
    } 
} 
+0

Andrei、ありがとうございました。私はあなたのコードを試して、動作しているように見えますが、最初のif文と2番目のif文の結果が別々でなければならないという新しい問題があります。ちょうどあなたのためのフィードバックのために再度ありがとう。 – Axis

0

を。もちろん、「エラーが発生していません」という言葉は8回、エラーの報告は少し矛盾しているので、ループ内にそのようなメッセージを印刷することはできません。

予想される出力にはエラーの列挙が表示されるため、エラーの数を保持することをお勧めします。次のように実行します。

  • エラーメッセージを出力するたびに、エラーの数を増やします。
  • これを行う前に、これが報告されているfrstエラーかどうかを確認してください。そうであれば、キャプションを印刷してください(「次のエラーが発生しました」)
  • すべてをチェックしてもエラーは発生していない場合は、成功メッセージを出力してください。

あるいは、コードに:

int nerror = 0; 

for (i = 0; i < n; i++) { 
    double v = fabs(volt[i] - avg); 

    if (v > avg10) { 
     if (nerror == 0) { 
      puts("The following problems occurred:"); 
     } 

     nerror++; 
     printf("%d. Voltage at hour %d was %.2f volts " 
      "(diffrence of %.2f volts)\n", 
      nerror, i + 1, volt[i], v); 
    } 
} 

for (i = 1; i < n; i++) { 
    double diff = fabs(volt[i - 1] - volt[i]); 

    if (diff > avg15) { 
     if (nerror == 0) { 
      puts("The following problems occurred:"); 
     } 

     nerror++; 
     printf("%d. Voltage change from hour %d to " 
      "hour %d was %.2f\n", 
      nerror, i, i + 1, diff); 
    } 
} 

if (nerror == 0) puts("No problems were encountered."); 
+0

最適化されたバージョンを使用できます。 –

0

は私の質問が解決した皆をありがとうございました。ハッピーコーディング!

コードは次のとおりです。

#include <stdio.h> 
#include <math.h> 


int i; 
float volt[6]; 
float avg, avg10, avg15, total, a, b; 

    int main() { 
    int voltageproblem1 = 0; 
    int voltageproblem2 = 0; 
    total= 0 ; 
    avg = 0; 
    printf("Enter 6 Volts of Machine\n"); 

    for (i=0; i<6; i++) { 
    printf("Type %d. volt", i+1); 
    scanf("%f",&volt[i]); 

    total = total + volt[i]; 
} 
avg = total/6; 
avg10 = (avg * 10)/100; 
avg15 = (avg * 15)/100; 
printf("------------------------------------------\n"); 
printf("The machine Avarage Voltage is %.1f\n", avg); 
printf("The Machine Avarage is%.1f\n", avg10); 
printf("The Machine 15 Avarage is%.1f\n\n\n", avg15); 


    for (i=0;i<6;i++) { 
     a = fabs(volt[i] - avg); 

     if(a > avg10) { 
    printf("\nVoltage at hour %d was %.1f volts (diffrence of %.1f volts)\n\n", i+1, volt[i], a); 
    voltageproblem1 =1; 
     } 
    } 
    for (i=0; i<5; i++) { 

     b = fabs(volt[i+1] - volt[i]); 
     if(b > avg15) { 
    printf("\nVoltage change from hour %d to hour %d was %.1f\n\n", i+1, i+2, b); 
    voltageproblem2 = 1; 
     } 
    } 
    if ((voltageproblem1==0)&&(voltageproblem2==0)) { 
    printf("No problems were encountered.\n\n"); 
     } 

} 
関連する問題