Exercise 9
For each of the following functions, give the signature and suggest a suitable precondition.- (a) TOUPPER, which changes a string, containing only lower-case letters, into the corresponding string consisting of upper-case letters. (So, for example, TOUPPER(“word”) = “WORD”.)
- (b) REMOVELAST, which, given a sequence, deletes its last member.
- (c) LAST, which returns the last member of a sequence.
Answer
Solution
- (a) This function inputs a string and outputs a string, therefore it has signature TOUPPER : SeqOfChar → SeqOfChar. It requires a precondition that the input sequence consists entirely of lower-case letters.
- (b) The members of the sequence may come from any set, which we will denote by X. The input is a sequence and the returned value is also a sequence. So the signature is REMOVELAST : SeqOfX → SeqOfX . The input sequence should contain at least one member (otherwise there is no last member to delete), so we need a precondition that the input sequence is not empty.
- (c) This is similar to (a), except that the returned value is an item from X, rather than a sequence. The signature is LAST : SeqOfX → X. We again need the precondition that the input sequence is not empty.
Exercise 10
Suppose that the days of the week are represented by numbers, with Mon-day represented by 1, Tuesday represented by 2, and so on, with Sunday represented by 7. Describe a function TOMORROW2, giving the next day with Days represented in this way.Answer
Solution
You may have given this description.function TOMORROW2(d in Int) return in Int
pre d is in the set {1,2,3,4,5,6,7}.
post The returned value is t, where:
- if d = 1 then t = 2
- if d = 2 then t = 3
- if d = 3 then t = 4
- if d = 4 then t = 5
- if d = 5 then t = 6
- if d = 6 then t = 7
- if d = 7 then t = 1.
function TOMORROW2(d in Int) return in Int
pre 1 ≤ d ≤ 7.
post The returned value is t, where:
t = d + 1 if 1 = d = 6;
t = 1 if d = 7.
Either of these answers is fine.
Exercise 11
- (a) With s = “abcd”, evaluate each of:
- (i) AT(1, s);
- (ii) PUT(2, s, AT(1, s)).
- (i) AT(1, s);
- (b) For a general sequence s, describe how the sequence PUT(2, s, AT(1, s)) is obtained from s.
Answer
Solution
- (a)(i) With s = “abcd”, AT(1,s) = ‘a’.
- (ii) Then PUT(2,s,AT(1,s)) = PUT(2,“abcd”,‘a’) = “aacd”.
- (b) In general, PUT(2,s,AT(1,s)) is formed by replacing the second member of the sequence s with a copy of the first member of s.
No comments:
Post a Comment