池田博明『高校生物』のコンピュータ利用授業データ集
最終更新日 2008年9月12日
内容は日々,更新していきたいと思っています。
岩波書店CD-ROM版『生物学辞典』や平凡社CD-ROM版『世界大百科事典』などの情報量は大きいし,検索も便利である。第6部の内容をカバーする日経新聞社CD-ROM『生命の起源』も素晴らしい。将来の教科書や指導書は,どうなるだろうか。そして,私たち教員が授業でできることは,何だろうか。 |
MS-DOS BASIC プログラム 遺伝的浮動 10 '遺伝的浮動 programmed by Hiryoshi IKEDA 1992 20 CLEAR:CLS 3:WIDTH 80,25:COLOR 0,0,5,7 30 '== 値の入力 == 40 LOCATE 22,8:PRINT"遺伝的浮動" 50 LOCATE 18,16:PRINT"どれかキイを押して下さい" 60 A$=INKEY$:IF A$="" THEN 60 70 CLS 3:LOCATE 10,8:PRINT "集団の個体数が小さいほど浮動の度合いは大きくなります" 80 LOCATE 10,10:PRINT"適当な個体数Nを入力して下さい" 90 LOCATE 15,17:INPUT "N="N 100 '== 遺伝子頻度の設定 == 110 CLS 3:LOCATE 10,8:PRINT"A遺伝子の頻度pを0から1までの範囲で入力して下さい" 120 LOCATE 10,10:PRINT"a遺伝子の頻度qは(1−p)にします " 130 LOCATE 14,12:INPUT"p="P:IF P>=1 GOTO 130 140 Q=1-P 150 CLS 1 160 '==世代数(N)の設定=== 試行数(X)の設定 170 G=30:X=4 180 ' == 計算 ==== 190 SCREEN 3 200 'X軸とY軸 210 LINE(100,100)-(500,300),4,B 220 LINE(100,200)-(110,200),4 230 LINE(100+120,300)-(220,290),4:LINE(100+240,300)-(340,290),4 240 DIM P(G,X),Q(G,X) 250 PP=P:QQ=Q 260 FOR X=0 TO 4 270 PP=P:QQ=Q 280 LOCATE 12,4:PRINT"5回試行します.いま"X+1;"回目の計算中です" 290 TI$=RIGHT$(TIME$,2):RANDOMIZE VAL(TI$) 300 P(0,X)=PP:Q(0,X)=QQ 310 FOR S=1 TO G 320 PA=0:QA=0 330 FOR I=1 TO 2*N 340 IF RND(2)<PP THEN PA=PA+1 350 NEXT I 360 QA=2*N-PA 370 PP=PA/(PA+QA) 380 QQ=1-PP 390 P(S,X)=PP:Q(S,X)=QQ 400 NEXT S 410 '==グラフを書く== 420 '折れ線グラフ 430 LINE(100+360,300)-(460,290),4 440 FOR L=0 TO G-1 450 P(L,X)=INT(100*P(L,X)) 460 NEXT L 470 ' 480 FOR M=0 TO G-1 490 LINE(100+12*M,300-2*P(M,X))-(100+12*(M+1),300-2*P(M+1,X)),2+X 500 NEXT M 510 LINE(100+12*29,300-2*P(29,X))-(100+12*30,300-2*P(30,X)),0 520 NEXT X 530 LOCATE 5,1:PRINT"p遺伝子頻度の変動(30世代 ) " 540 LOCATE 40,1:PRINT"第1代のp="P(0,0)/100, 550 LOCATE 8,20:PRINT"もう一度試行するなら,1キイを押して下さい" 560 D$=INKEY$:IF D$="" THEN 560 570 IF D$<>"1" THEN END 580 GOTO 20 |
MS-DOS BASIC プログラム 遺伝子頻度の変動 10 'SEIBUTU 1992 20 'POPULATION GENETICS programmed by Hiroyoshi IKEDA 40 CLS 3 50 SCREEN 1:WIDTH 80,25 100 PRINT"いくつかの分集団を考える" 110 PRINT"各分集団は他の分集団と毎世代一定の率 Mで個体を交換するものとする" 120 PRINT:PRINT" M<<1 (例:M=0.0001)":PRINT 130 PRINT"この時移住してくる個体における遺伝子Aの頻度をX1とする" 140 PRINT:PRINT" 0<X1<1 (例: X1=0.5)":PRINT 150 PRINT"自然淘汰に関してAのaに対する有利度をSとする" 160 PRINT:PRINT" ABS(S)<<1 (例: S=0 OR S=−0.0003)" 170 PRINT:INPUT"M,X1,S"M,X1,S 180 PRINT:PRINT"計算する集団の大きさ 最大値 NMAX,最小値 NMIN" 190 PRINT:PRINT" (例: NMAX=50000,NMIN=1000)" 200 PRINT:INPUT"NMAX,NMIN : "YMAX,YMIN 210 CLS 3 220 PI=3.14159/180 230 XL=20:AX=400:XW=600:YW=160 240 THETA=30 250 CTH=COS(THETA*PI) :STH=SIN(THETA*PI) 260 AY=(XW-AX)/CTH:AZ=YW-AY*STH 270 LINE (XL,0)-(XL,YW):LINE-(XL+AX,YW):LINE-(XL+XW, YW-AY*STH) 280 LINE-(XL+XW,0) 290 LOCATE 25,22:PRINT"遺伝子頻度" 300 LOCATE 0,5:PRINT"確" 310 LOCATE 0,7:PRINT"率" 320 LOCATE 0,9:PRINT"密" 330 LOCATE 0,11:PRINT"度" 340 LOCATE 2,21:PRINT"0":LOCATE 52,21:PRINT"1" 350 LOCATE 65,13:PRINT"集団の大きさ" 360 LOCATE 56,19:PRINT"小" 370 LOCATE 76,8:PRINT"大":LOCATE 0,24 380 ' 390 NY=20 400 ZMAX=5 410 KSTEP=5 420 YLM=LOG(YMIN):YD=LOG(YMAX)-YLM 430 DY1=AY*CTH/YD:DY2=AY*STH/YD 440 DZ=AZ/AMAX 450 ' 460 DIM MAX(XW),MIN(XW),Z(AX),MEMO1(AX),MEMO2(AX) 470 ' KANSUU KEISAN NO TAME NO JYUNBI 480 FOR I=0 TO X 490 MAX(I)=YW+1:MIN(I)=-1 500 NEXT I 510 MXI=M*XI:M1XI=M*(1-XI) 520 FOR IX=0 TO AX STEP KSTEP 530 X=IX/AX 540 IF IX=0 OR IX=X THEN MEMO1(IX)=0 :ELSE MEMO1(IX)=1/((1-X)*X) 550 MEMO2(IX)=X^(MXI)*(1-X)^(M1XI)*EXP(S*X) 560 NEXT IX 570 ' KANSUU NO KEISAN TO GURAFU 580 FOR YLOG=YLM TO LOG(YMAX) STEP YD/NY 590 N=EXP(YLOG) 600 N4=4*N 610 K=N4*MXI-1 620 L=N4*M1XI-1 630 NS4=N4*S 640 GOSUB *FUNCTION 650 D1=DY1*(YLOG-YLM) 660 D2=DY2*(YLOG-YLM) 670 ' INSEN SYORI WO SINAGARA GURAFU WO EGAKU 680 KFLAG=0 690 FOR IX=0 TO AX STEP KSTEP 700 VX=XL+IX+D1 710 VY=YW-DZ*Z(IX)-D2 720 WX=CINT((VX-XL)/KSTEP)*KSTEP 730 IFLAG=0 740 IF VY<MAX(WX) THEN MAX(WX)=VY:IFLAG=1 750 IF VY>MIN(WX) THEN MIN(WX)=VY:IFLAG=1 760 IF IFLAG=1 AND VY<0 THEN VY=0 770 IF IFLAG=0 THEN KFLAG=0:GOTO 790 780 IF VY>=0 AND VY<200 THEN IF KFLAG=0 THEN PSET(VX,VY):KFLAG=1 :ELSE LINE-(VX,VY) :ELSE KFLAG=0 790 NEXT IX,YLOG 800 END 810 ' 820 *FUNCTION 830 C=0:P=.5:H=1/AX*KSTEP 840 FOR IX=0 TO AX STEP KSTEP 850 X=IX/AX 860 IF IX=0 AND K<1 THEN 920 870 IF IX=AX AND L<1 THEN 940 880 Z(IX)=MEMO1(IX)*MEMO2(IX)^(4*N) 890 C=C+P*Z(IX) 900 P=1:IF IX=AX-1 THEN P=.5 910 GOTO 970 920 C1=H^(K+1)*(1/(K+1)+(NS4-L)/(L+2)*H) 930 GOTO 960 940 C=C-.5*Z(AX-1) 950 C2=EXP(NS4)*H^(L+1)*(1/(L+1)-(NS4+K)/(L+2)*H) 960 Z(IX)=9.99999863931739E+29 970 NEXT IX 980 C=C*H+C1+C2 990 FOR IX=0 TO AX STEP KSTEP 1000 Z(IX)=Z(IX)/C 1010 NEXT IX 1020 RETURN |
MS-DOS BASIC プログラム ランダム分布とは何か 10 '集団の生物学 20 '個体群生態学 30 ' 40 'ランダム分布 programmed by Hiroyshi IKEDA 1992 50 CLEAR:CLS 3:WIDTH 80,25:COLOR 0,0,5,7 60 ' 70 '== 値の入力 == 80 LOCATE 22,8:PRINT"ランダム分布とは何か" 90 LOCATE 22,16:PRINT"どれかキイを押して下さい" 100 A$=INKEY$:IF A$="" THEN 100 110 ' 120 CLS 3:SCREEN 3 130 LINE(50,50)-(350,350),4,B 140 LOCATE 10,8:PRINT "ある一様な環境に生物がランダム分布をしています" 150 N=100 160 LOCATE 10,10:PRINT"いま個体数を100に設定してあります" 170 LOCATE 10,12:PRINT"個体数を変更する時はキイ1を押して下さい" 180 LOCATE 10,14:PRINT"変更しない時はどれかキイを押して下さい" 190 LOCATE 15,17:B$=INKEY$:IF B$="" THEN 190 200 IF B$<>"1" THEN 260 210 ' 220 CLS 3:LOCATE 10,8:PRINT "個体数 (N)を入力して下さい." 230 LOCATE 10,15:PRINT "個体数(N)=" 240 LOCATE 24,15:INPUT N 250 ' 260 CLS 3:LOCATE 10,8:PRINT"環境をいくつかのワクに区分します" 270 W=5 280 LOCATE 10,10:PRINT"いまワクの数を("W;"X"W;")個に設定してあります" 290 LOCATE 10,12:PRINT"ワク数を変更する時はキイ1を押して下さい" 300 LOCATE 10,14:PRINT"変更しない時はどれかキイを押して下さい" 310 LOCATE 15,17:C$=INKEY$:IF C$="" THEN 310 320 IF C$<>"1" THEN 380 330 ' 340 CLS 3:LOCATE 10,8:PRINT "ワク数 (W)を入力して下さい." 350 LOCATE 14,15:PRINT "ワク数(W)X (W)" 360 LOCATE 36,15:INPUT W 370 ' 380 SCREEN 3:CLS 3 390 ' 乱数系列の変更(時間の秒を利用) 400 TI$=RIGHT$(TIME$,2):RANDOMIZE VAL(TI$) 410 ' == 図化する=== 415 LOCATE 50,10:PRINT"分布図を書きます" 420 LINE(50,50)-(350,350),4,B 430 DIM X(N-1),Y(N-1) 440 FOR I=0 TO N-1 450 ' 460 X(I)=INT(RND(1)*300):Y(I)=INT(RND(2)*300) 470 CIRCLE(50+X(I),50+Y(I)),3 480 NEXT I 485 LOCATE 50,10:PRINT"ただいま計算中です" 490 ' 500 ' = 集計をする 510 DV=300/W 520 DIM S(W-1,W-1) 530 FOR I=0 TO N-1 540 XX=INT(X(I)/DV) 550 YY=INT(Y(I)/DV) 560 S(XX,YY)=S(XX,YY)+1 570 NEXT I 571 ' = 集計をする 575 DIM SUM(N) 576 FOR I=0 TO N-1 577 FOR J=0 TO W-1 580 FOR K=0 TO W-1 590 IF S(J,K)=I THEN SUM(I)=SUM(I)+1 600 NEXT K,J,I 610 ' 620 ' == 個体数調査用のワクをかく 630 FOR J=1 TO W-1 640 ' 縦線 650 LINE(50+DV*J,50)-(50+DV*J,350),1 660 ' 横線 670 LINE(50,50+DV*J)-(350,50+DV*J),1 680 NEXT J 690 LOCATE 50,10:PRINT"グラフを表示します" 700 LOCATE 50,12:PRINT"どれかキイを押して" 710 LOCATE 50,14:PRINT"下さい" 720 D$=INKEY$:IF D$="" THEN 720 725 ' 730 '== グラフにかく(ワク) 740 CLS 3 750 LINE(100,100)-(500,300),4,B 760 LINE(100,200)-(110,200),4 770 LINE(100+120,300)-(220,290),4:LINE(100+240,300)-(340,290),4 780 LINE(100+360,300)-(460,290),4 783 LOCATE 13,19:PRINT"(0)":LOCATE 19,19:PRINT"(5)":LOCATE 50,19:PRINT"ワク内の頭数" 785 ' 790 '== ヒストグラムをかく 795 ' 800 FOR I=0 TO N 820 ' 825 ' PRINT SUM(I), 830 LINE(110+I*10,300-SUM(I)*10)-(110+(I+1)*10,300),3,B 840 NEXT I 845 ' 850 ' == ポアソン分布 854 R=N/(W*W) 855 'INPUT "P(X=x)=(e^(-r))*(r^x)/x! no r="R 860 M=20:DIM P(M) 870 FOR X=1 TO M 880 A=1:FOR I=1 TO X:A=A*I:NEXT I 890 P(X)=EXP(-R)*(R^X)/A 900 NEXT X 910 P(0)=EXP(-R) 912 ' 913 ' == ZAHYOU JIKU 915 OX=115:OY=300:UX=10:UY=300:MXG=639:MYG=199 920 ' LINE (OX,OY)-(MXG,OY),1:LINE (OX,OY)-(OX,20),1 923 ' 924 ' == X ZAHYOU NO KUBUN 925 ' FOR X=0 TO M 930 ' LINE (OX+X*UX,OY-1)-(OX+X*UX,OY+1),2 935 ' NEXT X 938 ' 939 ' == Y ZAHYOU NO KUBUN 940 ' FOR Y=0 TO .5 STEP .1 945 ' LINE (OX-2,OY-Y*UY)-(OX+2,OY-Y*UY),5 950 ' NEXT Y 954 ' 955 ' == ORE SEN GURAFU 956 FOR I=0 TO M-1 960 XG=OX+I*UX 970 LINE (XG,OY-UY*P(I))-(XG+UX,OY-UY*P(I+1)),6 980 NEXT I 990 ' 1000 LOCATE 10,3:PRINT"実験のヒストグラムを紫で,ポアソン分布を黄色で示した" 1070 LOCATE 18,22:PRINT"もう一度試行するなら,1キイを押して下さい" 1080 D$=INKEY$:IF D$="" THEN 1080 1090 IF D$<>"1" THEN END 1100 GOTO 50 |
BACK TO HOME (Ikeda Homeへ)