1 decisions, decisions, decisions chapter 5 fall 2006 cs 101 aaron bloomfield

97
1 Decisions, decisions, decisions Chapter 5 Fall 2006 CS 101 Aaron Bloomfield

Upload: naomi-berniece-allen

Post on 04-Jan-2016

219 views

Category:

Documents


1 download

TRANSCRIPT

1

Decisions, decisions, decisions

Chapter 5Fall 2006CS 101Aaron Bloomfield

2

Background Our problem-solving solutions so far have the straight-line

property They execute the same statements for every run of the

program

public class DisplayForecast // main(): application entry point

public static void main(String[] args) { System.out.print("I think there is a world"); System.out.print(" market for maybe five "); System.out.println("computers. “); System.out.print(" Thomas Watson, IBM, “); System.out.println("1943.“);

}}

3

Background For general problem solving we need more capabilities

The ability to control which statements are executed The ability to control how often a statement is executed

We will concentrate first on controlling which statements are executed

Java provides the if and switch conditional constructs to control whether a statement list is executed The if constructs use logical expressions to determine

their course of action

We will start with logical expressions

44

Logical expressionsLogical expressions

5

Logical expressions The branch of mathematics dealing with logical expressions

is Boolean algebra Developed by the British mathematician George Boole

6

Logical expressions A logical expression has either the value logical true or

logical false

Some expressions whose values are logical true The year 2004 is a leap year A meter equals 100 centimeters

Some expressions whose values are logical false A triangle has four sides The area of square is always equal to twice its

perimeter

7

Logical expressions There are three primary logical operators for manipulating

logical values Logical and Logical or Logical not

The operators work as most of us would expect

8

Truth tables We use truth tables to give formal specifications of the

operators “It works as most of us would expect” allows for

ambiguity of interpretation Jim is smiling or Patty is smiling

Can both Jim and Patty both be smiling? Truth tables

Lists all combinations of operand values and the result of the operation for each combination

p q p and q

False False FalseFalse True FalseTrue False FalseTrue True True

9

Or and not truth tables

p q p or q

False False FalseFalse True TrueTrue False TrueTrue True True p not p

False TrueTrue False

10

Boolean algebra Can create complex logical expressions by combining simple

logical expressions

not (p and q)

p q p and q not (p and q)

False False False TrueFalse True False TrueTrue False False TrueTrue True True False

11

DeMorgan’s laws not (p and q) equals (not p) or (not q)

(not p) or p q p and q not (p and q) ( not p) (not q) (not q)

False False False True True True TrueFalse True False True True False TrueTrue False False True False True TrueTrue True True False False False False

12

DeMorgan’s laws not (p or q) equals (not p) and (not q)

(not p) and p q p or q not (p or q) ( not p) (not q) (not q)

False False False True True True TrueFalse True True False True False FalseTrue False True False False True FalseTrue True True False False False False

13

DeMorgan’s laws If you remember nothing else about the Boolean operators,

remember that:

not (a and b) == (not a) or (not b) not (a or b) == (not a) and (not b)

1414

Sidewalk chalk guySidewalk chalk guy

Source: http://www.gprime.net/images/sidewalkchalkguy/Source: http://www.gprime.net/images/sidewalkchalkguy/

1515

Boolean expressionsBoolean expressions

16

A boolean type Java has the logical type boolean

Type boolean has two literal constants true false

Operators The and operator is &&

Don’t use & The or operator is ||

Don’t use | The not operator is !

17

Defining boolean variables Local boolean variables are uninitialized by default

boolean isWhitespace;boolean receivedAcknowledgement;boolean haveFoundMissingLink;

-isWhitespace

-receivedAcknowledgement

-haveFoundMissingLink

18

Defining boolean variables Local boolean variables with initialization

boolean canProceed = true;boolean preferCyan = false;boolean completedSecretMission = true;

truecanProceed

falsepreferCyan

truecompletedSecretMission

19

Assignment vs. comparison = is the assignment operator

It copies the value on the right to the location on the left Consider:

int x;x = 5;

The value 5 is copied to the spot x in memory

== is the comparison operator Returns a boolean (true or false) if the two sides are

equal Consider:

int x = 5;System.out.println (x == 5);System.out.println (x == 6);

Prints out true, false

20

Other operators Equality operators == and !=

Operator == Returns true if the operands have the same value;

otherwise, returns false This is not the assignment operator!

Operator != Returns true if the operands have different values;

otherwise, returns false

The operators work with all types of values

21

Evaluating boolean expressions Suppose

boolean p = true;boolean q = false;boolean r = true;boolean s = false;

What is the value ofp p && s !s p == q q q != r p && r r == s q || s q != s

22

Evaluating boolean expressions Suppose

int i = 1;int j = 2;int k = 2;char c = '#';char d = '%';char e = '#';

What is the value ofj == k i != ki == j j != kc == e d != ec == d c != e

2323

A bit of humor…A bit of humor…

2424

Translating English to logical Translating English to logical expressionsexpressions

25

Translating English to logical expressions English doesn’t always translate cleanly into logical expressions To see this, we need to examine the NOR operator

It doesn’t exist in Java, but we can fake it p NOR q == NOT (p OR q) NOR is represented by a downward arrow:

In Java, given variables p and q NOR is done by: !(p||q)

p q p or q not (p or q) p nor q

False False False True TrueFalse True True False FalseTrue False True False FalseTrue True True False False

26

Translation Example “I have neither given nor received help on this exam”

Rephrased: “I have not given nor received …” Let p = “I have given help on this exam” Let q = “I have received help on this exam”

Translation is: pq Remember the precedence: NOT is done first!

p q p pq

T T F F

T F F T

F T T F

F F T F

27

Translation example, take 2 “I have neither given nor received help on this exam”

Rephrased: “I have not (given nor received …)” Let p = “I have given help on this exam” Let q = “I have received help on this exam”

Another translation is: (pq) = p || q

p q p || q

T T T

T F T

F T T

F F F

28

Translation example, rephrased What is meant is “I have not given and I have not received help

on this exam” Or “I have not (given or received) help on this exam” This is a DeMorgaization of the one above it

The problem: has a higher precedence than in Boolean logic, but not always in English

Also, “neither” is vague

p q pq (p||q)

T T F F

T F F F

F T F F

F F T T

29

Disclaimer The preceding example was showing that when English can

be clear, it does not always translate clearly into Boolean logic The English meaning is exact The Boolean translation is not

This does not mean that you can cheat, and say that I said it was allowed by the honor code

3131

Floating point comparisonFloating point comparison

32

Floating point precission What gets printed?

class FloatTest {public static void main (String args[]) {

double y = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 +

0.1 + 0.1 + 0.1 + 0.1 + 0.1;

System.out.println (y);}

} There are 10 0.1’s

3333

Program demoProgram demo

FloatTest.javaFloatTest.java

34

Take care with floating-point values Consider

double a = 1;double b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1double c = .9999999999999999;

Two true expressions! c == b b != a

Two false expressions!a == b b != c

Problem lies with the finite precision of the floating-point types

Instead with the ordering operators for closeness

35

How to solve this Don’t compare floating-point values if you can help it!

Both doubles and floats

Need to test if the two doubles are “close” in value

final double EPSILON = 0.000001;boolean foo = Math.abs (a-b) < EPSILON;

3636

More on evaluating expressionsMore on evaluating expressions

37

Ordering operators Java provides ordering operators for the primitive types

Four ordering operators, <, >, <=, and >= They correspond to mathematical operators of <, >, ≤,

and ≥

Together the equality and ordering operators are known as the relational operators

False is less than true

38

Evaluation boolean expressions Suppose

int i = 1;int j = 2;int k = 2;

What is the value ofi < jj < ki <= kj >= ki >= k

39

Unicode values Character comparisons are based on their Unicode values

Characters ‘0’, ‘1’, … ‘9’ have expected order Character ‘0’ has the encoding 48 Character ‘1’ has the encoding 49, and so on.

Upper case Latin letters ‘A’, ‘B’, … ‘Z’ have expected order Character ‘A’ has the encoding 65, character ‘B’ has the

encoding 66, and so on.

Lower case Latin letters ‘a’, ‘b’, … ‘z’ have expected order Character ‘a’ has the encoding 97 Character ‘b’ has the encoding 98, and so on.

40

Evaluation boolean expressions Suppose

char c = '2';char d = '3';char e = '2';

What is the value ofc < dc < ec <= ed >= ec >= e

41

Operator precedence revisited Highest to lowest

Parentheses Unary operators Multiplicative operators Additive operators Relational ordering Relational equality Logical and Logical or Assignment

42

Expressions vs. statements A statement is a single command for Java to do, and always

ends in a semi-colon (for now, at least) System.out.println (“hello world”); int x = 4; ++x;

An expression returns a value, and does not have a semi-colon 5 circle.getRadius() x

Note the difference between the following: ++i is an expression ++i; is a statement

4343

Sand CastlesSand Castles

4444

if statementif statement

45

Conditional constructs Provide

Ability to control whether a statement list is executed

Two constructs

If statement if if-else if-else-if

Switch statement

46

Basic if statement Syntax

if (Expression) Action

If the Expression is true then execute Action

Action is either a single statement or a group of statements within braces

For us, it will always be a group of statements within braces

Expression

Action

true false

47

Example

if (value < 0) { value = -value;}

Is our numbernegative?

If Value is notless than zero

then our numberis fine as is

If Value is less thanzero then we needto update its value

to that of its additiveinverse

false

Value < 0

Value = -Value

true

Our number is nowdefinitely

nonnegative

48

Sorting two valuesSystem.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();

// rearrange numbers if necessaryif (value2 < value1) {

// values are not in sorted orderint rememberValue1 = value1;value1 = value2;value2 = rememberValue1;

}

// display valuesSystem.out.println("The numbers in sorted order are "

+ value1 + " and then " + value2);

What happens if the user enters 11 and 28?

What happens if the user enters 11 and 4?

If semanticsAre the numbers outof order

Rearrange value1 andvalue2 to put their

values in the properorder

value2 < value1

int rememberValue1 = value1 value1 = value2 value2 = rememberValue1

true false

The numbers were initially inorder

The numbers were rearranged intothe proper order

The numbers are in order

50

What an if statement executes An if statement executes the next block of code

A block is either:

A single statement without curly brackets:

if (a == b)System.out.println (“a==b!!!”);

A number of statements enclosed by curly brackets:

if (a == b) {System.out.print (“a”);System.out.print (“==”);System.out.print (“b”);System.out.println (“!!!”);

}

51

Why we always use braces What is the output?

int m = 5;int n = 10;

if (m < n) ++m;++n;

System.out.println(" m = " + m + " n = “ + n);

5252

Warn your grandparents!Warn your grandparents!

Historically, this class has been lethal to Historically, this class has been lethal to grandparents of students in the classgrandparents of students in the class– More often grandmothersMore often grandmothers

This happens most around test timeThis happens most around test time– Although occasionally around the times a big Although occasionally around the times a big

assignment is dueassignment is due

See See http://www.cis.gsu.edu/~dstraub/Courses/Grandma.htmhttp://www.cis.gsu.edu/~dstraub/Courses/Grandma.htm

5353

if-else statementif-else statement

54

The if-else statement Syntax

if (Expression) Action1

else Action2

If Expression is true then execute Action1 otherwise execute Action2

The actions are either a single statement or a list of statements within braces

Expression

Action1 Action2

true false

55

Finding the maximum of two valuesSystem.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();

int maximum;if (value1 < value2) { // is value2 larger? maximum = value2; // yes: value2 is larger}else { // (value1 >= value2) maximum = value1; // no: value2 is not larger}System.out.println("The maximum of " + value1

+ " and " + value2 + " is " + maximum);

But is it initialized?

56

Finding the maximum of two valuesSystem.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();

int maximum;if (value1 < value2) { // is value2 larger? maximum = value2; // yes: value2 is larger}

System.out.println("The maximum of " + value1 + " and " + value2 + " is " + maximum);

But is it initialized?

57

Finding the maximum of two values

value1 < value2

maximum = value2 maximum = value1

true false

Is value2 larger than value1

Yes, it is . So value2 islarger than value1. Inthis case, maximum is

set to value2

No, its not. So value1is at least as large asvalue2. In this case,maximum is set to

value1

Either case, maximum is setcorrectly

58

Why we use whitespace What does the following do?

System.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();if (value2 < value1) {int rememberValue1 = value1;value1 = value2;value2 = rememberValue1;}System.out.println("The numbers in sorted order are "+ value1 + " and then " + value2);

59

How do you like your braces?

if (a == b){

//...} else {

//...}

if (a == b){

//...}else {

//...}

if (a == b){

//...} else {

//...}

if (a == b) {//...

} else {//...

}

if (a == b) {//...

} else {

//...}

60

If-then-else precedence

if (number != 0)if (number > 0)

System.out.println("positive");else

System.out.println("negative");

Which if does this else refer to?

61

If-then-else precedence without whitespace

if (number != 0)if (number > 0)System.out.println("positive");elseSystem.out.println("negative");elseSystem.out.println("zero");

6262

Program demoProgram demo

ElsePrecedence.javaElsePrecedence.java

6464

if-else-if statementif-else-if statement

65

if (number == 0) {System.out.println("zero");

}else

If-else-if Consider

System.out.println("positive");}else { System.out.println("negative");}}

{ These braces aren’t needed

if (number > 0) {

Same results as previous segment – but this segment better expresses the meaning of what is going on

We can change the whitespace

of the code

66

Sorting three values For sorting values n1, n2, and n3 there are six possible

orderings n1 n2 n3 n1 n3 n2 n2 n1 n3 n2 n3 n1 n3 n1 n2 n3 n2 n1

Suppose s1, s2, s3 are to be a sorted version of n1, n2, and n3

67

Sorting three valuesif ((n1 <= n2) && (n2 <= n3)) { // n1 <= n2 <= n3

s1 = n1; s2 = n2; s3 = n3;}else if ((n1 <= n3) && (n3 <= n2)) { // n1 <= n3 <= n2

s1 = n1; s2 = n3; s3 = n2;}else if ((n2 <= n1) && (n1 <= n3)) { // n2 <= n1 <= n3

s1 = n2; s2 = n1; s3 = n3;}else if ((n2 <= n3) && (n3 <= n1)) { // n2 <= n3 <= n1

s1 = n2; s2 = n3; s3 = n1;}else if ((n3 <= n1) && (n1 <= n2)) { // n3 <= n1 <= n2

s1 = n3; s2 = n1; s3 = n2;}else { // n3 <= n2 <= n1

s1 = n3; s2 = n2; s3 = n1;}

6868

?: notation?: notation

69

Finding the minimum value Consider:

// z is to hold the minimum of x and yif ( x < y )

z = x;else

z = y;

Another way to do this:

z = (x<y) ? x : y;

Notice no braces!

70

The ?: notation Only works when both “cases” return a value!

Meaning when both “cases” are expressions Example: z = (x<y) ? x : y; Thus, you can’t put a print statement in there!

Can be difficult to read

System.out.println ((number != 0) ? ((number > 0) ? "positive“ : "negative") : "zero“);

if (number != 0)if (number > 0)

System.out.println("positive");else

System.out.println("negative");else

System.out.println("zero");

7171

A bit of humor…A bit of humor…

7272

switch statementswitch statement

73

Switch statement Software engineers often confronted with programming tasks

where required action depends on the values of integer expressions The if-else-if construct can be used

Separately compare the desired expression to a particular value If the expression and value are equal, then perform

the appropriate action

Because such programming tasks occur frequently Java includes a switch statement

The task is often more readable with the switch then with the if-else-if

74

A switch statement exampleif (a == ‘0’)

System.out.println (“zero”);else if (a == ‘1’)

System.out.println (“one”);else if (a == ‘2’)

System.out.println (“two”);else if (a == ‘3’)

System.out.println (“three”);else if (a == ‘4’)

System.out.println (“four”);else

System.out.println (“five+”);

switch (a) {case ‘0’:

System.out.println (“zero”);break;

case ‘1’:System.out.println (“one”);break;

case ‘2’:System.out.println (“two”);break;

case ‘3’:

System.out.println (“three”);break;

case ‘4’:

System.out.println (“four”);break;

default:System.out.println (“five+”);break;

}

76

Switch statement

switch ( SwitchExpression ) {

case CaseExpression1 :Action1 ;

case CaseExpression2 :Action2 ;

...

case CaseExpressionn :Actionn;

default :Actionn+1 ;

}

Constantintegral

expressionJavastatements

Integral expression tobe matched with a case

expression

77

Testing for vowel-nessswitch (ch) {

case 'a': case 'A':case 'e':case 'E':case 'i':case 'I':case 'o':case 'O':case 'u':case 'U':

System.out.println("vowel“);break;

default: System.out.println("not a vowel“);

}

78

Testing for vowel-ness

switch (ch) {case 'a': case 'A':case 'e': case 'E':case 'i': case 'I':case 'o': case 'O':case 'u': case 'U':

System.out.println("vowel“);break;

default: System.out.println("not a vowel“);

}

The break causes an exiting of the switch

Handles all of the other cases

79

A better way to format that switch statement

switch (ch) {case 'a':

// FALL THRUcase 'A':

// FALL THRUcase 'e':

// FALL THRUcase 'E':

// FALL THRUcase 'i':

// FALL THRUcase 'I':

// FALL THRU

...

80

Processing a request

System.out.print("Enter a number: ");int n1 = stdin.nextInt();

System.out.print("Enter another number: ");int n2 = stdin.nextInt();

System.out.print("Enter desired operator: ");char operator = stdin.nextLine().charAt(0);

switch (operator) {case '+' : System.out.println((n1 + n2)); break;case '-' : System.out.println(n1 - n2); break;case '*' : System.out.println(n1 * n2); break;case '/' : System.out.println(n1 / n2); break;default: System.out.println(“Illegal request“);

}

81

SurveySurvey

How many people feel they How many people feel they understand the switch statement?understand the switch statement?

8282

Biggest software errorsBiggest software errors Ariane 5 rocket explosion (1996)Ariane 5 rocket explosion (1996)

– Due to loss of precision converting 64-bit double to 16-bit intDue to loss of precision converting 64-bit double to 16-bit int Pentium division error (1994)Pentium division error (1994)

– Due to incomplete look-up table (like an array)Due to incomplete look-up table (like an array) Patriot-Scud missile error (1991)Patriot-Scud missile error (1991)

– Rounding error on the timeRounding error on the time– The missile did not intercept an incoming Scud missile, leaving 28 dead and 98 The missile did not intercept an incoming Scud missile, leaving 28 dead and 98

woundedwounded Mars Climate Orbiter (1999)Mars Climate Orbiter (1999)

– Onboard used metric units; ground computer used English unitsOnboard used metric units; ground computer used English units AT&T long distance (1990)AT&T long distance (1990)

– Wrong break statement in C codeWrong break statement in C code Therac-25, X-ray (1975-1987)Therac-25, X-ray (1975-1987)

– Badly designed software led to radiation overdose in chemotherapy patientsBadly designed software led to radiation overdose in chemotherapy patients NE US power blackout (2003)NE US power blackout (2003)

– Flaw in GE software contributed to itFlaw in GE software contributed to it

References: References: http://www5.in.tum.de/~huckle/bugse.htmlhttp://www5.in.tum.de/~huckle/bugse.html, , http://en.wikipedia.org/wiki/Computer_bughttp://en.wikipedia.org/wiki/Computer_bug, , http://http://www.cs.tau.ac.il/~nachumd/verify/horror.htmlwww.cs.tau.ac.il/~nachumd/verify/horror.html

8383

Object equalityObject equality

84

Testing variables for equality Consider

System.out.print("Enter an integer number: ");int n1 = stdin.nextInt();System.out.print("Enter another integer number: ");int n2 = stdin.nextInt();

if (n1 == n2) {System.out.println("Same");

}else {

System.out.println(“Different");}

What is the output if the user enters 88 and 3?

What is the output if the user enters 88 both times?

8585

Program DemoProgram Demo

IntEqualityIntEquality

86

Testing objects for equality Consider

String s1 = “pastel”;String s2 = s1;

if (s1 == s2) {System.out.println("Same");

}else {

System.out.println("Different");}

87

Testing objects for equality

Memory looks like

The comparison is between the references!

Thus, s1 and s2 are the same (they refer to the same object)

"pastel"s1

s2

88

Testing objects for equality Consider

System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();

if (s1 == s2) {System.out.println("Same");

}else {

System.out.println("Different");}

What is the output if the user enters "pastel" both times?

8989

Program DemoProgram Demo

StringEqualityStringEquality

90

Testing objects for equality When it is executed

System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();

Memory looks like

As a result no matter what is entered s1 and s2 are not the same They refer to different objects

"pastel"s1

"pastel"s2

91

Comparing strings for equality Consider:

String s = "hello";String t = "hello";System.out.println (s == t);

What gets printed? true

Consider:String u = new String("hello");String v = new String("hello");System.out.println (u == v);

What gets printed? false Huh?

These aren’t the exact same thing

9292

Program DemoProgram Demo

StringEquality2StringEquality2

93

Testing operators for equality Consider

System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();

if (s1.equals(s2)) {System.out.println("Same");

}else {

System.out.println("Different");}

Tests whether s1 and s2 represent the same object

Most classes have a method equals(). It compares the objects themselves, not the references.

9494

All your base are belong to All your base are belong to usus

Flash animationFlash animation Reference: http://en.wikipedia.org/wiki/All_your_base_are_belong_to_usReference: http://en.wikipedia.org/wiki/All_your_base_are_belong_to_us

9595

Short-circuit evaluationShort-circuit evaluation

96

Short-circuit evaluation The value of a logical expression can be known before all the

operands have been considered If left operand of && is false, then the value must be false If left operand of || is true, then the value must be true

Java uses these properties to make logical operations efficient Evaluates left operand before it evaluates right operand If the operator value is determined from the left operand,

then the right operand is not evaluated The operation is short-circuited

97

Short-circuit evaluation Short-circuit evaluation is useful when some property must

be true for some other expression to be evaluated

Suppose you are interested in knowing whether scoreSum divided by nbrScores is greater than value The condition can be evaluated only if nbrScores is

nonzero

The following expression correctly represents the condition (nbrScores != 0) && ((scoreSum / nbrScores) > value)

98

Short-circuit evaluation Assume we have a returnsFalse()

method from a ‘foo’ object It returns false And it prints “returnsFalse() called”

And a returnsTrue() method

Consider:if ( foo.returnsFalse() && foo.returnsTrue() ) {}if ( foo.returnsTrue() && foo.returnsFalse() ) {}if ( foo.returnsFalse() || foo.returnsTrue() ) {}if ( foo.returnsTrue() || foo.returnsFalse() ) {}

returnsFalse() called

returnsTrue() calledreturnsFalse() called

returnsFalse() calledreturnsTrue() called

returnsTrue() called

Output

99

Quick surveyQuick survey

How comfortable do you feel with How comfortable do you feel with if’s and switches?if’s and switches?

100100

BiologyBiology

PhysicsPhysics

InterdisciplinaryInterdisciplinary ChemistryChemistry MathematicsMathematics LiteratureLiterature

PeacePeace

HygieneHygiene EconomicsEconomics

MedicineMedicine

The 2002 Ig Nobel PrizesThe 2002 Ig Nobel Prizes““Courtship behavior of ostriches towards humans underCourtship behavior of ostriches towards humans under

farming conditions in Britain”farming conditions in Britain”

““Demonstration of the exponential decay law using beer Demonstration of the exponential decay law using beer

froth”froth”

A comprehensive study of human belly button lintA comprehensive study of human belly button lint

Creating a four-legged periodic tableCreating a four-legged periodic table

““Estimation of the surface area of African elephants”Estimation of the surface area of African elephants”

““The effects of pre-existing inappropriate highlighting on The effects of pre-existing inappropriate highlighting on

reading comprehension”reading comprehension”

For creating Bow-lingual, a computerized dog-to-human For creating Bow-lingual, a computerized dog-to-human

translation devicetranslation device

For creating a washing machine for cats and dogsFor creating a washing machine for cats and dogs

Enron et. al. for applying imaginary numbers to the Enron et. al. for applying imaginary numbers to the

business worldbusiness world

““(male) asymmetry in man in ancient sculpture”(male) asymmetry in man in ancient sculpture”