2010年2月8日月曜日

幸せになれる結婚年齢が分かるプログラム


#! /usr/bin/env mzscheme
#lang scheme

(define (marrage-year)
(display "貴女が幸せになれる結婚年齢を導き出すお手伝いをさせて頂きます\n")
(first-step))

(define (first-step)
(display "お好きな二桁の数字を入力してください : ")
(let ((num (read)))
(cond ((or (not (integer? num)) (< num 10) (> num 99))
(display "入力値が違います。\n")
(first-step))
(else
(second-step num)))))

(define (second-step num)
(for-each display (list "入力された数値は " num " です。\n"))
(let ((b (modulo num 10)))
(let ((a (/ (- num b) 10)))
(let ((ans (+ a b)))
(display "一の位と十の位を足した数を入力してください : ")
(let ((n (read)))
(cond ((not (eqv? n ans))
(display "計算が間違っています。\n")
(second-step num))
((> n 9)
(display "もう一度一の位と十の位を足します。\n")
(second-step n))
(else
(third-step n))))))))

(define (third-step num)
(for-each display (list "入力された数値は " num " です。\n"))
(let ((ans (* num 9)))
(display "出てきた答えに9をかけて入力してください。 : ")
(let ((n (read)))
(cond ((not (eqv? n ans))
(display "入力値が間違っています。\n")
(third-step num))
(else
(fourth-step n))))))

(define (fourth-step num)
(for-each display (list "入力された数値は " num " です。\n"))
(let ((b (modulo num 10)))
(let ((a (/ (- num b) 10)))
(let ((ans (+ a b)))
(display "出てきた答えの一の位と十の位を足してください。 : ")
(let ((n (read)))
(cond ((not (eqv? n ans))
(display "計算が間違っています。\n")
(fourth-step num))
(else
(fifth-step n))))))))

(define (fifth-step num)
(for-each display (list "入力された数値は " num " です。\n"))
(display "出てきた答えに今までの男性経験人数を足して入力して下さい。 : ")
(let ((n (read)))
(cond ((or (not (integer? n)) (negative? n) (< n num))
(display "入力値が間違っています。\n")
(fifth-step num))
(else
(for-each display (list "貴女の男性経験数は " (- n 9) " 人です。\n"))))))

(marrage-year)

0 件のコメント:

コメントを投稿