[email protected] | 1e1f6af | 2009-04-03 03:26:46 | [diff] [blame] | 1 | /* |
| 2 | * methods/iterate.c |
| 3 | * |
| 4 | * Calculate the sum of a given range of integer numbers. |
| 5 | * |
| 6 | * This particular method of implementation works by way of brute force, |
| 7 | * i.e. it iterates over the entire range while adding the numbers to finally |
| 8 | * get the total sum. As a positive side effect, we're able to easily detect |
| 9 | * overflows, i.e. situations in which the sum would exceed the capacity |
| 10 | * of an integer variable. |
| 11 | * |
| 12 | */ |
| 13 | |
| 14 | #include <stdio.h> |
| 15 | #include <stdlib.h> |
| 16 | #include "iterate.h" |
| 17 | |
| 18 | |
| 19 | int iterate_get_sum (int min, int max) |
| 20 | { |
| 21 | int i, total; |
| 22 | |
| 23 | total = 0; |
| 24 | |
| 25 | /* This is where we loop over each number in the range, including |
| 26 | both the minimum and the maximum number. */ |
| 27 | |
| 28 | for (i = min; i <= max; i++) |
| 29 | { |
| 30 | /* We can detect an overflow by checking whether the new |
| 31 | sum would become negative. */ |
| 32 | |
| 33 | if (total + i < total) |
| 34 | { |
| 35 | printf ("Error: sum too large!\n"); |
| 36 | exit (1); |
| 37 | } |
| 38 | |
| 39 | /* Everything seems to fit into an int, so continue adding. */ |
| 40 | |
| 41 | total += i; |
| 42 | } |
| 43 | |
| 44 | return total; |
| 45 | } |