Aktualizovat du2/program.c

This commit is contained in:
Mykola Syniavskyi 2025-10-09 23:23:13 +00:00
parent 66bc27ceea
commit 1466ae5646

View File

@ -0,0 +1,72 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 101
#define LIST_SIZE 1000
struct pizza {
char name[MAX_NAME_LEN];
float price;
};
int read_item(struct pizza* item) {
char buffer[256];
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// назва
return 0;
buffer[strcspn(buffer, "\n")] = '\0'; // забір пропусків
if (strlen(buffer) == 0)
return 0;
strncpy(item->name, buffer, MAX_NAME_LEN);
item->name[MAX_NAME_LEN - 1] = '\0';
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// ціна
return 0;
buffer[strcspn(buffer, "\n")] = '\0';
char* endptr;
item->price = strtof(buffer, &endptr);
while (*endptr == ' ') endptr++;
if (*endptr != '\0') return 0; // некоректне число
return 1;}
int read_pizza_list(struct pizza* list) {
int counter = 0;
for (int i = 0; i < LIST_SIZE; i++) {
struct pizza item;
memset(&item, 0, sizeof(struct pizza));
int r = read_item(&item);
if (r) {
memcpy(&list[i], &item, sizeof(struct pizza));
counter += 1;
} else {
break;
}
}
return counter;}
int compare_pizza(const void* a, const void* b) {
const struct pizza* p1 = (const struct pizza*)a;
const struct pizza* p2 = (const struct pizza*)b;
if (p1->price < p2->price) return -1;
if (p1->price > p2->price) return 1;
return strcmp(p1->name, p2->name);}
int main() {
struct pizza list[LIST_SIZE];
memset(list, 0, LIST_SIZE * sizeof(struct pizza));
int count = read_pizza_list(list);
qsort(list, count, sizeof(struct pizza), compare_pizza);
for (int i = 0; i < count; i++) {
printf("%s\n%.6f\n", list[i].name, list[i].price);}
return 0;}