add
This commit is contained in:
commit
872b1fc5bd
@ -6,6 +6,7 @@
|
|||||||
struct dish{
|
struct dish{
|
||||||
char name[100];
|
char name[100];
|
||||||
float price;
|
float price;
|
||||||
|
<<<<<<< HEAD
|
||||||
};
|
};
|
||||||
|
|
||||||
int comparator (const void * p1, const void * p2){
|
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* order = calloc(dishesNumber, sizeof(int));
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
float temp;
|
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++){
|
for(int i = 0; i < dishesNumber; i++){
|
||||||
allPrises[i] = dishesList[i].price;
|
allPrises[i] = dishesList[i].price;
|
||||||
ascendingPrises[i] = allPrises[i];
|
ascendingPrises[i] = allPrises[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
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++){
|
||||||
|
=======
|
||||||
|
qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); //процеес сортировки
|
||||||
|
|
||||||
|
for(int i = 0; i < dishesNumber; i++){ //запись порядка элемента в основном массиве
|
||||||
|
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
|
||||||
for(int j = 0; j < dishesNumber; j++){
|
for(int j = 0; j < dishesNumber; j++){
|
||||||
STEP:
|
STEP:
|
||||||
if(ascendingPrises[i] == allPrises[j]){
|
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));
|
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){
|
||||||
|
=======
|
||||||
|
memcpy(result, order, dishesNumber * sizeof(int)); //копирование одного в другой
|
||||||
|
}
|
||||||
|
|
||||||
|
void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ //сорторвка по алфавиту
|
||||||
|
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
|
||||||
int* result = calloc(dishesNumber, sizeof(int));
|
int* result = calloc(dishesNumber, sizeof(int));
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
for(int i = 0; i < dishesNumber; i++){
|
for(int i = 0; i < dishesNumber; i++){
|
||||||
|
<<<<<<< HEAD
|
||||||
for(int j = i; j < dishesNumber; j++){
|
for(int j = i; j < dishesNumber; j++){
|
||||||
if(dishesList[order[i]].price == dishesList[order[j]].price){
|
if(dishesList[order[i]].price == dishesList[order[j]].price){
|
||||||
if(dishesList[order[i]].name[0] < dishesList[order[j]].name[0]){
|
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;
|
break;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
temp = order[i];
|
=======
|
||||||
order[i] = order[j];
|
for(int j = i; j < dishesNumber; j++){ //чтение масивов их сравнение
|
||||||
order[j] = temp;
|
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{
|
else{
|
||||||
|
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
|
||||||
|
temp = order[i];
|
||||||
|
order[i] = order[j];
|
||||||
|
order[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
else{
|
||||||
|
=======
|
||||||
|
else{ //цены совпали но не в порядке алфавита
|
||||||
|
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
|
||||||
temp = order[i];
|
temp = order[i];
|
||||||
order[i] = order[j];
|
order[i] = order[j];
|
||||||
order[j] = temp;
|
order[j] = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
result[counter] = order[i];
|
result[counter] = order[i];
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
@ -102,9 +147,43 @@ int main(){
|
|||||||
getAlphabetOrder(printOrder, dishesList, finalCounter);
|
getAlphabetOrder(printOrder, dishesList, finalCounter);
|
||||||
|
|
||||||
for(int j = 0; j < finalCounter; j++){
|
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("%s", dishesList[printOrder[j]].name);
|
||||||
printf("%f\n", dishesList[printOrder[j]].price);
|
printf("%f\n", dishesList[printOrder[j]].price);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
<<<<<<< HEAD
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
}
|
||||||
|
>>>>>>> 4c98f69b4ddc69a1a8afad98899d692228dc1269
|
||||||
|
|||||||
@ -1 +1,86 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user