CMU 15-112: Fundamentals of Programming and Computer Science
Extra Practice for Unit 6 (Due never) Code Tracing (CT) and Reasoning Over Code (ROC) Exercises



This is part2! Also see extra-practice6-ct-and-roc.html
These problems will help you prepare for hw6, quiz6, and the upcoming midterms and final. They are optional and you are encouraged to collaborate when working on them.
Code Tracing (CT)
What will each of these print?

  1. Trace #1:
    import copy a = [1,2,3,4] (b,c) = (a, copy.copy(a)) print((a == b), (a == c)) print((a is b), (a is c)) print((a[0] is b[0]), (a[0] is c[0])) a = [1,2] (b,c) = (a, copy.copy(a)) b[0] += 10 c[1] += 100 for L in [a,b,c]: print(L) a = [1,2] (b,c) = (a, copy.copy(a)) a[0] += 1 b[0] += 2 c[1] += 3 a[0] = c[0] b[0] = a[1] for L in [a,b,c]: print(L) print() a = list(range(2,10,7)) (b, c) = (a, a[:2]) b[0] += 3 a += [3] a = a + [4] print(c + [b[0]]) print(c.append(b[1])) print(a, b, c)

  2. Trace #2:
    import copy def f(a, b): a = copy.copy(a) a[0] = b[1] b[0] = a[1] return a + b a1 = a2 = list(range(5,7)) b1 = b2 = list(range(2)) a1 = f(a1, b1) print(a1, a2, b1, b2)

  3. Trace #3:
    def onesDigit(n): return n%10 def ct(L): for i in range(len(L)): L[i] += sum(L) + max(L) return sorted(L, key=onesDigit) a = [2,1,0] print(ct(a)) print(a)

  4. Trace #4:
    def ct(a): a[1] = "foo" a[0], a[2] = a[2], a[0] print(a) b = a b.extend([42, "wow" ]) b.pop() print(b) c = [] + b c[1:-1] = ["Hello" , "World" ] return c lst = [15, "1" , "twelve" ] print(ct(lst)) print(lst)

Reasoning Over Code (ROC)
Find values for the parameters so the functons return True:

  1. RC #1 of 2:
    def rc1(L): result = [ ] for i in range(len(L)): m = L[i] for j in range(i, len(L)): if (L[j] > m): m = L[j] result.append(m) return (result == [3, 3, 2, 1])

  2. RC #2 of 2:
    import copy def rc(a): assert(sorted(a) == list(range(5,9))) b = copy.copy(a) for i in range(len(b)): b[len(b)-1-i] *= i return ((b[0] == 18) and (min(a) == b[2]) and (a[1] > a[3]))