53

George Boole More than 150 years ago, there was a mathematician named George Boole, who took statements and wrote them in a precise format, such that

Embed Size (px)

Citation preview

George BooleMore than 150 years ago,there was a mathematician named George Boole, who took statements and wrote them in a precise format, such that a statement is always true or false.

He founded a branch of mathematics called Boolean Algebra.

Statements that are either true or false are called Boolean statements. The conditions you used with selection and repetition back in Chapter 5 were all Boolean statements.

There is a boolean datatype named after George Boole.

What is a Boolean Statement?The sentence, statement, condition, whatever, must be true or false.

No questions, no ambiguities, no arguments.

The basis of processing data is the binary system of on and off, or 1 and 0, which certainly sounds a bunch like true or false.

Each of the following five statements is a Boolean statement:

A mile is longer than a kilometer.

July and August both have the same number of days.

A pound of feathers is lighter than a pound of lead.

The Moon is larger than the Sun.

New York City has more people than Baltimore.

English Sentence Boolean Statement T/F

A mile is longer than a kilometer.

Mile > Kilometer True

July and August have the same days.

JulDays == AugDays True

A pound of feathers is lighter than a pound of lead.

PoundF < PoundL False

The Moon is larger than the Sun.

MoonSize > SunSize False

New York City has more people than Baltimore.

NYPop > BaltPop True

Boolean Statement Examples

Sentences are not always so short and straight forward. Frequently there are multiple conditions in one statement. Special rules need to be followed to determine if the entire statement is true or false.

Consider the following sentences with compound conditions:

She is a computer science teacher and she is a math teacher.The number is odd or the number is even.Enter again if gender is not male or gender is not female.Employment requires a CPA and five years experience.The same sentences converted into Boolean statements are:

(She == CSTeacher) and (She == MathTeacher)

(Number % 2 == 1) or (Number % 2 == 0)

(Gender != ‘M’) or (Gender != ‘F’)

(CPA == ‘Y’) and (YrExp >= 5)

Logical OR ExampleConsider two young ladies who have a rather simplistic, and quite politically incorrect, view of judging potential dates. The first is Kathy who will date a guy if he is Good Looking OR drives a Nice Car. This chart shows her 4 possible cases:

Good Looking? Nice Car? Date Material?

Boolean OperatorsBoolean OR

A

TTFF

B

TFTF

A or B

TTTF

Logical AND ExampleSuzy is more picky than Kathy. Suzy will only date a guy if he BOTH Good Looking AND drives a Nice Car. This chart shows her 4 possible cases:

Good Looking? Nice Car? Date Material?

Boolean OperatorsBoolean AND

A

TTFF

B

TFTF

A and B

TFFF

Boolean OperatorsBoolean XOR

A

TTFF

B

TFTF

A xor B

FTTF

Boolean OperatorsBoolean NOT

A

TF

~A

FT

Boolean OperatorsBoolean NOT Continued

A

TTFF

B

TFTF

~A

FFTT

~B

FTFT

Venn Diagram #1The Boolean Algebra logical and ( * ) can be

demonstrated with Venn Diagrams, using intersection.

A intersect B also A and B also A * B also AB

Venn Diagram #2The Boolean Algebra logical or ( + ) can be

demonstrated with Venn Diagrams, using union.

A union B also A or B also A + B

Venn Diagram #3

The Boolean Algebra logical not( ~ )not A also ~A

This is the opposite of A.

Venn Diagram #4

The Boolean Algebra logical not( ~ )not B also ~B

This is the opposite of B.

Venn Diagram #5

not (A and B)~(A * B)

This is the opposite of (A and B).

Venn Diagram #6

not (A or B)~(A + B)

This is the opposite of (A or B).

Venn Diagram #7

not A and not B~A * ~B

This is identical to not(A or B).

Venn Diagram #8

not A or not B~A + ~B

This is identical to not(A and B).

DeMorgan’s Law

not(A and B) = not A or not B

not(A or B) = not A and not B

Tricky Venn DiagramsA and not (B) A or not(B)

A * ~B A + ~BStep 1 – Shade A

A B

Tricky Venn DiagramsA and not (B) A or not(B)

A * ~B A + ~BStep 2 – Shade ~B a different way

Tricky Venn DiagramA and not (B)

A * ~BAnswer: The part that is shaded twice.

Tricky Venn DiagramA or not (B)

A + ~BAnswer: Everything that is shaded.

// Java1001.java// This program demonstrates a boolean expression being used in an if statement.

public class Java1001{

public static void main(String args[]){

System.out.println("\nJAVA1001.JAVA\n");

int x = 10;

if (x == 10 )System.out.println("true");

elseSystem.out.println("false");

if (x == 5 )System.out.println("true");

elseSystem.out.println("false");

System.out.println();}

}

// Java1002.java// This program demonstrates that conditional statements have// true or false Boolean values and these values can be displayed.

public class Java1002{

public static void main(String args[]){

System.out.println("\nJAVA1002.JAVA\n");

int x =10;

System.out.println(x == 10);

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

}}

Output for the next 3 programs…

// Java1003.java// This program shows a boolean expression being used in a while statement.

public class Java1003{

public static void main (String args[]){

System.out.println("\nJAVA1003.JAVA\n");int gcf = 0;int attempt = 0;

while (gcf != 12){

attempt++;System.out.print("\nWhat is the GCF of 120 and 108? --> ");gcf = Expo.enterInt();

}

System.out.println("\nAnswered correctly after " + attempt + " Attempt(s).\n");

}}

// Java1004.java// This program introduces the <boolean> data type, which only has two// values, true or false. Boolean variables add readability to programs.

public class Java1004{

public static void main (String args[]){

System.out.println("\nJAVA1004.JAVA\n");int gcf;boolean correct = false;int attempt = 0;

while (!correct){

attempt++;System.out.print("\nWhat is the GCF of 120 and 108? --> ");gcf = Expo.enterInt();

if (gcf == 12) correct = true; else correct = false;

}

System.out.println("\nAnswered correctly after " + attempt + " Attempt(s).\n");

}}

// Java1005.java// This program executes in the same manner as Java1004.java.// The abbreviated Boolean assignment statement is used in place of the // longer if ... else syntax.

public class Java1005{

public static void main (String args[]){

System.out.println("\nJAVA1005.JAVA\n");int gcf;boolean correct = false;int attempt = 0;

while (!correct){

attempt++;System.out.print("\nWhat is the GCF of 120 and 108? --> ");gcf = Expo.enterInt();

correct = (gcf == 12);}

System.out.println("\nAnswered correctly after " + attempt + " Attempt(s).\n");

}}

Think of it this way…Variable Expression Assignment

int x; 23 + 45 x = 23 + 45;

double y; 66.23 - 8.11 y = 66.23 - 8.11;

String name; “John” + “Smith” name = “John”+”Smith”;

boolean pass; grade >= 70 pass = grade >= 70;

Java uses || to indicate a logical OR.

Java uses && to indicate a logical AND.

Java uses ! to indicate a logical NOT.

Java uses != for not equals, but it can also be used to indicate a logical XOR.

Java Logical Operators

// Java1006.java// This program demonstrates compound decisions with the logical or ( || ) // operator.

public class Java1006{

public static void main (String args[]){

System.out.println("Java1006\n");int education; // years of educationint experience; // years of work experienceSystem.out.print("Enter years of education ===>> ");education = Expo.enterInt();System.out.print("Enter years of experience ===>> ");experience = Expo.enterInt();System.out.println();

if (education >= 16 || experience >= 5)System.out.println("You are hired!");

elseSystem.out.println("You are not qualified.");

System.out.println();}

}

NICE BOSS

// Java1007.java// This program demonstrates compound decisions with the logical and ( && )// operator.

public class Java1007{

public static void main (String args[]){

System.out.println("Java1007\n");int education; // years of educationint experience; // years of work experienceSystem.out.print("Enter years of education ===>> ");education = Expo.enterInt();System.out.print("Enter years of experience ===>> ");experience = Expo.enterInt();System.out.println();

if (education >= 16 && experience >= 5)System.out.println("You are hired!");

elseSystem.out.println("You are not qualified.");

System.out.println();}

}

PICKY BOSS

// Java1008.java// This program demonstrates compound decisions with not equals ( != ) operator.// != can be used to implement XOR (eXclusive OR).

public class Java1008{

public static void main (String args[]){

System.out.println("Java1008\n");int education; // years of educationint experience; // years of work experienceSystem.out.print("Enter years of education ===>> ");education = Expo.enterInt();System.out.print("Enter years of experience ===>> ");experience = Expo.enterInt();System.out.println();

if (education >= 16 != experience >= 5)System.out.println("You are hired!");

elseSystem.out.println("You are not qualified.");

System.out.println();}

}

CHEAP BOSS

// Java1009.java// This program demonstrates the logical not ( ! ) operator.

public class Java1009{

public static void main (String args[]){

System.out.println("Java1009\n");int education; // years of educationint experience; // years of work experienceSystem.out.print("Enter years of education ===>> ");education = Expo.enterInt();System.out.print("Enter years of experience ===>> ");experience = Expo.enterInt();System.out.println();

if ( !(education >= 16 || experience >= 5) )System.out.println("You are hired!");

elseSystem.out.println("You are not qualified.");

System.out.println();}

}

CRAZY BOSS

// Java1010.java// This program determines if an age is between 16 and 89.

public class Java1010{

public static void main (String args[]){

System.out.println("Java1010\n");int age;System.out.print("How old are you? ===>> ");age = Expo.enterInt();System.out.println();

if (age >= 16 && age <= 89)System.out.println("You are the proper age to drive.");

elseSystem.out.println("You are not the proper age to drive.");

System.out.println();}

}

// Java1011.java// This program shows ranges, nested two-way selection,// and multi-way selection all at the same time.// This is how you have to do multi-way selection with real numbers.

public class Java1011{

public static void main (String args[]){

System.out.println("Java1011\n");double gpa;System.out.print("What is your gpa ===>> ");gpa = Expo.enterDouble();System.out.println();

if (gpa >= 3.9)System.out.println("Summa Cum Laude");

else if (gpa >= 3.75)System.out.println("Magna Cum Laude");

else if (gpa >= 3.5)System.out.println("Cum Laude");

else if (gpa >= 2.0)System.out.println("Graduate without honors");

elseSystem.out.println("Will not graduate");

System.out.println();}

}

In the previous program many if…else statementswere used to simulate multi-way selection.

These statements are necessary because theswitch statement has 2 limitations:

a. switch does not work with rangesb. switch only works with ordinal data types

An ordinal data type is one where every value has a definite next value and a definite previous value.

int and char are ordinal data types. double and String are NOT.

Why didn’t you use switch?