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

Committer:
O_Shovah
Date:
2017-12-20
Revision:
7:2b1e34741392
Parent:
6:4f4e609a6877
Child:
8:815f084feb19

File content as of revision 7:2b1e34741392:

/**
 * Includes
 */
#include "find_number.h"



find_number::find_number(int32_t *selectable_values, int32_t cells_in_array)
{
    selectable_values_array = selectable_values;

    searched_array_size = cells_in_array;
}

find_number::find_number() {};



int32_t find_number::find_closest(int32_t target_value)
{
    int32_t difference = abs( target_value - *selectable_values_array);
    int32_t closest_integer = selectable_values_array[0];

    for (int32_t cell = 0; cell < searched_array_size; cell++) {
        if (difference > abs( target_value - selectable_values_array[cell] )) {
            difference = abs( target_value - selectable_values_array[cell]);
            closest_integer = selectable_values_array[cell];
        }
    }
    return closest_integer;
}

int32_t find_number::find_larger(int32_t target_value)
{
    int32_t larger_integer = 0;

    for (int32_t cell=0; cell<searched_array_size; cell++) {

        for (int32_t next_cell = cell+1; next_cell < searched_array_size; next_cell++) {

            if (selectable_values_array[cell] <= target_value && target_value <= selectable_values_array[next_cell]) {

                larger_integer = selectable_values_array[next_cell];
                
                if(selectable_values_array[next_cell] > larger_integer) larger_integer = selectable_values_array[next_cell];
                
                if(selectable_values_array[cell] > larger_integer) larger_integer = selectable_values_array[cell];
                
                if(selectable_values_array[cell] == target_value) larger_integer = selectable_values_array[cell];

                if(selectable_values_array[next_cell] == target_value) larger_integer = selectable_values_array[next_cell];

                break;
            }
            
            if(selectable_values_array[0] > target_value) larger_integer = selectable_values_array[0];
        }

    }
    return larger_integer;
}


int32_t find_number::find_smaller(int32_t target_value)
{
    int32_t smaller_integer = 0;

    for (int32_t cell=0; cell<searched_array_size; cell++) {

        for (int32_t next_cell = cell+1; next_cell < searched_array_size; next_cell++) {

            if (selectable_values_array[cell] <= target_value && target_value <= selectable_values_array[next_cell]) {

                smaller_integer = selectable_values_array[cell];
                
                if(selectable_values_array[cell] < smaller_integer ) smaller_integer = selectable_values_array[cell];
                
                if(selectable_values_array[next_cell] < smaller_integer) smaller_integer = selectable_values_array[next_cell];
                
                if(selectable_values_array[cell] == target_value) smaller_integer = selectable_values_array[cell];

                if(selectable_values_array[next_cell] == target_value) smaller_integer = selectable_values_array[next_cell];
                
                break;
            }
        }

    }
    return smaller_integer;
}