94 lines
1.8 KiB
C
94 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#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;
|
|
}
|