valiamaximova1

bubi C

Jan 17th, 2021 (edited)
832
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     //ЧЕТЕНЕ НА ДАННИ
  6.     int x;
  7.     int y;
  8.     printf("Welcome to vending machine\n");
  9.     //ЧЕТЕНЕ НА РЕДОВЕ
  10.     printf("Enter number of rows(X):\n");
  11.     scanf("%d", &x);
  12.     //ЧЕТЕНЕ НА КОЛОНИ
  13.     printf("Enter number of columns(Y):\n");
  14.     scanf("%d", &y);
  15.  
  16.     // СЪЗДАВАНЕ НА МАТРИЦА ЗА ВСЯКА ХАРАКТЕРИСТИКА НА ПРОДУКТА
  17.     char vmItemsNames[x][y][20]; //матрица с имената
  18.     int vmItemsTypes[x][y];      //матрица с типовете
  19.     float vmItemsWeight[x][y];   //матрица с теглото
  20.     float vmItemsPrices[x][y];   //матрица с цените
  21.     int vmItemsQuantity[x][y];   //матрица с количеството
  22.  
  23.     //create temporary arrays for easier sort of the items
  24.     char itemsNames[x*y][20];
  25.     int itemsTypes[x*y];
  26.     float itemsWeight[x*y];
  27.     float itemsPrices[x*y];
  28.     int itemsQuantity[x*y];
  29.  
  30.     //get user input for items in the machine
  31.     int i;
  32.     for(i=0; i<x*y; i++){
  33.         //ВЪВЕЖДАНЕ НА ИМЕТО НА ПРОДУКТА
  34.         printf("Enter item %d name:\n", i+1);
  35.         scanf("%s", &itemsNames[i]);
  36.         //ВЪВЕЖДАНЕ НА ТИПА НА ПРОДУКТА
  37.         printf("Enter item %d type - 0 for food and 1 for drink:\n", i+1);
  38.         scanf("%d", &itemsTypes[i]);
  39.  
  40.         //ВАЛИДАЦИЯ НА ТИПА НА ПРОДУКТА (ако типа е различен от 0 или 1 трябва да се въведе пак типа)
  41.         while(itemsTypes[i]!=0 && itemsTypes[i]!=1){
  42.             printf("Enter item %d type - 0 for food and 1 for drink:\n", i+1);
  43.             scanf("%d", &itemsTypes[i]);
  44.         }
  45.         //ВЪВЕЖДАНЕ НА ТЕГЛО НА ПРОДУКТА
  46.         printf("Enter item %d weight:\n", i+1);
  47.         scanf("%f", &itemsWeight[i]);
  48.  
  49.         //ВАЛИДАЦИЯ НА КОЛИЧЕСТВОТО ако въведен отрицателно число не ни дава да продължим
  50.         while(itemsWeight[i] <= 0){
  51.              printf("Enter item %d weight:\n", i+1);
  52.         scanf("%f", &itemsWeight[i]);
  53.         }
  54.  
  55.         int isValidPrice;
  56.         //ВЪВЕЖДАНЕ НА ЦЕНА
  57.           printf("Enter item %d price\n", i+1);
  58.           isValidPrice = scanf("%f", &itemsPrices[i]);
  59.  
  60.           //ВАЛИДАЦИЯ НА ЦЕНАТА (ако е отрицателна не ни дава да продължим)
  61.          while (itemsPrices[i] <= 0){
  62.         printf("Enter item %d price\n", i+1);
  63.           isValidPrice = scanf("%f", &itemsPrices[i]);
  64.         }
  65.         //ВЪВЕЖДАНЕ НА КОЛИЧЕСТВО НА ПРОДУКТ
  66.         printf("Enter item %d quantity - between 0 and 3:\n", i+1);
  67.         scanf("%d", &itemsQuantity[i]);
  68.  
  69.         //ВАЛИДАЦИЯ НА КОЛИЧЕСТВОТО(ако е под 0 и повече от 3 не дава да се продължи)
  70.         while(itemsQuantity[i]<0 || itemsQuantity[i]>3){
  71.             printf("Enter item %d quantity - between 0 and 3:\n", i+1);
  72.             scanf("%d", &itemsQuantity[i]);
  73.         }
  74.     }
  75.     //ВРЕМЕННИ ПРОМЕНЛИВИ
  76.     char tempName[20];
  77.     int tempType;
  78.     float tempWeight;
  79.     float tempPrice;
  80.     int tempQuantity;
  81.     int minPosition;
  82.  
  83.     //СОРТИРАНЕ НА МАТРИЦАТА
  84.     //sort items with selection sort - find smaller item and put in in the beginning
  85.     for(i = 0; i < x*y - 1; i++){
  86.         //get position i as minimal
  87.         minPosition=i;
  88.         int j;
  89.         for(j = i + 1; j < x*y; j++){
  90.             //check if item at position j is smaller that the one on minPosition
  91.             //and update minPosition if j is smallet that it
  92.             //firts check item type
  93.             if(itemsTypes[minPosition] > itemsTypes[j]){
  94.                 minPosition=j;
  95.             } else if(itemsTypes[minPosition] == itemsTypes[j]) {
  96.                 //if type is the same than compare weights
  97.                 if(itemsWeight[minPosition] > itemsWeight[j]){
  98.                     minPosition=j;
  99.                 }
  100.             }
  101.         }
  102.  
  103.         //if item at position i is not the smallest item that swap them
  104.         //swap information in every array
  105.         if(minPosition != i){
  106.             strcpy(tempName,itemsNames[i]);
  107.             strcpy(itemsNames[i],itemsNames[minPosition]);
  108.             strcpy(itemsNames[minPosition],tempName);
  109.  
  110.             tempType=itemsTypes[i];
  111.             itemsTypes[i]=itemsTypes[minPosition];
  112.             itemsTypes[minPosition]=tempType;
  113.  
  114.             tempWeight=itemsWeight[i];
  115.             itemsWeight[i]=itemsWeight[minPosition];
  116.             itemsWeight[minPosition]=tempWeight;
  117.  
  118.             tempPrice=itemsPrices[i];
  119.             itemsPrices[i]=itemsPrices[minPosition];
  120.             itemsPrices[minPosition]=tempPrice;
  121.  
  122.             tempQuantity=itemsQuantity[i];
  123.             itemsQuantity[i]=itemsQuantity[minPosition];
  124.             itemsQuantity[minPosition]=tempQuantity;
  125.         }
  126.     }
  127.  
  128.     //move intems in vending machine matrix in correct order
  129.     int m,n, arrIndex=0;
  130.     for(m=0; m<x; m++){
  131.         for(n=0; n<y; n++){
  132.             strcpy(vmItemsNames[m][n], itemsNames[arrIndex]);
  133.             vmItemsTypes[m][n] = itemsTypes[arrIndex];
  134.             vmItemsWeight[m][n] = itemsWeight[arrIndex];
  135.             vmItemsPrices[m][n] = itemsPrices[arrIndex];
  136.             vmItemsQuantity[m][n] = itemsQuantity[arrIndex];
  137.             arrIndex++;
  138.         }
  139.     }
  140.  
  141.     //ОБХОЖДАНЕ И ПРИНТИРАНЕ НА МАТРИЦАТА
  142.     printf("VENDING MACHINE ITEMS:\n");
  143.     for(m=0; m<x; m++){
  144.         for(n=0; n<y; n++){
  145.             printf("Product name: %s - Price: %.2f - Quantity: %.2f", vmItemsNames[m][n], vmItemsPrices[m][n], vmItemsPrices[m][n]);
  146.         }
  147.         printf("\n");
  148.     }
  149.  
  150.     return 0;
  151. }
  152.  
RAW Paste Data