usaa21/cv2/program.c
Oleksandr Hryshchenko 872b1fc5bd add
2021-11-04 19:14:53 +01:00

190 lines
6.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
struct dish{
char name[100];
float price;
<<<<<<< HEAD
};
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;
=======
}; // блюда -- название и цена
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]){
for(int y = 0; y < counter; y++){
if(order[y] == j){
j++;
goto STEP;
}
}
order[counter] = j;
counter++;
break;
}
}
}
<<<<<<< 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]){
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{
=======
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++;
}
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++){
=======
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