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 && f
f || t && !f
f == !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 > 2
2 == 4
3 >= 2 != f
3 > f
t && 3 + 5 * 8 == 43
3 + t != f
Write 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).