Comp 1671
Solutions to homework5/review

From text, chapter 5
10. sum = 0;
    count = 0;
    while (count < 10)
    {
        cin >> num;
        sum = sum + num;
        count++;
    }
 
11.  output is:
     11 18 25

13.  a. 18
     b. 14
     c. false - the program would compile, but when we run it, it goes
        into an infinite loop

17. a. *
    b. an infinite loop, it outputs * forever
    c. an infinite loop, it outputs * forever
    d. ****   (4 stars)
    e. ****** (6 stars)
    f. ***    (3 stars)

18. int i;
    int sum(0);
    for (i = 1; i<= 100; i++)
        if (i%3==0)
            sum+=i; 

22.
#include <iostream>
#include <iomanip>
using namespace std;
const int N=2137;

int main()
{
    int a, b, c, d, i;
    c = 0; // initialize c!!

    a = 3;
    b = 5;
    c = c + d;
    // N = a + n;  Not allowed to store in a const variable, and n is undeclared
    for (i= 3; i <= N; i++)
    {
        cout << setw(5) << i;
        i = i + 1;   // probably a logic error, increment is already done
    }
    return 0;
}
    
30a. outputs:
     1  2  3  4  5
     2  4  6  8 10
     3  6  9 12 15
     4  8 12 16 20
     5 10 15 20 25
30b. 1 1 1 1 1
     2 2 2 2 2
     3 3 3 3 3
     4 4 4 4 4
     5 5 5 5 5
30c. outputs the triangle
     2 3 4 5
     3 4 5
     4 5
     5
30d. outputs the triangle
     1
     1 2
     1 2 3
     1 2 3 4
     1 2 3 4 5
30e. outputs the integers from 1 to 100, 10 per line
30f. outputs
             1
            121
           12321
          1234321
         123454321
        12345654321
       1234567654321
      123456787654321
     12345678987654321

Chapter 6 problems:
1. a. false (you also need a #include statement)
   b. true
   c. true
   d. true
   e. false

5. a. 4
   b. 26
   c. 10 4 0
   d. 0
  
Review problems:

1.  1101101, 1101110, 1101111, 1110000, 1110001, 1110010, 1110011, 1110100,
    1110101, 1110110, 1110111

2.  Answers will vary, but your partner should come up with your original
    number

3.  Legal:  money, humuhumunukunuku, Take_2, i, Index
    Illegal: 2D, joe@moo.com, happy-day, under cover, xRay!

4a. cin >> num_reps;
4b. total_wealth *=2;
    or total_wealth = total_wealth * 2;
    or total_wealth = total_wealth + total_wealth;
    or total_wealth += total_wealth;
    to name a few.
4d. (sorry for the wacky numbering)
    if (x < 0)
        y = x*x+4;
    else if (0 <= x && x <= 2)
        y = 5;
    else
        y = 1/(x+3);
4e. float sum=0;  // running total
    int i;        // counter
    float num;    // user inputs this number
    for (i=0; i<10; i++)
    {
       cout << "Enter a number: "; 
       cin >> num;
       sum += num;
    }
    cout << "Total is " << sum;
4f. 
    int num; // user inputs this number
    int even_total(0);  // running total of even entries
    int odd_total(0);  // running total of odd entries
    do {
        cout << "Please enter number (-1 to quit): ";
        cin >> num;
        if (num >= 0) {
            if (num%2 == 0)
                even_total += num;
            else
                odd_total += num;
        }
    } while (num >= 0);
    cout << "Even total: " << even_total << endl;
    cout << "Odd total: " << odd_total << endl;

5.
   
6.  answers will vary.

7.  for (counter = 0; counter < 100; counter+=2)
        cout << counter; 
    (outputs the even integers from 0 to 98)

8.  (again, sorry for the wacky order)
    a. 4
    b. 5
    d. duh, c is never incremented, so although the loop is executed 101 times,
       c remains 0 throughout
    c. 100

9.  No.  Consider the expression in the "if" statement.  The second part of
    the && is (1/(j+1)) > -1).  If this expression is evaluated, there will
    be a divide by zero (since j is -1).  But now consider the first part
    of the expression, j>0.  This is false, and so by short-circuit evaluation
    (see p. 155), the result of the && is definitely false.  The second part
    of the expression (the dangerous part) is never evaluated.

10. Yikes, this code contains the nasty error of = instead of ==.
    the expression in the if statement (x=2) is an assignment statement,
    which is executed (the number 2 is stored in x), and evaluted to true.
    Thus, we output 2*x, or 4.

11. First notice that x>3 is false, and (x*y>10) is true, so the expression
    in the first if evaluates to true.  We proceed to the next if.
    (x-y < 0) is true, so !(x-y<0) is false, so we don't need to evaluate
    the second part of the && expression - the whole expression is false no
    matter what.  Thus, we execute the "else" statement immediately following
    the second if.  We execute cout << --x-y;
    Now we look up in the operator precedence chart whether -- or - occurs
    first, and we have (--x)-y
    We execute --x which reduces the value in x to 2, and itself also takes
    a value of 2.  Finally, we subtract y (which is 4), for a final result of
    output of -2.

12. if (Value == 1 || Value ==2)
        cout << 2*Value;
    else if (Value ==3 || Value == 4)
        cout << 3*Value;
    else
        cout << 4*Value;

13.	a *= 2*b + c  is equivalent to a = a * (2*b + c)
	this can also be written as a = 2*a*b + a*c

14.	salary *= 1.02 + bonus;
	note: salary * 1.02 + salary*bonus is equivalent to salary*(1.02+bonus)

15. 	8.2 2.2 11
	standard calculation for the statement num2 *= 2*i + num1 (no funny
	stuff)
	since i, j are integers i/j is an integer division. i/j is 0.