#include #include #include #include //const wchar_t *message - сообщение таблицы //double **x - двумерный массив для вывода //double *a - массив склада //wchar_t aWchar - название склада //int aSize - количество элементов в складе //double *b - массив магазина //wchar_t bWchar - название магазина //int bSize - количество элементов в магазине void Print_table(const wchar_t *message, double **x, double *a, wchar_t aWchar, int aSize, double *b, wchar_t bWchar, int bSize) //функция вывода всего на экран { std::wcout << message; for(int i = 0; i < bSize; i++) { std::wcout <<"\t"<< bWchar << b[i]; } std::wcout < newB то мы двумерному массиву присваиваем индексы newb и от newA отнимаем newb и увеличиваем индекс bindex каждый раз */ while(aIndex < aSize && bIndex < bSize) { if(newA[aIndex] > newB[bIndex]) { x[aIndex][bIndex] = newB[bIndex]; newA[aIndex] -= newB[bIndex]; bIndex++; } else { x[aIndex][bIndex] = newA[aIndex]; newB[bIndex] -= newA[aIndex]; aIndex++; } } delete[]newA; delete[]newB; } double GetFullPrice(int aSize, int bSize, double** x, double** c) //считаем общую стоимость { double sum = 0.; for(int i = 0; i < aSize; i++) { for(int j = 0; j < bSize; j++) { if(x[i][j] > 0.) { sum += x[i][j]*c[i][j]; } } } return sum; } void MakeKnownTask() // главная функция { double *a, *b, **x, **c; int aSize = 3, bSize = 5; int lastASize = aSize; a = new double[aSize+1]; b = new double[bSize+1]; x = new double *[aSize+1]; c = new double *[aSize+1]; for(int i = 0; i < aSize + 1; i++) { x = new double *[aSize+1]; c = new double *[aSize+1]; } a[0] = 300; a[1] = 150; a[2] = 250; b[0] = 170; b[1] = 110; b[2] = 100; b[3] = 120; b[4] = 200; c[0][0] = 70; c[0][1] = 50; c[0][2] = 15; c[0][3] = 80; c[0][4] = 70; c[1][0] = 80; c[1][1] = 90; c[1][2] = 40; c[1][3] = 60; c[1][4] = 85; c[2][0] = 50; c[2][1] = 10; c[2][2] = 90; c[2][3] = 11; c[2][4] = 25; Print_table(L"\tНачальное условие. Таблица стоимостей\n", c, a, 'a', aSize, b, 'b', bSize); Northwest(a, aSize, b, bSize, x); Print_table(L"\tНачальное приближение методом северо-западного угла\n", x, a, 'a', aSize, b, 'b', bSize); //MinimalPricesApproximation(a, aSize, b, bSize, x, c); //PrintTable(L"\tНачальное приближение методом минимальных стоимостей\n", x, a, 'a', aSize, b, 'b', bSize); wprintf(L"Общая стоимость: %.f\n", GetFullPrice(aSize, bSize, x, c)); for(int i = 0; i < lastASize + 1; i++) { delete[]x[i]; delete[]c[i]; } delete[]a; delete[]b; delete[]x; delete[]c; } int main() { int n = 0, m = 0; setlocale(LC_ALL, ""); wprintf(L"Введите количество складов:"); std::cin >> n; wprintf(L"Введите количество магазинов:"); std::cin >> m; void MakeKnownTask(); return 0; }