diff --git a/cv2/program.c b/cv2/program.c new file mode 100644 index 0000000..11dce7c --- /dev/null +++ b/cv2/program.c @@ -0,0 +1,71 @@ +#include +#include +#include + +#define LINE_SIZE 100 +#define LIST_SIZE 100 + +struct pizza { + char name[LINE_SIZE]; + float price; +}; + +int read_item(struct pizza *item) { + + if (fgets(item->name, LINE_SIZE, stdin) == NULL || item->name[0] == '\n') { + return 0; + } + + item->name[strcspn(item->name, "\n")] = 0; + + + if (scanf("%f", &item->price) != 1 || item->price <= 0) { + + return 0; + } + + while (getchar() != '\n'); + + return 1; +} + +int compare_pizza(const void *a, const void *b) { + struct pizza *pizza_a = (struct pizza *)a; + 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; + return strcmp(pizza_a->name, pizza_b->name); +} + +int read_pizza_list(struct pizza *list) { + int count = 0; + while (count < LIST_SIZE) { + struct pizza item; + memset(&item, 0, sizeof(struct pizza)); + if (read_item(&item)) { + list[count++] = item; + } else { + break; + } + } + return count; +} + +void print_pizza_list(struct pizza *list, int count) { + for (int i = 0; i < count; i++) { + printf("%s\n%.6f\n", list[i].name, list[i].price); + } +} + +int main() { + struct pizza list[LIST_SIZE]; + memset(list, 0, sizeof(list)); + + int count = read_pizza_list(list); + qsort(list, count, sizeof(struct pizza), compare_pizza); + + print_pizza_list(list, count); + + return 0; +}