diff --git a/cv2/program.c b/cv2/program.c index dda6c3f..6cb5be0 100644 --- a/cv2/program.c +++ b/cv2/program.c @@ -6,6 +6,7 @@ struct dish{ char name[100]; float price; +<<<<<<< HEAD }; int comparator (const void * p1, const void * p2){ @@ -18,15 +19,34 @@ void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ int* order = calloc(dishesNumber, sizeof(int)); int counter = 0; float temp; +======= +}; // блюда -- название и цена + +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; //счетчик +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 for(int i = 0; i < dishesNumber; i++){ allPrises[i] = dishesList[i].price; ascendingPrises[i] = allPrises[i]; } +<<<<<<< HEAD qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); for(int i = 0; i < dishesNumber; i++){ +======= + qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); //процеес сортировки + + for(int i = 0; i < dishesNumber; i++){ //запись порядка элемента в основном массиве +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 for(int j = 0; j < dishesNumber; j++){ STEP: if(ascendingPrises[i] == allPrises[j]){ @@ -43,15 +63,23 @@ void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ } } +<<<<<<< HEAD memcpy(result, order, dishesNumber * sizeof(int)); } void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ +======= + memcpy(result, order, dishesNumber * sizeof(int)); //копирование одного в другой +} + +void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ //сорторвка по алфавиту +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 int* result = calloc(dishesNumber, sizeof(int)); int counter = 0; int temp; for(int i = 0; i < dishesNumber; i++){ +<<<<<<< HEAD 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]){ @@ -62,18 +90,35 @@ void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber) break; } else{ +======= + 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{ +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 temp = order[i]; order[i] = order[j]; order[j] = temp; } } +<<<<<<< HEAD else{ +======= + else{ //цены совпали но не в порядке алфавита +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 temp = order[i]; order[i] = order[j]; order[j] = temp; } } } +<<<<<<< HEAD result[counter] = order[i]; counter++; } @@ -102,9 +147,43 @@ int main(){ getAlphabetOrder(printOrder, dishesList, finalCounter); for(int j = 0; j < finalCounter; j++){ +======= + result[counter] = order[i]; //запись сортирвки + counter++; + } + + memcpy(order, result, dishesNumber * sizeof(int)); //запись результата в main +} + +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++){ //вывод +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 printf("%s", dishesList[printOrder[j]].name); printf("%f\n", dishesList[printOrder[j]].price); } return 0; +<<<<<<< HEAD } +======= +} +>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269 diff --git a/cv3/program.c b/cv3/program.c index 53c5fdf..cfa8f82 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -1 +1,86 @@ #include +#include +#include +#include +#include +#include + +#define SIZE 50 + +int currentlyInBuffer = 0; + +bool calculatorLogic(char buffer[SIZE][SIZE]){ + if(isdigit(buffer[currentlyInBuffer][0])){ + if(currentlyInBuffer == 9) { + printf("full stack\n"); + return false; + } + for(int i = 0; i <= currentlyInBuffer; i++){ + if(i == currentlyInBuffer) + printf("%0.2f \n", roundf(atof(buffer[i])*100)/100); + else + printf("%0.2f ", roundf(atof(buffer[i])*100)/100); + } + return true; + } + else if(strchr("+-/*", buffer[currentlyInBuffer][0]) != NULL){ + if(currentlyInBuffer < 2){ + printf("not enough operands\n"); + return false; + } + + double temporaryDecimal = 0; + + switch(buffer[currentlyInBuffer][0]){ + case '+': + temporaryDecimal = (double)(round(atof(buffer[currentlyInBuffer-2])*100)/100) + (double)(round(atof(buffer[currentlyInBuffer-1])*100)/100); + break; + case '-': + temporaryDecimal = (double)(round(atof(buffer[currentlyInBuffer-2])*100)/100) - (double)(round(atof(buffer[currentlyInBuffer-1])*100)/100); + break; + case '*': + temporaryDecimal = (double)(round(atof(buffer[currentlyInBuffer-2])*100)/100) * (double)(round(atof(buffer[currentlyInBuffer-1])*100)/100); + break; + case '/': + if(atof(buffer[currentlyInBuffer-1]) == 0.0) { + printf("division by zero\n"); + return false; + } + else + temporaryDecimal = (double)(round(atof(buffer[currentlyInBuffer-2])*100)/100) / (double)(round(atof(buffer[currentlyInBuffer-1])*100)/100); + } + + for(int i = currentlyInBuffer-2; currentlyInBuffer > i; currentlyInBuffer--) + memset(buffer[currentlyInBuffer], '\0', SIZE); + + gcvt(temporaryDecimal, 10, buffer[currentlyInBuffer]); + + for(int i = 0; i <= currentlyInBuffer; i++){ + if(i == currentlyInBuffer) + printf("%0.2f \n", roundf(atof(buffer[i]) * 100) / 100); + else + printf("%0.2f ", roundf(atof(buffer[i]) * 100) / 100); + } + + return true; + } + else{ + printf("bad input\n"); + return false; + } +} + +int main() { + char buffer[SIZE][SIZE]; + for(int i = 0; i < SIZE; i++) + memset(buffer[i], '\0', SIZE); + + for(; fgets(buffer[currentlyInBuffer], SIZE, stdin); currentlyInBuffer++) + if(!calculatorLogic(buffer)) + return 0; + + if(buffer[currentlyInBuffer][0] == '\0') + printf("no input\n"); + + return 0; +} \ No newline at end of file