Изменил(а) на 'cv2/program.c'
This commit is contained in:
parent
d08cfe82cc
commit
e9e27bcf3b
109
cv2/program.c
109
cv2/program.c
@ -1 +1,110 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user