今、学校の授業で病気の感染プログラムを作っています。
内容は、
・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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxの実行結果を修正したいです。 2 2022/11/23 08:32
- その他(病気・怪我・症状) 狂犬病、エボラ出血熱、エイズを危険度の高い順番に並べると、どうなると思いますか? 5 2022/12/03 15:53
- C言語・C++・C# C言語 3 2022/11/09 13:27
- 数学 あいまいな日本語数学問題 9 2022/05/30 10:24
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- 英語 I give the cat some food.が誤りな理由について 4 2023/02/26 23:11
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- その他(病気・怪我・症状) 結局、コロナかかれば無駄なワクチンなど打たずに免疫ついてるわけですよね? 2 2022/05/18 15:29
- UNIX・Linux Linuxのメッセージを出力して処理を終了する方法 1 2022/11/19 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
首吊りどこ締めるの
-
変な話しになります。尿検査で...
-
白血球が多いとどんな心配があ...
-
今朝、毎朝の習慣でオナニーし...
-
1日前の検尿
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
男です。昨日の午後3時くらいに...
-
EXCELで式からグラフを描くには?
-
彼女のことが好きすぎて彼女の...
-
中出しをするとお腹が痛い・・・。
-
値が入っているときだけ計算結...
-
これって喉仏ですか? 私は女性...
-
EXCELの条件付き書式で数式を空...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報