Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "Warehouse.h"
- #include "testing.h"
- using namespace std;
- int main(int argc, char* argv[])
- {
- struct TBox* box = {}; // коробка
- TBox* box_on_shelf = {};
- int number; // номер коробки которую необходимо удалить
- int height; // высота ряда ()
- int count_row; // кол-во рядов
- scanf_s("%d\n%d %d", &number, &count_row, &height);
- getchar();
- if (!(1 <= count_row && count_row <= 10) || !(1 <= height && height <= 10))
- {
- printf_s("invalid input data");
- return 0;
- }
- // Конфигурируем склад: ряды, кол-во коробок в ряду
- configWarehouse(count_row, height);
- // -------------- Заполнение склада --------------------
- startFillingWarehouse(1);
- for (int i = 0; i < count_row; i++)
- {
- int* numbers = (int*)malloc(sizeof(int) * height);
- Article* articles = (Article*)malloc(sizeof(Article) * height);
- int row_height = readBoxArray(numbers, articles);
- for (int j = 0; j < row_height; j++)
- {
- box = (struct TBox*)malloc(sizeof(struct TBox));
- box->article = articles[j];
- box->serialNumber = numbers[j];
- addBox(i, box);
- }
- free(numbers);
- free(articles);
- }
- showWarehouse();
- // -------------- Перенос коробок --------------------x
- // Узнаем количество свободного места на всем скалде, без учета ряда с искомой коробкой
- int free_space = 1; // Сумма свободных ячеек для коробок
- int required_box_row = 0; // Ряд, в коотором лежит искомая коробка
- int number_of_moved = -1; // Количество коробок, которые надо переместить, чтобы добраться до искомой коробки
- for (int i = 0; i < count_row; i++)
- {
- int height_line = getLineHeight(i); // Высота обозреваемого ряда
- int is_curr_box_in_row = 0; // Флаг о том, что коробка находится в ряду
- // Ищем коробку в ряду
- for (int j = 0; j < height_line && !is_curr_box_in_row; j++)
- {
- const TBox* bbox = getBox(i, j);
- if (bbox->serialNumber == number)
- {
- is_curr_box_in_row = 1;
- required_box_row = i;
- number_of_moved = height_line - j - 1;
- }
- }
- // Суммируем свободные места, если в ряду не нашли коробку
- if (height_line != -1 && !is_curr_box_in_row)
- free_space += (height - height_line);
- }
- //printf_s("%d %d", free_space, count_to_del);
- // Если общее количество свободного места больше или равно количеству коробок, которые надо переместить
- if (free_space >= number_of_moved && number_of_moved != -1)
- {
- startBoxTransferring(1, 0, 1, 0, aTV | aVCR | aRadio | aFan, aTV | aVCR | aRadio | aFan);
- // Создаем массив с номерами рядов, в которые будут помещены коробки
- int* numbers_rows = (int*)malloc(number_of_moved * sizeof(int));
- // Перемещеие коробок над искомой коробки до последней невключительно
- for (int i = 0; i < number_of_moved - 1; i++)
- {
- box = removeBox(required_box_row, 1);
- int box_not_added = 1;
- // Перемещаем коробки в свободныем места
- for (int j = 0; j < count_row && box_not_added; j++)
- {
- // Если ряд не является рядом, из которого мы берем коробки
- if (j != required_box_row)
- {
- int height_line = getLineHeight(j);
- // Если в ряду есть свободное место, то помещаем туда коробки
- if (height - height_line > 0)
- {
- box_not_added = !addBox(j, box);
- numbers_rows[i] = j; // запоминаем в какой ряд поместили коробку
- }
- }
- }
- //showWarehouse();
- }
- // Последнюю коробку помещаем на полку
- if (number_of_moved > 0)
- box_on_shelf = removeBox(required_box_row, 1);
- // Искомую коробку удаляем полностью
- removeBox(required_box_row, 0);
- //showWarehouse();
- // --- Восстанавливаем порядок коробок ----
- // Первой загружаем коробку с полки
- if (number_of_moved > 0)
- addBox(required_box_row, box_on_shelf);
- // Загружаем остальные коробки в обратном порядке
- for (int i = 0; i < number_of_moved - 1; i++)
- {
- box = removeBox(numbers_rows[number_of_moved - i - 2], 1);
- addBox(required_box_row, box);
- }
- showWarehouse();
- }
- else
- printf_s("no solution\n");
- // -------------- Очистка склада --------------------
- startEmptyingWarehouse();
- // Удаляем все коробки со склада
- for (int i = 0; i < count_row; i++)
- {
- int height_line = getLineHeight(i);
- for (int j = 0; j < height_line; j++)
- {
- box = removeBox(i, 0);
- free(box);
- }
- }
- showWarehouse();
- WAIT_ANY_KEY
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement