Find a number out of a given Integer array. It can return the closest, smaller and larger number to the integer requested.

Committer:
O_Shovah
Date:
Wed Dec 20 09:52:02 2017 +0000
Revision:
7:2b1e34741392
Parent:
6:4f4e609a6877
Child:
8:815f084feb19
Added default constructor.

Who changed what in which revision?

UserRevisionLine numberNew 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 2:450e31ab4a55 21 int32_t difference = abs( target_value - *selectable_values_array);
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 }