教えてください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
fight

教えてください

#1

投稿記事 by fight » 17年前

c言語を始めて間もないものです。添付してあるソースプログラムはBinary Dataに2進数の文字列を入力するとビットごとにある確率で0を1に、1を0に変更して出力させるものです。ある方に作成していただいたのですが・・・これを少し書き換えてBinary Dataを1回入力したら一気に10回実行して出力するようにしたいと思っています。自分でfor文を使用して色々やってみたのですがうまくいきません。このような場合どのようにすればいいのか教えていただきたくて質問させていただきました。よろしくお願いします。

array

Re:教えてください

#2

投稿記事 by array » 17年前

原因はポインタにある・・・のかもしれません。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
      char    bin[100];
      char    bin2[100];
      char    *p;
      int     pcnt;
      int     error;
      int     i;

      /* 乱数の初期化 */ 
      srand(time(0));
      /* データ入力 */
      printf("Noise Rate (%%) ? "); scanf("%d", &pcnt);  
      while(1) {
            printf("Binary Data ? "); scanf("%s", bin);
            p = bin;
            /*  入力情報をコピる */
            strcpy(bin2, bin);
            /* 実行打ち切り */
            if( *p != '0' && *p != '1') break;
            for(i=0; i<10; i++){
                  /*  入力情報を戻す */
                  strcpy(bin, bin2);
                  /*  番地を戻す */
                  p = bin;
                  /*  確率pcnt%でのノイズ混入実行 */
                  while( *p != '\0' ) {
                        error = (int)rand()%100 < pcnt;
                        if( error ) {
                              if( *p == '0') *p = '1';
                              else         *p = '0';
                        }
                        p++;
                  }
                  /*  出力 */
                  printf("Output = %s\n", bin);
            }
      }
      return 0;
}
 


こんな感じで10回出力してくれたりしませんかね・・・結果確認してないので出来てなかったら言ってください。実際に試してみます。

box

Re:教えてください

#3

投稿記事 by box » 17年前

> 自分でfor文を使用して色々やってみたのですがうまくいきません。

その、うまくいかないコードを載せてみる予定はありますか?

fight

Re:教えてください

#4

投稿記事 by fight » 17年前

>boxさん 本当に恥ずかしいのですが・・・自分で手を加えたのはこれです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
  char    bin[100];
 char    *p;
  int     pcnt;
  int     error;
  int     i;

/* 乱数の初期化 */ 
srand(time(0));
/* データ入力 */
printf("Noise Rate (%%) ? "); scanf("%d", &pcnt);  
for(i = 0; i <= 10; i++){   
   while(1) {
        printf("Binary Data ? "); scanf("%s", bin);
        p = bin;
        /* 実行打ち切り */
	    if( *p != '0' && *p != '1') break;
        /*  確率pcnt%でのノイズ混入実行 */
        while( *p != '\0' ) {
            error = (int)rand()%100 < pcnt;
            if( error ) {
                if( *p == '0') *p = '1';
                else         *p = '0';
              }
           p++;
          }
        /*  出力 */
        printf("Output = %s\n", bin);
      }
  } 
  return 0;
}

fight

Re:教えてください

#5

投稿記事 by fight » 17年前

> array さん すみません。上手くいかなかったです・・・。

管理人

Re:教えてください

#6

投稿記事 by 管理人 » 17年前

>boxさん

携帯からご覧になると、投稿時の添付ファイルが見えないのですが、
プログラムは添付してあるようです。

>fightさん

コードを投稿される場合はプレタグを使っていただけると見易いです。
詳しくは規約をご覧下さい。

box

Re:教えてください

#7

投稿記事 by box » 17年前

> 携帯からご覧になると、投稿時の添付ファイルが見えないのですが、
> プログラムは添付してあるようです。

最初の投稿で添付してあったのは、

> 添付してあるソースプログラムはBinary Dataに2進数の文字列を入力すると
> ビットごとにある確率で0を1に、1を0に変更して出力させるものです。
> ある方に作成していただいたのですが・・・

であって、

> これを少し書き換えてBinary Dataを1回入力したら
> 一気に10回実行して出力するようにしたいと思っています。
> 自分でfor文を使用して色々やってみたのですがうまくいきません。

これではないです。
だから、

> その、うまくいかないコードを載せてみる予定はありますか?

と書きました。

array

Re:教えてください

#8

投稿記事 by array » 17年前

あれ、実行してみると私の思ってるとおり動作しているのですが、この動作は間違ってるのでしょうか

>Binary Dataを1回入力したら一気に10回実行して出力するようにしたいと思っています

入力後、そのデータにノイズ混入シュミレーションを10回繰り返すんですよね。
上記のプログラムそのままです。
#######実行結果########
Noise Rate (%) ? 50
Binary Data ? 00000000   ←2進数入力
Output = 11101101        ←以下ノイズが50%で混入
Output = 00101001
Output = 11000110
Output = 10001101
Output = 11101111
Output = 11100010
Output = 00111100
Output = 11111100
Output = 00111011
Output = 11101101
Binary Data ?            ←再度入力

#######実行結果2########
Noise Rate (%) ? 10      ←ノイズ混入10%
Binary Data ? 00000000
Output = 00100000
Output = 00000001
Output = 00000000
Output = 00100000
Output = 00000000
Output = 00010000
Output = 01000000
Output = 00000000
Output = 00000000
Output = 00001000
Binary Data ?

あっちゃん

Re:教えてください

#9

投稿記事 by あっちゃん » 17年前

間違えて覚えている人がホントに多いけど


(誤)シュミレーション
(正)シミュレーション simulation

array

Re:教えてください

#10

投稿記事 by array » 17年前

すみません、ご指摘ありがとうございます。
一応知ってはいるのです、間違いに気づいたのは高校時代。
最近、シュミットトリガなるものが授業ででてきて、それこそノイズを除去するのに重要な回路なんですよね(←とくに意味はありません)

間違い意識が薄くなってました・・・orz
間違って一度覚えた事だから意識してないと、今までのノリでやっぱりシュミレーションと書いちゃいます・・・よね?^^;

あっちゃん

Re:教えてください

#11

投稿記事 by あっちゃん » 17年前

投稿者による削除

fight

Re:教えてください

#12

投稿記事 by fight » 17年前

>arrayさん あれ!?今やってみると上手くいきました!!!勘違いをしていてすみません(><)ありがとうございました☆

閉鎖

“C言語何でも質問掲示板” へ戻る