March 22, 2018
Deadlines: Part I and Part II are required to be able to turn in Project #3, presented in Part III.
Copy-and-paste the following code in the Main method of a new project:
/*
* We have two boolean values: true and false.
* We can use the constant "true" and "false",
* we can also declare constants with the same value,
* but a shorter name:
*/
const bool t = true;
const bool f = false;
Console.WriteLine("Conjonction (and, &&) truth table:"
+ "\n\n\t" + t+ "\t" + f
+ "\n" + t+ "\t" + (t && t)+ "\t" + (t && f)
+ "\n" + f+ "\t" + (f && t)+ "\t" + (f && f)
+ "\n\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
Console.WriteLine("Negation (not, !) truth table:"
+ "\n\n\t" + t+ "\t" + f
+ "\n\t" + (!t)+ "\t" + (!f)
+ "\n\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");Compile and execute it.
Then, write the code that will display on the screen the truth tables for the binary operators disjunction (or, ||), identity (equality, ==) and difference (inequality, !=).
Normally, using the find-and-replace feature of VS should make this task easy and fast.
If you look at https://docs.microsoft.com/en-us/cpp/c-language/precedence-and-order-of-evaluation, you will see that
! |
is evaluated before |
*, /, and % |
which are evaluated before |
+ and - |
which are evaluated before |
<, >, <=, and >= |
which are evaluated before |
== and != |
which are evaluated before |
&& |
which is evaluated before |
|| |
which comes last |
and that within those groups, operations are evaluated from left to right.
So that, for instance, ! true || false && 3 * 2 == 5 will be evaluated as
! true || false && 3 * 2 == 6 |
⇒ | false || false && 3 * 2 == 6 |
false || false && 3 * 2 == 6 |
⇒ | false || false && 6 == 6 |
false || false && 6 == 6 |
⇒ | false || false && true |
false || false && true |
⇒ | false || false |
false || false |
⇒ | false |
Note that an expression like !3 > 2 doesn’t make any sense: C# would try to take the negation of 3, but you can’t negate an integer! Along the same way, an expression like false * true doesn’t make any sense: you can’t multiply booleans! Similarly, 3 % false will cause an error: can you decide why?
Evaluate the following expressions (where t stands for true, and f for false):
t && f || t!t && ff || t && !ff == !t || f!(t || f || t && t)!(t || f) && (t && !f)!t || f && (t && !f)t != !(f || t)For each of the following expression, decide if they are “legal” or not. If they are, give the result of their evaluation.
3 > 22 == 43 >= 2 != f3 > ft && 3 + 5 * 8 == 433 + t != fWrite a program that
if statement, display on the screen “You guessed correctly” if number entered by the user is your favorite number.if statement that displays on the screen “Try a lower value!” if the number entered by the user is strictly greater than your favorite number.if statement that displays on the screen “Try a greater value!” if the number entered by the user is strictly lower than your favorite number.if statement that displays on the screen “You found a multiple of my favorite number!” if the number entered by the user is a multiple of your favorite number, but different from it.This lab’s “Pushing Further” combines Part 1 and our previous study of static class members. The goal is to design a static class that will be used to return truth tables as string.
static class TruthTable, add two private constants for the two boolean values. No need to declare them static: a const attribute of a class is always static!And.Main method, call your method, using TruthTable.And(), and display on the screen the string it returned.if, if-else, or switch, to do so. Have a look at the documentation (for instance, https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/if-else for if-else, https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch for switch).