diff --git a/du3/program.c b/du3/program.c index 03a167d..564e72e 100644 --- a/du3/program.c +++ b/du3/program.c @@ -1,107 +1,68 @@ +#include #include #include -#include -#include -#define STACK_SIZE 10 +#define LIST_SIZE 100 -struct stack{ - float values[STACK_SIZE]; - int size; +struct listok { + char nazov[101]; + float cena; }; -void push_stack(struct stack *s, float value){ - if (s->size >= STACK_SIZE){ - printf("Chyba: zasobnik je plny!\n"); - exit(1); -} - s->values[s->size] = value; - s->size++; - } +void add_listok(struct listok *p, int *n){ + if (fgets(p[*n].nazov, 101, stdin) == NULL){ + exit(0); + } -float pop_stack(struct stack *s){ - if (s->size <= 0){ - printf("Chyba: zasobnik je prazdny!\n"); - exit(1); -} - s->size--; - return s->values[s->size]; - } + p[*n].nazov[strcspn(p[*n].nazov, "\n")] = 0; -void print_stack(struct stack *s){ - for (int i = 0; i < s->size; i++){ - printf("%.2f ", s->values[i]); - } - printf("\n"); - } + if (scanf("%f", &p[*n].cena) != 1){ + exit(0); + } + + getchar(); + *n = *n + 1; +} + +int compare(struct listok *a, struct listok *b){ + if (a->cena > b->cena){ + return 1; + } + if (a->cena < b->cena){ + return -1; + } + return strcmp(a->nazov, b->nazov); +} + +void sort_listok(struct listok *p, int n){ + for (int i = 0; i < n - 1; i++){ + for (int j = i + 1; j < n; j++){ + if (compare(&p[i], &p[j]) > 0){ + struct listok tmp = p[i]; + p[i] = p[j]; + p[j] = tmp; + } + } + } +} + +void print_listok(struct listok *p, int n){ + for (int i = 0; i < n; i++){ + printf("%s\n", p[i].nazov); + printf("%f\n", p[i].cena); + } +} int main(){ - struct stack s; - s.size = 0; + struct listok p[LIST_SIZE]; + int n = 0; - char input[100]; + while (1){ + add_listok(p, &n); + } - while (1){ - if (scanf("%s", input) != 1){ - printf("Chyba: nepodarilo sa nacitat vstup.\n"); - return 1; - } + sort_listok(p, n); + print_listok(p, n); - char *endptr; - float value = strtof(input, &endptr); - - if (*endptr == '\0') { - push_stack(&s, value); - print_stack(&s); - } - else if (strcmp(input, "+") == 0){ - if (s.size < 2){ - printf("Chyba: malo hodnot v zasobniku!\n"); - return 1; - } - float b = pop_stack(&s); - float a = pop_stack(&s); - push_stack(&s, a + b); - print_stack(&s); - } - else if (strcmp(input, "-") == 0){ - if (s.size < 2){ - printf("Chyba: malo hodnot v zasobniku!\n"); - return 1; - } - float b = pop_stack(&s); - float a = pop_stack(&s); - push_stack(&s, a - b); - print_stack(&s); - } - else if (strcmp(input, "*") == 0){ - if (s.size < 2){ - printf("Chyba: malo hodnot v zasobniku!\n"); - return 1; - } - float b = pop_stack(&s); - float a = pop_stack(&s); - push_stack(&s, a * b); - print_stack(&s); - } - else if (strcmp(input, "/") == 0){ - if (s.size < 2){ - printf("Chyba: malo hodnot v zasobniku!\n"); - return 1; - } - float b = pop_stack(&s); - float a = pop_stack(&s); - if (b == 0){ - printf("Chyba: delenie nulou!\n"); - return 1; - } - push_stack(&s, a / b); - print_stack(&s); - } - else{ - printf("Chyba: neplatny vstup '%s'\n", input); - return 1; - } - } - return 0; + return 0; }