From cb9270349c03f5ea2c2cb43cb836095fc7417f20 Mon Sep 17 00:00:00 2001 From: Oleksandr Hryshchenko Date: Thu, 4 Nov 2021 19:12:10 +0100 Subject: [PATCH] add --- cv2/program.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/cv2/program.c b/cv2/program.c index 53c5fdf..dda6c3f 100644 --- a/cv2/program.c +++ b/cv2/program.c @@ -1 +1,110 @@ #include +#include +#include +#include + +struct dish{ + char name[100]; + float price; +}; + +int comparator (const void * p1, const void * p2){ + return (*(int*)p1 - *(int*)p2); +} + +void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ + float allPrises[dishesNumber]; + float ascendingPrises[dishesNumber]; + int* order = calloc(dishesNumber, sizeof(int)); + int counter = 0; + float temp; + + for(int i = 0; i < dishesNumber; i++){ + allPrises[i] = dishesList[i].price; + ascendingPrises[i] = allPrises[i]; + } + + qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); + + for(int i = 0; i < dishesNumber; i++){ + for(int j = 0; j < dishesNumber; j++){ + STEP: + if(ascendingPrises[i] == allPrises[j]){ + for(int y = 0; y < counter; y++){ + if(order[y] == j){ + j++; + goto STEP; + } + } + order[counter] = j; + counter++; + break; + } + } + } + + memcpy(result, order, dishesNumber * sizeof(int)); +} + +void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ + int* result = calloc(dishesNumber, sizeof(int)); + int counter = 0; + int temp; + + for(int i = 0; i < dishesNumber; i++){ + for(int j = i; j < dishesNumber; j++){ + if(dishesList[order[i]].price == dishesList[order[j]].price){ + if(dishesList[order[i]].name[0] < dishesList[order[j]].name[0]){ + break; + } + else if(dishesList[order[i]].name[0] == dishesList[order[j]].name[0]){ + if(dishesList[order[i]].name[1] < dishesList[order[j]].name[1]){ + break; + } + else{ + temp = order[i]; + order[i] = order[j]; + order[j] = temp; + } + } + else{ + temp = order[i]; + order[i] = order[j]; + order[j] = temp; + } + } + } + result[counter] = order[i]; + counter++; + } + + memcpy(order, result, dishesNumber * sizeof(int)); +} + +int main(){ + struct dish dishesList[100]; + int i = 0; + int finalCounter = 0; + + for(i = 0; fgets(dishesList[i].name, 100, stdin); i++){ + finalCounter++; + if(dishesList[i].name[0] == '\n' || dishesList[i].name[0] == '\0') finalCounter--; + scanf("%f", &dishesList[i].price); + if(dishesList[i].price == 0.0){ + finalCounter--; + break; + } + getchar(); + } + + int* printOrder = calloc(finalCounter, sizeof(int)); + getOrder(dishesList, finalCounter, printOrder); + getAlphabetOrder(printOrder, dishesList, finalCounter); + + for(int j = 0; j < finalCounter; j++){ + printf("%s", dishesList[printOrder[j]].name); + printf("%f\n", dishesList[printOrder[j]].price); + } + + return 0; +}