ページ 1 / 1
教えてください
Posted: 2008年9月06日(土) 15:18
by fight
c言語を始めて間もないものです。添付してあるソースプログラムはBinary Dataに2進数の文字列を入力するとビットごとにある確率で0を1に、1を0に変更して出力させるものです。ある方に作成していただいたのですが・・・これを少し書き換えてBinary Dataを1回入力したら一気に10回実行して出力するようにしたいと思っています。自分でfor文を使用して色々やってみたのですがうまくいきません。このような場合どのようにすればいいのか教えていただきたくて質問させていただきました。よろしくお願いします。
Re:教えてください
Posted: 2008年9月06日(土) 19:24
by array
原因はポインタにある・・・のかもしれません。
#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回出力してくれたりしませんかね・・・結果確認してないので出来てなかったら言ってください。実際に試してみます。
Re:教えてください
Posted: 2008年9月06日(土) 19:50
by box
> 自分でfor文を使用して色々やってみたのですがうまくいきません。
その、うまくいかないコードを載せてみる予定はありますか?
Re:教えてください
Posted: 2008年9月06日(土) 20:41
by fight
>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;
}
Re:教えてください
Posted: 2008年9月06日(土) 20:46
by fight
> array さん すみません。上手くいかなかったです・・・。
Re:教えてください
Posted: 2008年9月06日(土) 20:55
by 管理人
>boxさん
携帯からご覧になると、投稿時の添付ファイルが見えないのですが、
プログラムは添付してあるようです。
>fightさん
コードを投稿される場合はプレタグを使っていただけると見易いです。
詳しくは規約をご覧下さい。
Re:教えてください
Posted: 2008年9月06日(土) 21:01
by box
> 携帯からご覧になると、投稿時の添付ファイルが見えないのですが、
> プログラムは添付してあるようです。
最初の投稿で添付してあったのは、
> 添付してあるソースプログラムはBinary Dataに2進数の文字列を入力すると
> ビットごとにある確率で0を1に、1を0に変更して出力させるものです。
> ある方に作成していただいたのですが・・・
であって、
> これを少し書き換えてBinary Dataを1回入力したら
> 一気に10回実行して出力するようにしたいと思っています。
> 自分でfor文を使用して色々やってみたのですがうまくいきません。
これではないです。
だから、
> その、うまくいかないコードを載せてみる予定はありますか?
と書きました。
Re:教えてください
Posted: 2008年9月06日(土) 21:22
by array
あれ、実行してみると私の思ってるとおり動作しているのですが、この動作は間違ってるのでしょうか
>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:教えてください
Posted: 2008年9月06日(土) 21:40
by あっちゃん
間違えて覚えている人がホントに多いけど
(誤)シュミレーション
(正)シミュレーション simulation
Re:教えてください
Posted: 2008年9月06日(土) 21:53
by array
すみません、ご指摘ありがとうございます。
一応知ってはいるのです、間違いに気づいたのは高校時代。
最近、シュミットトリガなるものが授業ででてきて、それこそノイズを除去するのに重要な回路なんですよね(←とくに意味はありません)
間違い意識が薄くなってました・・・orz
間違って一度覚えた事だから意識してないと、今までのノリでやっぱりシュミレーションと書いちゃいます・・・よね?^^;
Re:教えてください
Posted: 2008年9月06日(土) 22:15
by あっちゃん
投稿者による削除
Re:教えてください
Posted: 2008年9月06日(土) 22:30
by fight
>arrayさん あれ!?今やってみると上手くいきました!!!勘違いをしていてすみません(><)ありがとうございました☆