Вывести результат о равенстве двух динамических массивов - 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; }
Объяснение кода листинга программы
- Структура массива включает в себя указатель на массив и его размер.
- Функция
getArray
создает динамический массив заданного размера и возвращает его в виде структурыArray
. - Функция
fillArray
заполняет массив случайными целыми числами в заданном диапазоне. - Функция
printArray
выводит элементы массива через пробел на экран. - Функция
cmpLengthArrays
сравнивает длины двух массивов и возвращает разницу между ними. - Функция
cmpElementsArrays
сравнивает элементы двух массивов, используя функцию сравненияcmpLengthArrays
для определения начальной позиции сравнения. - Функция
cmpArrays
сравнивает два массива с помощью указанной функции сравнения. - В функции
main
создаются два массива заданного размера, заполняются случайными значениями и выводятся на экран. - Пользователю предлагается ввести код операции сравнения (1 - по длине, 2 - по элементам).
- В зависимости от выбранной операции выполняется соответствующая функция сравнения и выводится результат сравнения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д