Advertisement
Guest User

Untitled

a guest
May 30th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <vector>
  5. #include <numeric>
  6. #include <algorithm>
  7. #include <ctime>
  8.  
  9. using namespace std;
  10.  
  11. struct Tovar
  12. {
  13. string name;
  14. int amount;
  15. double price;
  16. };
  17.  
  18. struct Kooperativ
  19. {
  20. string name;
  21. Tovar koop_list[3];
  22. };
  23.  
  24. struct Realizator
  25. {
  26. int real_days;
  27. Tovar real_list[3];
  28. };
  29.  
  30.  
  31. int main()
  32. {
  33. setlocale(0, "");
  34.  
  35.  
  36. int i, j;
  37. int real_count; //кол-во реализаторов
  38. ifstream fin("file.txt");
  39. Kooperativ coop;
  40. int count = 0; //счётчик проходов
  41. double cost; //стоимость (цена * кол-во)
  42. double month_prib[30][4]; //массив для хранения прибыли на день (30 дней х 4 кооператива)
  43.  
  44. fin.ignore(65); //пропускаем заголовок в файле
  45.  
  46. for (i = 0; i < 30; i++)
  47. for (j = 0; j < 5; j++)
  48. month_prib[i][j] = 0; //обнуляем
  49.  
  50. while (!fin.eof()) //цикл, считывает инфу по структурам построчно до конца файла
  51. {
  52. srand(time(nullptr)); //для генератора рандомных чисел
  53.  
  54.  
  55. fin >> coop.name;
  56. for (i = 0; i < 3; i++)
  57. {
  58. fin >> coop.koop_list[i].name;
  59. }
  60. for (i = 0; i < 3; i++)
  61. {
  62. fin >> coop.koop_list[i].amount;
  63. }
  64. for (i = 0; i < 3; i++)
  65. {
  66. fin >> coop.koop_list[i].price;
  67.  
  68. }
  69.  
  70. cout << "Введите количество реализаторов для кооператива \"" << coop.name << "\" : ";
  71. cin >> real_count;
  72.  
  73. int *real_tovar = new int[real_count]; //массив для хранения случайный чисел, т.е. количества продуктов для реализатора взятых из списка (от 1 до 3 (вкл.) ) каждого кооператива
  74. for (i = 0; i < real_count; i++)
  75. real_tovar[i] = 1 + rand() % 3;
  76.  
  77. Realizator* impl = new Realizator[real_count];
  78. int real_percent; //процент реализации (увеличение цены для прибыли на столько-то процентов)
  79.  
  80. /* Последующий код взял из инета, я так и сказал, норм вроде не спрашивала. Суть его - три случайных уникальных числа в массив (вектор) vec как номера продуктов из кооператива*/
  81.  
  82. vector<int> vec(3); //вектор (массив) для хранения трёх уникальных чисел инт
  83. iota(vec.begin(), vec.end(), 0); //присваивание значений от 0 до 2
  84. random_shuffle(vec.begin(), vec.end()); //встряска (случайное месторасположение) чисел
  85.  
  86. /* Конец кода из инета */
  87.  
  88.  
  89.  
  90. for (i = 0; i < real_count; i++)
  91. {
  92. //По каждому реализатору берём кол-во дней на реализацию для него
  93. cout << "\n\t Введите кол-во дней реализации для реализатора № " << i + 1 << ": ";
  94. cin >> impl[i].real_days;
  95. for (j = 0; j < real_tovar[i]; j++)
  96. {
  97. real_percent = 100 + rand() % 25; //увеличение цены на случ. число от 100 до 125 процентов
  98. impl[i].real_list[j].name = coop.koop_list[vec[j]].name;
  99. impl[i].real_list[j].amount = coop.koop_list[vec[j]].amount;
  100. impl[i].real_list[j].price = coop.koop_list[vec[j]].price / 100 * real_percent;
  101. }
  102. }
  103.  
  104.  
  105. double **month = new double*[real_count]; //массив для вывода ( вроде как xD )
  106. for (i = 0; i < real_count; i++)
  107. {
  108. month[i] = new double[30];
  109. }
  110.  
  111. for (i = 0; i < real_count; i++) //обнуляем его
  112. for (j = 0; j < 30; j++)
  113. month[i][j] = 0;
  114.  
  115. int maximum_days = 0;
  116. int days_count = 0;
  117. int prod_tovar; //кол-во проданных товаров
  118. int ostatok_tovar; // остаток товаров, от него будут отниматься кол-во проданных
  119. int enter_count = 0; //количество входов в цикл (надо шоб на нулевом входе зароботок писало (строка 139-140) )
  120. double zarabotok = 0; //прибыль
  121.  
  122. //начало огромного фора
  123. for (i = 0; i < real_count; i++)
  124. {
  125. cost = 0;
  126. enter_count = 0;
  127.  
  128. for (j = 0; j < real_tovar[i]; j++)
  129. {
  130. days_count = 0;
  131. ostatok_tovar = impl[i].real_list[j].amount;
  132. while (ostatok_tovar > 0)
  133. {
  134. zarabotok = 0;
  135.  
  136. prod_tovar = 1 + rand() % ostatok_tovar; //продаём случ. кол-во товара
  137. zarabotok += prod_tovar*(impl[i].real_list[j].price - coop.koop_list[vec[j]].price); //считаем прибыль
  138.  
  139. if (j == 0 && enter_count == 0) month[i][days_count] = zarabotok;
  140. else month[i][days_count] += zarabotok;
  141.  
  142. ostatok_tovar -= prod_tovar; //вычитаем из остатка проданный товар
  143.  
  144. if (days_count > maximum_days)
  145. maximum_days = days_count;
  146.  
  147. if (ostatok_tovar < 0)
  148. ostatok_tovar += prod_tovar;
  149.  
  150. days_count++;
  151.  
  152. if (days_count == impl[i].real_days)
  153. {
  154. cost += ostatok_tovar*coop.koop_list[vec[j]].price;
  155. break;
  156. }
  157. enter_count++;
  158. }
  159. }
  160.  
  161. /*
  162. не помню нах последующий код нужен, попробуй понять)
  163. если шо - пролистай как-нибудь, шоб по-бырику перейти дальше
  164. */
  165.  
  166. for (j = 0; j < maximum_days + 1; j++)
  167. month[i][maximum_days + 1] += month[i][j];
  168.  
  169. month[i][maximum_days + 1] -= cost;
  170.  
  171. for (j = maximum_days + 1; j < 30; j++)
  172. month[i][j] = month[i][maximum_days + 1];
  173.  
  174. maximum_days = 0;
  175.  
  176. /* конец кода "хз зачем" */
  177. }
  178. //конец огромного фора
  179.  
  180. for (i = 0; i < 30; i++)
  181. for (j = 0; j < real_count; j++)
  182. month_prib[i][count] += month[j][i];
  183. count++;
  184.  
  185. cout << "Подсчитано. " << endl;
  186. } //конец огромного вайла
  187.  
  188. cout << "Результат получен." << endl;
  189. fin.close();
  190.  
  191.  
  192. //Выводим в файл
  193. ofstream fout("file_result.txt", ios::out);
  194.  
  195. fout << "Дни: Первый Второй Третий Чётвертый\n";
  196. for (i = 0; i < 30; i++)
  197. {
  198. fout << endl;
  199. fout << i + 1 << "-й день\t";
  200. for (j = 0; j < 4; j++)
  201. {
  202. if (month_prib[i][j] >= 0) fout << "\t[Пр.]" << month_prib[i][j] << "\t\t"; //если положительная прибыль, выводит с приставкой [пр.] (прибыль)
  203. else fout << "\t[Уб.]" << fabs(month_prib[i][j]) << "\t\t"; //если нет - выводит с приставкой [уб.] (убыток)
  204. }
  205. }
  206. fout.close();
  207.  
  208. int day; //для дня
  209. int maxarr[3]; //массив для хранения номеров трёх прибыльных массивов, будет отсортирован в порядке спадания по прибыльности
  210. double max;
  211. cout << "Вывести итог дня №: ";
  212. cin >> day;
  213.  
  214. //собственно поиск и сортировка по прибыльности
  215. for (j = 0; j < 3; j++)
  216. {
  217. max = -10000;
  218. for (i = 0; i < 4; i++)
  219. {
  220. if (month_prib[day - 1][i] > max)
  221. {
  222. max = month_prib[day - 1][i];
  223. maxarr[j] = i;
  224. }
  225.  
  226. }
  227. month_prib[day - 1][maxarr[j]] = -10000;
  228. }
  229.  
  230.  
  231. //Выводим последнее в файл, добавляя в конец
  232. fout.open("file_result.txt", ios::app);
  233. fout << endl;
  234. fout << "\nИтог дня № " << day;
  235. fout << "\nПрибыльные кооперативы (по спаданию): ";
  236. for (i = 0; i < 3; i++) fout << '\t' <<maxarr[i] + 1 << '\t';
  237. fout.close();
  238.  
  239. cout << "Результат в файле \"file_result.txt\". Выход..." << endl;
  240. system("pause");
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement