
今、学校の授業で病気の感染プログラムを作っています。
内容は、
・3カテゴリー(0:健康体、1:感染者、2:免疫体)の人間がいる。
・2カテゴリー(0:病原体を持たない蚊、1:病原体ウイルスを持つ蚊)の蚊がいる。
・人間と蚊がxy座標上をある速度でランダムに移動している。
・健康体の人間とウイルスを持った蚊と人間ある一定距離内にいると蚊が人間を刺して病気が感染し、人間が0:健康体から1:感染者に変化する。
簡単に言いましたが、このようなプログラムを作っています。
その中で、人間に感染する部分のプログラムを下に載せます。
double c0x, c0y, ax, ay, bx, by;
for(i=0; i<N;++i){
if(b[i].category==1){
c0x=(*cat0ka).coord.x;
c0y=(*cat0ka).coord.y;
ax=a[i].coord.x;
ay=a[i].coord.y;
bx=b[i].coord.x;
by=b[i].coord.y;
if(((c0x-ax)*(c0x-ax)+(c0y-ay)*(c0y-ay))<R){
(*cat0agent).category=1;
}
else if(a[i].category==1){
c0x=(*cat0agent).coord.x;
c0y=(*cat0agent).coord.y;
ax=a[i].coord.x;
ay=a[i].coord.y;
bx=b[i].coord.x;
by=b[i].coord.y;
if(((c0x-bx)*(c0x-bx)+(c0y-by)*(c0y-by))<R){
(*cat0ka).category=1;
return ;
}
}
int t;
for(t=1; 7-t;++t ){
if((*cat0agent).category=1){
if(6<t){
(*cat0agent).category=2;
}
}
}
(*cat0agent).coord.x+=(frand()-0.5);
(*cat0agent).coord.y+=(frand()-0.5);
(*cat0ka).coord.x+=(frand()-0.5);
(*cat0ka).coord.y+=(frand()-0.5);
}
}
}
このプログラムでは、一定距離内にいると100%感染するようになっていますが、
それを、"一定距離内にいると30~50%の確率で感染する"という条件に変えたいと思っていますが、そのやり方がわかりません。
どなかか分かりやすく丁寧に教えていただけませんか?
お願いします。
ちなみに感染率は今30%で考えてもらえれば良いです。
載せたプログラム自体も完成しきれていないので、わからないかもしれません。
すみません。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ついでに:
・a とか b とかの配列は何を意味する?
・if(((c0x-ax)*(c0x-ax)+(c0y-ay)*(c0y-ay))<R) や
if(((c0x-bx)*(c0x-bx)+(c0y-by)*(c0y-by))<R)
って条件は間違ってる可能性がある.
No.1
- 回答日時:
>"一定距離内にいると30~50%の確率で感染する"という条件に変えたい
その場合は、まず、rand関数で「0~20」の範囲の乱数を発生させ、発生した乱数に「30」を加算し「30~50」の値を作る。
次に「0~100」の値の乱数をrand関数で作り、最初に求めた「30~50の乱数」より大きいか否かを検査し、大きくない(小さいか等しい、つまり「以下」)なら感染、大きいなら感染しない、と処理する。
>ちなみに感染率は今30%で考えてもらえれば良いです。
その場合は「0~100」の値の乱数をrand関数で作り「30以下」かを検査し、大きくない(小さいか等しい、つまり「以下」)なら感染、大きいなら感染しない、と処理する。
以下、蛇足。
c0x=(*cat0ka).coord.x;
c0y=(*cat0ka).coord.y;
(*cat0agent).category=1;
(*cat0ka).category=1;
(*cat0agent).category=2;
(*cat0agent).coord.x+=(frand()-0.5);
(*cat0agent).coord.y+=(frand()-0.5);
(*cat0ka).coord.x+=(frand()-0.5);
(*cat0ka).coord.y+=(frand()-0.5);
などの「構造体のポインタのメンバ参照や代入」は
c0x=cat0ka->coord.x;
c0y=cat0ka->coord.y;
cat0agent->category=1;
cat0ka->category=1;
cat0agent->category=2;
cat0agent->coord.x+=(frand()-0.5);
cat0agent->coord.y+=(frand()-0.5);
cat0ka->coord.x+=(frand()-0.5);
cat0ka->coord.y+=(frand()-0.5);
のように「->(アロー演算子)」で可能。
あと
int t;
for(t=1; 7-t;++t ){
if((*cat0agent).category=1){
if(6<t){
(*cat0agent).category=2;
}
}
}
は何をしたいのだろうか?
この処理をすると、必ず「感染者」になると思うが?
if((*cat0agent).category=1){
は「1を代入して、1が非0ならば真」なので、必ず1が代入され、必ず成り立つぞ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
風俗店へ行く前のご飯
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
血液検査の結果が悪くefgrの値...
-
2つの数値のうち、数値が小さい...
-
勃起する時って痛いんですか? ...
-
男性に質問 お尻の穴を見せた...
-
汚い話ですみません。 検便って...
-
イタリアから帰国する際、肉製...
-
ラブホってバスタオルが2枚ある...
-
excel関数で TRUEやFALSEについて
-
精液の落とし方を教えてください
-
この赤い斑点は何でしょうか。 ...
-
足がまだら模様になります。ど...
-
エクセルでθを求めたい。
-
病院側から早く来てくださいと...
-
excelでsin二乗のやり方を教え...
-
透亮像について。 先日会社の健...
-
中学三年 ちんこが小さいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報