• 締切済み

C言語の感染シュミレーション

300人の人間と蚊30匹がいます、 蚊の中には1匹だけウイルスを持った蚊がおり、その空間内で人間と蚊がランダムに移動しています。 ある一定の距離内に近づくと蚊から人間に感染し、また感染した人間から、蚊に感染する場合もあります。感染する確率はどちらも50%とした場合の感染シュミレーションのプログラムを作っているのですが ごちゃごちゃすぎて頭がパンクしそうです。 よければ詳しく教えてください!

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

そんな不完全な仕様でプログラム作れるのは、大天才か、(理解しないで適当に作る)大馬鹿です。 普通の人なら、もっと詳細まで内容を吟味して、「あとはプログラミング言語で書くだけ」って状態しましょう。 コツは「全部まとめてやろうとしないこと」 メインの流れは、例えば次のようになるでしょう for(最初から終了時間まで) {  人が移動する();  蚊が移動する();  感染判定();  状態出力(); } 簡単ですよね? 「人の移動」を考えます for(人数) {  ある人が移動する(); } 簡単ですよね? 「ある人が移動する」を考えます   その人の位置 = その人の現在値 + 移動した分 簡単ですよね? こんな風にして、問題を分割していけば、案外「簡単」なことばかりなのが、プログラムです。

616161616161
質問者

お礼

分からないけど、なんか得た気がする回答でした。 ありがとうございます!!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

プログラムにする以前に, 不明確な点がいくつもあることは自覚していますか? 例えば, 「人間と蚊がxy座標上をランダムに動いて」といっても「ランダム」にはいろいろな「ランダム」があるよね. まあ「シュミレーション」って書いてる時点でどうかって気はするんだけど.

回答No.2

質問内容が読み取れないんだけど、何を知りたいの?

616161616161
質問者

補足

人間が300人。 人間のカテゴリーは0健康体1感染者2免疫者で最初は全部0健康体。 蚊が30匹。 蚊のカテゴリーは0ウイルスなし1ウイルスありの2種。最初は30匹のうち1匹のみウイルスあり。 人間と蚊がxy座標上をランダムに動いて、 同じ座標になると50%の確率で蚊から人間に、人間から蚊にウイルスが感染する。 人間は感染すると7日間経つと免疫者になり、もう感染することはないとする。 ある時刻での人間のカテゴリーごとの人数、蚊のカテゴリーごとの人数がわかるようにしたいと考えています。 わかりにくくてすみません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

んじゃ、わかっている範囲で整理してみて。 できているプログラムも見たいな。

616161616161
質問者

補足

人間が300人。 人間のカテゴリーは0健康体1感染者2免疫者で最初は全部0健康体。 蚊が30匹。 蚊のカテゴリーは0ウイルスなし1ウイルスありの2種。最初は30匹のうち1匹のみウイルスあり。 人間と蚊がxy座標上をランダムに動いて、 同じ座標になると50%の確率で蚊から人間に、人間から蚊にウイルスが感染する。 人間は感染すると7日間経つと免疫者になり、もう感染することはないとする。 ある時刻での人間のカテゴリーごとの人数、蚊のカテゴリーごとの人数がわかるようにしたいと考えています。 わかりにくくてすみません。

関連するQ&A

  • C言語 プログラム 確率

    今、学校の授業で病気の感染プログラムを作っています。 内容は、 ・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%で考えてもらえれば良いです。 載せたプログラム自体も完成しきれていないので、わからないかもしれません。 すみません。

  • 感染率は呼吸回数に比例しますか?

    密室な空間内(電車など)で空気感染するウィルス(インフルエンザなど)が一定の割合で存在している場合、 感染率は呼吸回数に比例すると考えていたのですが間違っているでしょうか? ある閾値以上のウィルスが体内に溜まれば感染してしまうと思っていたのですが、 ウィルスを1つでも吸い込んでしまえば結果は同じなのでしょうか?

  • Excelを使ったシミュレーション

    大学からの課題なのですが、Excelの経験が浅く、どのように考えたらいいかも分からない状況です(ー ー;) どなたか教えてくれませんか。 スマホゲームのガチャを行う状況を想定してみよう。 お目当てのアイテムが4つあるとする(例えばイメージとして、武器、防具、兜、盾)。 この4つのアイテムはそれぞれ確率1%で当たる(つまり 96%はハズレ)。 また、同じアイテムを重ねる(凸する)ことで強化されるものとする。 ガチャを1回100円とした場合、すべてのお目当てアイテムを5個ずつ引き当てる(すべ て4凸する)ためには予算がどれくらいかかることが予想されるだろうか? ヒント:数学的に厳密に期待値を求めるのは大変で、現実的ではないでしょう。そういう時 は、仮想のガチャをシミュレーションしてみるのが有効。シミュレーションを行うときには、 ランダムで数字を発生させるのがコツです。 例えば Excel であれば、=RANDBETWEEN(1,100)と入力することで、1から100までの 数字をランダムで発生させることができます。そうして、1が出たら武器、2が出たら防 具、・・が当たったとみなす。これで仮想ガチャを作れたのでそのあとは、いろいろと工夫 して考えてみてください。 ※この問題は決まった解き方、答を求めるものではありません。Python などのプログラム 言語を使ってシミュレーションすることもできるでしょう。知識を動員して、いろいろ調べ て、知恵を使って各自が工夫して問題解決を図ることを求めます。

  • エイズの感染について。

    生で最後までした場合と、 途中からつけた場合なのですが、 多少の感染率の違いはあるのでしょうか? 精液と、先に出る液なのですが、 ウイルスの含有量なども違うのでしょうか? ウイルスを持った男性とした場合、 どのくらいの確率で感染するのかも教えてください。

  • c言語のプログラミングに関して

    大学の課題で縦6×横7の重力付き四目並べが出題されました。人間、コンピュータ共にリーチの判定をするとき、先生は一個ずつ仮置きをし、4つ並ぶかどうかで判定すると言っていました。ただランダムに駒を置くだけのコンピュータプレイヤー対人間プレイヤーのプログラムはすでに出来上がっています。 ・仮置きで4つ並んだ場合その手を返す ・この判定の方法で人間プレイヤーの勝利を阻止する この二つをどのように書けばいいのかが分らなくて困っています。

  • コロナに感染して復帰した人に会っても大丈夫なの?

    質問の通りですが コロナに感染して復帰した人に会ってあっても 感染することはないのでしょうか? 熱が下がって肺炎が治った場合はウイルスは死んでるの? もし免疫ができただけでウイルスが生きているのなら 感染する確率は高いということなのでしょうか

  • メールでのウィルス感染について教えて下さい。

    知らない人から来たメールを開くとウィルスに感染する危険があると聞きま した。これは受信したメールにウィルスが入っていた場合、添付してあるフ ァイルを開くと感染するのでしょうか?それともメールの本文を見るだけで 感染するのでしょうか? また蛇足なのですか、ウィルスに感染しても初期化すれば元に戻ると思って いたのですが、プログラムを書き換えるだけではなく、ハードウェアを壊す るようなパソコン本体を壊すようなウィルスもあるのでしょうか? よろしくお願いします。

  • ウイルスに感染しました。その後PCが立ち上がりません。

    UnixPenguinというウイルスに感染してしまったみたいです。 ノートンを使っているのですが、クリーニング失敗、感染プログラムを移動しました、みたいなことが出てきて、そのプログラムを削除しました。 その後ここの過去ログを調べて、セーフモードにして再起動させようとしたのですが、立ち上げてログインするときに何回やっても「パスワードが違います」と出てきてしまい、windows自体の立ち上げが出来なくなってしまいました。 セーフモードのせいでしょうか?ウイルスのせいでしょうか? 全くの初心者でウイルスに感染したのも初めてなのでなにも分かりません・・・。すごく困ってます。 OSはWinXP ProでNECのVersaProを使っています。 どなたかご教授宜しくお願い致します。

  • 感染症の予防

    乾いた咳をする人間から至近距離から咳を受けました。感染症の場合、どのような対策が必要ですか?また何日間発症しなければ感染せずに済んだと言う事になりますか?

  • 感染したPCのファイルは危険ですか

    ノートパソコンからデスクトップパソコンへ頻繁にCD-RWで ファイルの移動を行っています。 もしノートパソコンがウイルスに感染しウイルスまみれになった場合、 ファイルの移動でデスクトップパソコンも感染するのでしょうか。 デスクトップパソコンへ移動させたファイルは、     ・WinRARで解凍、テストを行う。     ・DVD-Rへ書き込む。     ・ノートパソコンで分割したファイルを結合する      「みやぶん太」で分割し、バッチファイルで結合します。 この3点の行為のみでもデスクトップパソコンがウイルスに 感染する可能性はあるのでしょうか。 ウイルスは「不正なプログラム」なので実行しなければ安全だと 思うのですが実際はどうなんでしょうか。 移動させるファイルは画像や音楽や映像や圧縮ファイルなどです。 デスクトップパソコンでは.jpgや.gifや.htmlを閲覧したり、 .aviや.mp3を視聴したりはしません。もちろん.exeも実行しません。 あとファイルのプロパティは確認しますが、これは平気ですよね? デスクトップパソコンにも感染が広がるのではと思い不安です。 よろしくお願いします。

専門家に質問してみよう