以下のソースプログラムは行列の成分を入力してエラー確率を入力すると、行列の成分ごとに考えてエラー確率で0と1を入れ替えることを意図しているプログラムです。実行は出来るのですが・・・結果が上手く出ません。アドバイスを頂きたくて投稿しました。よろしくお願いします。
#include <stdlib.h>
#include <time.h>
int main(void){
int a[100][100];
int i, j, m, n;
int pcnt, error;
srand(time(0));
printf("行列 a の行数を入力 : ");
scanf("%d", &m);
printf("行列 a の列数を入力 : ");
scanf("%d", &n);
printf("行列 a の成分を入力 : \n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[j]);
}
}
printf("Error Rate (%%) ? ");
scanf("%d", &pcnt);
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
error = (int)rand()%100 < pcnt;
if(error) {
if(a[j] == 0) a[j] = 1;
if(a[j] == 1) a[j] = 0;
}
}
}
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
printf("%d ", a[j]);
}
printf("\n");
}
return 0;
}
[/pre]
例えば#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int a[100][100];
int i, j, m, n;
int pcnt, error;
srand(time(0));
printf("行列 a の行数を入力 : ");
scanf("%d", &m);
printf("行列 a の列数を入力 : ");
scanf("%d", &n);
printf("行列 a の成分を入力 : \n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[j]);
}
}
printf("Error Rate (%%) ? ");
scanf("%d", &pcnt);
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
error = (int)rand()%100 < pcnt;
if(error) {
if(a[j] == 0) a[j] = 1;
if(a[j] == 1) a[i][j] = 0;
}
}
}
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
[/pre]
例えば行列の成分を、
0 0 0 0 0 0 0 0 0 0
としてエラー確率を50%としても全く変わらないこともあります。
どこに原因があるのでしょうか?