Advertisement
gg-master

Untitled

May 26th, 2022
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.35 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "Warehouse.h"
  5. #include "testing.h"
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc, char* argv[])
  10. {
  11.  
  12.     struct TBox* box = {};  // коробка
  13.     TBox* box_on_shelf = {};
  14.     int number;         // номер коробки которую необходимо удалить
  15.     int height;         // высота ряда ()
  16.     int count_row;      // кол-во рядов
  17.  
  18.     scanf_s("%d\n%d %d", &number, &count_row, &height);
  19.     getchar();
  20.  
  21.     if (!(1 <= count_row && count_row <= 10) || !(1 <= height && height <= 10))
  22.     {
  23.         printf_s("invalid input data");
  24.         return 0;
  25.     }
  26.    
  27.     // Конфигурируем склад: ряды, кол-во коробок в ряду
  28.     configWarehouse(count_row, height);
  29.    
  30.    
  31.     // -------------- Заполнение склада --------------------
  32.     startFillingWarehouse(1);
  33.  
  34.     for (int i = 0; i < count_row; i++)
  35.     {
  36.         int* numbers = (int*)malloc(sizeof(int) * height);
  37.         Article* articles = (Article*)malloc(sizeof(Article) * height);
  38.  
  39.         int row_height = readBoxArray(numbers, articles);
  40.  
  41.         for (int j = 0; j < row_height; j++)
  42.         {
  43.             box = (struct TBox*)malloc(sizeof(struct TBox));
  44.             box->article = articles[j];
  45.             box->serialNumber = numbers[j];
  46.             addBox(i, box);
  47.         }
  48.         free(numbers);
  49.         free(articles);
  50.     }
  51.  
  52.     showWarehouse();
  53.    
  54.     // -------------- Перенос коробок --------------------x
  55.  
  56.     // Узнаем количество свободного места на всем скалде, без учета ряда с искомой коробкой
  57.     int free_space = 1; // Сумма свободных ячеек для коробок
  58.     int required_box_row = 0; // Ряд, в коотором лежит искомая коробка
  59.     int number_of_moved = -1; // Количество коробок, которые надо переместить, чтобы добраться до искомой коробки
  60.  
  61.     for (int i = 0; i < count_row; i++)
  62.     {
  63.         int height_line = getLineHeight(i); // Высота обозреваемого ряда
  64.         int is_curr_box_in_row = 0; // Флаг о том, что коробка находится в ряду
  65.        
  66.         // Ищем коробку в ряду
  67.         for (int j = 0; j < height_line && !is_curr_box_in_row; j++)
  68.         {
  69.             const TBox* bbox = getBox(i, j);
  70.             if (bbox->serialNumber == number)
  71.             {
  72.                 is_curr_box_in_row = 1;
  73.                 required_box_row = i;
  74.                 number_of_moved = height_line - j - 1;
  75.             }
  76.         }
  77.         // Суммируем свободные места, если в ряду не нашли коробку
  78.         if (height_line != -1 && !is_curr_box_in_row)
  79.             free_space += (height - height_line);
  80.     }
  81.  
  82.     //printf_s("%d %d", free_space, count_to_del);
  83.     // Если общее количество свободного места больше или равно количеству коробок, которые надо переместить
  84.     if (free_space >= number_of_moved && number_of_moved != -1)
  85.     {
  86.         startBoxTransferring(1, 0, 1, 0, aTV | aVCR | aRadio | aFan, aTV | aVCR | aRadio | aFan);
  87.  
  88.         // Создаем массив с номерами рядов, в которые будут помещены коробки
  89.         int* numbers_rows = (int*)malloc(number_of_moved * sizeof(int));
  90.  
  91.         // Перемещеие коробок над искомой коробки до последней невключительно
  92.         for (int i = 0; i < number_of_moved - 1; i++)
  93.         {
  94.             box = removeBox(required_box_row, 1);
  95.            
  96.             int box_not_added = 1;
  97.             // Перемещаем коробки в свободныем места
  98.             for (int j = 0; j < count_row && box_not_added; j++)
  99.             {
  100.                 // Если ряд не является рядом, из которого мы берем коробки
  101.                 if (j != required_box_row)
  102.                 {
  103.                     int height_line = getLineHeight(j);
  104.                     // Если в ряду есть свободное место, то помещаем туда коробки
  105.                     if (height - height_line > 0)
  106.                     {
  107.                         box_not_added = !addBox(j, box);
  108.                         numbers_rows[i] = j; // запоминаем в какой ряд поместили коробку
  109.                     }
  110.                 }
  111.             }
  112.             //showWarehouse();
  113.         }
  114.         // Последнюю коробку помещаем на полку
  115.         if (number_of_moved > 0)
  116.             box_on_shelf = removeBox(required_box_row, 1);
  117.  
  118.         // Искомую коробку удаляем полностью
  119.         removeBox(required_box_row, 0);
  120.        
  121.         //showWarehouse();
  122.         //  --- Восстанавливаем порядок коробок ----
  123.        
  124.         // Первой загружаем коробку с полки
  125.         if (number_of_moved > 0)
  126.             addBox(required_box_row, box_on_shelf);
  127.         // Загружаем остальные коробки в обратном порядке
  128.         for (int i = 0; i < number_of_moved - 1; i++)
  129.         {
  130.             box = removeBox(numbers_rows[number_of_moved - i - 2], 1);
  131.             addBox(required_box_row, box);
  132.         }
  133.         showWarehouse();
  134.     }
  135.     else
  136.         printf_s("no solution\n");
  137.  
  138.     // -------------- Очистка склада --------------------
  139.     startEmptyingWarehouse();
  140.  
  141.     // Удаляем все коробки со склада
  142.     for (int i = 0; i < count_row; i++)
  143.     {
  144.         int height_line = getLineHeight(i);
  145.         for (int j = 0; j < height_line; j++)
  146.         {
  147.             box = removeBox(i, 0);
  148.             free(box);
  149.         }
  150.     }
  151.    
  152.     showWarehouse();
  153.  
  154.     WAIT_ANY_KEY
  155.  
  156.         return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement