SSブログ

プログラミングの問題集.XML [プログラム]

 初歩のプログラミングのための問題を集めてデータベース化することを推奨すると以前に書いたが、テキストで保存しておくとすると、XMLを使うのが便利でいいと思う。

 試しに、次のようなxml文書を作ってみた。

<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<!DOCTYPE programming_exercises [
  <!ENTITY HTDP "How to Design Program">
]>



  
    問題の分割
  
  
映画館のオーナーになったと考えよう。彼はチケットの料金を自由に設定できる権限を有している。
チケット料金を上げれば、それだけチケットを購入する人は減る。最近の実験で、オーナーはチ
ケットの料金と入場者の数の平均値の間の関係を突き止めることが出来た。チケット1枚の料金を
1000円にすると120人の入場者が見込まれる。チケットの値段を100円下げる毎に、入場者は15
人増加する。しかし、一方では入場者が増えると、映画の放映料も値上がりする。映画一回の放映
で、32万円かかり、それに加えて入場者一人当たり80円の料金を配給会社に支払わなければなら
ない。映画館のオーナーは、利潤とチケットの料金の正確な関係を知り、最も利潤が大きくなるチ
ケット料金を割り出したいと考えている。
  
  
チケット代金額ticket_priceから入場者数を計算する関数how_many_visitorsを定義する。
  ( (1000 - ticket_price) / 100 * 15) + 120 を計算して、その結果を返す。

チケット代金額ticket_priceと入場者数num_of_visitorsから総収入を計算する関数incomeを定義する。
  (ticket_price * num_of_visitors) を計算して、その結果を返す。
 
入場者数num_of_visitorsから支出費用を計算する関数spendingを定義する。
  320000 + num_of_visitors * 80 を計算して、その結果を返す。

チケット代金額ticket_priceから利潤総額を計算する関数total_profitを定義する。
  ticket_priceを関数how_many_visitorsに渡して入場者数を計算し、
      結果をnum_of_visitorsに受け取る。
  ticket_priceとnum_of_visitorsを関数incomeに渡して総収入を計算し、
      結果をtotal_incomeに受け取る。
  num_of_visitorsを関数spendingに渡して支出を計算し、
      結果をtotal_spendingに受け取る。
  総収入total_incomeから総支出total_spendingを引いて、結果を返す。

## メイン ##
チケット代金額ticket_priceを関数total_profitに渡して利潤総額を計算し、結果を表示する。
  
  
(define (how-many-visitors ticket-price)
  (+ 120 (* (/ (- 1000 ticket-price) 100) 15)))

(define (income ticket-price num-of-visitors)
  (* ticket-price num-of-visitors))

(define (spending num-of-visitors)
  (+ 32000 (* num-of-visitors 80)))

(define (total-profit ticket-price)
  (letrec ((num-of-visitors (how-many-visitors ticket-price))
	   (total-income (income ticket-price num-of-visitors))
	   (total-spending (spending num-of-visitors)))
    (- total-income total-spending)))

(define (profit ticket-price)
  (total-profit ticket-price))
  
  
 大きな問題をいくつかの小さい問題に分割し、その一つ一つを解決する関数や式を考え、それらを組み合わせて、最初の大きな問題を解決する。
  



nice!(0)  コメント(0)  トラックバック(1) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。