|
Suppose we wanted the following code instead.
What condition would have to be used in the
if
statement? We want the same result as before, but the
if statement is to
be constructed differently.
if (________________)
rate = 0.7;
else
rate = 0.8;
Now draw a flowchart that will include the
two types of customers. First test if
t == 'r'.
For both the true (residential) and the false (commercial) side of that
condition, we must add the units condition of
u <= 200? Lastly
use the Table to determine the rates for each of the four instances.


Next, convert the flowchart into code.
A sample program is listed on the right.
|
if ( u > 200)
rate = 0.7;
else
rate = 0.8;
#include <stdio.h>
int main(void)
{
int u = 0;
char prop_type;
double rate;
printf("Enter
the property type: r-residential, c- commercial: \n");
scanf_s("
%c", &prop_type, sizeof(char));
printf("Enter
the unit used: \n");
scanf_s("%d",
&u, sizeof(int));
if(prop_type
== 'r')
{
if (u > 200)
{
rate = 0.7;
printf("Your rate is %.2f\n", rate);
}
else
{
rate = 0.8;
printf("Your rate is %.2f\n", rate);
}
}
if(prop_type == 'c')
{
if (u > 200)
{
rate = 0.3;
printf("Your rate is %.2f\n", rate);
}
else
{
rate = 0.6;
printf("Your rate is %.2f\n", rate);
}
}
return
0;
}




|
| |
|
|
Now draw a flowchart for the same logic,
but instead of dividing the logic first by the type of customer, divide
it first by the units consumed. Start with
u <= 200,
then on both sides of the flowchart test for
t == 'r'. Complete
the flowchart and write the code for the flowchart.


|
#include <stdio.h>
int main(void)
{
int u = 0;
char prop_type;
double rate;
printf("Enter
the unit used: \n");
scanf_s("%d",
&u, sizeof(int));
printf("Enter
the property type: r-residential, c-commercial: \n");
scanf_s("
%c", &prop_type, sizeof(char));
if(u > 200)
{
// take note the uses
of == instead of =
if (prop_type == 'r')
{
rate = 0.7;
printf("Your residential rate is %.2f\n", rate);
}
else
{
rate = 0.3;
printf("Your commercial rate is %.2f\n", rate);
}
}
else
{
if (prop_type == 'r')
{
rate = 0.8;
printf("Your residential rate is %.2f\n", rate);
}
else
{
rate = 0.6;
printf("Your commercial rate is %.2f\n", rate);
}
}
return 0;
}
A
sample input and output shown below.
|
|
|
| |
|
-
We will read in three integers:
a,
b
and
c. We want to construct the
logic so that, no matter how these numbers were provided by the
user, the output will always be the three numbers printed in order.
For example, if we read in
40,
20,
60 into
a,
b and
c
respectively, then our logic would print
b,
a and
c
in that order. This will give an output of
20,
40 and
60.
Or if we read in
70,
10
and
60, then the output would be
b,
c
and
a in that order. This will give
an output of
10,
60
and
70.
-
If a is greater than
b and b
is greater than c, is
a greater than
c?
-
Is there any variable that we can say is the largest?
-
Is there any variable that we can say is the smallest?
-
If a is greater than
b and c
is greater than b, is
a greater than
c?
-
Is there any variable that we can say is the largest?
-
Is there any variable that we can say is the smallest?
|
-
Yes.
a > b, b > c so a > c.
-
Yes,
there are.
-
Yes,
there are.
-
May
be or may be not. The possibilities are a > c, a < c or a == c.
-
May
be or may be not.
-
Yes.
|
| |
|
|
Some part of the solution will be done for
you and please study it carefully. To begin developing this logic, draw
a partial flowchart that starts with the comparison of
a > b?.
On its true side, there is another decision diamond that compares
b > c?
Also, print the order of the three variables for the case when it can
be determined.

|
| |
|
|
If
a
is greater than
b
and
b is greater than
c,
then we know that
a is the largest,
followed by
b and last by
c.
On the false side of
b > c?, which variable do we know
for sure is the largest or the smallest? Add an appropriate diamond
there and show a
printf()
on both sides of the diamond.
On the false side of
b > c?,
we know that
a
is greater than
b and
c
is greater than (or equal to)
b.
Since
b is the smallest, we need a diamond
to determine the relationship between
a
and
c. On the false side of that diamond,
c is the largest,
a
is next and
b is the smallest.
On the true side of it, we have the same order, but the
a
and
c are switched.

|
| |
|
|
On the false side of
a > b?,
add a diamond that checks
b > c?. Then show one
printf()
on the correct side of the diamond that prints the variables in order
without requiring an additional diamond.

|
| |
|
|
Finally, complete the flowchart by adding
an
a > c?
diamond on the true side.

|
| |
|
-
If a = 5,
b = 10 and c
= 3, through how many decisions would the logic flow? Convert
this into code snippet.
|
a > b? is false, b > c? is true and
a > c? is true. So the answer is 3. From the flowchart we can build
a code snippet as shown below.
if(a < b)
if(b > c)
printf("The result:
%d %d %d\n", a, b, c);
else if(a
> c)
printf("The result:
%d %d %d\n", a, c, b);
else
printf("The result:
%d %d %d\n", c, a, b);
else if(b > c)
if(a > c)
printf("The result:
%d %d %d\n", b, a, c);
else
printf("The result:
%d %d %d\n", b, c, a);
else
printf("The result:
%d %d %d\n", c, b, a);
|
| |
|
-
Let us reconstruct the same logic differently.
For the first diamond, use a > c?. For both sides of that diamond,
add an a > b? diamond. Show two places where the order of the variables
can be determined without requiring any other decision diamonds.
So, if a is greater than c and b is greater than a, then we know
that b is the largest and c is smallest. On the left side of the
flowchart, c is greater than a and a is greater than b, hence, the
order of the variables is c, a, b. A portion of the flowchart is
shown below.

|
| |
|
|
Add
b > c?
at two places in the flowchart and complete it.

|
| |
|
|
|
-
The following data are six sets of values
of
a,
b
and
c.
For each problem, label the value of each decision (true,
false
or
N/A).
Also, write the order of the variables as they will be printed.
The first one is done for you. You may want to refer to the Tutorial
in
Module 3 for related information.
Problem
|
a
|
b
|
c
|
a > c
|
a > b
|
b > c
|
Variables’ order
|
|
1
|
4
|
1
|
5
|
F
|
T
|
F
|
c, a, b
|
|
2
|
8
|
6
|
5
|
|
|
|
|
|
3
|
2
|
7
|
1
|
|
|
|
|
|
4
|
5
|
2
|
4
|
|
|
|
|
|
5
|
3
|
8
|
9
|
|
|
|
|
|
6
|
5
|
8
|
6
|
|
|
|
|
|
Table 4
|
|
Problem
|
a
|
b
|
c
|
a > c
|
a > b
|
b > c
|
Variables’ order
|
|
1
|
4
|
1
|
5
|
F
|
T
|
F
|
c, a, b
|
|
2
|
8
|
6
|
5
|
T
|
T
|
T
|
a, b, c
|
|
3
|
2
|
7
|
1
|
T
|
F
|
T
|
b, a, c
|
|
4
|
5
|
2
|
4
|
T
|
T
|
F
|
a, c, b
|
|
5
|
3
|
8
|
9
|
F
|
F
|
F
|
c, b, a
|
|
6
|
5
|
8
|
6
|
F
|
F
|
T
|
b, c, a
|
|
Table 4
|
|
| |
|
-
Next, let us combine conditions by using
the logical AND,
OR and NOT
operators. The operator for AND is
&&, for OR is || and for NOT is ! For
example, (x == 1) || (x == 2) is true only if x is equal to 1 or
2. Likewise, the expression (x == 1) && (y == 3) is true only if
x is equal to 1 and y is equal to 3. Complete the following chart.
Notice that when one condition is false and the other is true, the
result of ANDing them becomes false
because both conditions must be true for the result to be true.
However, when ORing them, only one
has to be true for the outcome to be true.
Condition1
|
Condition2
|
Condition1 &&
Condition2
|
Condition1 ||
Condition2
|
|
F
|
F
|
|
|
|
F
|
T
|
F
|
T
|
|
T
|
F
|
|
|
|
T
|
T
|
|
|
|
Table 5
|
|
Condition1
|
Condition2
|
Condition1 &&
Condition2
|
Condition1 ||
Condition2
|
|
F
|
F
|
F
|
F
|
|
F
|
T
|
F
|
T
|
|
T
|
F
|
F
|
T
|
|
T
|
T
|
T
|
T
|
|
Table 5
|
|
| |
|
-
The condition
!(x == 1)
is true as long as
x
is not equal to
1.
The
! reverses the logic. It can
also be expressed as
x != 1. If a condition is true,
then
NOT’ing
it makes it false and if it is false, then
NOT’ing
it makes it true. Similar to the table above, show the two-entry
table for
Condition1,
which has the values of
F and
T,
and the
NOT
of
Condition1.
Condition1
|
!Condition1
|
|
T
|
|
|
F
|
|
|
Table 6
|
|
Condition1
|
!Condition1
|
|
T
|
F
|
|
F
|
T
|
|
Table 6
|
|
| |
|
-
Complete the truth table for this chart
and combine the three kinds of logic. Find the
NOTs
of both conditions and then
AND
them.
Cond1
|
Cond2
|
!Cond1
|
!Cond2
|
(!Cond1) &&
(!Cond2)
|
|
F
|
F
|
|
|
|
|
F
|
T
|
T
|
F
|
F
|
|
T
|
F
|
|
|
|
|
T
|
T
|
|
|
|
|
Table 7
|
|
Cond1
|
Cond2
|
!Cond1
|
!Cond2
|
(!Cond1) &&
(!Cond2)
|
|
F
|
F
|
T
|
T
|
T
|
|
F
|
T
|
T
|
F
|
F
|
|
T
|
| |