Вывести результат о равенстве двух динамических массивов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая выводит результат о равенстве двух динамических массивов. Функция должна принимать 2 массива, их размеры и указатель на функцию, осуществляющую сравнения. * Сравнивать можно 2-мя способами: по содержанию или по длине. Какой способ реализовать - должен выбрать пользователь.

Решение задачи: «Вывести результат о равенстве двух динамических массивов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct {
    int* el;
    unsigned size;
}   Array;
 
Array getArray(unsigned size) {
    Array array = {malloc(sizeof(int)* size), size};
 
    return array;
}
 
void fillArray(Array array, int min, int max) {
    unsigned i;
    for (i = 0; i < array.size; ++i) {
        array.el[i] = rand() % (max - min + 1) + min;
    }
}
 
void printArray(const Array array) {
    unsigned i;
    for (i = 0; i < array.size; ++i) {
        printf("%d ", array.el[i]);
    }
    printf("\n");
}
 
int cmpLengthArrays(const Array first, const Array second) {
    return second.size - first.size;
}
 
int cmpElementsArrays(const Array first, const Array second) {
    unsigned i;
    int cmpLen = cmpLengthArrays(first, second);
    for (i = 0; (cmpLen == 0) && (i < first.size); ++i) {
        cmpLen = second.el[i] - first.el[i];
    }
 
    return cmpLen;
}
 
int cmpArrays(const Array first, const Array second,
              int (*cmpFunction)(const Array, const Array)) {
    return cmpFunction(first, second);
}
 
int main() {
    Array first, second;
    unsigned a, b;
    int cmp;
 
    srand(time(NULL));
 
    printf("input first and second arrays size: ");
    if (scanf("%u %u", &a, &b) != 2) {
        return 1;
    }
 
    first = getArray(a);
    second = getArray(b);
 
    fillArray(first, 1, 2);
    fillArray(second, 1, 2);
 
    printf("first: ");
    printArray(first);
 
    printf("second: ");
    printArray(second);
 
    printf("compare operation (1-lengths, 2-elements): ");
    if (scanf("%u", &a) == 1) {
        switch (a) {
            case 1:
                cmp = cmpArrays(first, second, cmpLengthArrays);
                break;
            case 2:
                cmp = cmpArrays(first, second, cmpElementsArrays);
                break;
            default:
                a = 0;
        }
        if (a) {
            printf("%s\n", (cmp ? ((cmp < 0) ? "left" : "right") : "equals"));
        }
    }
 
    return 0;
}

Объяснение кода листинга программы

  1. Структура массива включает в себя указатель на массив и его размер.
  2. Функция getArray создает динамический массив заданного размера и возвращает его в виде структуры Array.
  3. Функция fillArray заполняет массив случайными целыми числами в заданном диапазоне.
  4. Функция printArray выводит элементы массива через пробел на экран.
  5. Функция cmpLengthArrays сравнивает длины двух массивов и возвращает разницу между ними.
  6. Функция cmpElementsArrays сравнивает элементы двух массивов, используя функцию сравнения cmpLengthArrays для определения начальной позиции сравнения.
  7. Функция cmpArrays сравнивает два массива с помощью указанной функции сравнения.
  8. В функции main создаются два массива заданного размера, заполняются случайными значениями и выводятся на экран.
  9. Пользователю предлагается ввести код операции сравнения (1 - по длине, 2 - по элементам).
  10. В зависимости от выбранной операции выполняется соответствующая функция сравнения и выводится результат сравнения.

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы