diff --git a/cv2/program.c b/cv2/program.c index ed22110..11d95f4 100644 --- a/cv2/program.c +++ b/cv2/program.c @@ -6,27 +6,26 @@ 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; +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; //счетчик for(int i = 0; i < dishesNumber; i++){ allPrises[i] = dishesList[i].price; ascendingPrises[i] = allPrises[i]; } - qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); + qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); //процеес сортировки - for(int i = 0; i < dishesNumber; i++){ + for(int i = 0; i < dishesNumber; i++){ //запись порядка элемента в основном массиве for(int j = 0; j < dishesNumber; j++){ STEP: if(ascendingPrises[i] == allPrises[j]){ @@ -43,65 +42,65 @@ void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ } } - memcpy(result, order, dishesNumber * sizeof(int)); + memcpy(result, order, dishesNumber * sizeof(int)); //копирование одного в другой } -void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ +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]){ + 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]){ + 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{ + else{ temp = order[i]; order[i] = order[j]; order[j] = temp; } } - else{ + else{ //цены совпали но не в порядке алфавита temp = order[i]; order[i] = order[j]; order[j] = temp; } } } - result[counter] = order[i]; + result[counter] = order[i]; //запись сортирвки counter++; } - memcpy(order, result, dishesNumber * sizeof(int)); + memcpy(order, result, dishesNumber * sizeof(int)); //запись результата в main } int main(){ - struct dish dishesList[100]; + struct dish dishesList[100]; //список блюдд int i = 0; - int finalCounter = 0; + int finalCounter = 0; //конечный счётчик колличества блюд - for(i = 0; fgets(dishesList[i].name, 100, stdin); i++){ + for(i = 0; fgets(dishesList[i].name, 100, stdin); i++){ // запись блюд с ввода finalCounter++; - if(dishesList[i].name[0] == '\n' || dishesList[i].name[0] == '\0') finalCounter--; + if(dishesList[i].name[0] == '\n' || dishesList[i].name[0] == '\0') finalCounter--; //если название пустое scanf("%f", &dishesList[i].price); - if(dishesList[i].price == 0.0){ + if(dishesList[i].price == 0.0){ //если цены нету finalCounter--; break; } - getchar(); + getchar(); //убирает перенос строки с ввода } - int* printOrder = calloc(finalCounter, sizeof(int)); + int* printOrder = calloc(finalCounter, sizeof(int)); //полная запись всего результата getOrder(dishesList, finalCounter, printOrder); getAlphabetOrder(printOrder, dishesList, finalCounter); - for(int j = 0; j < finalCounter; j++){ + for(int j = 0; j < finalCounter; j++){ //вывод printf("%s", dishesList[printOrder[j]].name); printf("%f\n", dishesList[printOrder[j]].price); }