初歩的な質問で申し訳ありません。
教えて頂きたいです。
100回中10回NGになった場合にエラー発報するプログラムを作りたいです。
1回毎にOK又はNGを見ていきます。
私が考えられるレベルでは
①100個の配列を作成し、
1回ごとに箱をずらし
中にOKなら1、NGなら0を加算していくイメージです。
②また100回終わった箱からは、
順次配列の中身を
if(10 <= data_buf[i]){
program_err;
}
のように確認していく必要があります。
①、②を同時に行う必要があるかと思いますが、
具体的にプログラムに落とし込む事ができません。
お詳しい方がいらっしゃいましたら
恐れ入りますがご教示頂けたらと思います。
No.3ベストアンサー
- 回答日時:
いかのような処理になるかと思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
//下記を共通領域に確保
int keisoku_count; //計測カウント
int error_tbl[100]; //エラーテーブル 0:OK 1:NG
int ix; //エラーテーブル設定時の添え字
int ng_count; //過去100回のNGの件数
int sw; //100計測を行った場合、1が設定される
//発報判定ルーチン
//flag 0:OK 1:NG
//戻り値 0:発報なし 1:発報あり
int judge(int flag){
keisoku_count++; //計測カウントアップ
if (keisoku_count >= 100) sw = 1; //100以上なら1にセット
ng_count = ng_count - error_tbl[ix] + flag; //ng_count更新
error_tbl[ix] = flag; //テーブルへOK/NGを設定
ix++; //添え字更新
if (ix > 99) ix = 0; //99オーバーなら元に戻す
if (sw == 0) return 0; //計測が100回未満なら発報なし
if (ng_count < 10) return 0; //過去100回のNG件数が10未満なら発報なし
return 1; //発報あり
}
int main(void)
{
//初期設定開始
int i;
int flag;
keisoku_count = 0; //計測カウントクリア
ng_count = 0; //NGカウントクリア
sw = 0;
//エラーテーブルクリア
for (i = 0; i < 100;i++){
error_tbl[i] = 0;
}
ix = 0; //エラーテーブルの添え字を先頭にする
//初期設定終了
while(1){
//OK,NGのデータを取得
//OKならflagへ0を設定、NGならflagへ1を設定
if (judge(flag) == 1){
program_err(); //発報処理
}
//スリープ処理
}
}
--------------------------------------
不明点は補足ください。
@tatsu99様
本当にありがとうございました。
まだご記入頂いたコードのペーパーデバッグで確認した程度ですが、
動かしたい動作になっていると思います。
私自身もしっかり勉強しようと思います。
改めて本当にありがとうございました。
No.2
- 回答日時:
以下のケースの場合、
1回目 NG
2回目 NG
3回目 NG
4回目 NG
5回目 NG
6回目 NG
7回目 NG
8回目 NG
9回目 NG
10回目 NG 発報する
11回目 OK 発報する?しない?
12回目 NG 発報する
発報するのは10回目と12回目でしょうか?(11回目も100回中10回NGにはなってますが、これはどうしますか)
早速の返信大変感謝致します。
また少し私の説明不足でした。
申し訳ありません。
ここで@tatsu99様の例で話しますと、
仮に、1時間監視する、1回の動作0.5msだった場合、
7200回動作する事になります。
(過去100回のNG回数 / 動作数)
※動作数100回に達するまでは判定しない。
~動作開始~
1回目 NG
2回目 NG
3回目 NG
4回目 NG
5回目 NG
6回目 NG
7回目 NG
8回目 NG
9回目 NG
10回目 NG 発報しない(10 / 10)
11回目 OK 発報しない(10 / 11)
12回目 NG 発報しない(11 / 12)
・
・(この間全てOK)
・
99回目 NG 発砲しない(12 / 99)
100回目 OK 発砲する(12 / 1~100回)
101回目 OK 発砲する(11 / 2~101回)
102回目 OK 発砲する(10 / 3~102回)
103回目 NG 発砲する(10 / 4~103回)
104回目 OK 発砲しない(9 / 5~104回)
105回目 OK 発砲しない(8 / 6~105回)
具体的にこういった動きになります。
最初の99回は総動作100回に達していないので、
エラー発砲しないです。
説明がうまくいかず申し訳ありません。
以上、宜しくお願い致します。
No.1
- 回答日時:
>100回中10回NGになった場合にエラー発報するプログラムを作りたいです。
なにが100回中10回NGになった場合なのでしょうか?
C言語以前に、まず日本語として、どのようなプログラムをつくりたいのかをきちんと説明してください。
もし、これが、なにかの課題なら、その課題の文章を提示してください。
説明不足で申し訳ございません。
■動作1回毎に変動する電圧を出力する装置があり、
マイコンで動作1回毎に出力電圧を監視している。
■出力電圧を取得後に以下の判定を行う
電圧閾値>①出力電圧だった場合 OK
電圧閾値≦①出力電圧だった場合 NG
■動作累計100回動作の内、NGが10回以上だった場合にエラー発報
■過去100回の判定方法を随時監視しエラー発報を行う
→100回毎にエラー判定するのでは無く、
過去100回なので1回毎にエラー判定するイメージです。
以上、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Excel(エクセル) 【Excel関数、count系】どなたか教示下さると助かります。 Excelでシフトを管理しており、 2 2022/07/09 06:34
- Excel(エクセル) エクセルについて教えてください。 1回目が80以上(数字) or 対象外 (文字列)or (空欄) 2 2022/10/17 11:42
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) 関数について 4 2023/05/26 11:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
エクセル関数を教えてください
-
String""から型'Double'への変...
-
ApplicationとWorksheetFunctio...
-
エクセルVBAでApplication.Sum...
-
VBでSQL文のUPDATE構文を使った...
-
マクロの「SaveAs」でエラーが...
-
Filter関数を用いた結果、何も...
-
実行時エラー 438 の解決策をお...
-
VBA データ(特定値)のある最...
-
数式は残し値をクリアするマク...
-
エクセルVBAで#N/Aのようなエ...
-
マクロで"#N/A"のエラー行を削...
-
ACCESS VBAのSplit()関数の使用...
-
ACCESS2007 VBA 「INSERT INTO...
-
文字列内で括弧を使うには
-
【VBA】ワークブックを開く時に...
-
C言語のエラーについて。
-
オブジェクト型の変数にフォー...
-
Excel vbaについての質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報