資料 プログラムソース geo. h
void quad−info(int tl,int t2,int t3,int t4,int o
pt);
int hen−search(int tl,int t2);
double kaku−search(int tl,int t2,int t3);
int point−search(double xl,double yl);
void newpoint−check(dollble x,double y,int piint cp,double deg);
void icchi−msg(int p,int cp,double deg,int rp);
void kaiten−kekka.msg(void);
void calculator(int xpos C int ypos);
void disp−num(double value,double xpos,double yp os)i
int suuti−input(int xpos,int ypos,int *bot,int o
pt);
double valueminput(int xpos,int ypos,int opt,int
*bot);
void kana−key−disp(int xpos,int ypDs);
void tenLkey−disp(int xpos,int ypos)i int file .view O;
void idou−undo(int zukei,int pl,int p2,int p3,in t p4,int *p);
void keika−fileO;
void rireki touroku(int opt);
void rirekimwriteO;
void chousaO;
資料 プログラムソース main, c
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <math,h>
倖include <pc98曾h>
#include <graphics.h>
#include geo.h
dollble px[52],py[52];
int cpTnurn;
総数*/
の座標 */
int ip−nurn;
*/
*/
int p.nurn[100];
あるか*/
int job−num;
*f
int job[50]1
*/
int v nurn=O;
数*/
int varia[50];
納*/
int t nurn=Ol 数*/
double tran[50];
納*/
int data nurn=1;
*/
*!
*/
int h num=O;
*一/
int k nurn=O;
*/
int bun num=1;
るか*/
の関係*/
int r nurn=O;
の個数*/
int rec num=e;
*/
または4桁*ノ int henji[5];
*/
/*作図によってできた点の番号,
/*作図によってできた点
/*指示された点の総数 char p.label[100]:/*指示された点の記号
struct ver hen[10e];
struct ang kaku[100コ;
f*指示された点は何番目の点で
/*選択された作業項目の総数
/*選択された作業項目の番号
/*入力された変数(整数)の個
/*入力された変数(整数)を格
/*入力された変数(実数)の個
/*入力された変数(実数)を格
/*測定値の数 /*辺の情報を格納 /*角の情報を格納 /*辺の個数 ノ*角の個数
/*証明の文章を何行目に表示す struct kaiten rot[20];/*回転前の点と回転後の点 /*回転移動によって重なった点 /*操作をした回数
int user num=7777;/*利用者番号(生徒番号)3桁
struct rireki rec[500];/*操作の履歴 struct tirne j ikan;
struct date hiduke;
char*bottorn−crnmd[7]={ 作図 , 取消 ,
計測 , 移動 , ファイル tS,
再現 , 終了 };
char*msg[34];{ 作業内容を選択 , 作図する図形の指定 , 点の位置を指定 , 指定終了は右ボタン , どの線分上の点? , 線分を2点で指定 , 1点目の指定 , 2点目の指定 , 3点目の指定 ,
/* e */
/* 1*f
/* 2*/
/* 3 */
/* 4 */
f* 5 */
/* 6 *f
/* 7 *f
/* 8 */
4点目の指定 2っの線分を指定 どの点の対称点?
どの2点を結ぶ?
角を3点で指定 どの点から?
どの線分を?
3点を指定 どの点を通る?
どの線分に平行?
どの線分に対して? ,
どの線分に対して? ,
1}
:e
7t
rJ
l)
ll
rt rf J)
IJ
三角形を3点で指定 , 基準となる辺を指定 , 頂点の位置は? , 四角形を4点で指定 , 頂点の位置を確定 , 1つ前の作図を取消 , 全ての図形を消去 , OKならば左ボタン , どの辺の長さ? , どの角の大きさ? , どの三角形の面積? , 左ボタンで次の作業 , 自動的に繰り返し
char*job−cmmd[48];{ 点 ,
の基本メニュー*/
作図メニュー*/
作図メニュー*/
形の作図メニュー*/
形の作図メニュー*/
形の作図メニュー*/
のメニュー*/
のメニュー*/
の図形メニュー*/
/* 9 *f
/* 10 */
!* 11 */
f* 12 */
/* 13 *f f* 14 *!
/* 15 *f
/* 16 */
/* 17 */
/* 18 */
f* 19.*/
/* 20 */
/* 21 */
/* 22 */
/* 23 */
f* 24 */
f* 25 */
/* 26 *f
/* 27 *f
/* 28 *f
/* 29 */
/* 30 */
/* 31 *!
/* 32 */
線分(連結)
線分の延長 ,/*14*/
垂
垂直二等分線 ,/*16*/
角の二等分線 ,/*17*〆
平 行 線 ,/*18*ノ 任意の三角形 ,/*19 正三角形 ,/*20*/
二等辺三角形 ,/*21*/
直角三角形 ,/*22*/.
直角二等辺 ,/*23*/
任意の四角形 ,/*24 正方形 ,/*25*/
長 方 形 ,/*26*f 平行四辺形 ,/*27*/
ひ し 形 ,/*28*/
任意の多角形 ,/*29 正多角形 ,/*30*/
1つ前に戻る ,/*31 図形全消去 ,/*32*ノ
線分の長さ ,/*33 角の大きさ ,/*34*/
三角形の面積 ,/*35*/
計算(電卓) ,/*36*/
点 ,/*37
線 分 ,/*38*/
}i /* 33 */
/* 0 作図 線 ,/* 1*/
三 角 形 ,/* 2*/
四 角 形 ,/* 3*/
多 角 形 ,/* 4*/
C 一 /* 5*/
任意 の点 ,/* 6 点の 直線上の点 ,/* 7*/
中 点 ,/* 8*/
交 点 ,/* 9*/
等分点 ,/*10*/
対称点 ,/*11*/
任意の線分 ,/*12 線の
, /* 13 */
線 ,, /* 15 */
三角
四角
多角
取消
計測
移動
167 一
資料 プログラムソース main.・c
の種類メニ;一*/
イルのメニュー*./
三 角 形 ,/*39*/
四 角 形 ,ノ*40*/
平行移動 ,/*41移動 回転移動 ,/*42*/
点対称移動 ,/*43*!
線対称移動 ,/*44*/
脇詰灘㌦,/グ、416*/フア
図形の呼出 }:/*47*/
}
rireki−touroku(START);
textrnode(N8025);
window(O,O,80,25);
setviewport(O,O,639,399,1);
mouse−initO ;
mouse−window(O,O,639,39g);
titleO;
cleardeviceO;
makescreen O ; rnain−rnenuOl
}
char *point−labet[52]=
{ A , B , C , D , E , F , G , H , 1 , J
, j , L , M ,
N , O , P , Q , R , S , T , U , V , W , x . y , z ,
al , b , c , d , e , f , g , h , i , j , k, 1, rn,
n , o , p , q , r , s , t , u , v , w , x C 凵hC 噤hp;
in七 menu_inf[][2コ={ 0,5,
一 */
*/
*/
ユー*/
ユー*/
ユー*/
v・@*/
一 */
v *f
6,6,
12,7,
lg,5,
24,5,
29,2,
31,2,
33,4,
37,4,
41,5,
/*作図の基本メニュ
/*点の作図メニュー
/*線の作図メニュー
/*三角形の作図メニ
/*四角形の作図メニ
/*多角形の作図メニ
/*取消メニュー */
/*計測メニュー */
/*移動の図形メニュ
/*移動の種類メニュ 46,2}; /*ファイルのメニュ
f* $*********************************************
/
/*
/
rnain *
f***********************************************
/
void rnainO
{
,
le j ;
int gd=DETECT,gm,errorcode;
errorcode = registerbgidriver(PC98−driver)i if (errorcode く 0) {
printf( グラフィックスのエラー:%s¥n grapherrormsg(errorcode));
printf( どれかキーを押すと終了します getchO;
exit(1);
}
initgraph(&gd,&gm, B:¥¥APRI¥¥BORLANDC¥¥BGI )
errorcode = .graphresultO;
if (errorcode != grOk) {
printf( グラフィックスのエラー:%s¥n
, grapherrorrnsg(errorcode));
printf( どれかキーを押すと終了します
Jt j ;
getchO;
exit(1);
/***********************************************
一/・
/* make screen *
!/***********************************************
/
void rnakescreenO
{
int i;
!* draw rnain screen *!
setvisualpage(MAIN);
setactivepageOtAIN);
!*背景色*/
setcolor(LIGHTGRAY)I
setfillstyle(SOLIDJFILL,LIGHTGRAY);
bar3d(O,O,639,39g,O,O);
/*作図領域*/
setcolor(BLACK);
setfillstyle(SOLID−FILL,WHITE);
bar3d(2,26,440,396,0,0);
rectangle(4,28,438,394);
/*作図補助領域*/
setfilIStYle(SOLID FILL,LIGHTBLUE);
setcolor(WHITE);
bar3d(446,.2,635,80,0,0) ; rectangle(446,2,635,80);
/*計測・証明領域*/
flarne(446,84,635,396,W}IITE,1);
/*メニュー領域*/
flarne(2,2,440,24,LIGHTCYAN,1);
for(i=0;iく;6;i++) {
flarne(i*58−6,4, i*58+54,22,YELLOW,
1) ;
rnessage(i*58+6,4,i*58+54,22,YELL OW,4,BLACK,bottorn−cmrnd[i]);
}
/*メッセージ領域*/
flarne(450,4,500,22,LIGHTCYAN,1);
flame(510,4,630,22,LIGHTCYAN,1);
flame(450,28,630,46,LIGHTRED,1);
flarne(450,52,630,70,LIGHTRED,1);
}
/**********************************************/
1* rnain rnenu */
f**********************************************f
vaid rnatB−menuO
{ ・ double x,y;
int lx;
int hot;
flame(450,4,500,22,LIGHTCYAN,1);
flarne(510,4,630,22,LIGHTCYAN,1);
rnouse−window(2,2,402,24);
rnouse−fingerLcsrC25, le) ; mouse−on O i
message(450,28,630,46,LIGHTRED,8,BLACK,msg[O])
一 168 一
資料 プログラムソース コmam.C
message(450,52,630,70,LIGHTRED,8,BLACK, (左
ボタン→決定) );
mainrnenu−100p:
clearmmouse−buttonO;
get.mollseLposition(&x,&y);
1x=(int)x/58;
rnouse−offO;
rnessage(450,4,500,22,LIGHTCYAN,2,BLACK,b ottom7crm d[tx]);
message(lx*58+6,4,lx*58+54,22,RED,4,WHIT E,bottom−crnmd[lx]);
rnouse−on O ; do{
get−rnouse−position(&x,&y)l if(mouse−left−buttonO==CLICK){
rnouse..offOl
message(lx*58+6,4,lx*58+54,22.YE LLOW,4,BLACK,bottorn−crnmd[lx]);
rnouse−on O ; switch(lx){
case O: draw−menuOi break;
case 1: cancel menu O; break;
case 2: rneasure rnenu O ;break;
case 3: transforrnO;
break;
case 4: fileLmenuO;
break;
case 5: step−doO;
break;
case 6: endO; brea kl
} }
/* if(rnouse−right−buttonO==CLICK){
mouse−of f O ;
message(lx*58+6,4,lx*58+54,2 2]YELLOW,4,BLACK,bottorn−cmmd[lx]);
1x=6;
message(450,4,500,22,LIGHTCY AN,2,BLACK,bottorn−crnmd[lx]);
flarne(450,28,630,46,LIGHTRED,
1);
endO;
} */
}while(lx==(int)x/58);
mouse−off O ;
message(450,4,500,22,LIGHTCYAN,2,BLACK,b ottorn−crnrnd[lx]);
rnessage(lx*58+6,4,lx*58+54,22,YELLOW,4,B LACK,bottom−cmrnd[lx]);
mouse−on O ; goto ma inrnenu.loop;
}
/**********************************************/
.f* 終了 */
/**********************************************!
void endO
{
int i;
unsigned flg;
void far *ground−data;
piO;
mouse offO;
message(450,28,630,46,LIGHTRED,8,BLACK, 作図
中の図形は消減 );
rnessage(450,52,630,70,LIGHTRED,8,BLACK, sよろ
しいですか? ):
ground−data=getTwindow(4g,139,353,238);
flarne(50,140,350,235,LIGHTRED,2);
rnouse−window(50,140,350,235);
mouse−finger−csr(275,215);
setcolor(BLACK);
outtextxy(60,150, 警告!! 作図中の図形は 消滅します );
outtextxy(60,190, (左ボタンで「終了」、右ボタンでメ ニューに戻る〉 );
flg=kakunin(270,210);
mouse−off O ;
put−window(4g,139,ground−data);
if (flg) { chousa O ;
rirekt touroku(END);
keika.fileO;
rireki−writeOi setactivepage( {AIN) ; setviewport(O,O,399,639,1);
window(1,1,80,25);
cleardeviceOi clrscrO;
setvisualpage(MAIN);
closegraphO;
exit(1);
} else {
clear.rnessageO;
ma in−menu O ; }
}
/**********************************************/
/* タイトルの表示 */
!**********************************************1
void titleO
{
int fl[]={140, 50,14e,230,144,225,144, 55,48 5, 55,490, 50,140, 50};
int kurni,ban,bot;
cleardeviceO;
setcolor(WHITE);
setfillstyle(SOLID−FILL,WHITE);
bar3d(O,O,639,39g,O,O);
setlinestyle(SOLID−LINE,O,NORM−WIDTH);
setcolor(BLACK);
setfillstyle(SOLID−PILL,DARKGRAY);
bar(140, 50,490,230)l
setfillstyle(SOLID−FILL,RED);
bar(145, 55,485,225);
setfillstyle(SOLID−FILL,RED+8);
fillpoly(7,fl);
setcolor(RED);
正ine(140, 50,145, 55>;
1ine(486,226,490,23e);
setcolor(WHITE);
settextstyle(O,O,1);
outtextxy(150,60, 「平面図形の性質探求」
ソフトウェア );
settextstyle(O,O,4);
setcolor(BLACK);
outtextxy(189.,90, 幾何ん坊 );
outtextxy(187,88, 幾何ん坊 );
setcolor(WHITE);
outtextxy(185,86, 幾何ん坊 );
outtextxy(183,84, 幾何ん坊 );.
settextstyte(e,O,1);
outtextxy(150,180, V e r.1.0 (履歴記.録 版1994/7/10) );
outtextxy(150,200, 【開 発】京都府立桃山高
等学校 大西俊弘 〉;
flame(100,250,540,340,LIGHTCYAN,3);
message(120,260,540,280,LIGHTCYAN,8,BLACK,
一 謝辞 一 );