Spring 2001 CS100M Solutions to Exercise E7 notes + answers are below + you were not required to draw code inside the scopes, but we do so for clarity: + to show what code is run where + to keep track of what is being executed + code appears in multiple scopes: only the code in the rightmost scope is actively running; other code is waiting for code to the right to finish + for an animated trace, download the following code from the Examples page: + $strhcat.m$ + $boxscope.m$ -- upgraded since it was previously posted + $boxe7.m$ <-- run this function for the animation note: you might need to resize the Matlab Command Window + you can also download and run $boxfib.m$ to see an animated trace of calls to $fib$ (from the 2/27 lecture) note: $fib$ is renamed $f$ to save space, but you still might need to resize the Matlab Command Window _______________________________________________________________________________ Picture #1 +------------------------+ |command | |+---------------------+ | || a = 10; | | || b = 20; | | || x = 30; | | || --> % draw pic! | | || | | || x = g(15, 6); | | || % draw pic! | | || +----+ | | || a | 10 | | | || +----+ | | || +----+ | | || b | 20 | | | || +----+ | | || +----+ | | || x | 30 | | | || +----+ | | |+---------------------+ | +------------------------+ _______________________________________________________________________________ Picture #2 +------------------------------------------------+ |command g | |+---------------------+ +---------------------+ | || a = 10; | | run function body | | || b = 20; | | | | || x = 30; | | | | || % draw pic! | | function x = g(a,b) | | || --> ???????? | | --> % draw pic! | | || x = g(15, 6); | | a = 2*a; | | || % draw pic! | | b = 2*b; | | || +----+ | | | | || a | 10 | | | [a,b] = f(b,a); | | || +----+ | | a = 2*a; | | || +----+ | | b = 3*b; | | || b | 20 | | | x = a-b; | | || +----+ | | % draw pic! | | || +----+ | | +----+ | | || x | 30 | | | a | 15 | | | || +----+ | | +----+ | | |+---------------------+ | +---+ | | | | b | 6 | | | | | +---+ | | | +---------------------+ | +------------------------------------------------+ _______________________________________________________________________________ Picture #3 +----------------------------------------------------------------------------+ |command g f | |+---------------------+ +---------------------+ +-------------------------+ | || a = 10; | | run function body | | run function body | | || b = 20; | | | | | | || x = 30; | | | | | | || % draw pic! | | function x = g(a,b) | | function [x,y] = f(a,b) | | || --> ???????? | | % draw pic! | | --> % draw pic! | | || x = g(15, 6); | | a = 2*a; | | x = b-a; | | || % draw pic! | | b = 2*b; | | y = a; | | || +----+ | | --> ?????? | | % draw pic! | | || a | 10 | | | [a,b] = f(b,a); | | +----+ | | || +----+ | | a = 2*a; | | a | 12 | | | || +----+ | | b = 3*b; | | +----+ | | || b | 20 | | | x = a-b; | | +----+ | | || +----+ | | % draw pic! | | b | 30 | | | || +----+ | | +----+ | | +----+ | | || x | 30 | | | a | 30 | | +-------------------------+ | || +----+ | | +----+ | | |+---------------------+ | +----+ | | | | b | 12 | | | | | +----+ | | | +---------------------+ | +----------------------------------------------------------------------------+ _______________________________________________________________________________ Picture #4 +----------------------------------------------------------------------------+ |command g f | |+---------------------+ +---------------------+ +-------------------------+ | || a = 10; | | run function body | | run function body | | || b = 20; | | | | | | || x = 30; | | | | | | || % draw pic! | | function x = g(a,b) | | function [x,y] = f(a,b) | | || --> ???????? | | % draw pic! | | % draw pic! | | || x = g(15, 6); | | a = 2*a; | | x = b-a; | | || % draw pic! | | b = 2*b; | | y = a; | | || +----+ | | --> ?????? | | --> % draw pic! | | || a | 10 | | | [a,b] = f(b,a); | | +----+ | | || +----+ | | a = 2*a; | | a | 12 | | | || +----+ | | b = 3*b; | | +----+ | | || b | 20 | | | x = a-b; | | +----+ | | || +----+ | | % draw pic! | | b | 30 | | | || +----+ | | +----+ | | +----+ | | || x | 30 | | | a | 30 | | | +----+ | | || +----+ | | +----+ | | x | 18 | | | |+---------------------+ | +----+ | | +----+ | | | | b | 12 | | | +----+ | | | | +----+ | | y | 12 | | | | +---------------------+ | +----+ | | | +-------------------------+ | +----------------------------------------------------------------------------+ _______________________________________________________________________________ Picture #5 +----------------------------------------------------------------------------+ |command g f | |+---------------------+ +---------------------+ +----------------------/--+ | || a = 10; | | run function body | | kill activation reco/d | | || b = 20; | | | | / | | || x = 30; | | | | / | | || % draw pic! | | function x = g(a,b) | | function [x,y] = /(a,b) | | || --> ???????? | | % draw pic! | | % draw pic! / | | || x = g(15, 6); | | a = 2*a; | | x = b-a; / | | || % draw pic! | | b = 2*b; | | y = a; / | | || +----+ | | | | --> % draw pi/! | | || a | 10 | | | [a,b] = f(b,a); | | +----+ / | | || +----+ | | a = 2*a; | | a | 12 | / | | || +----+ | | b = 3*b; | | +----+ / | | || b | 20 | | | x = a-b; | | +----+ / | | || +----+ | | --> % draw pic! | | b | 30 |/ | | || +----+ | | +----+ | | +----/ | | || x | 30 | | | a | 36 | | | +---/+ | | || +----+ | | +----+ | | x | 1/ | | | |+---------------------+ | +----+ | | +-/--+ | | | | b | 36 | | | +/---+ | | | | +----+ | | y / 12 | | | | | +---+ | | /+----+ | | | | x | 0 | | +-/-----------------------+ | | | +---+ | | | +---------------------+ | +----------------------------------------------------------------------------+ _______________________________________________________________________________ Picture #6 +----------------------------------------------------------------------------+ |command g f | |+---------------------+ +---------------------+ +----------------------/--+ | || a = 10; | | kill activation rec.| | kill activation reco/d | | || b = 20; | | | | / | | || x = 30; | | | | / | | || % draw pic! | | function x = g(a,b) / | function [x,y] = /(a,b) | | || | | % draw pic! /| | % draw pic! / | | || x = g(15, 6); | | a = 2*a; / | | x = b-a; / | | || --> % draw pic! | | b = 2*b; / | | y = a; / | | || +----+ | | / | | --> % draw pi/! | | || a | 10 | | | [a,b] = f(b/a); | | +----+ / | | || +----+ | | a = 2*a; / | | a | 12 | / | | || +----+ | | b = 3*b; / | | +----+ / | | || b | 20 | | | x = a-b;/ | | +----+ / | | || +----+ | | --> % draw /ic! | | b | 30 |/ | | || +---+ | | +----+ / | | +----/ | | || x | 0 | | | a | 36 | / | | +---/+ | | || +---+ | | +----+/ | | x | 1/ | | | |+---------------------+ | +----/ | | +-/--+ | | | | b | 36/| | | +/---+ | | | | +--/-+ | | y / 12 | | | | | +-/-+ | | /+----+ | | | | x |/0 | | +-/-----------------------+ | | | /---+ | | | +--/------------------+ | +----------------------------------------------------------------------------+