This commit is contained in:
Oleksandr Hryshchenko 2021-11-09 14:17:24 +01:00
commit c0bf64e800
2 changed files with 74 additions and 157 deletions

View File

@ -3,156 +3,38 @@
#include <stdlib.h>
#include <string.h>
#define SIZE 100 //колличество пицц
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 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; //счетчик
>>>>>>> 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
void insertSort(struct pizza array[100], int finalCounter){
struct pizza temp;
  for(int i = 1; i < finalCounter; i++){
   if(array[i].price < array[i-1].price){
    for(int j = i-1; j >= 0; j--){
     if(array[i].price > array[j].price){
      break;
     }
     else if(array[i].price == array[j].price){
      if(strcmp(array[i].name, array[j].name) < 0){
       temp = array[j];
       array[j] = array[i];
       array[i] = temp;
       i = j;
      }
     }
     else{
      temp = array[j];
    array[j] = array[i];
    array[i] = temp;
    i = j;
     }
    }
   }
  }
}
int main(){
@ -171,19 +53,12 @@ int main(){
getchar(); //убирает перенос строки с ввода
}
int* printOrder = calloc(finalCounter, sizeof(int)); //полная запись всего результата
getOrder(dishesList, finalCounter, printOrder);
getAlphabetOrder(printOrder, dishesList, finalCounter);
insertSort(dishesList, finalCounter);
for(int j = 0; j < finalCounter; j++){ //вывод
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
printf("%s", dishesList[printOrder[j]].name);
printf("%f\n", dishesList[printOrder[j]].price);
printf("%s", dishesList[j].name);
printf("%f\n", dishesList[j].price);
}
return 0;
<<<<<<< HEAD
}
=======
}
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
}

View File

@ -2,22 +2,40 @@
#include <string.h>
#include <stdlib.h>
#include "a_train.h"
<<<<<<< HEAD
struct car* add_car(struct car* first, const char* target){
if(!strcmp(target, ""))
return NULL;
if(!first){
=======
struct car* add_car(struct car* first, const char* target){
if(!strcmp(target, ""))
return NULL;
if(!first || !strcmp(first->value, "")){
>>>>>>> 2033291145353cf5a29605aaa70523464ca047fa
first = (struct car*)calloc(1, sizeof(struct car));
strcpy(first->value, target);
first->next = NULL;
return first;
}
<<<<<<< HEAD
struct car* temp = first;
while(temp->next != NULL)
temp = temp->next;
=======
struct car* temp = first;
while(temp->next != NULL)
temp = temp->next;
>>>>>>> 2033291145353cf5a29605aaa70523464ca047fa
temp->next = (struct car*)calloc(1, sizeof(struct car));
strcpy(temp->next->value, target);
temp->next->next = NULL;
@ -36,6 +54,7 @@ void print_train(struct car* first){
void cancel_train(struct car* first){
if(!first)
return;
<<<<<<< HEAD
struct car* temp = first;
struct car* next = temp->next;
@ -46,6 +65,18 @@ void cancel_train(struct car* first){
temp = next;
}
=======
struct car* temp = first;
struct car* next = temp->next;
while(next != NULL){
next = temp->next;
free(temp);
temp = next;
}
>>>>>>> 2033291145353cf5a29605aaa70523464ca047fa
first = NULL;
}
@ -58,8 +89,19 @@ struct car* clear_train(struct car* first, const char* target){
while(temp != NULL){
next = temp->next;
<<<<<<< HEAD
if(!strcmp(temp->value, target))
free(temp);
=======
if(!strcmp(temp->value, target)) {
if(temp == first) {
free(first);
first = NULL;
}
else
free(temp);
}
>>>>>>> 2033291145353cf5a29605aaa70523464ca047fa
temp = next;
if(!first)
first = temp;