#include #include #include #include #define LINESIZE 256 #define MAXITEMS 100 // struktura pre polozku jed. listka struct pizza { char name[LINESIZE]; float price; }; //funkcia na nacitanie jednej polozky int read_pizza(struct pizza *item) { char line1[LINESIZE]; char line2[LINESIZE]; //nazov if (!fgets(line1, sizeof(line1), stdin)) { return 0; } line1[strcspn(line1, "\n")] = '\0'; if (line1[0] == '\0') { return 0; } //cena if (!fgets(line2, sizeof(line2), stdin)) { return 0; } line2[strcspn(line2, "\n")] = '\0'; float value = 0.0f; if (sscanf(line2, "%f", &value) != 1) { for (int i = 0; line2[i]; i++){ if (line2[i] == ',') line2[i] = '.'; } if (sscanf(line2, "%f", &value) != 1){ return 0; } } strncpy(item->name, line1, LINESIZE - 1); item->name[LINESIZE - 1] = '\0'; item->price = value; return 1; } // porovnanie dvoch položiek int greater(struct pizza *a, struct pizza *b) { if (a->price > b->price) return 1; if (a->price < b->price) return 0; return strcmp(a->name, b->name) > 0; } // sort void sort_pizzas(struct pizza *list, int count) { for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - i - 1; j++) { if (greater(&list[j], &list[j + 1])) { struct pizza tmp = list[j]; list[j] = list[j + 1]; list[j + 1] = tmp; } } } } int main() { setlocale(LC_ALL, "C"); struct pizza list[MAXITEMS]; int count = 0; //citanie listka while (count < MAXITEMS){ struct pizza tmp; if (!read_pizza(&tmp)) break; list[count++] = tmp; } sort_pizzas(list, count); for (int i = 0; i < count; i++){ printf("%s\n", list[i].name); printf("%.6f\n", list[i].price); } return 0; }