第3問(選択問題)(配点 35)
2.プログラムの進行を確認するための表示を付加したプログラム
  ダウンロード →
prog2.bas
1000 '
1010 ' 準備
1020 '
1030    SCREEN 3 : COLOR,,,,2 : COLOR=(15,&H444): CLS 3
1040    TYOTENSU=8
1050    HENSOSU=0
1060    KOTAE=0
1070    DIM HEN$(TYOTENSU,TYOTENSU), SENBUN$(TYOTENSU^2)
1080    DIM SITEN(TYOTENSU^2), SYUTEN(TYOTENSU^2)
1090    DIM SKKX(TYOTENSU),SKKY(TYOTENSU)
1100 '
1110 ' 三角形を画面に表示するための準備
1120 '
1130    GOSUB *SNKK_INIT
1140 '
1150 ' 表2を読み込む → 頂点の情報を用意する
1160 '
1170    RESTORE *HYO2
1180    FOR I=1 TO 8
1190      FOR J=1 TO 8
1200        READ HEN$(I,J)
1210      NEXT
1220    NEXT
1230 '
1240    *HYO2
1250 '
1260 '    終点 j → 1   2   3   4   5   6   7   8
1270 '
1280         DATA   - , A , B , - , A , - , A , B    ' 1  ↓ 始点 i
1290         DATA   - , - , - , C , A , - , A , C    ' 2
1300         DATA   - , - , - , E , - , E , E , B    ' 3
1310         DATA   - , - , - , - , - , E , E , C    ' 4
1320         DATA   - , - , - , - , - , D , A , D    ' 5
1330         DATA   - , - , - , - , - , - , E , D    ' 6
1340         DATA   - , - , - , - , - , - , - , F    ' 7
1350         DATA   - , - , - , - , - , - , - , -    ' 8
1360 '
1370 '
1380 ' 表2を画面へ表示
1390 '
1400    CLS
1410    PRINT
1420    PRINT " 問題 p.32 の表2です。全ての頂点の組み合わせについて"
1430    PRINT " ここに記入します。この情報から三角形の個数を求めます。"
1440    PRINT
1450    PRINT "  終点 →";
1460    FOR I=1 TO TYOTENSU : PRINT USING " ## ";I; : NEXT : PRINT
1470    PRINT "  始点 ↓"
1480    FOR I=1 TO TYOTENSU
1490      PRINT "       ";I;
1500      FOR J=1 TO TYOTENSU
1510        PRINT USING " && ";HEN$(I,J);
1520      NEXT : PRINT
1530    NEXT
1540    PRINT
1550    INPUT " [Enter] を押してください";DUMMY$
1560 '
1570 '
1580 ' 表2から表1を作成する → 辺の表を作る
1590 '
1600    FOR I=1 TO TYOTENSU-1
1610      FOR J=I+1 TO TYOTENSU
1620        IF HEN$(I,J)<>"-" THEN
1630          HENSOSU=HENSOSU+1
1640          SITEN(HENSOSU)=I
1650          SYUTEN(HENSOSU)=J
1660          SENBUN$(HENSOSU)=HEN$(I,J)
1670        END IF
1680      NEXT
1690    NEXT
1700 '
1710 '
1720 ' 表1を表示する
1730 '
1740    CLS
1750    PRINT
1760    PRINT " 問題 p.31 の表1です。表2からすべての辺を抽出します。"
1770    PRINT " "
1780    PRINT
1790    PRINT "辺番号";
1800    FOR I=1 TO HENSOSU : PRINT USING " ##";I; : NEXT : PRINT : PRINT
1810    PRINT "始点  ";
1820    FOR I=1 TO HENSOSU : PRINT USING " ##";SITEN(I); : NEXT : PRINT
1830    PRINT "終点  ";
1840    FOR I=1 TO HENSOSU : PRINT USING " ##";SYUTEN(I); : NEXT : PRINT : PRINT
1850    PRINT "線分   ";
1860    FOR I=1 TO HENSOSU : PRINT USING " &&";HEN$(SITEN(I),SYUTEN(I)); : NEXT : PRINT
1870    PRINT
1880    INPUT " [Enter] を押してください";DUMMY$
1890 '
1900 '
1910 ' 三角形を数える
1920 '
1930    PRINT : PRINT
1940    PRINT " 表1の結果を問題 p.35 のプログラムへ与えて、"
1950    PRINT " すべての三角形を数え上げます。"
1960    PRINT
1970    INPUT " [Enter] を押してください";DUMMY$
1980    '
1990    CLS
2000    FOR X=1 TO HENSOSU-2
2010      Y=X+1
2020      WHILE SITEN(X)=SITEN(Y)
2030        IF SENBUN$(X)<>SENBUN$(Y) AND HEN$(SYUTEN(X),SYUTEN(Y))<>"-" THEN
2040          GOSUB *SNKK_DRAW
2050          KOTAE=KOTAE+1
2060        END IF
2070        Y=Y+1
2080      WEND
2090    NEXT
2100    LOCATE 0,20 : PRINT " 三角形の個数は ";KOTAE;" 個である"
2110 '
2120 '
2130    END
2140 '
2150 '
2160 '
2170 ' 三角形を画面表示するために頂点の位置情報を準備
2180 '
2190 *SNKK_INIT
2200    RESTORE *SNKK_ZAHYO
2210    FOR I=1 TO TYOTENSU : READ SKKX(I),SKKY(I) : NEXT
2220    RETURN
2230    '
2240    *SNKK_ZAHYO
2250    DATA 30,10,  23,30,  47,35,  38,43,  17,50,  27,54,  10,70,  70,70
2260 '
2270 '
2280 '三角形を画面表示する
2290 *SNKK_DRAW
2300    OX=(KOTAE MOD 8)*80 : OY=(KOTAE\8)*80
2310    FOR I=1 TO HENSOSU
2320      LINE (SKKX(SITEN(I))+OX,SKKY(SITEN(I))+OY)-(SKKX(SYUTEN(I))+OX,SKKY(SYUTEN(I))+OY),15
2330    NEXT
2340    LINE (SKKX(SITEN(X))+OX,SKKY(SITEN(X))+OY)-(SKKX(SYUTEN(X))+OX,SKKY(SYUTEN(X))+OY),7
2350    LINE (SKKX(SITEN(Y))+OX,SKKY(SITEN(Y))+OY)-(SKKX(SYUTEN(Y))+OX,SKKY(SYUTEN(Y))+OY),7
2360    LINE (SKKX(SYUTEN(X))+OX,SKKY(SYUTEN(X))+OY)-(SKKX(SYUTEN(Y))+OX,SKKY(SYUTEN(Y))+OY),7
2370    RETURN
2380 '
2390 '