Advertisement
MrGhost75

LAB9_VAR3

May 22nd, 2020
936
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.94 KB | None | 0 0
  1. //Дьяченко Максим Артёмович. ПС-19-1. Вариант 3. Лаб №4.
  2.  
  3. #include <fstream>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <math.h>
  7. using namespace std;
  8.  
  9. /* "Workers.txt":
  10. Alexander
  11. 6 7 4 10 9 5 6 7 3 3 8 4 10 6 5
  12. Alexey
  13. 3 4 4 7 8 10 9 9 6 4 3 3 2 8 3
  14. Kirill
  15. 2 3 2 5 4 5 6 5 7 5 8 4 4 6 8
  16. Vladimir
  17. 9 9 10 10 9 6 6 8 9 9 8 7 10 8 10
  18. Maxim
  19. 6 7 4 5 9 5 4 7 8 3 8 4 6 10 3
  20. */
  21.  
  22. struct Worker {
  23.     char name[30] = "";
  24.     int detailsPerDay[15];
  25.     int detailsTotal = 0; //Общее количество деталей.
  26.     double planDeviationSum = 0; //Сумма отклонений за 15 дней.
  27.     double salary = 0; //Зарплата рабочего.
  28. };
  29.  
  30. int main() {
  31.     setlocale(LC_ALL, "rus");
  32.     ifstream fileIn("Workers.txt");
  33.     ofstream fileOut("Result.txt");
  34.     double amountOfMoney;
  35.     double plannedDetails;
  36.     double planPerDay;
  37.     char* token = nullptr;
  38.     char* nextToken = nullptr;
  39.     char numbers[500];
  40.  
  41.     cout << "Введите сумму, которая будет распределена между рабочими: "; cin >> amountOfMoney;
  42.     cout << "\nВведите плановое количество деталей, которое должны сделать все рабочие за 15 дней: "; cin >> plannedDetails;
  43.  
  44.     //Плановое количество деталей на каждый день(делим общее количество на число работников и на число дней).
  45.     planPerDay = plannedDetails/(5.0*15.0);
  46.     cout << endl << "В день каждый рабочий должен изготовить по " << planPerDay << " деталей.";
  47.  
  48.     //Создаём объект структуры Worker - лучшего работника, которого в конце выведем на экран.
  49.     Worker bestWorker;
  50.     bestWorker.planDeviationSum = INT_MAX;
  51.    
  52.     //Обычный рабочий.
  53.     Worker worker;
  54.  
  55.     while (!fileIn.eof()) { //Пока мы не дошли до конца файла...
  56.         fileIn.getline(worker.name, 30); //Считали имя и записали в переменную name.
  57.  
  58.         fileIn.getline(numbers, 300); //Считали строку с числами.
  59.         token = strtok_s(numbers, " ", &nextToken); //Записали в token первое число(до пробела), а в nextToken - всё, что стоит после пробела.
  60.  
  61.         int i = 0;
  62.         while (token != nullptr) { //Пока token равен чему-то...
  63.             worker.detailsPerDay[i] = atoi(token); //Присвоим приведённое к типу int значение token на i-й элемент массива detailsPerDay.
  64.             token = strtok_s(nullptr, " ", &nextToken); //"Отрезаем" первое число из nextToken и записываем его в token.
  65.             i++; //Повторяем процедуру для всех чисел в строке.
  66.         }
  67.  
  68.         //Выведем на экран имя данного рабочего.
  69.         cout << "\n\n" << worker.name << endl;
  70.         fileOut << "\n\n" << worker.name << endl;
  71.  
  72.         //Выведем количество деталей, которые он изготовил за каждый день.
  73.         for (int i = 0; i < 15; i++) {
  74.             cout << worker.detailsPerDay[i] << " ";
  75.         }
  76.  
  77.         //Выведем на экран общее количество деталей, которое изготовил за 15 день данный рабочий.
  78.         worker.detailsTotal = 0;
  79.         for (int i = 0; i < 15; i++) {
  80.             worker.detailsTotal += worker.detailsPerDay[i];
  81.         }
  82.         cout << endl << "Всего " << worker.name << " изготовил " << worker.detailsTotal << " деталей." << endl;
  83.         fileOut << endl << "Всего " << worker.name << " изготовил " << worker.detailsTotal << " деталей." << endl;
  84.  
  85.         //Выведем на экран отклонение от плана за 15 дней для данного рабочего.
  86.         worker.planDeviationSum = 0;
  87.         for (int i = 0; i < 15; i++) {
  88.             worker.planDeviationSum += abs(planPerDay - worker.detailsPerDay[i]);
  89.         }
  90.         cout << "Отклонение от плана за 15 дней у рабочего " << worker.name << " составляет: " << worker.planDeviationSum << " деталей." << endl;
  91.         fileOut << "Отклонение от плана за 15 дней у рабочего " << worker.name << " составляет: " << worker.planDeviationSum << " деталей." << endl;
  92.  
  93.         //Выведем зарплату данного рабоче в соответствии тем, насколько продуктивно он отработал.
  94.         worker.salary = amountOfMoney * (worker.detailsTotal / plannedDetails);
  95.         cout << "Зарплата у рабочего " << worker.name << " составляет " << worker.salary << " грн.";
  96.         fileOut << "Зарплата у рабочего " << worker.name << " составляет " << worker.salary << " грн.";
  97.  
  98.         //Найдём лучшего рабочего.
  99.         if (worker.planDeviationSum <= bestWorker.planDeviationSum) {
  100.             bestWorker = worker;
  101.         }
  102.     }
  103.     //Выведем на экран значения всех полей лучшего работника - bestWorker.
  104.     cout << "\n\nЛучший работник за 15 дней - " << bestWorker.name << ".\n";
  105.     fileOut << "\n\nЛучший работник за 15 дней - " << bestWorker.name << ".\n";
  106.     cout << "Его отклонение от плана составляет всего " << bestWorker.planDeviationSum << " деталей." << endl;
  107.     fileOut << "Его отклонение от плана составляет всего " << bestWorker.planDeviationSum << " деталей." << endl;
  108.     cout << "Его зарплата составляет " << bestWorker.salary << " грн." << endl;
  109.     fileOut << "Его зарплата составляет " << bestWorker.salary << " грн." << endl;
  110.  
  111.     fileIn.close();
  112.     fileOut.close();
  113.     system("pause");
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement