QB附和导线平差程序

DECLARE&nbspFUNCTION&nbspDEG!&nbsp(X!)
DECLARE&nbspFUNCTION&nbspDMS!&nbsp(XX!)
DECLARE&nbspFUNCTION&nbspXCHAR$&nbsp(XX!,&nbspN!)
CLS
PRINT
PRINT&nbsp"&nbsp附和导线平差程序(2.0R)"
PRINT&nbsp"&nbsp作者:徐振刚"
PRINT&nbsp"&nbsp1999年12月31日"
PRINT&nbsp"功能:本程序可以用来进行一般导线平差计算,包括附和导线、闭合导线和支导线,其中"
PRINT&nbsp"&nbsp闭合导线和支导线需对原始数据进行一定处理。"
PRINT&nbsp"备注:坐标计算误差≤5mm;角度计算误差≤0.5s"
PRINT

REM&nbspN&nbsp—-角度个数(包括已知方位角)
REM&nbspM&nbsp—-导线边数
REM&nbspH&nbsp—-允许方位角闭合差秒值
REM&nbspA&nbsp—-方位角(A(0)为起始方位角)
REM&nbspD&nbsp—-边长
REM&nbspX,Y&nbsp—-坐标(X1,Y1;X,Y为已知坐标)
REM&nbspF0&nbsp—-方位角允许闭合差
REM&nbspF1&nbsp—-导线方位角闭合差
REM&nbspF3,F4,F—-增量闭合差
REM&nbspK&nbsp—-导线全长相对闭合差

PRINT&nbsp"新建数据文件?(Y/N)"
LOCATE&nbsp25:&nbspPRINT&nbsp"按&nbspESC键&nbsp返回主菜单.";&nbspTAB(60);&nbspDATE$;&nbsp"&nbsp";&nbspTIME$
DO
YN$&nbsp=&nbspINKEY$
IF&nbspYN$&nbsp=&nbsp"Y"&nbspOR&nbspTN$&nbsp=&nbsp"y"&nbspTHEN
RUN&nbsp"DXPCEDIT.BAS"
ELSEIF&nbspYN$&nbsp=&nbsp"N"&nbspOR&nbspYN$&nbsp=&nbsp"n"&nbspTHEN
EXIT&nbspDO
ELSEIF&nbspYN$=CHR$(27)&nbspTHEN
RUN&nbsp"MAIN.BAS"
END&nbspIF
LOOP
REM&nbsp********************************************************************************
CLS
PI&nbsp=&nbsp3.141592653589793#:&nbspPU&nbsp=&nbsp180&nbsp/&nbspPI
INPUT&nbsp"请输入数据文件名:(DXPC.DAT)";&nbspFILEIN$
IF&nbspFILEIN$&nbsp=&nbsp""&nbspTHEN
FILEIN$&nbsp=&nbsp"DXPC.DAT"
END&nbspIF
OPEN&nbspFILEIN$&nbspFOR&nbspINPUT&nbspAS&nbsp#1
INPUT&nbsp#1,&nbspN,&nbspM,&nbspH
DIM&nbspB(N),&nbspD(M),&nbspA(N&nbsp-&nbsp1),&nbspX(M),&nbspY(M)
INPUT&nbsp#1,&nbspX1,&nbspY1,&nbspX,&nbspY
FOR&nbspI&nbsp=&nbsp0&nbspTO&nbspN
INPUT&nbsp#1,&nbspB(I)
B(I)&nbsp=&nbspDEG(B(I))
NEXT&nbspI
FOR&nbspI&nbsp=&nbsp1&nbspTO&nbspM
INPUT&nbsp#1,&nbspD(I)
NEXT&nbspI
CLOSE&nbsp#1
REM&nbsp********************************************************************************
A(0)&nbsp=&nbspB(0)
FOR&nbspI&nbsp=&nbsp1&nbspTO&nbspN&nbsp-&nbsp1
A(I)&nbsp=&nbspA(I&nbsp-&nbsp1)&nbsp+&nbspB(I)&nbsp+&nbsp180
IF&nbspA(I)&nbsp>&nbsp360&nbspTHEN
A(I)&nbsp=&nbspA(I)&nbsp-&nbsp360
END&nbspIF
NEXT&nbspI
F0&nbsp=&nbspH&nbsp/&nbsp3600&nbsp*&nbspSQR(N&nbsp-&nbsp1):&nbspF1&nbsp=&nbspA(N&nbsp-&nbsp1)&nbsp-&nbspB(N)
V&nbsp=&nbsp-1&nbsp*&nbspF1&nbsp/&nbsp(N&nbsp-&nbsp1)
FOR&nbspI&nbsp=&nbsp1&nbspTO&nbspN&nbsp-&nbsp1
A(I)&nbsp=&nbspA(I)&nbsp+&nbspV&nbsp*&nbspI
IF&nbspA(I)&nbsp>&nbsp360&nbspTHEN
A(I)&nbsp=&nbspA(I)&nbsp-&nbsp360
END&nbspIF
NEXT&nbspI

S&nbsp=&nbsp0:&nbspX(0)&nbsp=&nbspX1:&nbspY(0)&nbsp=&nbspY1
FOR&nbspI&nbsp=&nbsp1&nbspTO&nbspM
S&nbsp=&nbspS&nbsp+&nbspD(I)
X(I)&nbsp=&nbspX(I&nbsp-&nbsp1)&nbsp+&nbspD(I)&nbsp*&nbspCOS(A(I)&nbsp/&nbspPU)
Y(I)&nbsp=&nbspY(I&nbsp-&nbsp1)&nbsp+&nbspD(I)&nbsp*&nbspSIN(A(I)&nbsp/&nbspPU)
NEXT&nbspI
F3&nbsp=&nbspX(M)&nbsp-&nbspX:&nbspF4&nbsp=&nbspY(M)&nbsp-&nbspY:&nbspF&nbsp=&nbspABS(SQR(F3&nbsp*&nbspF3&nbsp+&nbspF4&nbsp*&nbspF4))
D&nbsp=&nbsp0
FOR&nbspI&nbsp=&nbsp1&nbspTO&nbspM
D&nbsp=&nbspD&nbsp+&nbspD(I)
X(I)&nbsp=&nbspX(I)&nbsp-&nbspF3&nbsp/&nbspS&nbsp*&nbspD
Y(I)&nbsp=&nbspY(I)&nbsp-&nbspF4&nbsp/&nbspS&nbsp*&nbspD
NEXT&nbspI
REM&nbsp********************************************************************************
PRINT&nbsp"方位角允许闭合差&nbspF0=+/-";&nbspXCHAR$(DMS(F0),&nbsp6)
IF&nbspABS(F1)&nbsp<=&nbspF0&nbspTHEN
PRINT&nbsp"导线方位角闭合差&nbspF1=&nbsp";&nbspXCHAR$(DMS(F1),&nbsp6);&nbsp"&nbspOK!"
ELSE
PRINT&nbsp"导线方位角闭合差&nbspF1=&nbsp";&nbspXCHAR$(DMS(F1),&nbsp6);&nbsp"&nbspOVER&nbspLIMIT!"
END&nbspIF
PRINT&nbsp"相对闭合差:"
PRINT&nbspTAB(5);&nbsp"F3=";&nbspF3,&nbsp"F4=";&nbspF4,&nbsp"F=";&nbspF,&nbsp"K=1/";&nbspS&nbsp/&nbspF
PRINT&nbsp"改正后方位角:"
FOR&nbspI&nbsp=&nbsp0&nbspTO&nbspN&nbsp-&nbsp1
PRINT&nbspTAB(5);&nbsp"A("; I;&nbsp")=";&nbspXCHAR$(DMS(A(I)),&nbsp6)
NEXT&nbspI
PRINT&nbsp"改正后坐标:"
FOR&nbspI&nbsp=&nbsp0&nbspTO&nbspM
PRINT&nbspTAB(5);&nbsp"X("; I;&nbsp")=";&nbspXCHAR$(X(I),&nbsp4),&nbspTAB(30);&nbsp"Y("; I;&nbsp")=";&nbspXCHAR$(Y(I),&nbsp4)
NEXT&nbspI
PRINT&nbspTAB(5);&nbsp"X("; M;&nbsp")=";&nbspXCHAR$(X(M),&nbsp4),&nbspTAB(30);&nbsp"Y("; M;&nbsp")=";&nbspXCHAR$(Y(M),&nbsp4)

OPEN&nbsp"DXPC.OUT"&nbspFOR&nbspOUTPUT&nbspAS&nbsp#1
PRINT&nbsp#1,&nbsp"&nbsp导线平差"
PRINT&nbsp#1,&nbspTAB(25);&nbspDATE$,&nbspTIME$
PRINT&nbsp#1,
PRINT&nbsp#1,&nbsp"方位角允许闭合差&nbspF0=+/-";&nbspXCHAR$(DMS(F0),&nbsp6)
IF&nbspABS(F1)&nbsp<=&nbspF0&nbspTHEN
PRINT&nbsp#1,&nbsp"导线方位角闭合差&nbspF1=&nbsp";&nbspXCHAR$(DMS(F1),&nbsp6);&nbsp"&nbspOK!"
ELSE
PRINT&nbsp#1,&nbsp"导线方位角闭合差&nbspF1=&nbsp";&nbspXCHAR$(DMS(F1),&nbsp6);&nbsp"&nbspOVER&nbspLIMIT!"
END&nbspIF
PRINT&nbsp#1,&nbsp"相对闭合差:"
PRINT&nbsp#1,&nbspTAB(5);&nbsp"F3=";&nbspF3,&nbsp"F4=";&nbspF4,&nbsp"F=";&nbspF,&nbsp"K=1/";&nbspS&nbsp/&nbspF
PRINT&nbsp#1,&nbsp"改正后方位角:"
FOR&nbspI&nbsp=&nbsp0&nbspTO&nbspN&nbsp-&nbsp1
PRINT&nbsp#1,&nbspTAB(5);&nbsp"A("; I;&nbsp")=";&nbspXCHAR$(DMS(A(I)),&nbsp6)
NEXT&nbspI
PRINT&nbsp#1,&nbsp"改正后坐标:"
FOR&nbspI&nbsp=&nbsp0&nbspTO&nbspM
PRINT&nbsp#1,&nbspTAB(5);&nbsp"X("; I;&nbsp")=";&nbspXCHAR$(X(I),&nbsp4),&nbspTAB(30);&nbsp"Y("; I;&nbsp")=";&nbspXCHAR$(Y(I),&nbsp4)
NEXT&nbspI
PRINT&nbsp#1,&nbspTAB(5);&nbsp"X("; M;&nbsp")=";&nbspXCHAR$(X(M),&nbsp4),&nbspTAB(30);&nbsp"Y("; M;&nbsp")=";&nbspXCHAR$(Y(M),&nbsp4)
CLOSE&nbsp#1
REM&nbsp********************************************************************************
PRINT
PRINT&nbsp"详细数据资料业已备份到&nbspJHFY.OUT。"
PRINT
PRINT&nbsp"按&nbspESC键&nbsp返回主菜单…"
DO
LOOP&nbspUNTIL&nbspINKEY$&nbsp=&nbspCHR$(27)
RUN&nbsp"MAIN.BAS"
END

REM&nbsp将度分秒转换成度
FUNCTION&nbspDEG&nbsp(X)
D&nbsp=&nbspINT(X)
M&nbsp=&nbspINT((X&nbsp-&nbspD)&nbsp*&nbsp100)
S&nbsp=&nbspINT((X&nbsp-&nbspD&nbsp-&nbspM&nbsp/&nbsp100)&nbsp*&nbsp1000000)&nbsp/&nbsp100
DEG&nbsp=&nbspD&nbsp+&nbspM&nbsp/&nbsp60&nbsp+&nbspS&nbsp/&nbsp3600
END&nbspFUNCTION

REM&nbsp将度转换成度分秒
FUNCTION&nbspDMS&nbsp(XX)
IF&nbspXX&nbsp<&nbsp0&nbspTHEN
X&nbsp=&nbsp-XX
ELSE
X&nbsp=&nbspXX
END&nbspIF
D&nbsp=&nbspINT(X)
M&nbsp=&nbspINT((X&nbsp-&nbspD)&nbsp*&nbsp60)
S&nbsp=&nbsp(X&nbsp-&nbspD&nbsp-&nbspM&nbsp/&nbsp60)&nbsp*&nbsp3600
IF&nbspXX&nbsp>=&nbsp0&nbspTHEN
DMS&nbsp=&nbspD&nbsp+&nbspM&nbsp/&nbsp100&nbsp+&nbspS&nbsp/&nbsp10000
ELSE
DMS&nbsp=&nbsp-1&nbsp*&nbsp(D&nbsp+&nbspM&nbsp/&nbsp100&nbsp+&nbspS&nbsp/&nbsp10000)
END&nbspIF
END&nbspFUNCTION

REM&nbsp以字符串形式输出保留&nbspN&nbsp位小数的&nbspX
FUNCTION&nbspXCHAR$&nbsp(XX,&nbspN)
X&nbsp=&nbspABS(XX)
R&nbsp=&nbspINT(X)
F&nbsp=&nbspINT((X&nbsp-&nbspR)&nbsp*&nbsp10&nbsp^&nbspN&nbsp+&nbsp.5)
TEMP$&nbsp=&nbspMID$(STR$(F),&nbsp2)
WHILE&nbspLEN(TEMP$)&nbsp<&nbspN
TEMP$&nbsp=&nbsp"0"&nbsp+&nbspTEMP$
WEND
TEMP$&nbsp=&nbspSTR$(R)&nbsp+&nbsp"."&nbsp+&nbspTEMP$
IF&nbspXX&nbsp>=&nbsp0&nbspTHEN
XCHAR$&nbsp=&nbspTEMP$
ELSE
XCHAR$&nbsp=&nbsp""&nbsp+&nbspMID$(TEMP$,&nbsp2)
END&nbspIF
END&nbspFUNCTION

发表评论

您的邮箱不会被公开。* 为必填项