Find a number out of a given Integer array. It can return the closest, smaller and larger number to the integer requested.
find_number.cpp@8:815f084feb19, 2017-12-21 (annotated)
- Committer:
- O_Shovah
- Date:
- Thu Dec 21 13:01:31 2017 +0000
- Revision:
- 8:815f084feb19
- Parent:
- 7:2b1e34741392
Changed array cell designator.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
O_Shovah | 2:450e31ab4a55 | 1 | /** |
O_Shovah | 2:450e31ab4a55 | 2 | * Includes |
O_Shovah | 2:450e31ab4a55 | 3 | */ |
O_Shovah | 2:450e31ab4a55 | 4 | #include "find_number.h" |
O_Shovah | 2:450e31ab4a55 | 5 | |
O_Shovah | 2:450e31ab4a55 | 6 | |
O_Shovah | 2:450e31ab4a55 | 7 | |
O_Shovah | 2:450e31ab4a55 | 8 | find_number::find_number(int32_t *selectable_values, int32_t cells_in_array) |
O_Shovah | 2:450e31ab4a55 | 9 | { |
O_Shovah | 2:450e31ab4a55 | 10 | selectable_values_array = selectable_values; |
O_Shovah | 2:450e31ab4a55 | 11 | |
O_Shovah | 3:3cc233c5aa00 | 12 | searched_array_size = cells_in_array; |
O_Shovah | 2:450e31ab4a55 | 13 | } |
O_Shovah | 2:450e31ab4a55 | 14 | |
O_Shovah | 7:2b1e34741392 | 15 | find_number::find_number() {}; |
O_Shovah | 7:2b1e34741392 | 16 | |
O_Shovah | 7:2b1e34741392 | 17 | |
O_Shovah | 2:450e31ab4a55 | 18 | |
O_Shovah | 2:450e31ab4a55 | 19 | int32_t find_number::find_closest(int32_t target_value) |
O_Shovah | 2:450e31ab4a55 | 20 | { |
O_Shovah | 8:815f084feb19 | 21 | int32_t difference = abs( target_value - selectable_values_array[0]); |
O_Shovah | 2:450e31ab4a55 | 22 | int32_t closest_integer = selectable_values_array[0]; |
O_Shovah | 2:450e31ab4a55 | 23 | |
O_Shovah | 2:450e31ab4a55 | 24 | for (int32_t cell = 0; cell < searched_array_size; cell++) { |
O_Shovah | 2:450e31ab4a55 | 25 | if (difference > abs( target_value - selectable_values_array[cell] )) { |
O_Shovah | 2:450e31ab4a55 | 26 | difference = abs( target_value - selectable_values_array[cell]); |
O_Shovah | 2:450e31ab4a55 | 27 | closest_integer = selectable_values_array[cell]; |
O_Shovah | 2:450e31ab4a55 | 28 | } |
O_Shovah | 2:450e31ab4a55 | 29 | } |
O_Shovah | 2:450e31ab4a55 | 30 | return closest_integer; |
O_Shovah | 2:450e31ab4a55 | 31 | } |
O_Shovah | 2:450e31ab4a55 | 32 | |
O_Shovah | 2:450e31ab4a55 | 33 | int32_t find_number::find_larger(int32_t target_value) |
O_Shovah | 2:450e31ab4a55 | 34 | { |
O_Shovah | 4:f24ae6c68f33 | 35 | int32_t larger_integer = 0; |
O_Shovah | 4:f24ae6c68f33 | 36 | |
O_Shovah | 4:f24ae6c68f33 | 37 | for (int32_t cell=0; cell<searched_array_size; cell++) { |
O_Shovah | 4:f24ae6c68f33 | 38 | |
O_Shovah | 5:196eba643b4c | 39 | for (int32_t next_cell = cell+1; next_cell < searched_array_size; next_cell++) { |
O_Shovah | 4:f24ae6c68f33 | 40 | |
O_Shovah | 5:196eba643b4c | 41 | if (selectable_values_array[cell] <= target_value && target_value <= selectable_values_array[next_cell]) { |
O_Shovah | 4:f24ae6c68f33 | 42 | |
O_Shovah | 4:f24ae6c68f33 | 43 | larger_integer = selectable_values_array[next_cell]; |
O_Shovah | 5:196eba643b4c | 44 | |
O_Shovah | 5:196eba643b4c | 45 | if(selectable_values_array[next_cell] > larger_integer) larger_integer = selectable_values_array[next_cell]; |
O_Shovah | 5:196eba643b4c | 46 | |
O_Shovah | 5:196eba643b4c | 47 | if(selectable_values_array[cell] > larger_integer) larger_integer = selectable_values_array[cell]; |
O_Shovah | 5:196eba643b4c | 48 | |
O_Shovah | 5:196eba643b4c | 49 | if(selectable_values_array[cell] == target_value) larger_integer = selectable_values_array[cell]; |
O_Shovah | 5:196eba643b4c | 50 | |
O_Shovah | 5:196eba643b4c | 51 | if(selectable_values_array[next_cell] == target_value) larger_integer = selectable_values_array[next_cell]; |
O_Shovah | 5:196eba643b4c | 52 | |
O_Shovah | 4:f24ae6c68f33 | 53 | break; |
O_Shovah | 4:f24ae6c68f33 | 54 | } |
O_Shovah | 6:4f4e609a6877 | 55 | |
O_Shovah | 6:4f4e609a6877 | 56 | if(selectable_values_array[0] > target_value) larger_integer = selectable_values_array[0]; |
O_Shovah | 4:f24ae6c68f33 | 57 | } |
O_Shovah | 5:196eba643b4c | 58 | |
O_Shovah | 4:f24ae6c68f33 | 59 | } |
O_Shovah | 4:f24ae6c68f33 | 60 | return larger_integer; |
O_Shovah | 2:450e31ab4a55 | 61 | } |
O_Shovah | 2:450e31ab4a55 | 62 | |
O_Shovah | 4:f24ae6c68f33 | 63 | |
O_Shovah | 2:450e31ab4a55 | 64 | int32_t find_number::find_smaller(int32_t target_value) |
O_Shovah | 2:450e31ab4a55 | 65 | { |
O_Shovah | 4:f24ae6c68f33 | 66 | int32_t smaller_integer = 0; |
O_Shovah | 4:f24ae6c68f33 | 67 | |
O_Shovah | 4:f24ae6c68f33 | 68 | for (int32_t cell=0; cell<searched_array_size; cell++) { |
O_Shovah | 4:f24ae6c68f33 | 69 | |
O_Shovah | 5:196eba643b4c | 70 | for (int32_t next_cell = cell+1; next_cell < searched_array_size; next_cell++) { |
O_Shovah | 5:196eba643b4c | 71 | |
O_Shovah | 5:196eba643b4c | 72 | if (selectable_values_array[cell] <= target_value && target_value <= selectable_values_array[next_cell]) { |
O_Shovah | 4:f24ae6c68f33 | 73 | |
O_Shovah | 5:196eba643b4c | 74 | smaller_integer = selectable_values_array[cell]; |
O_Shovah | 5:196eba643b4c | 75 | |
O_Shovah | 5:196eba643b4c | 76 | if(selectable_values_array[cell] < smaller_integer ) smaller_integer = selectable_values_array[cell]; |
O_Shovah | 5:196eba643b4c | 77 | |
O_Shovah | 5:196eba643b4c | 78 | if(selectable_values_array[next_cell] < smaller_integer) smaller_integer = selectable_values_array[next_cell]; |
O_Shovah | 5:196eba643b4c | 79 | |
O_Shovah | 5:196eba643b4c | 80 | if(selectable_values_array[cell] == target_value) smaller_integer = selectable_values_array[cell]; |
O_Shovah | 4:f24ae6c68f33 | 81 | |
O_Shovah | 5:196eba643b4c | 82 | if(selectable_values_array[next_cell] == target_value) smaller_integer = selectable_values_array[next_cell]; |
O_Shovah | 5:196eba643b4c | 83 | |
O_Shovah | 4:f24ae6c68f33 | 84 | break; |
O_Shovah | 4:f24ae6c68f33 | 85 | } |
O_Shovah | 4:f24ae6c68f33 | 86 | } |
O_Shovah | 5:196eba643b4c | 87 | |
O_Shovah | 4:f24ae6c68f33 | 88 | } |
O_Shovah | 4:f24ae6c68f33 | 89 | return smaller_integer; |
O_Shovah | 2:450e31ab4a55 | 90 | } |