Title: Examples
1Examples
- Example Problems,
- their Algorithms, and
- their C Source Code.
2Problem Interest
- Compute interest that is compounded annually.
- Write an interactive program that allows the user
to calculate the interest accrued in a savings
account that is compounded annually over a period
of years. - The user must supply the principal amount,
interest rate and the number of years . - Without the break, the code flows into the next
case. This is almost never what you want.
3Algorithm Interest
- Print explanation of the program
- Get principal from user.
- Get interest rate from user.
- Get number of years from user.
- For the number of years specified
- Calculate the amount in the account at the end of
the year. (amount amount rate) - interest accrued amount - principal
- Print report.
4Interest Design the Report
- Interest rate 7.0000
- Period 20 years
- Principal at start of period 1000.00
- Interest accrued 2869.68
Total amount at end of period 3869.68
5Interest, programmed incrementally 1
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n)
6First Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years.
7Interest, programmed incrementally 2
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate
- int years
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get input from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
8Second Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- principal 1000.000000, rate 0.070000, years
20
9Interest, programmed incrementally 3
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get input from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
10Interest, programmed incrementally 3
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt 1 I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- printf (\nprincipal f, rate f, years
d\n, principal, rate, years ) - printf (amount f, interest f\n)
-
-
11Third Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- principal 1000.000000, rate 0.070000, years
20 - amount 1070.000000, interest 70.000000
12Interest, programmed incrementally 4
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get input from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
13Interest, programmed incrementally 4
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt 2 I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- printf (\nprincipal f, rate f, years
d\n, principal, rate, years ) - printf (amount f, interest f\n)
-
-
14Fourth Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- principal 1000.000000, rate 0.070000, years
20 - amount 1144.900000, interest 144.900000
15Interest, programmed incrementally 5
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get input from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
16Interest, programmed incrementally 5
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt years I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- printf (\nprincipal f, rate f, years
d\n, principal, rate, years ) - printf (amount f, interest f\n)
-
-
17Fifth Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- principal 1000.000000, rate 0.070000, years
20 - amount 3869.680000, interest 2869.680000
18Source code in C Interest
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get input from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
19Source code in C Interest
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt years I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- / Print report /
- printf (Interest rate .4f \n, 100
rate ) - printf ( Period d years\n\n,
years ) - printf ( Principal at start of period
9.2f, principal ) - printf ( Interest accrued
9.2f, interest ) - printf (Total amount at end of period 9.2f,
amount) -
-
20Final Output Interest
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- Interest rate 7.0000
- Period 20 years
- Principal at start of period 1000.00
- Interest accrued 2869.68
- Total amount at end of period 3869.68
21Improvements to Interest
- We now have a working program that we are
convinced that is correct and solves the problem. - Our program is not robust, since none of the
input provided by the user is checked for
validity. - We need to decide what is valid.
22Improvements to Interest
- What range of values will we allow for the
principal ?
Positive values less than or equal to 100,000. - How about the interest rate ? Positive
values less than 1. - And the numbers of years ? Years
between 1 and 100.
23Improved Interest 1
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get principal from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- / Validate principal amount /
- while ( principal lt 0.0 principal gt 100000.0
)
24Improved Interest 1
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
- printf (Enter the number of years )
- scanf (d, years)
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt years I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- / Print report /
- printf (Interest rate .4f \n, 100
rate ) - printf ( Period d years\n\n,
years ) - printf ( Principal at start of period
9.2f, principal ) - printf ( Interest accrued
9.2f, interest ) - printf (Total amount at end of period 9.2f,
amount)
25 Interest Testing Principal Validity Check
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 100000.01
- The principal amount must be between 0 and
100000. - Enter the principal amount -.01
- The principal amount must be between 0 and
100000. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- Interest rate 7.0000
- Period 20 years
- Principal at start of period 1000.00
- Interest accrued 2869.68
- Total amount at end of period 3869.68
26Improved Interest 2
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get valid principal amount from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- while ( principal lt 0.0 principal gt 100000.0
) -
27Improved Interest 2
- / Get valid interest rate from user /
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
- while ( rate lt 0.0 rate gt 1.0 )
-
- printf (The interest rate must be between
0 and 1\n) - printf (Enter the interest rate as a
decimal (for 7 enter .07) ) - scanf (f, rate)
-
-
- printf (Enter the number of years )
- scanf (d, years)
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt years I )
-
- amount amount rate
-
28Improved Interest 2
- / Calculate accrued interest /
- interest amount - principal
- / Print report /
- printf (Interest rate .4f \n, 100
rate ) - printf ( Period d years\n\n,
years ) - printf ( Principal at start of period
9.2f, principal ) - printf ( Interest accrued
9.2f, interest ) - printf (Total amount at end of period 9.2f,
amount) -
-
29 Interest Testing Interest Rate Validity Check
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) 1.0001 - The interest rate must be between 0 and 1.
- Enter the interest rate as a decimal (for 7
enter .07) -.0001 - The interest rate must be between 0 and 1.
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 20
- Interest rate 7.0000
- Period 20 years
- Principal at start of period 1000.00
- Interest accrued 2869.68
- Total amount at end of period 3869.68
30Improved Interest 3
- / Filename interest.c
- Author Sue Bogar
- Date written 11/14//99
- Description This program computes the
interest accrued in an account - that compounds interest
annually.
/ - include ltstdio.hgt
- main ( )
-
- float principal, rate, amount, interest
- int years, I
- / Print Instructions /
- printf (This program computes the interest
accrued in an account) - printf (that compounds interest annually. You
will need to enter the) - printf (amount of the principal, the interest
rate and the number of years.\n\n) - / Get valid principal amount from user /
- printf (Enter the principal amount )
- scanf (f, principal)
- while ( principal lt 0.0 principal gt 100000.0
) -
31Improved Interest 3
- / Get valid interest rate from user /
- printf (Enter the interest rate as a decimal
(for 7 enter .07) ) - scanf (f, rate)
- while ( rate lt 0.0 rate gt 1.0 )
-
- printf (The interest rate must be between
0 and 1\n) - printf (Enter the interest rate as a
decimal (for 7 enter .07) ) - scanf (f, rate)
-
-
- / Get valid number of years from user /
- printf (Enter the number of years )
- scanf (d, years)
- while ( years lt 1 years gt 100 )
-
- printf (The number of years must be
between 1 and 100, inclusive\n) - printf (Enter the number of years )
- scanf (d, years)
-
32Improved Interest 3
- / Save the original principal amount by varying
another variable, amount / - amount principal
- / Calculate total amount in the account after
the specified number of years / - for ( I 0 I lt years I )
-
- amount amount rate
-
- / Calculate accrued interest /
- interest amount - principal
- / Print report /
- printf (Interest rate .4f \n, 100
rate ) - printf ( Period d years\n\n,
years ) - printf ( Principal at start of period
9.2f, principal ) - printf ( Interest accrued
9.2f, interest ) - printf (Total amount at end of period 9.2f,
amount) -
-
33 Interest Testing Years Validity Check
- This program computes the interest accrued in an
account - that compounds interest annually. You will need
to enter the - amount of the principal, the interest rate and
the number of years. - Enter the principal amount 1000.00
- Enter the interest rate as a decimal (for 7
enter .07) .07 - Enter the number of years 101
- The number of years must be between 1 and 100,
inclusive. - Enter the number of years 0
- The number of years must be between 1 and 100,
inclusive. - Enter the number of years 20
- Interest rate 7.0000
- Period 20 years
- Principal at start of period 1000.00
- Interest accrued 2869.68
- Total amount at end of period 3869.68
34Problem Combinatorics
- Combinatorics is the art of enumerating
combinations and permutations. - Find and count all positive integers with three
digits or less whose digits add up to a number
specified by the user. - What constraints should we put on the sum of the
digits?
35CombinatoricsThinking through the problem
- The smallest number is 0, so the input should be
0 or greater. - The largest number is 999, so the input should be
27 (9 9 9) or less. - We could have a single for loop that goes through
the integers from 0 to 999. - For each integer, well need to break the integer
up into its individual digits, add them up and
compare that sum to num.
36CombinatoricsThinking through the problem
- Weve already learned the trick used to separate
an integer into its digits. It involved using
integer division and modulus within a loop. Each
iteration of the loop stripped one digit off of
the integer. - So within the for loop, well need to have
another loop that separates the integer into its
digits, sums them, compares the sum to num and
prints and counts the integer if they are equal. - This approach will solve the problem, but it
takes a lot of work at each step and will take a
long time. How many steps ? 1000 3 - There must be a quicker and easier way.
37CombinatoricsThinking through the problem
- Instead of working with the integers 0 through
999, we could work with each of the digits
instead. - We could vary just one of the digits at a time
using nested for loops, like this 0 0 0, 0
0 1, 0 0 9, 0 1 0, 9 9 9 - This will eliminate the need to split the integer
into its digits. - Each for loop will control one of the digits.
38CombinatoricsThinking through the problem
- for ( I 0 I lt 10 I)
-
- for ( j 0 j lt 10 j)
-
- for ( k 0 k lt 10 k)
-
- if ( I j k num )
-
- printf ( ddd\n, I, j, k )
- counter
-
-
-
-
- How long does this take ? 1000 ( 10 10 10 )
39Algorithm Combinatorics
- Print explanation
- Get num from user (0 lt num lt 27)
- Validate value of num
- Vary 1 digit at a time from the digit sequence
000 to the digit sequence 999 - If the sum of the digits is equal to num, print
the 3 digits (or less) with no space between
them. Dont print leading 0s. - Increment the counter.
- Print the count
40CombinatoricsIncremental Programming
- Write the explanation, get it running
- Get num from user and validate it, get this
running. - Write the nested for loops that will print all
three digits when they sum to num. (has leading
0s) and print the count. Dont forget to
initialize count to 0 before beginning. Get this
running. - Modify the code to eliminate leading 0s