1.)
<span>((i <= n) && (a[i] == 0)) || (((i >= n) && (a[i-1] == 0))) </span>
<span>The expression will be true IF the first part is true, or if the first part is false and the second part is true. This is because || uses "short circuit" evaluation. If the first term is true, then the second term is *never even evaluated*. </span>
<span>For || the expression is true if *either* part is true, and for && the expression is true only if *both* parts are true. </span>
<span>a.) (i <= n) || (i >= n) </span>
<span>This means that either, or both, of these terms is true. This isn't sufficient to make the original term true. </span>
<span>b.) (a[i] == 0) && (a[i-1] == 0) </span>
<span>This means that both of these terms are true. We substitute. </span>
<span>((i <= n) && true) || (((i >= n) && true)) </span>
<span>Remember that && is true only if both parts are true. So if you have x && true, then the truth depends entirely on x. Thus x && true is the same as just x. The above predicate reduces to: </span>
<span>(i <= n) || (i >= n) </span>
<span>This is clearly always true. </span>
Answer:
If its any easy question, answer it yourself.
Explanation:
:)
I've included my code in the picture below. Best of luck.