computer science and programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find...

83
Chapter 1 Computer Science and Programming 1

Upload: vuduong

Post on 03-Apr-2018

230 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 1

Computer Science andProgramming

1

Page 2: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

2 CHAPTER 1. COMPUTER SCIENCE AND PROGRAMMING

10

10

5

5

Q

Q

7

7

9

9

A

A

8

8

3

3

7

7

K

K

8

8

Q

Q

J

J

Figure 1.1:

Page 3: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

3

10

10

5

5

Q

Q

7

7

9

9

A

A

8

8

3

3

7

7

K

K

8

8

Q

Q

J

J

Figure 1.2:

Page 4: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

4 CHAPTER 1. COMPUTER SCIENCE AND PROGRAMMING

Language

Architecture

Theory

Figure 1.3:

Page 5: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

5

Efficiencyand

complexity

Conceptualand formal

models

Levelsofabstraction

Figure 1.4:

Page 6: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

6 CHAPTER 1. COMPUTER SCIENCE AND PROGRAMMING

(3 + 5i ) * (2 - 7i )3.14 * 6.0231,285 * 573/4 * 8/9

ComplexRealIntegerRational

73,245 18.91222 41 - 11i2/3

Figure 1.5:

Page 7: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

7

// pre: post:

7

8

int operator * (int x, int y)

1

2

5

010001100101001000011110010101

6

1,285 Y

call

mov 0xd, %o3

3

4

x Z

}

8

x 57

{

73,245

mov 0xd,%o2

set L8,%o1

ld [%fp+-0x8],%o0

73,245

Figure 1.6:

Page 8: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

8 CHAPTER 1. COMPUTER SCIENCE AND PROGRAMMING

Rover

Figure 1.7:

Page 9: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

9

Figure 1.8:

Page 10: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

10 CHAPTER 1. COMPUTER SCIENCE AND PROGRAMMING

Figure 1.9:

Page 11: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 2

C++ Programs: Form andFunction

11

Page 12: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

12 CHAPTER 2. C++ PROGRAMS: FORM AND FUNCTION

<return type>function name (parameter list){

...

}

int main(){

...

}

#include <iostream>

// author: Owen Astrachan, 02/22/99// traditional first program

#include statement(s)

C++ statement 0; C++ statement 1;

C++ statement (n-1) ;

C++ statement (n-1);

C++ statement 1; C++ statement 0;

using namespace std;

void Hello()

cout << "Hello World" << endl;

{

}

int main(){ Hello();

}

return 0;

2

3

4

1

Figure 2.1:

Page 13: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

13

{

cout << "Happy birthday to you" << endl;

cout << "Happy birthday to you" << endl;

cout << endl;

}

int main()

{

Sing("Grace");

Sing("Alan");

...

}

cout << "Happy birthday to you" << endl;

cout << "Happy birthday dear " << person << endl;

"Grace"

void Sing(string person)

Figure 2.2:

Page 14: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

14 CHAPTER 2. C++ PROGRAMS: FORM AND FUNCTION

{

cout << "and on his farm he had a " << animal << ", ";

EiEiO();

}

{

...

}

void Pig()

{

Refrain();

HadA("pig");

WithA("oink");

Refrain();

}

"pig"

"oink"

cout << "With a " << noise << " " << noise << " here" << endl;

void WithA(string noise)

void HadA(string animal)

Figure 2.3:

Page 15: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

15

void

{

Refrain()

Had(animal);

WithA(noise);

Refrain();

}

int main()

{

Verse("pig","oink");

...

}

"pig" "oink"

Verse(string animal, string noise)

Figure 2.4:

Page 16: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

16 CHAPTER 2. C++ PROGRAMS: FORM AND FUNCTION

Page 17: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 3

Program Design andImplementation

17

Page 18: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

18 CHAPTER 3. PROGRAM DESIGN AND IMPLEMENTATION

int main()

string animal;

string noise;

cout << "Enter noise that a "<< animal <<" makes ";

cout << "Enter the name of an animal ";

cin >> noise;

cin >> animal;

cout << endl;

Verse (animal,noise);

return 0;

}

"COW"

"MOO"

int main()

string animal;

string noise;

cout << "Enter noise that a "<< animal <<" makes ";

cout << "Enter the name of an animal ";

cin >> noise;

cin >> animal;

cout << endl;

Verse (animal,noise);

return 0;

}

"COW"

"MOO"

1

2

3

Figure 3.1:

Page 19: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

19

Memorylocation

cow

animal memory location/variableName of

Value of variable (type string)

Figure 3.2:

Page 20: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

20 CHAPTER 3. PROGRAM DESIGN AND IMPLEMENTATION

47 1347

28

1316

31

1347/47

1347 % 47

Figure 3.3:

Page 21: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

21

(40 - 32) * 5/9 (40.0 - 32.0) * 5/9

8 * 5/9

40/9

4

8.0 * 5/9

40.0/9

4.44444

Figure 3.4:

Page 22: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

22 CHAPTER 3. PROGRAM DESIGN AND IMPLEMENTATION

void SlicePrice(int radius, double price)

{

...

...

cout << "$" < 3.14159*radius*radius/price

...

}

int main()

{

int radius;

double price;

...

SlicePrice(radius,price);

}

8

11.95

8 11.95

Figure 3.5:

Page 23: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

23

Figure 3.6:

Page 24: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

24 CHAPTER 3. PROGRAM DESIGN AND IMPLEMENTATION

Ascend

Rise

Cruise

Balloon

gballoon.h

Member functions

Header file

Class name

GetLocation

GetAltitude

Figure 3.7:

Page 25: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

25

executable program

client program

class implementation

COMPILE

object code

object code

LINK

gfly

int main(){ Balloon b; b.Ascend(30); return 0;}

#include "gballoon.h"gfly.cpp

void Balloon::Ascend(int height){ cout << endl; cout << "***** (Height = "; cout << myAltitude << ")";

...

gballoon.cpp#include "gballoon.h" gballoon.o

110101110101010101011110111100001...

0101010011101010101101010110101...

gfly.o

Figure 3.8:

Page 26: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

26 CHAPTER 3. PROGRAM DESIGN AND IMPLEMENTATION

Figure 3.9:

Page 27: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 4

Control, Functions, andClasses

27

Page 28: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

28 CHAPTER 4. CONTROL, FUNCTIONS, AND CLASSES

int amount;

87

Before execution

amount = amount - quarters*25;

int quarters;

After execution

int amount;

3

12

87 - 3*25

Figure 4.1:

Page 29: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

29

}

}

...

...

double

{

double value;

cin >> value;

cout << ... << sqrt(value) << endl;

cout << ... << 10.7238 << endl;

cin >> value;

sqrt(double x) 115.0

115.0Calling function sqrt(115.0)

Returning 10.7238 from sqrt(115.0)

}

return root;

// code to give root a value

double root;

Figure 4.2:

Page 30: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

30 CHAPTER 4. CONTROL, FUNCTIONS, AND CLASSES

Page 31: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 5

Iteration with Programsand Classes

31

Page 32: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

32 CHAPTER 5. ITERATION WITH PROGRAMS AND CLASSES

next statement;

statement list;

test test

statement list;

next statement;

while (test){ statement list;}next statement;

statement list;

if (test){

}next statement;

true

false

true

false

Figure 5.1:

Page 33: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

33

Product

Count 0 1 2 3 4 5

1 1

6

1202462 720

Figure 5.2:

Page 34: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

34 CHAPTER 5. ITERATION WITH PROGRAMS AND CLASSES

Figure 5.3:

Page 35: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

35

int limit = sqrt(n) + 1;

int divisor = 3;

while (divisor <= limit)

{

if (n % divisor == 0)

{

return false;

}

divisor += 2;

}

k = low;

while (k <= high)

{

if (IsPrime(k))

{

cout << k << endl;

numPrimes += 1;

}

k += 1;

}

Test

Initialization

Update

Body

Figure 5.4:

Page 36: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

36 CHAPTER 5. ITERATION WITH PROGRAMS AND CLASSES

Figure 5.5:

Page 37: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 6

Classes, Iterators, andPatterns

37

Page 38: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

38 CHAPTER 6. CLASSES, ITERATORS, AND PATTERNS

Dice (int sides)

int Roll()

int NumSides () const

int NumRolls () const

myRollCount

mySides

Pub

licP

riva

te

Beh

avio

rS

tate0

6

Dice (int sides)

int Roll()

int NumSides () const

int NumRolls () const

myRollCount

mySides

Pub

licP

riva

te

Beh

avio

rS

tate0

cube, after Dice cube(6); dodeca , after Dice dodeca (12);

12

Figure 6.1:

Page 39: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

39

Owen 6

Owen

GiveQuiz(student, correctCount, total);

void GiveQuiz(string name, int & correct, int & total)

10

Function prototype/header, formal parameters

int correctCount,total; string student;

Function call, arguments

Figure 6.2:

Page 40: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

40 CHAPTER 6. CLASSES, ITERATORS, AND PATTERNS

Figure 6.3:

Page 41: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 7

Class Interfaces, Design,and Implementation

41

Page 42: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

42CHAPTER 7. CLASS INTERFACES, DESIGN, AND IMPLEMENTATION

0

Figure 7.1:

Page 43: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

43ste

p siz

e

a

Y

X

cos(a) = X /step sizesin(a) = Y/step size

Figure 7.2:

Page 44: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

44CHAPTER 7. CLASS INTERFACES, DESIGN, AND IMPLEMENTATION

–40

–35

–30

–25

–20

–15

–10

–5

0

5

–25 –20 –15 –10 –5 0 5 10 15 20

Brownian motion: 1,024 steps of unit length

Figure 7.3:

Page 45: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

45

–5

0

5

10

15

20

25

30

35

40

–10 –5 0 5 10 15 20 25 30

Brownian motion: 1,024 steps of unit length

Figure 7.4:

Page 46: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

46CHAPTER 7. CLASS INTERFACES, DESIGN, AND IMPLEMENTATION

(0, 1)

(1, 0)

Figure 7.5:

Page 47: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

47

distance = 3d

Fig

ure

7.6:

Page 48: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

48CHAPTER 7. CLASS INTERFACES, DESIGN, AND IMPLEMENTATION

Page 49: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 8

Arrays, Data, and RandomAccess

49

Page 50: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

50 CHAPTER 8. ARRAYS, DATA, AND RANDOM ACCESS

Track 3

114 115 116 117

114

hello world

Figure 8.1:

Page 51: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

51

0 1 2 3 4 5 6

0 1 2 3 4

Numbers

Words

Figure 8.2:

Page 52: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

52 CHAPTER 8. ARRAYS, DATA, AND RANDOM ACCESS

tvector<int> diceStats(2*DICE_SIDES+1);

Type of variable Variable identifier

Dice d(6);

Argument passed to constructor

Figure 8.3:

Page 53: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

53

switch (sum){ case 2: twos += 1; break; case 3: threes += 1; break; case 4: fours += 1; break; case 5: fives += 1; break; case 6: sixes += 1; break; case 7:

break; case 8: eights += 1; break;}

sevens += 1;

diceStats[sum]++;

0 1 2 3 4 5 6 7 8

Figure 8.4:

Page 54: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

54 CHAPTER 8. ARRAYS, DATA, AND RANDOM ACCESS

myCount

myCount

80 1 2 3 4 5 6 7

80 1 2 3 4 5 6 7

80 1 2 3 4 5 6 7

80 1 2 3 4 5 6 7

myCount

myCount

DAdd to vector maintained in sorted order

Original list

loc = 8

loc = 6

loc = 4

loc = 2

B C F M Q S T V

B C F M Q

B C F

B C F F

M Q

M Q S T

Q S T

V

V

S T T V

Figure 8.5:

Page 55: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

55

one guess

two guesses

three guesses

four guesses

five guesses

six guesses

Sequential search Binary search

(low, high, high, low)

Figure 8.6:

Page 56: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

56 CHAPTER 8. ARRAYS, DATA, AND RANDOM ACCESS

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Figure 8.7:

Page 57: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 9

Strings, Streams, andOperators

57

Page 58: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

58 CHAPTER 9. STRINGS, STREAMS, AND OPERATORS

wordCount++

inWord ! inWord! isspace(ch)

isspace(ch)

Figure 9.1:

Page 59: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

59

FIRST_SLASHTEXT

Echo(ch)

COMMENT

ch != '/'

ch == '/'

ch != '/'

ch == '/'

ch != '\n'

ch == '\n'

Echo('\n')

Echo('/')Echo(ch)

Figure 9.2:

Page 60: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

60 CHAPTER 9. STRINGS, STREAMS, AND OPERATORS

Figure 9.3:

Page 61: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 10

Recursion, Lists, andMatrices

61

Page 62: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

62 CHAPTER 10. RECURSION, LISTS, AND MATRICES

number number1478 147

Print(1478)

From main( )

PrintDigit(8);

PrintDigit(4);

Print(1)

Print(147)

Print(14)

PrintDigit(7);

PrintDigit(1);

number number 114

Figure 10.1:

Page 63: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

63

base = 2, expo = 4

find 2^17 find 2^8 find 2^4

find 2^2 find 2^1 find 2^0

return 2*result*resultreturn 2*result*result return result*result

return result*result return 2*result*result return 1

base = 2, expo = 1 base = 2, expo = 0

base = 2, expo = 17 base = 2, expo = 8

base = 2, expo = 2Return 4 Return 2 Return 1

Return 16Return 256

int result = Power(2,35);base = 2, expo = 35

Return 34359738368 Return 131072

return result*result

Figure 10.2:

Page 64: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

64 CHAPTER 10. RECURSION, LISTS, AND MATRICES

code

chapter2 chapter4 chapter3prompt.h dice.h

pizza.cpppts.cpphello.cpp bday.cpp isleap.cpp fly.cpp fahr.cpp gfly.cpp

Figure 10.3:

Page 65: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

65

chap1 chap2 chap3

tapestry

finalbigpic.epschapter1.tex

hello.cpp bday.cpp oldmac.cpp

oldmac.eps

progs progs

gfly.cpp pizza.cpp macinput.cpp

library

prompt.hdice.h dice.cpp

book.tex

chapter2.tex chapter3.tex

Figure 10.4:

Page 66: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

66 CHAPTER 10. RECURSION, LISTS, AND MATRICES

"tapestry"

0

path

tabCount

1num

ProcessDir("tapestry\chap1",1)

ProcessDir("tapestry\chap3",1)

ProcessDir("tapestry\library",1)

num 5

num 2

num 3

ProcessDir("tapestry",0);

ProcessDir("tapestry\chap2",1)

ProcessDir("tapestry\chap3\progs",2)

2

path

tabCount

num

"tapestry\chap3\progs"

2

path

tabCount

num

"tapestry\chap2\progs"

path

tabCount

num

"tapestry\chap3"

1

path

tabCount

num

1

"tapestry\chap1"

"tapestry\chap2"

1

2

path

tabCount

num

0

0

0

0

0

path

tabCount

num

"tapestry\library"

1

ProcessDir("tapestry\chap2\progs",2)

Figure 10.5:

Page 67: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

67

num 5 4num num 3

num 2num 1num 0

RecFactorial(5)

RecFactorial(4) RecFactorial(3)

RecFactorial(1)RecFactrial(0)

RecFactorial(2)

Return 5 * ___ = 120Return 4 * ___ = 24 Return 3 * ___ = 6

Return 1 * ___ = 1

Return 2 * ___ = 2

Return 1

Figure 10.6:

Page 68: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

68 CHAPTER 10. RECURSION, LISTS, AND MATRICES

6

5 4

1

2 1 1 0 01 01

0

2 2 1 2 1 1 03

3 3 24

RecFib(6)

Figure 10.7:

Page 69: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

69

main

int first,second;

while

if

int second;

int first;

Figure 10.8:

Page 70: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

70 CHAPTER 10. RECURSION, LISTS, AND MATRICES

s2s1 s4s3

"tomato" "celery""carrot"

s5

empty

Tail( )

Head( )

"peapod"

Figure 10.9:

Page 71: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

71

1 2 3

��

���

���

��

��

���

��

��

��

��

Figure 10.10:

Page 72: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

72 CHAPTER 10. RECURSION, LISTS, AND MATRICES

0

0

0

1

1

1

1

0

0

1

0

1 0

0

0

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

Figure 10.11:

Page 73: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

73

28

28

10

10

25 32

12 28

25

32

32 32 32

2525

25 10

1010

10 12 12

12

25 25

32 32

10

18

18

18

10

32 32

3-neighborhood 5-neighborhood

Figure 10.12:

Page 74: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

74 CHAPTER 10. RECURSION, LISTS, AND MATRICES

Figure 10.13:

Page 75: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

75

Figure 10.14:

Page 76: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

76 CHAPTER 10. RECURSION, LISTS, AND MATRICES

Page 77: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

Chapter 11

Sorting, Templates, andGeneric Programming

77

Page 78: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

78CHAPTER 11. SORTING, TEMPLATES, AND GENERIC PROGRAMMING

4223 18 7 57 38

4218 23 57 38

MinIndex = 3 Swap(a[0],a[3]);

MinIndex = 1 Swap(a[1],a[1]);

MinIndex = 3 Swap(a[2],a[3]);

MinIndex = 5 Swap(a[3],a[5]);

57 MinIndex = 5 Swap(a[4],a[5]);

42

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

7

4218 23 57 387

2318 42 57 387

2318 38 427

2318 38 577

Figure 11.1:

Page 79: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

79

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

0 1 2 3 4 5

loc = 4

loc = 0

loc = 2

loc = 1

loc = 0

loc = 3

hold = 18

hold = 23

hold = 42

hold = 7

hold = 57

hold = 38

Original vector

18 42 7 57 38

3823 57

2318

18 23 42 57

18 23 42

7 57 384223

421823 7 57 38

18 7

42 57 38

7

7

Figure 11.2:

Page 80: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

80CHAPTER 11. SORTING, TEMPLATES, AND GENERIC PROGRAMMING

0

2

4

6

8

10

12

14

16

1000 2000 3000 4000 5000 6000 7000 8000 9000 10000

Tim

e (s

econ

ds)

Number of elements

"Insertion""Selection"

"Bubble"

Figure 11.3:

Page 81: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

81

2527

18

20

19

2531

33

27

Pivot

Pivot

3129

33

2722

25

25

24

20 18

22

2429

31

29

332525

22

24

18

2019

31

31

1931

Figure 11.4:

Page 82: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

82CHAPTER 11. SORTING, TEMPLATES, AND GENERIC PROGRAMMING

if (a[k] <= piv){ p++; Swap(a[k],a[p])}

elements <= X elements >= XX

Pivot

Pivot

First

First

First

First Last

Last

Last

Last

X

X

<= X ???

<= X

> X

> X

> X<= X

kp

p

X

Desired properties of vector, partitioned around pivot

After several iterations, partially re-arranged, more elements to process

All elements processed

Final configuration after swapping first element into pivot location

}Swap(a[p],a[first]);

return p;

Figure 11.5:

Page 83: Computer Science and Programming - cs.duke.edu base = 2, expo = 4 find 2^17 find 2^8 find 2^4 find 2^2 find 2^1 find 2^0 return 2*result*result return result*result return result*result

83

nonzeros examined ?????

nonZeroIndex k

Figure 11.6: