Update cv2/program.c

This commit is contained in:
Marat Izmailov 2024-10-21 11:41:19 +00:00
parent d033d0e4ca
commit 86869ba7fd

View File

@ -5,67 +5,76 @@
#define LINE_SIZE 100 #define LINE_SIZE 100
#define LIST_SIZE 100 #define LIST_SIZE 100
// Структура для пиццы
struct pizza { struct pizza {
char name[LINE_SIZE]; char name[LINE_SIZE]; // Название пиццы
float price; float price; // Цена пиццы
}; };
// Функция для чтения одного элемента пиццы
int read_item(struct pizza *item) { int read_item(struct pizza *item) {
// Чтение названия пиццы
if (fgets(item->name, LINE_SIZE, stdin) == NULL || item->name[0] == '\n') { if (fgets(item->name, LINE_SIZE, stdin) == NULL || item->name[0] == '\n') {
return 0; return 0;
} }
// Удаление символа новой строки
item->name[strcspn(item->name, "\n")] = 0; item->name[strcspn(item->name, "\n")] = 0;
// Чтение цены пиццы
if (scanf("%f", &item->price) != 1 || item->price <= 0) { if (scanf("%f", &item->price) != 1 || item->price <= 0) {
return 0; return 0;
} }
// Очистка буфера ввода
while (getchar() != '\n'); while (getchar() != '\n');
return 1; return 1;
} }
// Функция для сравнения двух пицц
int compare_pizza(const void *a, const void *b) { int compare_pizza(const void *a, const void *b) {
struct pizza *pizza_a = (struct pizza *)a; struct pizza *pizza_a = (struct pizza *)a;
struct pizza *pizza_b = (struct pizza *)b; struct pizza *pizza_b = (struct pizza *)b;
// Сравнение по цене
if (pizza_a->price < pizza_b->price) return -1; if (pizza_a->price < pizza_b->price) return -1;
if (pizza_a->price > pizza_b->price) return 1; if (pizza_a->price > pizza_b->price) return 1;
// Если цены равны, сравниваем по названию
return strcmp(pizza_a->name, pizza_b->name); return strcmp(pizza_a->name, pizza_b->name);
} }
// Функция для чтения списка пицц
int read_pizza_list(struct pizza *list) { int read_pizza_list(struct pizza *list) {
int count = 0; int count = 0;
while (count < LIST_SIZE) { while (count < LIST_SIZE) {
struct pizza item; struct pizza item;
memset(&item, 0, sizeof(struct pizza)); memset(&item, 0, sizeof(struct pizza)); // Обнуляем структуру
if (read_item(&item)) { if (read_item(&item)) {
list[count++] = item; list[count++] = item; // Добавляем элемент в список
} else { } else {
break; break; // Завершаем, если не удалось прочитать элемент
} }
} }
return count; return count;
} }
// Функция для вывода списка пицц
void print_pizza_list(struct pizza *list, int count) { void print_pizza_list(struct pizza *list, int count) {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
printf("%s\n%.6f\n", list[i].name, list[i].price); printf("%s\n%.6f\n", list[i].name, list[i].price);
} }
} }
// Главная функция
int main() { int main() {
struct pizza list[LIST_SIZE]; struct pizza list[LIST_SIZE];
memset(list, 0, sizeof(list)); memset(list, 0, sizeof(list)); // Обнуляем список
int count = read_pizza_list(list); int count = read_pizza_list(list); // Читаем список пицц
qsort(list, count, sizeof(struct pizza), compare_pizza); qsort(list, count, sizeof(struct pizza), compare_pizza); // Сортируем список
print_pizza_list(list, count); print_pizza_list(list, count); // Выводим отсортированный список
return 0; return 0;
} }