usaa24/cv2/program.c

71 lines
2.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LENGTH 100
#define MAX_DISHES 100
char dish_name[MAX_DISHES][MAX_LENGTH];
double dish_price[MAX_DISHES];
int main() {
int count = 0;
// Считывание данных
while (count < MAX_DISHES) {
char dish[MAX_LENGTH];
char price[MAX_LENGTH];
if (fgets(dish, MAX_LENGTH, stdin) == NULL) {
break;
}
dish[strcspn(dish, "\n")] = 0;
if (strlen(dish) == 0) {
break;
}
if (fgets(price, MAX_LENGTH, stdin) == NULL || strlen(price) == 0) {
break;
}
price[strcspn(price, "\n")] = 0;
char *endptr;
double current_price = strtod(price, &endptr);
if (*endptr != '\0' || strlen(price) == 0) {
continue; // Если цена введена неверно, пропустить
}
// Сохранение блюда и его цены
strcpy(dish_name[count], dish);
dish_price[count] = current_price;
count++;
}
// Сортировка блюд по цене и имени
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (dish_price[j] > dish_price[j + 1] ||
(dish_price[j] == dish_price[j + 1] && strcmp(dish_name[j], dish_name[j + 1]) > 0)) {
// Меняем местами цены
double temp_price = dish_price[j];
dish_price[j] = dish_price[j + 1];
dish_price[j + 1] = temp_price;
// Меняем местами названия
char temp_name[MAX_LENGTH];
strcpy(temp_name, dish_name[j]);
strcpy(dish_name[j], dish_name[j + 1]);
strcpy(dish_name[j + 1], temp_name);
}
}
}
// Выводим результаты
for (int i = 0; i < count; i++) {
printf("%s\n%.6f\n", dish_name[i], dish_price[i]);
}
return 0;
}