CCCPaste

Task 12

#include 
#include 
#include 
#include 
#define MAX 128

int takeInput(int** firstArray, int* firstCount, int** secondArray, int* secondCount);
void printArray(const char* label, int* arr, int count);
void bubbleSortArrays(int* firstArray, int firstCount, int* secondArray, int secondCount);
int* combineArrays(int* firstArray, int firstCount, int* secondArray, int secondCount, int* combinedCount);

/**************************************************
 *
 * @brief - Entry point of the program.
 *
 **************************************************/

int main()
{
    int* firstArray = NULL;
    int* secondArray = NULL;
    int* combinedArray = NULL;
    int firstCount = 0;
    int secondCount = 0;
    int combinedCount = 0;

    if (takeInput(&firstArray, &firstCount, &secondArray, &secondCount) == 0)
    {
        bubbleSortArrays(firstArray, firstCount, secondArray, secondCount);

        printArray("First array", firstArray, firstCount);
        printArray("Second array", secondArray, secondCount);

        combinedArray = combineArrays(firstArray, firstCount, secondArray, secondCount, &combinedCount);

        if (combinedArray != NULL)
        {
            printArray("Combined array", combinedArray, combinedCount);
            free(combinedArray);
        }
    }

    free(firstArray);
    free(secondArray);

    return 0;
}

/**************************************************
 *
 * @brief - Takes input for the size and elements
 * of arrays.
 *
 **************************************************/

int takeInput(int** firstArray, int* firstCount, int** secondArray, int* secondCount)
{
    char inputStr[MAX];
    const int initialCapacity = 8;

    *firstArray = (int*)malloc(initialCapacity * sizeof(int));
    *secondArray = (int*)malloc(initialCapacity * sizeof(int));

    if (*firstArray == NULL || *secondArray == NULL)
    {
        return -1;
    }

    int firstCapacity = initialCapacity;
    int secondCapacity = initialCapacity;

    // First Array
    printf("Enter numbers for the first array: ");
    if (!fgets(inputStr, sizeof(inputStr), stdin))
    {
        printf("Input error!\n");
        return -1;
    }
    inputStr[strcspn(inputStr, "\n")] = 0;

    char* context = NULL;
    char* token = strtok_s(inputStr, " ", &context);
    *firstCount = 0;

    while (token)
    {
        if (*firstCount >= firstCapacity)
        {
            firstCapacity *= 2;
            int* temp = (int*)realloc(*firstArray, firstCapacity * sizeof(int));
            if (!temp)
            {
                return -1;
            }
            *firstArray = temp;
        }

        (*firstArray)[(*firstCount)++] = atoi(token);
        token = strtok_s(NULL, " ", &context);
    }

    // Second Array
    printf("Enter numbers for the second array: ");
    if (!fgets(inputStr, sizeof(inputStr), stdin))
    {
        printf("Input error!\n");
        return -1;
    }
    inputStr[strcspn(inputStr, "\n")] = 0;

    context = NULL;
    token = strtok_s(inputStr, " ", &context);
    *secondCount = 0;

    while (token)
    {
        if (*secondCount >= secondCapacity)
        {
            secondCapacity *= 2;
            int* temp = (int*)realloc(*secondArray, secondCapacity * sizeof(int));
            if (!temp)
            {
                return -1;
            }
            *secondArray = temp;
        }

        (*secondArray)[(*secondCount)++] = atoi(token);
        token = strtok_s(NULL, " ", &context);
    }

    return 0;
}

/**************************************************
 *
 * @brief - Prints the elements of an array.
 *
 **************************************************/

void printArray(const char* label, int* arr, int count)
{
    printf("%s: ", label);
    for (int i = 0; i < count; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

/**************************************************
 *
 * @brief - Sorts the two arrays in ascending order
 * using bubble sort.
 *
 **************************************************/

void bubbleSortArrays(int* firstArray, int firstCount, int* secondArray, int secondCount)
{
    int temp = 0;

    // Sorts first array
    for (int i = 0; i < (firstCount - 1); ++i)
    {
        for (int j = 0; j < firstCount - 1 - i; ++j)
        {
            if (firstArray[j] > firstArray[j + 1])
            {
                temp = firstArray[j + 1];
                firstArray[j + 1] = firstArray[j];
                firstArray[j] = temp;
            }
        }
    }

	// Sorts second array
    for (int i = 0; i < (secondCount - 1); ++i)
    {
        for (int j = 0; j < secondCount - 1 - i; ++j)
        {
            if (secondArray[j] > secondArray[j + 1])
            {
                temp = secondArray[j + 1];
                secondArray[j + 1] = secondArray[j];
                secondArray[j] = temp;
            }
        }
    }
}

/**************************************************
 *
 * @brief - Combines the two arrays into one.
 *
 **************************************************/

int* combineArrays(int* firstArray, int firstCount, int* secondArray, int secondCount, int* combinedCount)
{
    *combinedCount = firstCount + secondCount;

    int* combined = (int*)malloc((*combinedCount) * sizeof(int));

    if (combined == NULL)
    {
        return NULL;
    }

    for (int i = 0; i < firstCount; i++)
    {
        combined[i] = firstArray[i];
    }

    for (int j = 0; j < secondCount; j++)
    {
        combined[firstCount + j] = secondArray[j];
    }

    return combined;
}