Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-beginner-reader.ss" "lang")((modname 11.3.5) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;;Produces an intenger between n and m-1
5 12687dd9 2023-08-04 jrmu
6 12687dd9 2023-08-04 jrmu ;; random-n-m : integer integer -> integer
7 12687dd9 2023-08-04 jrmu ;; ...
8 12687dd9 2023-08-04 jrmu ;; Assume: n < m
9 12687dd9 2023-08-04 jrmu (define (random-n-m n m)
10 12687dd9 2023-08-04 jrmu (+ (random (- m n)) n))
11 12687dd9 2023-08-04 jrmu ;
12 12687dd9 2023-08-04 jrmu ;create-temps : number number number -> list-of-numbers
13 12687dd9 2023-08-04 jrmu ;Creates a list-of-numbers consisting of n numbers between low and high.
14 12687dd9 2023-08-04 jrmu ;Example
15 12687dd9 2023-08-04 jrmu ;(create-temps 0 low high)
16 12687dd9 2023-08-04 jrmu ;empty
17 12687dd9 2023-08-04 jrmu ;(create-temps 1 low high)
18 12687dd9 2023-08-04 jrmu ;(cons (random-n-m low (+ high 1)) empty)
19 12687dd9 2023-08-04 jrmu ;(create-temps 2 low high)
20 12687dd9 2023-08-04 jrmu ;(cons (random-n-m low (+ high 1)) (cons (random-n-m low (+ high 1)) empty))
21 12687dd9 2023-08-04 jrmu ;
22 12687dd9 2023-08-04 jrmu ;Template
23 12687dd9 2023-08-04 jrmu ;
24 12687dd9 2023-08-04 jrmu ;(define (create-temps n low high)
25 12687dd9 2023-08-04 jrmu ; (cond
26 12687dd9 2023-08-04 jrmu ; [(zero? n) ...]
27 12687dd9 2023-08-04 jrmu ; [(>= n 1) ...]
28 12687dd9 2023-08-04 jrmu ; [else (error 'create-temps "expected 1st arg: natural number")]))
29 12687dd9 2023-08-04 jrmu
30 12687dd9 2023-08-04 jrmu (define (create-temps n low high)
31 12687dd9 2023-08-04 jrmu (cond
32 12687dd9 2023-08-04 jrmu [(zero? n) empty]
33 12687dd9 2023-08-04 jrmu [(>= n 1) (cons (random-n-m low (+ high 1)) (create-temps (sub1 n) low high))]
34 12687dd9 2023-08-04 jrmu [else (error 'create-temps "expected 1st arg: natural number")]))
35 12687dd9 2023-08-04 jrmu
36 12687dd9 2023-08-04 jrmu ;Data Definition
37 12687dd9 2023-08-04 jrmu ;A list-of-temperatures is either
38 12687dd9 2023-08-04 jrmu ;1. an empty list or
39 12687dd9 2023-08-04 jrmu ;2. (cons t los) where t is a number and los is a list-of-temperatures.
40 12687dd9 2023-08-04 jrmu
41 12687dd9 2023-08-04 jrmu ;Header, Purpose, Contract
42 12687dd9 2023-08-04 jrmu ;check-range1? : list-of-temperatures -> boolean
43 12687dd9 2023-08-04 jrmu ;Given a-list, returns true if the list of temperatures are within the range
44 12687dd9 2023-08-04 jrmu ;low and high (endpoints included as true).
45 12687dd9 2023-08-04 jrmu ;
46 12687dd9 2023-08-04 jrmu (define (check-range1? a-list low high)
47 12687dd9 2023-08-04 jrmu (cond
48 12687dd9 2023-08-04 jrmu [(empty? a-list) true]
49 12687dd9 2023-08-04 jrmu [(cons? a-list) (cond
50 12687dd9 2023-08-04 jrmu [(and
51 12687dd9 2023-08-04 jrmu (number? (first a-list))
52 12687dd9 2023-08-04 jrmu (>= (first a-list) low)
53 12687dd9 2023-08-04 jrmu (<= (first a-list) high))
54 12687dd9 2023-08-04 jrmu (check-range1? (rest a-list) low high)]
55 12687dd9 2023-08-04 jrmu [(number? (first a-list)) false]
56 12687dd9 2023-08-04 jrmu [else
57 12687dd9 2023-08-04 jrmu (error 'check-range1? "list should be composed of numbers")])]
58 12687dd9 2023-08-04 jrmu [else (error 'check-range1? "expected 3 arg: list number number")]))
59 12687dd9 2023-08-04 jrmu
60 12687dd9 2023-08-04 jrmu ;create-prices : natural-number number number -> list-of-numbers
61 12687dd9 2023-08-04 jrmu ;Given a natural-number n, creates a list of n prices
62 12687dd9 2023-08-04 jrmu ;between low and high rounded to the nearest
63 12687dd9 2023-08-04 jrmu ;dime ($0.10). Creates this list by
64 12687dd9 2023-08-04 jrmu ;making the function call random-dime.
65 12687dd9 2023-08-04 jrmu ;
66 12687dd9 2023-08-04 jrmu ;Examples
67 12687dd9 2023-08-04 jrmu ;(create-prices 0 low high)
68 12687dd9 2023-08-04 jrmu ;empty
69 12687dd9 2023-08-04 jrmu ;(create-prices 1 low high)
70 12687dd9 2023-08-04 jrmu ;(cons (random-dime low high) empty)
71 12687dd9 2023-08-04 jrmu ;(create-prices 2 low high)
72 12687dd9 2023-08-04 jrmu ;(cons (random-dime low high)
73 12687dd9 2023-08-04 jrmu ; (cons (random-dime low high) empty))
74 12687dd9 2023-08-04 jrmu ;
75 12687dd9 2023-08-04 jrmu (define (create-prices n low high)
76 12687dd9 2023-08-04 jrmu (cond
77 12687dd9 2023-08-04 jrmu [(zero? n) empty]
78 12687dd9 2023-08-04 jrmu [(>= n 1) (cons (random-dime low high) (create-prices (sub1 n) low high))]
79 12687dd9 2023-08-04 jrmu [else (error 'create-prices "expected 1st arg: natural-number")]))
80 12687dd9 2023-08-04 jrmu
81 12687dd9 2023-08-04 jrmu ;random-dime : number number -> number
82 12687dd9 2023-08-04 jrmu ;Given low and high, creates a number (decimal) between low and high
83 12687dd9 2023-08-04 jrmu ;rounded to the nearest dime. It does so by choosing a random integer
84 12687dd9 2023-08-04 jrmu ;between 0 and (high-low)/0.1, inclusive. So for example,
85 12687dd9 2023-08-04 jrmu ;for low=0 and high=1, it chooses a number between 0 and 10 (inclusive).
86 12687dd9 2023-08-04 jrmu ;It then multiplies this number by 0.1, the value of a dime.
87 12687dd9 2023-08-04 jrmu ;This function thus returns us a number between $0.00 and $1.00,
88 12687dd9 2023-08-04 jrmu ;rounded to the nearest dime.
89 12687dd9 2023-08-04 jrmu
90 12687dd9 2023-08-04 jrmu (define (random-dime low high)
91 12687dd9 2023-08-04 jrmu (*
92 12687dd9 2023-08-04 jrmu (random-n-m 0
93 12687dd9 2023-08-04 jrmu (+ (/ (- high low) 0.1) 1))
94 12687dd9 2023-08-04 jrmu 0.1))
95 12687dd9 2023-08-04 jrmu
96 12687dd9 2023-08-04 jrmu ;
97 12687dd9 2023-08-04 jrmu ;dollar-store? : list-of-numbers -> boolean
98 12687dd9 2023-08-04 jrmu ;Checks a-list to see if the prices are below 1. Returns true
99 12687dd9 2023-08-04 jrmu ;if the statement is true, false otherwise.
100 12687dd9 2023-08-04 jrmu ;
101 12687dd9 2023-08-04 jrmu ;Template
102 12687dd9 2023-08-04 jrmu ;(define (dollar-store? a-list)
103 12687dd9 2023-08-04 jrmu ; (cond
104 12687dd9 2023-08-04 jrmu ; [(empty? a-list) ...]
105 12687dd9 2023-08-04 jrmu ; [(cons? a-list) (first a-list) (rest a-list)]))
106 12687dd9 2023-08-04 jrmu
107 12687dd9 2023-08-04 jrmu (define (dollar-store? a-list)
108 12687dd9 2023-08-04 jrmu (cond
109 12687dd9 2023-08-04 jrmu [(empty? a-list) true]
110 12687dd9 2023-08-04 jrmu [(cons? a-list) (cond
111 12687dd9 2023-08-04 jrmu [(and
112 12687dd9 2023-08-04 jrmu (number? (first a-list))
113 12687dd9 2023-08-04 jrmu (< (first a-list) 1))
114 12687dd9 2023-08-04 jrmu (dollar-store? (rest a-list))]
115 12687dd9 2023-08-04 jrmu [else false])]))
116 12687dd9 2023-08-04 jrmu
117 12687dd9 2023-08-04 jrmu ;eval-until-true : natural-number number number -> boolean
118 12687dd9 2023-08-04 jrmu ;Keep evaluating (dollar-store? (create-prices n low high))
119 12687dd9 2023-08-04 jrmu ;until it returns true.
120 12687dd9 2023-08-04 jrmu ;
121 12687dd9 2023-08-04 jrmu (define (eval-until-true n low high)
122 12687dd9 2023-08-04 jrmu (cond
123 12687dd9 2023-08-04 jrmu [(dollar-store? (create-prices n low high)) true]
124 12687dd9 2023-08-04 jrmu [else (eval-until-true n low high)]))