Цель работы - закрепление навыков работы с массивами и механизма передачи параметров
Для хранения информации о строительном материале создайте структурный тип данных:
typedef struct Cornice {
int length;
int ceilingWidth;
int wallHeight;
char material[20];
} cornice_t;
Создайте статический массив записей:
cornice_t cornices[SIZE];
или динамический массив записей:
cornice_t *corns;
corns=(cornice_t *)malloc(SIZE * sizeof(cornice_t));
Работа выполняется по индивидуальному варианту из работы 18. Реализованная программа должна включать интерфейс с пользователем в виде меню, позволяющего выполнить
загрузку данных и файла
изменение выбранной пользователем записи
поиск записи в массиве по одному полю, значение которого задал пользователь
сортировка массива по выбранному пользователем полю
сохранение измененного массива записей в новый файл.
Для каждой операции должна быть реализована отдельная функция.
1. Инициализируйте массив записей случайными значенями:
void fillCornicesArray(cornice_t cornices[], int size) {
srand(time(NULL));
for (int i = 0; i < size; i++) {
cornices[i].length = getRandomNumber(1, 10);
cornices[i].ceilingWidth = getRandomNumber(1, 5);
cornices[i].wallHeight = getRandomNumber(2, 8);
strcpy(cornices[i].material, getRandomString(10));
}
}
или константными:
cornice_t cornices[SIZE] = {
{10, 5, 3, "Wood"},
{8, 4, 2, "Aluminium"},
{12, 5, 4, "Plastic"},
{6, 3, 2, "Steel"},
{9, 6, 3, "Metal"}
};
2. Реализуйте функции :
заполнения полей массива: void fill_array(cornice_t *, int size)
печати значений полей массива: void print_array(cornice_t *, int size)
печати значений полей одной записи: void print_cornice (cornice_t ) {
printf("| %d || %d || %d || %s |", cornice.length, cornice.ceilingWidth, cornice.wallHeight,cornice.material );
}
2.1 Реализуйте функцию поиска, возвращающую найденную в массиве запись:
cornice_t* search_material(cornice_t *cornices, int size, char* material) {
for (int i = 0; i < size; i++) {
if (strcmp(cornices[i].material, material) == 0)
return (cornices+i);
}
return NULL;
}
2.2 Реализуйте функцию сортировки по площади материала с использованием qsort()
2.2.1 Напишите функцию сравнения для qsort():
int compare(const void *a, const void *b) {
const cornice_t *corniceA = (const cornice_t *)a;
const cornice_t *corniceB = (const cornice_t *)b;
// Расчет площади для каждой записи
int areaA = corniceA->length * corniceA->ceilingWidth;
int areaB = corniceB->length * corniceB->ceilingWidth;
// Сравнение площадей
if (areaA < areaB) {
return -1;
} else if (areaA > areaB) {
return 1;
}
return 0;
}
2.2.2 Используйте вызов функции сортировки
// Сортировка массива по площади
qsort(cornices, SIZE, sizeof(cornice_t), compare);
int input_file (char* filename, cornice_t* arr);
int output_file (char* filename, cornice_t* arr, int n);