Вывести результат о равенстве двух динамических массивов - 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 - по элементам).
- В зависимости от выбранной операции выполняется соответствующая функция сравнения и выводится результат сравнения.