Update cv2/program.c
This commit is contained in:
parent
d033d0e4ca
commit
86869ba7fd
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user