TOP
Gaucheで各種測量計算
SchemeインタプリタGaucheで各種測量計算するスクリプトsurveyscmです。
計算内容は
トラバース計算
逆トラバース計算
幅杭計算(直線)
幅杭計算(曲線)
垂線計算
交点計算
交点計算(円直線)
交点計算(円円)
縦断曲線計算
ヘロン面積計算
座標面積計算
単曲線計算
三角形の解法
座標計算
逆計算
クロソイド曲線計算
高さ(比例)計算
集計計算
水準計算
垂線計算(円)
楕円計算
台形計算
測量計算のアルゴリズムは、
あさかぜネットのCASIO FX-603Pの測量計算実行マニュアルを参考にしています。
動作環境はGauche-0.9.10で確認しています。
最新版のGaucheでも動作すると思います。
surveyscm-0.15.zip
surveyscm-0.15.tar.gz
surveyscm-0.15.tar.gz を展開してカレントディレクトリから ./surveyscm.scm を実行してください。
CASIO FX-603P

測量計算に興味のある方はSchemeスクリプトを自由に改変してお使いください。
Schemeスクリプトを書くにあたって参考にした書籍
オライリー・ジャパン 「プログラミングGauche」
Kahuaプロジェクト (著) 川合史朗 (監修)
東海大学出版会 「素数夜曲 女王陛下のLISP」
吉田武 (著)
surveyscm.scm の実行例

トラバース計算の実行例

クロソイド曲線計算の実行例

;;-----------------------------------------------------------------------------
;; calc/surveymod.scm
(define-module surveymod
(export add180 add360 cut360
addtail addtail2
convert10->60 convert60->10
degrees360? degrees180?
heron heron?))
(select-module surveymod)
(use srfi-13)
(define-syntax add180
(syntax-rules ()
((add180 a)
(if (< a 0)
(+ a 180)
(+ a 0)) )))
(define-syntax add360
(syntax-rules ()
((add360 a)
(if (< a 0)
(+ a 360)
(+ a 0)) )))
(define-syntax cut60
(syntax-rules ()
((cut60 a)
(if (= a 60)
(- a 60)
(+ a 0)) )))
(define-syntax add1
(syntax-rules ()
((add1 a b)
(if (= a 60)
(+ b 1)
(+ b 0)) )))
(define-syntax cut360
(syntax-rules ()
((cut360 a)
(if (>= a 360)
(- a 360)
(+ a 0)) )))
(define-syntax addzero
(syntax-rules ()
((addzero a)
(if (<= 0 a 9)
(string-append "0" (x->string a))
(x->string a)) )))
(define-syntax addzero00
(syntax-rules ()
((addzero00 a)
(if (= 1 (string-scan a ".")) (string-append "00" a)
(if (= 2 (string-scan a ".")) (string-append "0" a)
(if (= 3 (string-scan a ".")) (string-append "" a)
(string-append "" a)))) )))
(define-syntax addtail
(syntax-rules ()
((addtail x)
(let* (
(at1 (/ (round (* 1000 x)) 1000))
(at2 (exact->inexact at1))
(at3 (string-reverse (x->string at2)))
(at4 (addzero00 at3))
(at5 (string-reverse at4))
)
at5) )))
#|
(define-syntax addtail
(syntax-rules ()
((addtail a)
((lambda (x) (string-reverse
(addzero00
(string-reverse
(x->string
(exact->inexact
(/ (round (* 1000 a)) 1000))))))) addtail) )))
|#
(define-syntax addtail2
(syntax-rules ()
((addtail2 x)
(let* (
(at1 (/ (truncate (* 1000 x)) 1000))
(at2 (exact->inexact at1))
(at3 (string-reverse (x->string at2)))
(at4 (addzero00 at3))
(at5 (string-reverse at4))
)
at5) )))
#|
(define-syntax addtail2
(syntax-rules ()
((addtail2 a)
((lambda (x) (string-reverse
(addzero00
(string-reverse
(x->string
(exact->inexact
(/ (truncate (* 1000 a)) 1000))))))) addtail2) )))
|#
(define-syntax convert10->60
(syntax-rules ()
((convert10->60 kaku)
(let* (
(kakudo-do1 (truncate->exact kaku))
(kakudo-fun1 (- kaku kakudo-do1))
(kakudo-fun2 (* 60 kakudo-fun1))
(kakudo-fun3 (truncate->exact kakudo-fun2))
(kakudo-byou1 (- kakudo-fun2 kakudo-fun3))
(kakudo-byou2 (* 60 kakudo-byou1))
(kakudo-byou3 (round->exact kakudo-byou2))
(kakudo-byou4 (cut60 kakudo-byou3))
(kakudo-byou5 (addzero kakudo-byou4))
(kakudo-fun4 (add1 kakudo-byou3 kakudo-fun3))
(kakudo-fun5 (cut60 kakudo-fun4))
(kakudo-fun6 (addzero kakudo-fun5))
(kakudo-do2 (add1 kakudo-fun4 kakudo-do1))
(kakudo-do3 (cut360 kakudo-do2))
(kakudo-do4 (x->string kakudo-do3))
(kakudo-do-fun-byou1
(string-append
kakudo-do4 "-" kakudo-fun6 "-" kakudo-byou5))
)
kakudo-do-fun-byou1) )))
#|
(define-syntax convert10->60
(syntax-rules ()
((convert10->60 kaku)
((lambda (x)
(string-append
(x->string
(cut360
(add1
(add1
(round->exact
(* 60 (- (* 60 (- kaku (truncate->exact kaku)))
(truncate->exact (* 60 (- kaku (truncate->exact kaku)))))))
(truncate->exact (* 60 (- kaku (truncate->exact kaku)))))
(truncate->exact kaku))))
"-"
(addzero
(cut60
(add1
(round->exact
(* 60 (- (* 60 (- kaku (truncate->exact kaku)))
(truncate->exact (* 60 (- kaku (truncate->exact kaku)))))))
(truncate->exact (* 60 (- kaku (truncate->exact kaku)))))))
"-"
(addzero
(cut60
(round->exact
(* 60 (- (* 60 (- kaku (truncate->exact kaku)))
(truncate->exact (* 60 (- kaku (truncate->exact kaku)))))))))
)) convert10->60) )))
|#
(define-syntax convert60->10
(syntax-rules ()
((convert60->10 kaku)
(let* (
(kakudo1 (x->string kaku))
(kakudo-do1 (string-drop-right kakudo1 6))
(kakudo-fun1 (string-take-right (string-drop-right kakudo1 3) 2))
(kakudo-byou1 (string-take-right kakudo1 2))
(kakudo-do2 (x->number kakudo-do1))
(kakudo-fun2 (x->number kakudo-fun1))
(kakudo-byou2 (x->number kakudo-byou1))
(kakudo-do3 (*. kakudo-do2 (expt 60 0)))
(kakudo-fun3 (*. kakudo-fun2 (expt 60 -1)))
(kakudo-byou3 (*. kakudo-byou2 (expt 60 -2)))
(kaku1 (+ kakudo-do3 kakudo-fun3 kakudo-byou3))
)
kaku1) )))
#|
(define-syntax convert60->10
(syntax-rules ()
((convert60->10 kaku)
((lambda (x)
(+
(*. (expt 60 0)
(x->number (string-drop-right (x->string kaku) 6)))
(*. (expt 60 -1)
(x->number (string-take-right
(string-drop-right (x->string kaku) 3) 2)))
(*. (expt 60 -2)
(x->number (string-take-right (x->string kaku) 2)))
)) convert60->10) )))
|#
(define-syntax degrees360?
(syntax-rules ()
((degrees360? kaku)
(not (or
(>= 6 (string-length (x->string kaku)))
(<= 10 (string-length (x->string kaku)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 0)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 1)))
(not (char=? (ucs->char 45) (string-ref
(string-reverse (x->string kaku)) 2)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 3)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 4)))
(not (char=? (ucs->char 45) (string-ref
(string-reverse (x->string kaku)) 5)))
(if (= 7 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
)
(if (= 8 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 7)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
)
(if (= 9 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 7)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 8)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
(not (> 360 (x->number
(string-drop-right
(x->string kaku) 6))))
) ))) ) ) )))
(define-syntax degrees180?
(syntax-rules ()
((degrees180? kaku)
(not (or
(>= 6 (string-length (x->string kaku)))
(<= 10 (string-length (x->string kaku)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 0)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 1)))
(not (char=? (ucs->char 45) (string-ref
(string-reverse (x->string kaku)) 2)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 3)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 4)))
(not (char=? (ucs->char 45) (string-ref
(string-reverse (x->string kaku)) 5)))
(if (= 7 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
)
(if (= 8 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 7)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
)
(if (= 9 (string-length (x->string kaku)))
(or
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 6)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 7)))
(not (char-numeric? (string-ref
(string-reverse (x->string kaku)) 8)))
(not (> 60 (x->number (string-take-right
(x->string kaku) 2))))
(not (> 60 (x->number
(string-take-right
(string-drop-right
(x->string kaku) 3) 2))))
(not (> 180 (x->number
(string-drop-right
(x->string kaku) 6))))
) ))) ) ) )))
(define-syntax heron
(syntax-rules ()
((heron a b c)
(let* (
(s (/ (+ a b c) 2))
(t (sqrt (* s (- s a) (- s b) (- s c))))
)
t) )))
#|
(define-syntax heron
(syntax-rules ()
((heron a b c)
((lambda (t) (sqrt (* (/ (+ a b c) 2)
(- (/ (+ a b c) 2) a)
(- (/ (+ a b c) 2) b)
(- (/ (+ a b c) 2) c))) ) heron) )))
|#
(define-syntax heron?
(syntax-rules ()
((heron? a b c)
(and (> (+ a b) c)
(> (+ b c) a)
(> (+ c a) b)
) )))
(provide "surveymod")
;;-----------------------------------------------------------------------------
;; calc/survey-00.scm
(define-module survey-00
(export traverse-calc))
(select-module survey-00)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (traverse-calc)
(newline)
(let loop0 ((count 1))
(print "トラバース計算")
(newline)
(let loop-01 ((count 1))
(print "後視点 X座標")
(let ((back-x (read)))
(if (not (real? back-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "後視点 Y座標")
(let ((back-y (read)))
(if (not (real? back-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "器械点 X座標")
(let ((kikai-x (read)))
(if (not (real? kikai-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "器械点 Y座標")
(let ((kikai-y (read)))
(if (not (real? kikai-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print "夾角 0-00-00 から 359-59-59")
(let ((kyou-kaku (read)))
(if (not (degrees360? kyou-kaku))
(begin (newline)
(print "夾角を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "距離")
(let ((zenshi-kyori (read)))
(if (not (real? zenshi-kyori))
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-06 (+ count 1)))
(if (negative? zenshi-kyori)
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let* (
(koushi-houkou-kaku1
(* (atan (- back-y kikai-y) (- back-x kikai-x)) 180/pi))
(koushi-houkou-kaku2 (add360 koushi-houkou-kaku1))
(kyou-kaku1 (convert60->10 kyou-kaku))
(zenshi-houkou-kaku1 (+ koushi-houkou-kaku2 kyou-kaku1))
(zenshi-houkou-kaku2 (cut360 zenshi-houkou-kaku1))
(zenshi-x1 (* zenshi-kyori (cos (* zenshi-houkou-kaku2 pi/180))))
(zenshi-x2 (+ kikai-x zenshi-x1))
(zenshi-x3 (addtail zenshi-x2))
(zenshi-y1 (* zenshi-kyori (sin (* zenshi-houkou-kaku2 pi/180))))
(zenshi-y2 (+ kikai-y zenshi-y1))
(zenshi-y3 (addtail zenshi-y2))
(koushi-houkou-kaku3 (convert10->60 koushi-houkou-kaku2))
(zenshi-houkou-kaku3 (convert10->60 zenshi-houkou-kaku2))
)
(newline)
(print "前視X座標 " zenshi-x3)
(print "前視Y座標 " zenshi-y3)
(newline)
(print "後視方向角 " koushi-houkou-kaku3)
(print "前視方向角 " zenshi-houkou-kaku3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))
(provide "survey-00")
;;-----------------------------------------------------------------------------
;; calc/survey-01.scm
(define-module survey-01
(export inverse-calc))
(select-module survey-01)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (inverse-calc)
(newline)
(let loop0 ((count 1))
(print "逆トラバース計算")
(newline)
(let loop-01 ((count 1))
(print "後視点 X座標")
(let ((back-x (read)))
(if (not (real? back-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "後視点 Y座標")
(let ((back-y (read)))
(if (not (real? back-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "器械点 X座標")
(let ((kikai-x (read)))
(if (not (real? kikai-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let lopp-04 ((count 1))
(print "器械点 Y座標")
(let ((kikai-y (read)))
(if (not (real? kikai-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print "前視点 X座標")
(let ((front-x (read)))
(if (not (real? front-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let lopp-06 ((count 1))
(print "前視点 Y座標")
(let ((front-y (read)))
(if (not (real? front-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let* (
(zenshi-kyori1
(sqrt (+ (expt (- front-y kikai-y) 2)
(expt (- front-x kikai-x) 2))))
(zenshi-kyori2 (addtail zenshi-kyori1))
(koushi-houkou-kaku1
(* (atan (- back-y kikai-y) (- back-x kikai-x)) 180/pi))
(koushi-houkou-kaku2 (add360 koushi-houkou-kaku1))
(zenshi-houkou-kaku1
(* (atan (- front-y kikai-y) (- front-x kikai-x)) 180/pi))
(zenshi-houkou-kaku2 (add360 zenshi-houkou-kaku1))
(kyou-kaku1 (- zenshi-houkou-kaku2 koushi-houkou-kaku2))
(kyou-kaku2 (add360 kyou-kaku1))
(kyou-kaku3 (convert10->60 kyou-kaku2))
(koushi-houkou-kaku3 (convert10->60 koushi-houkou-kaku2))
(zenshi-houkou-kaku3 (convert10->60 zenshi-houkou-kaku2))
)
(newline)
(print "夾角 " kyou-kaku3)
(print "距離 " zenshi-kyori2)
(newline)
(print "後視方向角 " koushi-houkou-kaku3)
(print "前視方向角 " zenshi-houkou-kaku3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))
(provide "survey-01")
;;-----------------------------------------------------------------------------
;; calc/survey-02.scm
(define-module survey-02
(export habagui-chokusen-calc))
(select-module survey-02)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (habagui-chokusen-calc)
(newline)
(let loop0 ((count 1))
(print "幅杭計算(直線)")
(newline)
(let loop-01 ((count 1))
(print "幅L")
(let ((haba-L (read)))
(if (not (real? haba-L))
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(if (negative? haba-L)
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "幅R")
(let ((haba-R (read)))
(if (not (real? haba-R))
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(if (negative? haba-R)
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "B点 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "B点 Y座標")
(let ((By (read)))
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-07 ((count 1))
(print "A点からP点までの距離")
(let ((Lp (read)))
(if (not (real? Lp))
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-07 (+ count 1)))
(if (negative? Lp)
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let* (
(houkou-kaku1
(* (atan (- By Ay) (- Bx Ax)) 180/pi))
(houkou-kaku2 (add360 houkou-kaku1))
(houkou-kaku3 (- houkou-kaku2 90))
(houkou-kaku4 (add360 houkou-kaku3))
(houkou-kaku5 (- houkou-kaku2 270))
(houkou-kaku6 (add360 houkou-kaku5))
(Px1 (* Lp (cos (* houkou-kaku2 pi/180))))
(Px2 (+ Ax Px1))
(Py1 (* Lp (sin (* houkou-kaku2 pi/180))))
(Py2 (+ Ay Py1))
(PLx1 (* haba-L (cos (* houkou-kaku4 pi/180))))
(PLx2 (+ Px2 PLx1))
(PLy1 (* haba-L (sin (* houkou-kaku4 pi/180))))
(PLy2 (+ Py2 PLy1))
(PRx1 (* haba-R (cos (* houkou-kaku6 pi/180))))
(PRx2 (+ Px2 PRx1))
(PRy1 (* haba-R (sin (* houkou-kaku6 pi/180))))
(PRy2 (+ Py2 PRy1))
(Px3 (addtail Px2))
(Py3 (addtail Py2))
(PLx3 (addtail PLx2))
(PLy3 (addtail PLy2))
(PRx3 (addtail PRx2))
(PRy3 (addtail PRy2))
)
(newline)
(print "P点 X座標 " Px3)
(print "P点 Y座標 " Py3)
(newline)
(print "PL点 X座標 " PLx3)
(print "PL点 Y座標 " PLy3)
(newline)
(print "PR点 X座標 " PRx3)
(print "PR点 Y座標 " PRy3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))))
(provide "survey-02")
;;-----------------------------------------------------------------------------
;; calc/survey-03.scm
(define-module survey-03
(export habagui-kyokusen-calc))
(select-module survey-03)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (habagui-kyokusen-calc)
(newline)
(print "幅杭計算(曲線)")
(newline)
(print "左カーブ(1) 右カーブ(2)")
(let ((curve (read)))
(newline)
(case curve
((1) (begin
(let loop0 ((count 1))
(print "幅杭計算(曲線) 左カーブ")
(newline)
(let loop-01 ((count 1))
(print "幅L")
(let ((haba-L (read)))
(if (not (real? haba-L))
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(if (negative? haba-L)
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "幅R")
(let ((haba-R (read)))
(if (not (real? haba-R))
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(if (negative? haba-R)
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "半径")
(let ((hankei (read)))
(if (not (real? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "BC点 X座標")
(let ((BC-x (read)))
(if (not (real? BC-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "BC点 Y座標")
(let ((BC-y (read)))
(if (not (real? BC-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "IP点 X座標")
(let ((IP-x (read)))
(if (not (real? IP-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop-07 ((count 1))
(print "IP点 Y座標")
(let ((IP-y (read)))
(if (not (real? IP-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-08 ((count 1))
(print "BC点からP点までの弧長")
(let ((kochou (read)))
(if (not (real? kochou))
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-08 (+ count 1)))
(if (negative? kochou)
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-08 (+ count 1)))
(begin
(let* (
(houkou-kaku-A1
(* (atan (- IP-y BC-y) (- IP-x BC-x)) 180/pi))
(houkou-kaku-A2
(add360 houkou-kaku-A1))
(houkou-kaku-B1
(- houkou-kaku-A2 90))
(houkou-kaku-B2
(add360 houkou-kaku-B1))
(chuushin-x1
(* hankei (cos (* houkou-kaku-B2 pi/180))))
(chuushin-x2
(+ BC-x chuushin-x1))
(chuushin-y1
(* hankei (sin (* houkou-kaku-B2 pi/180))))
(chuushin-y2
(+ BC-y chuushin-y1))
(henkaku1 (* (/. kochou hankei) (/. 180/pi 2)))
(genchou1 (* (* 2 hankei) (sin (* henkaku1 pi/180))))
(gen-houkou-kaku-C1
(- houkou-kaku-A2 henkaku1))
(gen-houkou-kaku-C2
(add360 gen-houkou-kaku-C1))
(Px1 (* genchou1 (cos (* gen-houkou-kaku-C2 pi/180))))
(Px2 (+ BC-x Px1))
(Py1 (* genchou1 (sin (* gen-houkou-kaku-C2 pi/180))))
(Py2 (+ BC-y Py1))
(houkou-kaku-D1
(* (atan (- Py2 chuushin-y2) (- Px2 chuushin-x2))
180/pi))
(houkou-kaku-D2
(add360 houkou-kaku-D1))
(PRx1 (* haba-R (cos (* houkou-kaku-D2 pi/180))))
(PRx2 (+ Px2 PRx1))
(PRy1 (* haba-R (sin (* houkou-kaku-D2 pi/180))))
(PRy2 (+ Py2 PRy1))
(houkou-kaku-E1
(+ houkou-kaku-D2 180))
(houkou-kaku-E2
(cut360 houkou-kaku-E1))
(PLx1 (* haba-L (cos (* houkou-kaku-E2 pi/180))))
(PLx2 (+ Px2 PLx1))
(PLy1 (* haba-L (sin (* houkou-kaku-E2 pi/180))))
(PLy2 (+ Py2 PLy1))
(Px3 (addtail Px2))
(Py3 (addtail Py2))
(PRx3 (addtail PRx2))
(PRy3 (addtail PRy2))
(PLx3 (addtail PLx2))
(PLy3 (addtail PLy2))
)
(newline)
(print "P点 X座標 " Px3)
(print "P点 Y座標 " Py3)
(newline)
(print "PL点 X座標 " PLx3)
(print "PL点 Y座標 " PLy3)
(newline)
(print "PR点 X座標 " PRx3)
(print "PR点 Y座標 " PRy3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "幅杭計算(曲線) 右カーブ")
(newline)
(let loop-01 ((count 1))
(print "幅L")
(let ((haba-L (read)))
(if (not (real? haba-L))
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(if (negative? haba-L)
(begin (newline)
(print "幅Lを入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "幅R")
(let ((haba-R (read)))
(if (not (real? haba-R))
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(if (negative? haba-R)
(begin (newline)
(print "幅Rを入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "半径")
(let ((hankei (read)))
(if (not (real? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "BC点 X座標")
(let ((BC-x (read)))
(if (not (real? BC-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "BC点 Y座標")
(let ((BC-y (read)))
(if (not (real? BC-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "IP点 X座標")
(let ((IP-x (read)))
(if (not (real? IP-x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop-07 ((count 1))
(print "IP点 Y座標")
(let ((IP-y (read)))
(if (not (real? IP-y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-08 ((count 1))
(print "BC点からP点までの弧長")
(let ((kochou (read)))
(if (not (real? kochou))
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-08 (+ count 1)))
(if (negative? kochou)
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-08 (+ count 1)))
(begin
(let* (
(houkou-kaku-A1
(* (atan (- IP-y BC-y) (- IP-x BC-x)) 180/pi))
(houkou-kaku-A2
(add360 houkou-kaku-A1))
(houkou-kaku-B1
(+ houkou-kaku-A2 90))
(houkou-kaku-B2
(cut360 houkou-kaku-B1))
(chuushin-x1
(* hankei (cos (* houkou-kaku-B2 pi/180))))
(chuushin-x2
(+ BC-x chuushin-x1))
(chuushin-y1
(* hankei (sin (* houkou-kaku-B2 pi/180))))
(chuushin-y2
(+ BC-y chuushin-y1))
(henkaku1 (* (/. kochou hankei) (/. 180/pi 2)))
(genchou1 (* (* 2 hankei) (sin (* henkaku1 pi/180))))
(gen-houkou-kaku-C1
(+ houkou-kaku-A2 henkaku1))
(gen-houkou-kaku-C2
(cut360 gen-houkou-kaku-C1))
(Px1 (* genchou1 (cos (* gen-houkou-kaku-C2 pi/180))))
(Px2 (+ BC-x Px1))
(Py1 (* genchou1 (sin (* gen-houkou-kaku-C2 pi/180))))
(Py2 (+ BC-y Py1))
(houkou-kaku-D1
(* (atan (- Py2 chuushin-y2) (- Px2 chuushin-x2))
180/pi))
(houkou-kaku-D2
(add360 houkou-kaku-D1))
(PLx1 (* haba-L (cos (* houkou-kaku-D2 pi/180))))
(PLx2 (+ Px2 PLx1))
(PLy1 (* haba-L (sin (* houkou-kaku-D2 pi/180))))
(PLy2 (+ Py2 PLy1))
(houkou-kaku-E1
(+ houkou-kaku-D2 180))
(houkou-kaku-E2
(cut360 houkou-kaku-E1))
(PRx1 (* haba-R (cos (* houkou-kaku-E2 pi/180))))
(PRx2 (+ Px2 PRx1))
(PRy1 (* haba-R (sin (* houkou-kaku-E2 pi/180))))
(PRy2 (+ Py2 PRy1))
(Px3 (addtail Px2))
(Py3 (addtail Py2))
(PLx3 (addtail PLx2))
(PLy3 (addtail PLy2))
(PRx3 (addtail PRx2))
(PRy3 (addtail PRy2))
)
(newline)
(print "P点 X座標 " Px3)
(print "P点 Y座標 " Py3)
(newline)
(print "PL点 X座標 " PLx3)
(print "PL点 Y座標 " PLy3)
(newline)
(print "PR点 X座標 " PRx3)
(print "PR点 Y座標 " PRy3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))))))))))
)))
(provide "survey-03")
;;-----------------------------------------------------------------------------
;; calc/survey-04.scm
(define-module survey-04
(export suisen-calc))
(select-module survey-04)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (suisen-calc)
(newline)
(print "垂線計算 1点1方向角(1) 2点(2)")
(let ((keisan-houhou (read))) (newline)
(case keisan-houhou
((1) (begin
(let loop0 ((count 1))
(print "垂線計算 1点1方向角")
(newline)
(let loop-01 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "A点 方向角 0-00-00 から 359-59-59")
(let ((houkou-kaku (read))) (newline)
(if (not (degrees360? houkou-kaku))
(begin (newline)
(print "方向角を入力してください")
(newline))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "C点 X座標")
(let ((Cx (read)))
(if (not (real? Cx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "C点 Y座標")
(let ((Cy (read)))
(if (not (real? Cy))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let* (
(houkou-kaku1 (convert60->10 houkou-kaku))
(m1 (tan (* pi/180 houkou-kaku1)))
(m2 (tan (* pi/180 (add360 (- houkou-kaku1 90)))))
(Px1 (/. (- (+ (- (* m2 Cx) (* m1 Ax)) Ay) Cy) (- m2 m1)))
(Py1 (+ (* m1 (- Px1 Ax)) Ay))
(Lc1 (sqrt (+ (expt (- Cx Px1) 2) (expt (- Cy Py1) 2))))
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Lc2 (addtail Lc1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(print "垂線長 " Lc2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "垂線計算 2点")
(newline)
(let loop-01 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "B点 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "B点 Y座標")
(let ((By (read))) (newline)
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print "C点 X座標")
(let ((Cx (read)))
(if (not (real? Cx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "C点 Y座標")
(let ((Cy (read)))
(if (not (real? Cy))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let* (
(ABx (- Bx Ax))
(ABy (- By Ay))
(m1 (tan (* pi/180 (* 180/pi (atan ABy ABx)))))
(m2 (tan (* pi/180 (add360 (- (* 180/pi (atan ABy ABx)) 90)))))
(Px1 (/. (- (+ (- (* m2 Cx) (* m1 Ax)) Ay) Cy) (- m2 m1)))
(Py1 (+ (* m1 (- Px1 Ax)) Ay))
(Lc1 (sqrt (+ (expt (- Cx Px1) 2) (expt (- Cy Py1) 2))))
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Lc2 (addtail Lc1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(print "垂線長 " Lc2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))
)))
(provide "survey-04")
;;-----------------------------------------------------------------------------
;; calc/survey-05.scm
(define-module survey-05
(export kouten-calc))
(select-module survey-05)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (kouten-calc)
(newline)
(print "交点計算 2点2方向角(1) 4点(2)")
(let ((keisan-houhou (read))) (newline)
(case keisan-houhou
((1) (begin
(let loop0 ((count 1))
(print "交点計算 2点2方向角")
(newline)
(let loop-01 ((count 1))
(print "A1点 X座標")
(let ((A1x (read)))
(if (not (real? A1x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A1点 Y座標")
(let ((A1y (read)))
(if (not (real? A1y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "A1点 方向角 0-00-00 から 359-59-59")
(let ((A1-houkou-kaku (read))) (newline)
(if (not (degrees360? A1-houkou-kaku))
(begin (newline)
(print "方向角を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "B1点 X座標")
(let ((B1x (read)))
(if (not (real? B1x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+count 1)))
(begin
(let loop-05 ((count 1))
(print"B1点 Y座標")
(let ((B1y (read)))
(if (not (real? B1y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "B1点 方向角 0-00-00 から 359-59-59")
(let ((B1-houkou-kaku (read)))
(if (not (degrees360? B1-houkou-kaku))
(begin (newline)
(print "方向角を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let (
(A1-houkou-kaku1 (convert60->10 A1-houkou-kaku))
(B1-houkou-kaku1 (convert60->10 B1-houkou-kaku))
)
(if
(or
(<= 180.0 (- A1-houkou-kaku1 B1-houkou-kaku1) 180.00000000000006)
(<= 180.0 (- B1-houkou-kaku1 A1-houkou-kaku1) 180.00000000000006)
(= 0.0 (- A1-houkou-kaku1 B1-houkou-kaku1))
(= 0.0 (- B1-houkou-kaku1 A1-houkou-kaku1))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
(else (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(m1 (tan (* pi/180 A1-houkou-kaku1)))
(m2 (tan (* pi/180 B1-houkou-kaku1)))
(X (/. (- (+ (- (* m2 B1x) (* m1 A1x)) A1y) B1y) (- m2 m1)))
(Y (+ (* m1 (- X A1x)) A1y))
(X1 (addtail X))
(Y1 (addtail Y))
)
(newline)
(print "P点 X座標 " X1)
(print "P点 Y座標 " Y1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "交点計算 4点")
(newline)
(let loop-01 ((count 1))
(print "A1点 X座標")
(let ((A1x (read)))
(if (not (real? A1x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A1点 Y座標")
(let ((A1y (read))) (newline)
(if (not (real? A1y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "A2点 X座標")
(let ((A2x (read)))
(if (not (real? A2x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "A2点 Y座標")
(let ((A2y (read))) (newline)
(if (not (real? A2y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print"B1点 X座標")
(let ((B1x (read)))
(if (not (real? B1x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "B1点 Y座標")
(let ((B1y (read))) (newline)
(if (not (real? B1y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop-07 ((count 1))
(print "B2点 X座標")
(let ((B2x (read)))
(if (not (real? B2x))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let loop-08 ((count 1))
(print "B2点 Y座標")
(let ((B2y (read)))
(if (not (real? B2y))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-08 (+ count 1)))
(begin
(let* (
(a-x (- A2x A1x))
(a-y (- A2y A1y))
(b-x (- B2x B1x))
(b-y (- B2y B1y))
(m01 (add360 (* 180/pi (atan a-y a-x))))
(m02 (add360 (* 180/pi (atan b-y b-x))))
)
(if
(or
(<= 180.0 (- m01 m02) 180.00000000000006)
(<= 180.0 (- m02 m01) 180.00000000000006)
(= 0.0 (- m01 m02))
(= 0.0 (- m02 m01))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(m1 (tan (* pi/180 m01)))
(m2 (tan (* pi/180 m02)))
(X (/. (- (+ (- (* m2 B1x) (* m1 A1x)) A1y) B1y) (- m2 m1)))
(Y (+ (* m1 (- X A1x)) A1y))
(X1 (addtail X))
(Y1 (addtail Y))
)
(newline)
(print "P点 X座標 " X1)
(print "P点 Y座標 " Y1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))))))))))))))
)))
(provide "survey-05")
;;-----------------------------------------------------------------------------
;; calc/survey-06.scm
(define-module survey-06
(export kouten-en-chokusen-calc))
(select-module survey-06)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (kouten-en-chokusen-calc)
(newline)
(print "交点計算(円・直線) 1点1方向角(1) 2点(2)")
(let ((keisan-houhou (read))) (newline)
(case keisan-houhou
((1) (begin
(let loop0 ((count 1))
(print "交点計算(円・直線) 1点1方向角")
(newline)
(let loop-01 ((count 1))
(print "円の中心 X座標")
(let ((Xo (read)))
(if (not (real? Xo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "円の中心 Y座標")
(let ((Yo (read)))
(if (not (real? Yo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "円の半径")
(let ((R (read))) (newline)
(if (not (real? R))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? R))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "A点 方向角 0-00-00 から 359-59-59")
(let ((houkou-kaku (read)))
(if (not (degrees360? houkou-kaku))
(begin (newline)
(print "方向角を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let* (
(X (- Ax Xo))
(Y (- Ay Yo))
(houkou-kaku1 (convert60->10 houkou-kaku))
(m (tan (* pi/180 houkou-kaku1)))
(n (- (* X m) Y))
(l (sqrt (- (* (expt R 2) (+ (expt m 2) 1)) (expt n 2))))
)
(if (or (= 90.0 houkou-kaku1) (= 270.0 houkou-kaku1))
(begin
(let* (
(Px1 (+ Ax 0))
(Py1 (+ Yo (sqrt (- (expt R 2) (expt X 2)))))
(Qx1 (+ Ax 0))
(Qy1 (- Yo (sqrt (- (expt R 2) (expt X 2)))))
)
(if (or
(not (real? Px1))
(not (real? Py1))
(not (real? Qx1))
(not (real? Qy1))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Qx2 (addtail Qx1))
(Qy2 (addtail Qy1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(newline)
(print "Q点 X座標 " Qx2)
(print "Q点 Y座標 " Qy2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))))))
(begin
(let* (
(Px1 (+ (/. (+ (* m n) l)
(+ (expt m 2) 1)) Xo))
(Py1 (+ (- (* (/. (+ (* m n ) l)
(+ (expt m 2) 1)) m) n) Yo))
(Qx1 (+ (/. (- (* m n) l)
(+ (expt m 2) 1)) Xo))
(Qy1 (+ (- (* (/. (- (* m n ) l)
(+ (expt m 2) 1)) m) n) Yo))
)
(if (or
(not (real? Px1))
(not (real? Py1))
(not (real? Qx1))
(not (real? Qy1))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Qx2 (addtail Qx1))
(Qy2 (addtail Qy1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(newline)
(print "Q点 X座標 " Qx2)
(print "Q点 Y座標 " Qy2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "交点計算(円・直線) 2点")
(newline)
(let loop-01 ((count 1))
(print "円の中心 X座標")
(let ((Xo (read)))
(if (not (real? Xo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "円の中心 Y座標")
(let ((Yo (read)))
(if (not (real? Yo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "円の半径")
(let ((R (read))) (newline)
(if (not (real? R))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? R))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "B点 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop-07 ((count 1))
(print "B点 Y座標")
(let ((By (read)))
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let* (
(X (- Ax Xo))
(Y (- Ay Yo))
(a-x (- Bx Ax))
(a-y (- By Ay))
(m0 (add360 (* 180/pi (atan a-y a-x))))
(m (tan (* pi/180 m0)))
(n (- (* X m) Y))
(l (sqrt (- (* (expt R 2) (+ (expt m 2) 1)) (expt n 2))))
)
(if (or (= 90.0 m0) (= 270.0 m0))
(begin
(let* (
(Px1 (+ Ax 0))
(Py1 (+ Yo (sqrt (- (expt R 2) (expt X 2)))))
(Qx1 (+ Ax 0))
(Qy1 (- Yo (sqrt (- (expt R 2) (expt X 2)))))
)
(if (or
(not (real? Px1))
(not (real? Py1))
(not (real? Qx1))
(not (real? Qy1))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Qx2 (addtail Qx1))
(Qy2 (addtail Qy1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(newline)
(print "Q点 X座標 " Qx2)
(print "Q点 Y座標 " Qy2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))))))
(begin
(let* (
(Px1 (+ (/. (+ (* m n) l)
(+ (expt m 2) 1)) Xo))
(Py1 (+ (- (* (/. (+ (* m n ) l)
(+ (expt m 2) 1)) m) n) Yo))
(Qx1 (+ (/. (- (* m n) l)
(+ (expt m 2) 1)) Xo))
(Qy1 (+ (- (* (/. (- (* m n ) l)
(+ (expt m 2) 1)) m) n) Yo))
)
(if (or
(not (real? Px1))
(not (real? Py1))
(not (real? Qx1))
(not (real? Qy1))
)
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Qx2 (addtail Qx1))
(Qy2 (addtail Qy1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(newline)
(print "Q点 X座標 " Qx2)
(print "Q点 Y座標 " Qy2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))))))))))))))
)))
(provide "survey-06")
;;-----------------------------------------------------------------------------
;; calc/survey-07.scm
(define-module survey-07
(export kouten-en-en-calc))
(select-module survey-07)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (kouten-en-en-calc)
(newline)
(let loop0 ((count 1))
(print "交点計算(円・円)")
(newline)
(let loop-01 ((count 1))
(print "円Aの中心 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "円Aの中心 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "円Aの半径")
(let ((Ra (read))) (newline)
(if (not (real? Ra))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? Ra))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "円Bの中心 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "円Bの中心 Y座標")
(let ((By (read)))
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "円Bの半径")
(let ((Rb (read)))
(if (not (real? Rb))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-06 (+ count 1)))
(if (not (positive? Rb))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let* (
(L (sqrt (+ (expt (- By Ay) 2) (expt (- Bx Ax) 2))))
(a1 (* (acos
(/.
(- (+ (expt L 2) (expt Ra 2)) (expt Rb 2))
(* 2 L Ra)
)
) 180/pi))
)
(if (or (not (real? a1)) (not (real? L)))
(begin (newline)
(print "交点がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
(else (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(chuushin-houkou-kaku1
(* (atan (- By Ay) (- Bx Ax)) 180/pi))
(chuushin-houkou-kaku2
(add360 chuushin-houkou-kaku1))
(Px1 (+ Ax (* Ra (cos (*
(cut360 (+ chuushin-houkou-kaku2 a1)) pi/180)))))
(Py1 (+ Ay (* Ra (sin (*
(cut360 (+ chuushin-houkou-kaku2 a1)) pi/180)))))
(Qx1 (+ Ax (* Ra (cos (*
(add360 (- chuushin-houkou-kaku2 a1)) pi/180)))))
(Qy1 (+ Ay (* Ra (sin (*
(add360 (- chuushin-houkou-kaku2 a1)) pi/180)))))
(Px2 (addtail Px1))
(Py2 (addtail Py1))
(Qx2 (addtail Qx1))
(Qy2 (addtail Qy1))
)
(newline)
(print "P点 X座標 " Px2)
(print "P点 Y座標 " Py2)
(newline)
(print "Q点 X座標 " Qx2)
(print "Q点 Y座標 " Qy2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))
(provide "survey-07")
;;-----------------------------------------------------------------------------
;; calc/survey-08.scm
(define-module survey-08
(export jyuudankyokusen-calc))
(select-module survey-08)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (jyuudankyokusen-calc)
(newline)
(print "縦断曲線計算 山型(1) 谷型(2)")
(let ((keisan-houhou (read)))
(newline)
(case keisan-houhou
((1) (begin
(let loop0 ((count 1))
(print "縦断曲線計算 山型")
(newline)
(let loop-01 ((count 1))
(print "縦断曲線始点の計画高")
(let ((shiten-keikakukou (read)))
(if (not (real? shiten-keikakukou))
(begin (newline)
(print "計画高を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "縦断曲線長")
(let ((VCL (read)))
(if (not (real? VCL))
(begin (newline)
(print "縦断曲線長を入力してください")
(newline)
(loop-02 (+ count 1)))
(if (not (positive? VCL))
(begin (newline)
(print "縦断曲線長を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "勾配1 上り何%")
(let ((koubai1 (read)))
(if (not (real? koubai1))
(begin (newline)
(print "上り勾配を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? koubai1))
(begin (newline)
(print "上り勾配を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "勾配2 下り何%")
(let ((koubai2 (read)))
(if (not (real? koubai2))
(begin (newline)
(print "下り勾配を入力してください")
(newline)
(loop-04 (+ count 1)))
(if (not (negative? koubai2))
(begin (newline)
(print "下り勾配を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print "始点からの水平距離")
(let ((suiheikyori (read)))
(if (not (real? suiheikyori))
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-05 (+ count 1)))
(if (negative? suiheikyori)
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let* (
(hyoukousa1 (* suiheikyori (/. koubai1 100)))
(hyoukou1 (+ shiten-keikakukou hyoukousa1))
(Y (* (/. (abs (- koubai1 koubai2))
(* 200 VCL))
(expt suiheikyori 2)))
(keikaku-hyoukou (- hyoukou1 Y))
(keikaku-hyoukou1 (addtail keikaku-hyoukou))
)
(newline)
(print "標高 " hyoukou1)
(print "計画高 " keikaku-hyoukou1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "縦断曲線計算 谷型")
(newline)
(let loop-01 ((count 1))
(print "縦断曲線始点の計画高")
(let ((shiten-keikakukou (read)))
(if (not (real? shiten-keikakukou))
(begin (newline)
(print "計画高を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "縦断曲線長")
(let ((VCL (read)))
(if (not (real? VCL))
(begin (newline)
(print "縦断曲線長を入力してください")
(newline)
(loop-02 (+ count 1)))
(if (not (positive? VCL))
(begin (newline)
(print "縦断曲線長を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "勾配1 下り何%")
(let ((koubai1 (read)))
(if (not (real? koubai1))
(begin (newline)
(print "下り勾配を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (negative? koubai1))
(begin (newline)
(print "下り勾配を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "勾配2 上り何%")
(let ((koubai2 (read)))
(if (not (real? koubai2))
(begin (newline)
(print "上り勾配を入力してください")
(newline)
(loop-04 (+ count 1)))
(if (not (positive? koubai2))
(begin (newline)
(print "上り勾配を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-05 ((count 1))
(print "始点からの水平距離")
(let ((suiheikyori (read)))
(if (not (real? suiheikyori))
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-05 (+ count 1)))
(if (negative? suiheikyori)
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let* (
(hyoukousa1 (* suiheikyori (/. koubai1 100)))
(hyoukou1 (+ shiten-keikakukou hyoukousa1))
(Y (* (/. (abs (- koubai1 koubai2))
(* 200 VCL))
(expt suiheikyori 2)))
(keikaku-hyoukou (+ hyoukou1 Y))
(keikaku-hyoukou1 (addtail keikaku-hyoukou))
)
(newline)
(print "標高 " hyoukou1)
(print "計画高 " keikaku-hyoukou1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))
)))
(provide "survey-08")
;;-----------------------------------------------------------------------------
;; calc/survey-09.scm
(define-module survey-09
(export heron-calc))
(select-module survey-09)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (heron-calc)
(newline)
(print "三辺ヘロン面積計算")
(newline)
(print "ヘロン三角形の数? (1) から (5)")
(let ((sankakukei (read))) (newline)
(case sankakukei
((1) (begin
(let loop0 ((count 1))
(print "ヘロン三角形の数 1")
(newline)
(print "第1三角形 辺A")
(let ((dai-1-hen-a (read)))
(print "第1三角形 辺B")
(let ((dai-1-hen-b (read)))
(print "第1三角形 辺C")
(let ((dai-1-hen-c (read)))
(let* (
(t1 (heron dai-1-hen-a dai-1-hen-b dai-1-hen-c))
(menseki (addtail2 t1))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))
((2) (begin
(let loop0 ((count 1))
(print "ヘロン三角形の数 2")
(newline)
(print "第1三角形 辺A")
(let ((dai-1-hen-a (read)))
(print "第1三角形 辺B")
(let ((dai-1-hen-b (read)))
(print "第1三角形 辺C")
(let ((dai-1-hen-c (read))) (newline)
(print "第2三角形 辺A")
(let ((dai-2-hen-a (read)))
(print "第2三角形 辺B")
(let ((dai-2-hen-b (read)))
(print "第2三角形 辺C")
(let ((dai-2-hen-c (read)))
(let* (
(t1 (heron dai-1-hen-a dai-1-hen-b dai-1-hen-c))
(t2 (heron dai-2-hen-a dai-2-hen-b dai-2-hen-c))
(menseki (addtail2 (+ t1 t2)))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))
((3) (begin
(let loop0 ((count 1))
(print "ヘロン三角形の数 3")
(newline)
(print "第1三角形 辺A")
(let ((dai-1-hen-a (read)))
(print "第1三角形 辺B")
(let ((dai-1-hen-b (read)))
(print "第1三角形 辺C")
(let ((dai-1-hen-c (read))) (newline)
(print "第2三角形 辺A")
(let ((dai-2-hen-a (read)))
(print "第2三角形 辺B")
(let ((dai-2-hen-b (read)))
(print "第2三角形 辺C")
(let ((dai-2-hen-c (read))) (newline)
(print "第3三角形 辺A")
(let ((dai-3-hen-a (read)))
(print "第3三角形 辺B")
(let ((dai-3-hen-b (read)))
(print "第3三角形 辺C")
(let ((dai-3-hen-c (read)))
(let* (
(t1 (heron dai-1-hen-a dai-1-hen-b dai-1-hen-c))
(t2 (heron dai-2-hen-a dai-2-hen-b dai-2-hen-c))
(t3 (heron dai-3-hen-a dai-3-hen-b dai-3-hen-c))
(menseki (addtail2 (+ t1 t2 t3)))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))
((4) (begin
(let loop0 ((count 1))
(print "ヘロン三角形の数 4")
(newline)
(print "第1三角形 辺A")
(let ((dai-1-hen-a (read)))
(print "第1三角形 辺B")
(let ((dai-1-hen-b (read)))
(print "第1三角形 辺C")
(let ((dai-1-hen-c (read))) (newline)
(print "第2三角形 辺A")
(let ((dai-2-hen-a (read)))
(print "第2三角形 辺B")
(let ((dai-2-hen-b (read)))
(print "第2三角形 辺C")
(let ((dai-2-hen-c (read))) (newline)
(print "第3三角形 辺A")
(let ((dai-3-hen-a (read)))
(print "第3三角形 辺B")
(let ((dai-3-hen-b (read)))
(print "第3三角形 辺C")
(let ((dai-3-hen-c (read))) (newline)
(print "第4三角形 辺A")
(let ((dai-4-hen-a (read)))
(print "第4三角形 辺B")
(let ((dai-4-hen-b (read)))
(print "第4三角形 辺C")
(let ((dai-4-hen-c (read)))
(let* (
(t1 (heron dai-1-hen-a dai-1-hen-b dai-1-hen-c))
(t2 (heron dai-2-hen-a dai-2-hen-b dai-2-hen-c))
(t3 (heron dai-3-hen-a dai-3-hen-b dai-3-hen-c))
(t4 (heron dai-4-hen-a dai-4-hen-b dai-4-hen-c))
(menseki (addtail2 (+ t1 t2 t3 t4)))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))
((5) (begin
(let loop0 ((count 1))
(print "ヘロン三角形の数 5")
(newline)
(print "第1三角形 辺A")
(let ((dai-1-hen-a (read)))
(print "第1三角形 辺B")
(let ((dai-1-hen-b (read)))
(print "第1三角形 辺C")
(let ((dai-1-hen-c (read))) (newline)
(print "第2三角形 辺A")
(let ((dai-2-hen-a (read)))
(print "第2三角形 辺B")
(let ((dai-2-hen-b (read)))
(print "第2三角形 辺C")
(let ((dai-2-hen-c (read))) (newline)
(print "第3三角形 辺A")
(let ((dai-3-hen-a (read)))
(print "第3三角形 辺B")
(let ((dai-3-hen-b (read)))
(print "第3三角形 辺C")
(let ((dai-3-hen-c (read))) (newline)
(print "第4三角形 辺A")
(let ((dai-4-hen-a (read)))
(print "第4三角形 辺B")
(let ((dai-4-hen-b (read)))
(print "第4三角形 辺C")
(let ((dai-4-hen-c (read))) (newline)
(print "第5三角形 辺A")
(let ((dai-5-hen-a (read)))
(print "第5三角形 辺B")
(let ((dai-5-hen-b (read)))
(print "第5三角形 辺C")
(let ((dai-5-hen-c (read)))
(let* (
(t1 (heron dai-1-hen-a dai-1-hen-b dai-1-hen-c))
(t2 (heron dai-2-hen-a dai-2-hen-b dai-2-hen-c))
(t3 (heron dai-3-hen-a dai-3-hen-b dai-3-hen-c))
(t4 (heron dai-4-hen-a dai-4-hen-b dai-4-hen-c))
(t5 (heron dai-5-hen-a dai-5-hen-b dai-5-hen-c))
(menseki (addtail2 (+ t1 t2 t3 t4 t5)))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))
)))
(provide "survey-09")
;;-----------------------------------------------------------------------------
;; calc/survey-10.scm
(define-module survey-10
(export menseki-calc))
(select-module survey-10)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (menseki-calc)
(newline)
(print "座標面積計算")
(newline)
(print "何角形? (3) から (10)")
(let ((nankakukei (read))) (newline)
(case nankakukei
((3) (begin
(let loop0 ((count 1))
(print "三角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-1-x dai-3-x) (+ dai-1-y dai-3-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))
((4) (begin
(let loop0 ((count 1))
(print "四角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-1-x dai-4-x) (+ dai-1-y dai-4-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))
((5) (begin
(let loop0 ((count 1))
(print "五角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-1-x dai-5-x) (+ dai-1-y dai-5-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))
((6) (begin
(let loop0 ((count 1))
(print "六角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read))) (newline)
(print "第6点 X座標")
(let ((dai-6-x (read)))
(print "第6点 Y座標")
(let ((dai-6-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-6-x dai-5-x) (+ dai-6-y dai-5-y))
(* (- dai-1-x dai-6-x) (+ dai-1-y dai-6-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))
((7) (begin
(let loop0 ((count 1))
(print "七角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read))) (newline)
(print "第6点 X座標")
(let ((dai-6-x (read)))
(print "第6点 Y座標")
(let ((dai-6-y (read))) (newline)
(print "第7点 X座標")
(let ((dai-7-x (read)))
(print "第7点 Y座標")
(let ((dai-7-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-6-x dai-5-x) (+ dai-6-y dai-5-y))
(* (- dai-7-x dai-6-x) (+ dai-7-y dai-6-y))
(* (- dai-1-x dai-7-x) (+ dai-1-y dai-7-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))
((8) (begin
(let loop0 ((count 1))
(print "八角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read))) (newline)
(print "第6点 X座標")
(let ((dai-6-x (read)))
(print "第6点 Y座標")
(let ((dai-6-y (read))) (newline)
(print "第7点 X座標")
(let ((dai-7-x (read)))
(print "第7点 Y座標")
(let ((dai-7-y (read))) (newline)
(print "第8点 X座標")
(let ((dai-8-x (read)))
(print "第8点 Y座標")
(let ((dai-8-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-6-x dai-5-x) (+ dai-6-y dai-5-y))
(* (- dai-7-x dai-6-x) (+ dai-7-y dai-6-y))
(* (- dai-8-x dai-7-x) (+ dai-8-y dai-7-y))
(* (- dai-1-x dai-8-x) (+ dai-1-y dai-8-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))
((9) (begin
(let loop0 ((count 1))
(print "九角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read))) (newline)
(print "第6点 X座標")
(let ((dai-6-x (read)))
(print "第6点 Y座標")
(let ((dai-6-y (read))) (newline)
(print "第7点 X座標")
(let ((dai-7-x (read)))
(print "第7点 Y座標")
(let ((dai-7-y (read))) (newline)
(print "第8点 X座標")
(let ((dai-8-x (read)))
(print "第8点 Y座標")
(let ((dai-8-y (read))) (newline)
(print "第9点 X座標")
(let ((dai-9-x (read)))
(print "第9点 Y座標")
(let ((dai-9-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-6-x dai-5-x) (+ dai-6-y dai-5-y))
(* (- dai-7-x dai-6-x) (+ dai-7-y dai-6-y))
(* (- dai-8-x dai-7-x) (+ dai-8-y dai-7-y))
(* (- dai-9-x dai-8-x) (+ dai-9-y dai-8-y))
(* (- dai-1-x dai-9-x) (+ dai-1-y dai-9-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))
((10) (begin
(let loop0 ((count 1))
(print "十角形")
(newline)
(print "第1点 X座標")
(let ((dai-1-x (read)))
(print "第1点 Y座標")
(let ((dai-1-y (read))) (newline)
(print "第2点 X座標")
(let ((dai-2-x (read)))
(print "第2点 Y座標")
(let ((dai-2-y (read))) (newline)
(print "第3点 X座標")
(let ((dai-3-x (read)))
(print "第3点 Y座標")
(let ((dai-3-y (read))) (newline)
(print "第4点 X座標")
(let ((dai-4-x (read)))
(print "第4点 Y座標")
(let ((dai-4-y (read))) (newline)
(print "第5点 X座標")
(let ((dai-5-x (read)))
(print "第5点 Y座標")
(let ((dai-5-y (read))) (newline)
(print "第6点 X座標")
(let ((dai-6-x (read)))
(print "第6点 Y座標")
(let ((dai-6-y (read))) (newline)
(print "第7点 X座標")
(let ((dai-7-x (read)))
(print "第7点 Y座標")
(let ((dai-7-y (read))) (newline)
(print "第8点 X座標")
(let ((dai-8-x (read)))
(print "第8点 Y座標")
(let ((dai-8-y (read))) (newline)
(print "第9点 X座標")
(let ((dai-9-x (read)))
(print "第9点 Y座標")
(let ((dai-9-y (read))) (newline)
(print "第10点 X座標")
(let ((dai-10-x (read)))
(print "第10点 Y座標")
(let ((dai-10-y (read)))
(let* (
(wa (/. (abs (+ (* (- dai-2-x dai-1-x) (+ dai-2-y dai-1-y))
(* (- dai-3-x dai-2-x) (+ dai-3-y dai-2-y))
(* (- dai-4-x dai-3-x) (+ dai-4-y dai-3-y))
(* (- dai-5-x dai-4-x) (+ dai-5-y dai-4-y))
(* (- dai-6-x dai-5-x) (+ dai-6-y dai-5-y))
(* (- dai-7-x dai-6-x) (+ dai-7-y dai-6-y))
(* (- dai-8-x dai-7-x) (+ dai-8-y dai-7-y))
(* (- dai-9-x dai-8-x) (+ dai-9-y dai-8-y))
(* (- dai-10-x dai-9-x) (+ dai-10-y dai-9-y))
(* (- dai-1-x dai-10-x) (+ dai-1-y dai-10-y))
)
) 2))
(menseki (addtail2 wa))
)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))
)))
(provide "survey-10")
;;-----------------------------------------------------------------------------
;; calc/survey-11.scm
(define-module survey-11
(export tankyokusen-calc))
(select-module survey-11)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (tankyokusen-calc)
(newline)
(print "単曲線計算")
(newline)
(print "偏角、弦長計算(1) 諸元計算(2)")
(let ((keisan-houhou (read))) (newline)
(case keisan-houhou
((1) (begin
(let loop0 ((count 1))
(print "偏角、弦長計算")
(newline)
(let loop-01 ((count 1))
(print "半径")
(let ((hankei (read)))
(if (not (real? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(if (not (positive? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-02 ((count 1))
(print "弧長")
(let ((kochou (read)))
(if (not (real? kochou))
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-02 (+ count 1)))
(if (negative? kochou)
(begin (newline)
(print "弧長を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let* (
(henkaku1 (* (/. kochou hankei) (/. 180/pi 2)))
(genchou1 (* 2 hankei (sin (* henkaku1 pi/180))))
(henkaku2 (convert10->60 henkaku1))
(genchou2 (addtail genchou1))
)
(newline)
(print "偏角 " henkaku2)
(print "弦長 " genchou2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "諸元計算")
(newline)
(let loop-01 ((count 1))
(print "半径")
(let ((hankei (read)))
(if (not (real? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(if (not (positive? hankei))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-02 ((count 1))
(print "交角 0-00-00 から 179-59-59")
(let ((koukaku (read)))
(if (not (degrees180? koukaku))
(begin (newline)
(print "交角を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let* (
(koukaku1 (convert60->10 koukaku))
(sessenchou1 (* hankei (tan (* (/. koukaku1 2) pi/180))))
(kyokusenchou1 (/. (* hankei koukaku1) 180/pi))
(gaiseikatsu1 (* hankei
(-
(/. 1 (cos (* (/. koukaku1 2) pi/180)))
1)))
(genchou1 (* 2 hankei (sin (* (/. koukaku1 2) pi/180))))
(sessenchou2 (addtail sessenchou1))
(kyokusenchou2 (addtail kyokusenchou1))
(gaiseikatsu2 (addtail gaiseikatsu1))
(genchou2 (addtail genchou1))
)
(newline)
(print "接線長(TL) " sessenchou2)
(print "曲線長(CL) " kyokusenchou2)
(print "外正割長(SL) " gaiseikatsu2)
(print "弦長(L) " genchou2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))
)))
(provide "survey-11")
;;-----------------------------------------------------------------------------
;; calc/survey-12.scm
(define-module survey-12
(export sankakukei-calc))
(select-module survey-12)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (sankakukei-calc)
(newline)
(print "三角形の解法")
(print "三辺既知(1) 二辺夾角既知(2) 二角夾辺既知(3)")
(let ((keisan-houhou (read))) (newline)
(case keisan-houhou
((1) (begin
(let loop1 ((count 1))
(print "三辺既知")
(newline)
(let loop-01 ((count 1))
(print "辺A")
(let ((hen-a (read)))
(if (not (real? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(if (not (positive? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "辺B")
(let ((hen-b (read)))
(if (not (real? hen-b))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-02 (+ count 1)))
(if (not (positive? hen-b))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "辺C")
(let ((hen-c (read)))
(if (not (real? hen-c))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (not (positive? hen-c))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(if (not (heron? hen-a hen-b hen-c))
(begin (newline)
(print "三角形になりません")
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(kaku-a (/.
(- (+ (expt hen-b 2) (expt hen-c 2)) (expt hen-a 2))
(* 2 hen-b hen-c)
))
(kaku-a1 (* 180/pi (acos kaku-a)))
(kaku-b (/.
(- (+ (expt hen-c 2) (expt hen-a 2)) (expt hen-b 2))
(* 2 hen-c hen-a)
))
(kaku-b1 (* 180/pi (acos kaku-b)))
(kaku-a2 (convert10->60 kaku-a1))
(kaku-b2 (convert10->60 kaku-b1))
(t (heron hen-a hen-b hen-c))
(menseki (addtail2 t))
)
(newline)
(print "角A " kaku-a2)
(print "角B " kaku-b2)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))
((2) (begin
(let loop1 ((count 1))
(print "二辺夾角既知")
(newline)
(let loop-01 ((count 1))
(print "辺A")
(let ((hen-a (read)))
(if (not (real? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(if (not (positive? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "辺B")
(let ((hen-b (read)))
(if (not (real? hen-b))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-02 (+ count 1)))
(if (not (positive? hen-b))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "角C 0-00-01 から 179-59-59")
(let ((kaku-c (read)))
(if (not (degrees180? kaku-c))
(begin (newline)
(print "角度を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(if (not (< 0 (convert60->10 kaku-c)))
(begin (newline)
(print "三角形になりません")
(newline)
(print "続ける(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(kaku-c1 (convert60->10 kaku-c))
(kaku-a (/.
(* hen-a (sin (* pi/180 kaku-c1)))
(- hen-b (* hen-a (cos (* pi/180 kaku-c1))))
))
(kaku-a1 (* 180/pi (atan kaku-a)))
(kaku-a2 (add180 kaku-a1))
(hen-c (sqrt
(- (+ (expt hen-a 2) (expt hen-b 2))
(* 2 hen-a hen-b (cos (* pi/180 kaku-c1)))
)))
(kaku-a3 (convert10->60 kaku-a2))
(hen-c1 (addtail hen-c))
(t (heron hen-a hen-b hen-c))
(menseki (addtail2 t))
)
(newline)
(print "角A " kaku-a3)
(print "辺C " hen-c1)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))
((3) (begin
(let loop1 ((count 1))
(print "二角夾辺既知")
(newline)
(let loop-01 ((count 1))
(print "辺A")
(let ((hen-a (read)))
(if (not (real? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(if (not (positive? hen-a))
(begin (newline)
(print "辺長を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "角B 0-00-01 から 179-59-59")
(let ((kaku-b (read)))
(if (not (degrees180? kaku-b))
(begin (newline)
(print "角度を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "角C 0-00-01 から 179-59-59")
(let ((kaku-c (read)))
(if (not (degrees180? kaku-c))
(begin (newline)
(print "角度を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(if (or
(not (< 0 (convert60->10 kaku-b)))
(not (< 0 (convert60->10 kaku-c)))
(not
(< 0 (+ (convert60->10 kaku-b) (convert60->10 kaku-c)) 180)
)
)
(begin (newline)
(print "三角形になりません")
(newline)
(print "続ける(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(kaku-b1 (convert60->10 kaku-b))
(kaku-c1 (convert60->10 kaku-c))
(hen-b (/.
(* hen-a (sin (* pi/180 kaku-b1)))
(sin (* pi/180 (+ kaku-b1 kaku-c1)))
))
(hen-c (/.
(* hen-a (sin (* pi/180 kaku-c1)))
(sin (* pi/180 (+ kaku-b1 kaku-c1)))
))
(hen-b1 (addtail hen-b))
(hen-c1 (addtail hen-c))
(t (heron hen-a hen-b hen-c))
(menseki (addtail2 t))
)
(newline)
(print "辺B " hen-b1)
(print "辺C " hen-c1)
(newline)
(print "面積 " menseki)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop1 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))
)))
(provide "survey-12")
;;-----------------------------------------------------------------------------
;; calc/survey-13.scm
(define-module survey-13
(export zahyou-calc))
(select-module survey-13)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (zahyou-calc)
(newline)
(let loop0 ((count 1))
(print "座標計算")
(newline)
(let loop-01 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-03 ((count 1))
(print "A点からの方向角")
(let ((houkou-kaku (read)))
(if (not (degrees360? houkou-kaku))
(begin (newline)
(print "方向角を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "A点からの距離")
(let ((kyori (read)))
(if (not (real? kyori))
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-04 (+ count 1)))
(if (negative? kyori)
(begin (newline)
(print "距離を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let* (
(houkou-kaku1 (convert60->10 houkou-kaku))
(zenshi-x1 (* kyori (cos (* houkou-kaku1 pi/180))))
(zenshi-x2 (+ Ax zenshi-x1))
(zenshi-x3 (addtail zenshi-x2))
(zenshi-y1 (* kyori (sin (* houkou-kaku1 pi/180))))
(zenshi-y2 (+ Ay zenshi-y1))
(zenshi-y3 (addtail zenshi-y2))
)
(newline)
(print "B点 X座標 " zenshi-x3)
(print "B点 Y座標 " zenshi-y3)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))
(provide "survey-13")
;;-----------------------------------------------------------------------------
;; calc/survey-14.scm
(define-module survey-14
(export gyaku-calc))
(select-module survey-14)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (gyaku-calc)
(newline)
(let loop0 ((count 1))
(print "逆計算")
(newline)
(let loop-01 ((count 1))
(print "A点 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "A点 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-03 ((count 1))
(print "B点 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "B点 Y座標")
(let ((By (read)))
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let* (
(kyori1
(sqrt (+ (expt (- By Ay) 2)
(expt (- Bx Ax) 2))))
(kyori2 (addtail kyori1))
(houkou-kaku1 (* (atan (- By Ay) (- Bx Ax)) 180/pi))
(houkou-kaku2 (add360 houkou-kaku1))
(houkou-kaku3 (convert10->60 houkou-kaku2))
)
(newline)
(print "A点からB点への方向角 " houkou-kaku3)
(print "A点からB点までの距離 " kyori2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))
(provide "survey-14")
;;-----------------------------------------------------------------------------
;; calc/survey-15.scm
(define-module survey-15
(export clothoid-calc))
(select-module survey-15)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (clothoid-calc)
(newline)
(print "クロソイド曲線計算 左カーブ(1) 右カーブ(2)")
(let ((curve (read))) (newline)
(case curve
((1) (begin
(let loop0 ((count 1))
(print "クロソイド曲線計算 左カーブ")
(newline)
(let loop-01 ((count 1))
(print "始点 X座標")
(let ((Xo (read)))
(if (not (real? Xo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "始点 Y座標")
(let ((Yo (read)))
(if (not (real? Yo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "終点 X座標")
(let ((Xz (read)))
(if (not (real? Xz))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "終点 Y座標")
(let ((Yz (read)))
(if (not (real? Yz))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "クロソイド曲線長")
(let ((Lz (read)))
(if (not (real? Lz))
(begin (newline)
(print "クロソイド曲線長を入力してください")
(newline)
(loop-05 (+ count 1)))
(if (not (positive? Lz))
(begin (newline)
(print "クロソイド曲線長を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "パラメーター")
(let ((A (read)))
(if (not (real? A))
(begin (newline)
(print "パラメーターを入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-07 ((count 1))
(print "P点までの曲線長")
(let ((L (read)))
(if (not (real? L))
(begin (newline)
(print "P点までの曲線長を入力してください")
(newline)
(loop-07 (+ count 1)))
(if (negative? L)
(begin (newline)
(print "P点までの曲線長を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let* (
(Rz (/. (expt A 2) Lz))
(x1z (* (/. (expt Lz 2) (* 6 Rz))
(- (+ (- 1 (/. (expt Lz 2) (* 56 (expt Rz 2))))
(/. (expt Lz 4) (* 7040 (expt Rz 4))))
(/. (expt Lz 6) (* 1612800 (expt Rz 6)))) ))
(y1z (* Lz
(- (+ (- 1 (/. (expt Lz 2) (* 40 (expt Rz 2))))
(/. (expt Lz 4) (* 3456 (expt Rz 4))))
(/. (expt Lz 6) (* 599040 (expt Rz 6)))) ))
(sigma-z (* (atan (/. x1z y1z)) 180/pi))
(R (/. (expt A 2) L))
(x1 (* (/. (expt L 2) (* 6 R))
(- (+ (- 1 (/. (expt L 2) (* 56 (expt R 2))))
(/. (expt L 4) (* 7040 (expt R 4))))
(/. (expt L 6) (* 1612800 (expt R 6)))) ))
(y1 (* L
(- (+ (- 1 (/. (expt L 2) (* 40 (expt R 2))))
(/. (expt L 4) (* 3456 (expt R 4))))
(/. (expt L 6) (* 599040 (expt R 6)))) ))
(R1 (addtail R))
(tau (* (/. L (* 2 R)) 180/pi))
(sigma (* (atan (/. x1 y1)) 180/pi))
(So (sqrt (+ (expt x1 2) (expt y1 2))))
(So1 (addtail So))
(H-sigma-z (* (atan (- Yz Yo) (- Xz Xo)) 180/pi))
(H-sigma-z2 (add360 H-sigma-z))
(H (+ H-sigma-z2 sigma-z))
(H1 (cut360 H))
(Ho (- H1 sigma))
(Ho1 (add360 Ho))
(Xp (+ Xo (* So (cos (* Ho1 pi/180)))))
(Yp (+ Yo (* So (sin (* Ho1 pi/180)))))
(Hp (- H1 tau))
(Hp1 (add360 Hp))
(Xp1 (addtail Xp))
(Yp1 (addtail Yp))
(H1-kakudo (convert10->60 H1))
(Ho1-kakudo (convert10->60 Ho1))
(Hp1-kakudo (convert10->60 Hp1))
(s-kakudo (convert10->60 tau))
(k-kakudo (convert10->60 sigma))
(Xm (+ x1 (* R (cos (* pi/180 tau)))))
(Ym (- y1 (* R (sin (* pi/180 tau)))))
(Tk (* x1 (/. 1 (sin (* pi/180 tau)))))
(Tl (- y1 (* x1 (/. 1 (tan (* pi/180 tau))))))
(Xm1 (addtail Xm))
(Ym1 (addtail Ym))
(Tk1 (addtail Tk))
(Tl1 (addtail Tl))
)
(newline)
(print "半径 " R1)
(print "動径 " So1)
(newline)
(print "方向角(H) " H1-kakudo)
(print "方向角(Ho) " Ho1-kakudo)
(print "方向角(Hp) " Hp1-kakudo)
(newline)
(print "P点X座標 " Xp1)
(print "P点Y座標 " Yp1)
(newline)
(print "接線角 " s-kakudo)
(print "極角 " k-kakudo)
(newline)
(print "始点を原点とする座標系おける")
(print "曲率中心(M)")
(print "X座標 " Xm1)
(print "Y座標 " Ym1)
(newline)
(print "短接線長 " Tk1)
(print "長接線長 " Tl1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))))
((2) (begin
(let loop0 ((count 1))
(print "クロソイド曲線計算 右カーブ")
(newline)
(let loop-01 ((count 1))
(print "始点 X座標")
(let ((Xo (read)))
(if (not (real? Xo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "始点 Y座標")
(let ((Yo (read)))
(if (not (real? Yo))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "終点 X座標")
(let ((Xz (read)))
(if (not (real? Xz))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop-04 ((count 1))
(print "終点 Y座標")
(let ((Yz (read)))
(if (not (real? Yz))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "クロソイド曲線長")
(let ((Lz (read)))
(if (not (real? Lz))
(begin (newline)
(print "クロソイド曲線長を入力してください")
(newline)
(loop-05 (+ count 1)))
(if (not (positive? Lz))
(begin (newline)
(print "クロソイド曲線長を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(let loop-06 ((count 1))
(print "パラメーター")
(let ((A (read)))
(if (not (real? A))
(begin (newline)
(print "パラメーターを入力してください")
(newline)
(loop-06 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-07 ((count 1))
(print "P点までの曲線長")
(let ((L (read)))
(if (not (real? L))
(begin (newline)
(print "P点までの曲線長を入力してください")
(newline)
(loop-07 (+ count 1)))
(if (negative? L)
(begin (newline)
(print "P点までの曲線長を入力してください")
(newline)
(loop-07 (+ count 1)))
(begin
(let* (
(Rz (/. (expt A 2) Lz))
(x1z (* (/. (expt Lz 2) (* 6 Rz))
(- (+ (- 1 (/. (expt Lz 2) (* 56 (expt Rz 2))))
(/. (expt Lz 4) (* 7040 (expt Rz 4))))
(/. (expt Lz 6) (* 1612800 (expt Rz 6)))) ))
(y1z (* Lz
(- (+ (- 1 (/. (expt Lz 2) (* 40 (expt Rz 2))))
(/. (expt Lz 4) (* 3456 (expt Rz 4))))
(/. (expt Lz 6) (* 599040 (expt Rz 6)))) ))
(sigma-z (* (atan (/. x1z y1z)) 180/pi))
(R (/. (expt A 2) L))
(x1 (* (/. (expt L 2) (* 6 R))
(- (+ (- 1 (/. (expt L 2) (* 56 (expt R 2))))
(/. (expt L 4) (* 7040 (expt R 4))))
(/. (expt L 6) (* 1612800 (expt R 6)))) ))
(y1 (* L
(- (+ (- 1 (/. (expt L 2) (* 40 (expt R 2))))
(/. (expt L 4) (* 3456 (expt R 4))))
(/. (expt L 6) (* 599040 (expt R 6)))) ))
(R1 (addtail R))
(tau (* (/. L (* 2 R)) 180/pi))
(sigma (* (atan (/. x1 y1)) 180/pi))
(So (sqrt (+ (expt x1 2) (expt y1 2))))
(So1 (addtail So))
(H-sigma-z (* (atan (- Yz Yo) (- Xz Xo)) 180/pi))
(H-sigma-z2 (add360 H-sigma-z))
(H (- H-sigma-z2 sigma-z))
(H1 (add360 H))
(Ho (+ H1 sigma))
(Ho1 (cut360 Ho))
(Xp (+ Xo (* So (cos (* Ho1 pi/180)))))
(Yp (+ Yo (* So (sin (* Ho1 pi/180)))))
(Hp (+ H1 tau))
(Hp1 (cut360 Hp))
(Xp1 (addtail Xp))
(Yp1 (addtail Yp))
(H1-kakudo (convert10->60 H1))
(Ho1-kakudo (convert10->60 Ho1))
(Hp1-kakudo (convert10->60 Hp1))
(s-kakudo (convert10->60 tau))
(k-kakudo (convert10->60 sigma))
(Xm (+ x1 (* R (cos (* pi/180 tau)))))
(Ym (- y1 (* R (sin (* pi/180 tau)))))
(Tk (* x1 (/. 1 (sin (* pi/180 tau)))))
(Tl (- y1 (* x1 (/. 1 (tan (* pi/180 tau))))))
(Xm1 (addtail Xm))
(Ym1 (addtail Ym))
(Tk1 (addtail Tk))
(Tl1 (addtail Tl))
)
(newline)
(print "半径 " R1)
(print "動径 " So1)
(newline)
(print "方向角(H) " H1-kakudo)
(print "方向角(Ho) " Ho1-kakudo)
(print "方向角(Hp) " Hp1-kakudo)
(newline)
(print "P点X座標 " Xp1)
(print "P点Y座標 " Yp1)
(newline)
(print "接線角 " s-kakudo)
(print "極角 " k-kakudo)
(newline)
(print "始点を原点とする座標系おける")
(print "曲率中心(M)")
(print "X座標 " Xm1)
(print "Y座標 " Ym1)
(newline)
(print "短接線長 " Tk1)
(print "長接線長 " Tl1)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))))))))))))))
)))
(provide "survey-15")
;;-----------------------------------------------------------------------------
;; calc/survey-16.scm
(define-module survey-16
(export takasa-hirei-calc))
(select-module survey-16)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (takasa-hirei-calc)
(newline)
(print "高さ(比例)計算")
(newline)
(let loop0 ((count 1))
(let loop-01 ((count 1))
(print "基準となる点の標高")
(let ((kijyunhyoukou (read)))
(if (not (real? kijyunhyoukou))
(begin (newline)
(print "標高を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "勾配 何%")
(let ((koubai (read)))
(if (not (real? koubai))
(begin (newline)
(print "勾配を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-03 ((count 1))
(print "水平距離")
(let ((suiheikyori (read)))
(if (not (real? suiheikyori))
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-03 (+ count 1)))
(if (negative? suiheikyori)
(begin (newline)
(print "水平距離を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let* (
(hyoukousa1 (* suiheikyori (/. koubai 100)))
(hyoukou1 (+ kijyunhyoukou hyoukousa1))
(hyoukou2 (addtail hyoukou1))
)
(newline)
(print "標高 " hyoukou2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))
(provide "survey-16")
;;-----------------------------------------------------------------------------
;; calc/survey-17.scm
(define-module survey-17
(export shuukei-calc))
(select-module survey-17)
;(add-load-path ".")
;(use surveymod)
;(use math.const)
(define (shuukei-calc)
(newline)
(print "集計計算")
(newline)
(print "第1入力")
(let ((s-01 (read)))
(if (string=? "end" (x->string s-01))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-01 (+ 0 s-01)))
(print "合計: " g-01)
(print "第2入力")
(let ((s-02 (read)))
(if (string=? "end" (x->string s-02))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-02 (+ g-01 s-02)))
(print "合計: " g-02)
(print "第3入力")
(let ((s-03 (read)))
(if (string=? "end" (x->string s-03))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-03 (+ g-02 s-03)))
(print "合計: " g-03)
(print "第4入力")
(let ((s-04 (read)))
(if (string=? "end" (x->string s-04))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-04 (+ g-03 s-04)))
(print "合計: " g-04)
(print "第5入力")
(let ((s-05 (read)))
(if (string=? "end" (x->string s-05))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-05 (+ g-04 s-05)))
(print "合計: " g-05)
(print "第6入力")
(let ((s-06 (read)))
(if (string=? "end" (x->string s-06))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-06 (+ g-05 s-06)))
(print "合計: " g-06)
(print "第7入力")
(let ((s-07 (read)))
(if (string=? "end" (x->string s-07))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-07 (+ g-06 s-07)))
(print "合計: " g-07)
(print "第8入力")
(let ((s-08 (read)))
(if (string=? "end" (x->string s-08))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-08 (+ g-07 s-08)))
(print "合計: " g-08)
(print "第9入力")
(let ((s-09 (read)))
(if (string=? "end" (x->string s-09))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-09 (+ g-08 s-09)))
(print "合計: " g-09)
(print "第10入力")
(let ((s-10 (read)))
(if (string=? "end" (x->string s-10))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-10 (+ g-09 s-10)))
(print "合計: " g-10)
(print "第11入力")
(let ((s-11 (read)))
(if (string=? "end" (x->string s-11))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-11 (+ g-10 s-11)))
(print "合計: " g-11)
(print "第12入力")
(let ((s-12 (read)))
(if (string=? "end" (x->string s-12))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-12 (+ g-11 s-12)))
(print "合計: " g-12)
(print "第13入力")
(let ((s-13 (read)))
(if (string=? "end" (x->string s-13))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-13 (+ g-12 s-13)))
(print "合計: " g-13)
(print "第14入力")
(let ((s-14 (read)))
(if (string=? "end" (x->string s-14))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-14 (+ g-13 s-14)))
(print "合計: " g-14)
(print "第15入力")
(let ((s-15 (read)))
(if (string=? "end" (x->string s-15))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-15 (+ g-14 s-15)))
(print "合計: " g-15)
(print "第16入力")
(let ((s-16 (read)))
(if (string=? "end" (x->string s-16))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-16 (+ g-15 s-16)))
(print "合計: " g-16)
(print "第17入力")
(let ((s-17 (read)))
(if (string=? "end" (x->string s-17))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-17 (+ g-16 s-17)))
(print "合計: " g-17)
(print "第18入力")
(let ((s-18 (read)))
(if (string=? "end" (x->string s-18))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-18 (+ g-17 s-18)))
(print "合計: " g-18)
(print "第19入力")
(let ((s-19 (read)))
(if (string=? "end" (x->string s-19))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-19 (+ g-18 s-19)))
(print "合計: " g-19)
(print "第20入力")
(let ((s-20 (read)))
(if (string=? "end" (x->string s-20))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-20 (+ g-19 s-20)))
(print "合計: " g-20)
(print "第21入力")
(let ((s-21 (read)))
(if (string=? "end" (x->string s-21))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-21 (+ g-20 s-21)))
(print "合計: " g-21)
(print "第22入力")
(let ((s-22 (read)))
(if (string=? "end" (x->string s-22))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-22 (+ g-21 s-22)))
(print "合計: " g-22)
(print "第23入力")
(let ((s-23 (read)))
(if (string=? "end" (x->string s-23))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-23 (+ g-22 s-23)))
(print "合計: " g-23)
(print "第24入力")
(let ((s-24 (read)))
(if (string=? "end" (x->string s-24))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-24 (+ g-23 s-24)))
(print "合計: " g-24)
(print "第25入力")
(let ((s-25 (read)))
(if (string=? "end" (x->string s-25))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-25 (+ g-24 s-25)))
(print "合計: " g-25)
(print "第26入力")
(let ((s-26 (read)))
(if (string=? "end" (x->string s-26))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-26 (+ g-25 s-26)))
(print "合計: " g-26)
(print "第27入力")
(let ((s-27 (read)))
(if (string=? "end" (x->string s-27))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-27 (+ g-26 s-27)))
(print "合計: " g-27)
(print "第28入力")
(let ((s-28 (read)))
(if (string=? "end" (x->string s-28))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-28 (+ g-27 s-28)))
(print "合計: " g-28)
(print "第29入力")
(let ((s-29 (read)))
(if (string=? "end" (x->string s-29))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-29 (+ g-28 s-29)))
(print "合計: " g-29)
(print "第30入力")
(let ((s-30 (read)))
(if (string=? "end" (x->string s-30))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-30 (+ g-29 s-30)))
(print "合計: " g-30)
(print "第31入力")
(let ((s-31 (read)))
(if (string=? "end" (x->string s-31))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-31 (+ g-30 s-31)))
(print "合計: " g-31)
(print "第32入力")
(let ((s-32 (read)))
(if (string=? "end" (x->string s-32))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-32 (+ g-31 s-32)))
(print "合計: " g-32)
(print "第33入力")
(let ((s-33 (read)))
(if (string=? "end" (x->string s-33))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-33 (+ g-32 s-33)))
(print "合計: " g-33)
(print "第34入力")
(let ((s-34 (read)))
(if (string=? "end" (x->string s-34))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-34 (+ g-33 s-34)))
(print "合計: " g-34)
(print "第35入力")
(let ((s-35 (read)))
(if (string=? "end" (x->string s-35))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-35 (+ g-34 s-35)))
(print "合計: " g-35)
(print "第36入力")
(let ((s-36 (read)))
(if (string=? "end" (x->string s-36))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-36 (+ g-35 s-36)))
(print "合計: " g-36)
(print "第37入力")
(let ((s-37 (read)))
(if (string=? "end" (x->string s-37))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-37 (+ g-36 s-37)))
(print "合計: " g-37)
(print "第38入力")
(let ((s-38 (read)))
(if (string=? "end" (x->string s-38))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-38 (+ g-37 s-38)))
(print "合計: " g-38)
(print "第39入力")
(let ((s-39 (read)))
(if (string=? "end" (x->string s-39))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-39 (+ g-38 s-39)))
(print "合計: " g-39)
(print "第40入力")
(let ((s-40 (read)))
(if (string=? "end" (x->string s-40))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-40 (+ g-39 s-40)))
(print "合計: " g-40)
(print "第41入力")
(let ((s-41 (read)))
(if (string=? "end" (x->string s-41))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-41 (+ g-40 s-41)))
(print "合計: " g-41)
(print "第42入力")
(let ((s-42 (read)))
(if (string=? "end" (x->string s-42))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-42 (+ g-41 s-42)))
(print "合計: " g-42)
(print "第43入力")
(let ((s-43 (read)))
(if (string=? "end" (x->string s-43))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-43 (+ g-42 s-43)))
(print "合計: " g-43)
(print "第44入力")
(let ((s-44 (read)))
(if (string=? "end" (x->string s-44))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-44 (+ g-43 s-44)))
(print "合計: " g-44)
(print "第45入力")
(let ((s-45 (read)))
(if (string=? "end" (x->string s-45))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-45 (+ g-44 s-45)))
(print "合計: " g-45)
(print "第46入力")
(let ((s-46 (read)))
(if (string=? "end" (x->string s-46))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-46 (+ g-45 s-46)))
(print "合計: " g-46)
(print "第47入力")
(let ((s-47 (read)))
(if (string=? "end" (x->string s-47))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-47 (+ g-46 s-47)))
(print "合計: " g-47)
(print "第48入力")
(let ((s-48 (read)))
(if (string=? "end" (x->string s-48))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-48 (+ g-47 s-48)))
(print "合計: " g-48)
(print "第49入力")
(let ((s-49 (read)))
(if (string=? "end" (x->string s-49))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-49 (+ g-48 s-49)))
(print "合計: " g-49)
(print "第50入力")
(let ((s-50 (read)))
(if (string=? "end" (x->string s-50))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-50 (+ g-49 s-50)))
(print "合計: " g-50)
(print "第51入力")
(let ((s-51 (read)))
(if (string=? "end" (x->string s-51))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-51 (+ g-50 s-51)))
(print "合計: " g-51)
(print "第52入力")
(let ((s-52 (read)))
(if (string=? "end" (x->string s-52))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-52 (+ g-51 s-52)))
(print "合計: " g-52)
(print "第53入力")
(let ((s-53 (read)))
(if (string=? "end" (x->string s-53))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-53 (+ g-52 s-53)))
(print "合計: " g-53)
(print "第54入力")
(let ((s-54 (read)))
(if (string=? "end" (x->string s-54))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-54 (+ g-53 s-54)))
(print "合計: " g-54)
(print "第55入力")
(let ((s-55 (read)))
(if (string=? "end" (x->string s-55))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-55 (+ g-54 s-55)))
(print "合計: " g-55)
(print "第56入力")
(let ((s-56 (read)))
(if (string=? "end" (x->string s-56))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-56 (+ g-55 s-56)))
(print "合計: " g-56)
(print "第57入力")
(let ((s-57 (read)))
(if (string=? "end" (x->string s-57))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-57 (+ g-56 s-57)))
(print "合計: " g-57)
(print "第58入力")
(let ((s-58 (read)))
(if (string=? "end" (x->string s-58))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-58 (+ g-57 s-58)))
(print "合計: " g-58)
(print "第59入力")
(let ((s-59 (read)))
(if (string=? "end" (x->string s-59))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-59 (+ g-58 s-59)))
(print "合計: " g-59)
(print "第60入力")
(let ((s-60 (read)))
(if (string=? "end" (x->string s-60))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-60 (+ g-59 s-60)))
(print "合計: " g-60)
(print "第61入力")
(let ((s-61 (read)))
(if (string=? "end" (x->string s-61))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-61 (+ g-60 s-61)))
(print "合計: " g-61)
(print "第62入力")
(let ((s-62 (read)))
(if (string=? "end" (x->string s-62))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-62 (+ g-61 s-62)))
(print "合計: " g-62)
(print "第63入力")
(let ((s-63 (read)))
(if (string=? "end" (x->string s-63))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-63 (+ g-62 s-63)))
(print "合計: " g-63)
(print "第64入力")
(let ((s-64 (read)))
(if (string=? "end" (x->string s-64))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-64 (+ g-63 s-64)))
(print "合計: " g-64)
(print "第65入力")
(let ((s-65 (read)))
(if (string=? "end" (x->string s-65))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-65 (+ g-64 s-65)))
(print "合計: " g-65)
(print "第66入力")
(let ((s-66 (read)))
(if (string=? "end" (x->string s-66))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-66 (+ g-65 s-66)))
(print "合計: " g-66)
(print "第67入力")
(let ((s-67 (read)))
(if (string=? "end" (x->string s-67))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-67 (+ g-66 s-67)))
(print "合計: " g-67)
(print "第68入力")
(let ((s-68 (read)))
(if (string=? "end" (x->string s-68))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-68 (+ g-67 s-68)))
(print "合計: " g-68)
(print "第69入力")
(let ((s-69 (read)))
(if (string=? "end" (x->string s-69))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-69 (+ g-68 s-69)))
(print "合計: " g-69)
(print "第70入力")
(let ((s-70 (read)))
(if (string=? "end" (x->string s-70))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-70 (+ g-69 s-70)))
(print "合計: " g-70)
(print "第71入力")
(let ((s-71 (read)))
(if (string=? "end" (x->string s-71))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-71 (+ g-70 s-71)))
(print "合計: " g-71)
(print "第72入力")
(let ((s-72 (read)))
(if (string=? "end" (x->string s-72))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-72 (+ g-71 s-72)))
(print "合計: " g-72)
(print "第73入力")
(let ((s-73 (read)))
(if (string=? "end" (x->string s-73))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-73 (+ g-72 s-73)))
(print "合計: " g-73)
(print "第74入力")
(let ((s-74 (read)))
(if (string=? "end" (x->string s-74))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-74 (+ g-73 s-74)))
(print "合計: " g-74)
(print "第75入力")
(let ((s-75 (read)))
(if (string=? "end" (x->string s-75))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-75 (+ g-74 s-75)))
(print "合計: " g-75)
(print "第76入力")
(let ((s-76 (read)))
(if (string=? "end" (x->string s-76))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-76 (+ g-75 s-76)))
(print "合計: " g-76)
(print "第77入力")
(let ((s-77 (read)))
(if (string=? "end" (x->string s-77))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-77 (+ g-76 s-77)))
(print "合計: " g-77)
(print "第78入力")
(let ((s-78 (read)))
(if (string=? "end" (x->string s-78))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-78 (+ g-77 s-78)))
(print "合計: " g-78)
(print "第79入力")
(let ((s-79 (read)))
(if (string=? "end" (x->string s-79))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-79 (+ g-78 s-79)))
(print "合計: " g-79)
(print "第80入力")
(let ((s-80 (read)))
(if (string=? "end" (x->string s-80))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-80 (+ g-79 s-80)))
(print "合計: " g-80)
(print "第81入力")
(let ((s-81 (read)))
(if (string=? "end" (x->string s-81))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-81 (+ g-80 s-81)))
(print "合計: " g-81)
(print "第82入力")
(let ((s-82 (read)))
(if (string=? "end" (x->string s-82))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-82 (+ g-81 s-82)))
(print "合計: " g-82)
(print "第83入力")
(let ((s-83 (read)))
(if (string=? "end" (x->string s-83))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-83 (+ g-82 s-83)))
(print "合計: " g-83)
(print "第84入力")
(let ((s-84 (read)))
(if (string=? "end" (x->string s-84))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-84 (+ g-83 s-84)))
(print "合計: " g-84)
(print "第85入力")
(let ((s-85 (read)))
(if (string=? "end" (x->string s-85))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-85 (+ g-84 s-85)))
(print "合計: " g-85)
(print "第86入力")
(let ((s-86 (read)))
(if (string=? "end" (x->string s-86))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-86 (+ g-85 s-86)))
(print "合計: " g-86)
(print "第87入力")
(let ((s-87 (read)))
(if (string=? "end" (x->string s-87))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-87 (+ g-86 s-87)))
(print "合計: " g-87)
(print "第88入力")
(let ((s-88 (read)))
(if (string=? "end" (x->string s-88))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-88 (+ g-87 s-88)))
(print "合計: " g-88)
(print "第89入力")
(let ((s-89 (read)))
(if (string=? "end" (x->string s-89))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-89 (+ g-88 s-89)))
(print "合計: " g-89)
(print "第90入力")
(let ((s-90 (read)))
(if (string=? "end" (x->string s-90))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-90 (+ g-89 s-90)))
(print "合計: " g-90)
(print "第91入力")
(let ((s-91 (read)))
(if (string=? "end" (x->string s-91))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-91 (+ g-90 s-91)))
(print "合計: " g-91)
(print "第92入力")
(let ((s-92 (read)))
(if (string=? "end" (x->string s-92))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-92 (+ g-91 s-92)))
(print "合計: " g-92)
(print "第93入力")
(let ((s-93 (read)))
(if (string=? "end" (x->string s-93))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-93 (+ g-92 s-93)))
(print "合計: " g-93)
(print "第94入力")
(let ((s-94 (read)))
(if (string=? "end" (x->string s-94))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-94 (+ g-93 s-94)))
(print "合計: " g-94)
(print "第95入力")
(let ((s-95 (read)))
(if (string=? "end" (x->string s-95))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-95 (+ g-94 s-95)))
(print "合計: " g-95)
(print "第96入力")
(let ((s-96 (read)))
(if (string=? "end" (x->string s-96))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-96 (+ g-95 s-96)))
(print "合計: " g-96)
(print "第97入力")
(let ((s-97 (read)))
(if (string=? "end" (x->string s-97))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-97 (+ g-96 s-97)))
(print "合計: " g-97)
(print "第98入力")
(let ((s-98 (read)))
(if (string=? "end" (x->string s-98))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-98 (+ g-97 s-98)))
(print "合計: " g-98)
(print "第99入力")
(let ((s-99 (read)))
(if (string=? "end" (x->string s-99))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-99 (+ g-98 s-99)))
(print "合計: " g-99)
(print "第100入力")
(let ((s-100 (read)))
(if (string=? "end" (x->string s-100))
(begin (newline)
(print "計算終了")
(newline))
(begin
(let ((g-100 (+ g-99 s-100)))
(print "合計: " g-100)
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))))))))))))))))))))))
(provide "survey-17")
;;-----------------------------------------------------------------------------
;; calc/survey-18.scm
(define-module survey-18
(export suijyun-calc))
(select-module survey-18)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (suijyun-calc)
(newline)
(let loop0 ((count 1))
(print "水準計算")
(newline)
(let loop-01 ((count 1))
(print "後視地盤高")
(let ((koushi-jiban (read)))
(if (not (real? koushi-jiban))
(begin (newline)
(print "後視地盤高を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "後視高")
(let ((koushi (read)))
(if (not (real? koushi))
(begin (newline)
(print "後視高を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let ((kikai (addtail (+ koushi-jiban koushi))))
(print "器械高")
(print kikai)
(let loop1 ((count 1))
(newline)
(let loop-03 ((count 1))
(print "前視高")
(let ((zenshi (read)))
(if (not (real? zenshi))
(begin (newline)
(print "前視高を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let ((zenshi-jiban (addtail (- (x->number kikai) zenshi))))
(newline)
(print "前視地盤高 " zenshi-jiban)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))
(provide "survey-18")
;;-----------------------------------------------------------------------------
;; calc/survey-19.scm
(define-module survey-19
(export suisen-en-calc))
(select-module survey-19)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (suisen-en-calc)
(newline)
(let loop0 ((count 1))
(print "垂線計算(円)")
(newline)
(let loop-01 ((count 1))
(print "円Aの中心 X座標")
(let ((Ax (read)))
(if (not (real? Ax))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "円Aの中心 Y座標")
(let ((Ay (read)))
(if (not (real? Ay))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "円Aの半径")
(let ((Ra (read)))
(if (not (real? Ra))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(if (not (positive? Ra))
(begin (newline)
(print "半径を入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let loop1 ((count 1))
(let loop-04 ((count 1))
(print "B点 X座標")
(let ((Bx (read)))
(if (not (real? Bx))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-04 (+ count 1)))
(begin
(let loop-05 ((count 1))
(print "B点 Y座標")
(let ((By (read)))
(if (not (real? By))
(begin (newline)
(print "座標を入力してください")
(newline)
(loop-05 (+ count 1)))
(begin
(if (and (= Ax Bx) (= Ay By))
(begin (newline)
(print "垂線がありません")
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline))))))
(begin
(let* (
(houkou-kaku1 (* (atan (- By Ay) (- Bx Ax)) 180/pi))
(houkou-kaku2 (add360 houkou-kaku1))
(houkou-kaku3 (+ houkou-kaku2 180))
(houkou-kaku4 (cut360 houkou-kaku3))
(Px1 (* Ra (cos (* houkou-kaku2 pi/180))))
(Px2 (+ Ax Px1))
(Px3 (addtail Px2))
(Py1 (* Ra (sin (* houkou-kaku2 pi/180))))
(Py2 (+ Ay Py1))
(Py3 (addtail Py2))
(Lp1 (sqrt (+ (expt (- Bx Px2) 2) (expt (- By Py2) 2))))
(Lp2 (addtail Lp1))
(Qx1 (* Ra (cos (* houkou-kaku4 pi/180))))
(Qx2 (+ Ax Qx1))
(Qx3 (addtail Qx2))
(Qy1 (* Ra (sin (* houkou-kaku4 pi/180))))
(Qy2 (+ Ay Qy1))
(Qy3 (addtail Qy2))
(Lq1 (sqrt (+ (expt (- Bx Qx2) 2) (expt (- By Qy2) 2))))
(Lq2 (addtail Lq1))
)
(newline)
(print "P点 X座標 " Px3)
(print "P点 Y座標 " Py3)
(print "垂線長 " Lp2)
(newline)
(print "Q点 X座標 " Qx3)
(print "Q点 Y座標 " Qy3)
(print "垂線長 " Lq2)
(newline)
(print "続ける(0) 最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 0 cont) (begin (loop1 (+ count 1))))
((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
))))))))))))))))))))))))))))))
(provide "survey-19")
;;-----------------------------------------------------------------------------
;; calc/survey-20.scm
(define-module survey-20
(export daen-calc))
(select-module survey-20)
(add-load-path ".")
(use surveymod)
(use math.const)
(define (daen-calc)
(newline)
(let loop0 ((count 1))
(print "楕円計算")
(newline)
(let loop-01 ((count 1))
(print "楕円の長半径")
(let ((Lr (read)))
(if (not (real? Lr))
(begin (newline)
(print "長半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(if (not (positive? Lr))
(begin (newline)
(print "長半径を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "楕円の短半径")
(let ((Sr (read)))
(if (not (real? Sr))
(begin (newline)
(print "短半径を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(if (not (positive? Sr))
(begin (newline)
(print "短半径を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(if (not (<= Sr Lr))
(begin (newline)
(print "短半径を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let* (
(shuuchou1
(*
(* pi (+ Lr Sr))
(+ 1
(/.
(* 3 (expt (/. (- Lr Sr) (+ Lr Sr)) 2))
(+ 10 (sqrt (- 4 (* 3 (expt (/. (- Lr Sr) (+ Lr Sr)) 2)))))
)
)
)
)
(shuuchou2 (addtail shuuchou1))
(menseki1 (* pi Lr Sr))
(menseki2 (addtail2 menseki1))
(rishin-ritsu1 (sqrt (- 1 (/. (expt Sr 2) (expt Lr 2)))))
(rishin-ritsu2 (addtail rishin-ritsu1))
(henpei-ritsu1 (- 1 (/. Sr Lr)))
(henpei-ritsu2 (addtail henpei-ritsu1))
(daen-ritsu1 (/. Sr Lr))
(daen-ritsu2 (addtail daen-ritsu1))
)
(newline)
(print "楕円周長 " shuuchou2)
(print "楕円面積 " menseki2)
(newline)
(print "離心率 " rishin-ritsu2)
(print "扁平率 " henpei-ritsu2)
(print "楕円率 " daen-ritsu2)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))
(provide "survey-20")
;;-----------------------------------------------------------------------------
;; calc/survey-21.scm
(define-module survey-21
(export daikei-calc))
(select-module survey-21)
(add-load-path ".")
(use surveymod)
;(use math.const)
(define (daikei-calc)
(newline)
(let loop0 ((count 1))
(print "台形計算")
(newline)
(let loop-01 ((count 1))
(print "台形の長辺")
(let ((Ll (read)))
(if (not (real? Ll))
(begin (newline)
(print "長辺を入力してください")
(newline)
(loop-01 (+ count 1)))
(begin
(if (not (positive? Ll))
(begin (newline)
(print "長辺を入力してください")
(loop-01 (+ count 1)))
(begin
(let loop-02 ((count 1))
(print "台形の短辺")
(let ((Sl (read)))
(if (not (real? Sl))
(begin (newline)
(print "短辺を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(if (not (positive? Sl))
(begin (newline)
(print "短辺を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(if (not (<= Sl Ll))
(begin (newline)
(print "短辺を入力してください")
(newline)
(loop-02 (+ count 1)))
(begin
(let loop-03 ((count 1))
(print "台形の高さ")
(let ((Hl (read)))
(if (not (real? Hl))
(begin (newline)
(print "高さを入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(if (not (positive? Hl))
(begin (newline)
(print "高さを入力してください")
(newline)
(loop-03 (+ count 1)))
(begin
(let* (
(l1 (+ Sl Ll))
(menseki1 (/. (* l1 Hl) 2))
(menseki2 (addtail2 menseki1))
)
(newline)
(print "台形面積 " menseki2)
(newline)
(print "最初から(1) 終了する(2)")
(let ((cont (read))) (newline)
(cond ((= 1 cont) (begin (loop0 (+ count 1))))
((= 2 cont) (begin (newline) (print "計算終了") (newline)))
)))))))))))))))))))))))))
(provide "survey-21")
;;-----------------------------------------------------------------------------
;; surveyscm.scm
#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-
(add-load-path "./calc")
(use survey-00)
(use survey-01)
(use survey-02)
(use survey-03)
(use survey-04)
(use survey-05)
(use survey-06)
(use survey-07)
(use survey-08)
(use survey-09)
(use survey-10)
(use survey-11)
(use survey-12)
(use survey-13)
(use survey-14)
(use survey-15)
(use survey-16)
(use survey-17)
(use survey-18)
(use survey-19)
(use survey-20)
(use survey-21)
(define (surveyscm)
(let loop2 ((count 1))
(newline)
(print "測量計算Schemeスクリプト surveyscm.scm")
(newline)
(print "(0) トラバース計算 (1) 逆トラバース計算")
(print "(2) 幅杭計算(直線) (3) 幅杭計算(曲線) ")
(print "(4) 垂線計算 (5) 交点計算 ")
(print "(6) 交点計算(円直線) (7) 交点計算(円円) ")
(print "(8) 縦断曲線計算 (9) ヘロン面積計算 ")
(print "(10) 座標面積計算 (11) 単曲線計算 ")
(print "(12) 三角形の解法 (13) 座標計算 ")
(print "(14) 逆計算 (15) クロソイド曲線計算")
(print "(16) 高さ(比例)計算 (17) 集計計算 ")
(print "(18) 水準計算 (19) 垂線計算(円) ")
(print "(20) 楕円計算 (21) 台形計算 ")
(newline)
(print "(99) 終了する")
(newline)
(print "どの計算方法ですか?")
(let ((keisan-houhou (read)))
(case keisan-houhou
((0) (traverse-calc)
(loop2 (+ count 1)))
((1) (inverse-calc)
(loop2 (+ count 1)))
((2) (habagui-chokusen-calc)
(loop2 (+ count 1)))
((3) (habagui-kyokusen-calc)
(loop2 (+ count 1)))
((4) (suisen-calc)
(loop2 (+ count 1)))
((5) (kouten-calc)
(loop2 (+ count 1)))
((6) (kouten-en-chokusen-calc)
(loop2 (+ count 1)))
((7) (kouten-en-en-calc)
(loop2 (+ count 1)))
((8) (jyuudankyokusen-calc)
(loop2 (+ count 1)))
((9) (heron-calc)
(loop2 (+ count 1)))
((10) (menseki-calc)
(loop2 (+ count 1)))
((11) (tankyokusen-calc)
(loop2 (+ count 1)))
((12) (sankakukei-calc)
(loop2 (+ count 1)))
((13) (zahyou-calc)
(loop2 (+ count 1)))
((14) (gyaku-calc)
(loop2 (+ count 1)))
((15) (clothoid-calc)
(loop2 (+ count 1)))
((16) (takasa-hirei-calc)
(loop2 (+ count 1)))
((17) (shuukei-calc)
(loop2 (+ count 1)))
((18) (suijyun-calc)
(loop2 (+ count 1)))
((19) (suisen-en-calc)
(loop2 (+ count 1)))
((20) (daen-calc)
(loop2 (+ count 1)))
((21) (daikei-calc)
(loop2 (+ count 1)))
((99) (newline) (print "終了") (newline))
))))
(define (main args)
(surveyscm)
0)
;;-----------------------------------------------------------------------------