Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Дьяченко Максим Артёмович. ПС-19-1. Вариант 3. Лаб №4.
- #include <fstream>
- #include <cstring>
- #include <iostream>
- #include <math.h>
- using namespace std;
- /* "Workers.txt":
- Alexander
- 6 7 4 10 9 5 6 7 3 3 8 4 10 6 5
- Alexey
- 3 4 4 7 8 10 9 9 6 4 3 3 2 8 3
- Kirill
- 2 3 2 5 4 5 6 5 7 5 8 4 4 6 8
- Vladimir
- 9 9 10 10 9 6 6 8 9 9 8 7 10 8 10
- Maxim
- 6 7 4 5 9 5 4 7 8 3 8 4 6 10 3
- */
- struct Worker {
- char name[30] = "";
- int detailsPerDay[15];
- int detailsTotal = 0; //Общее количество деталей.
- double planDeviationSum = 0; //Сумма отклонений за 15 дней.
- double salary = 0; //Зарплата рабочего.
- };
- int main() {
- setlocale(LC_ALL, "rus");
- ifstream fileIn("Workers.txt");
- ofstream fileOut("Result.txt");
- double amountOfMoney;
- double plannedDetails;
- double planPerDay;
- char* token = nullptr;
- char* nextToken = nullptr;
- char numbers[500];
- cout << "Введите сумму, которая будет распределена между рабочими: "; cin >> amountOfMoney;
- cout << "\nВведите плановое количество деталей, которое должны сделать все рабочие за 15 дней: "; cin >> plannedDetails;
- //Плановое количество деталей на каждый день(делим общее количество на число работников и на число дней).
- planPerDay = plannedDetails/(5.0*15.0);
- cout << endl << "В день каждый рабочий должен изготовить по " << planPerDay << " деталей.";
- //Создаём объект структуры Worker - лучшего работника, которого в конце выведем на экран.
- Worker bestWorker;
- bestWorker.planDeviationSum = INT_MAX;
- //Обычный рабочий.
- Worker worker;
- while (!fileIn.eof()) { //Пока мы не дошли до конца файла...
- fileIn.getline(worker.name, 30); //Считали имя и записали в переменную name.
- fileIn.getline(numbers, 300); //Считали строку с числами.
- token = strtok_s(numbers, " ", &nextToken); //Записали в token первое число(до пробела), а в nextToken - всё, что стоит после пробела.
- int i = 0;
- while (token != nullptr) { //Пока token равен чему-то...
- worker.detailsPerDay[i] = atoi(token); //Присвоим приведённое к типу int значение token на i-й элемент массива detailsPerDay.
- token = strtok_s(nullptr, " ", &nextToken); //"Отрезаем" первое число из nextToken и записываем его в token.
- i++; //Повторяем процедуру для всех чисел в строке.
- }
- //Выведем на экран имя данного рабочего.
- cout << "\n\n" << worker.name << endl;
- fileOut << "\n\n" << worker.name << endl;
- //Выведем количество деталей, которые он изготовил за каждый день.
- for (int i = 0; i < 15; i++) {
- cout << worker.detailsPerDay[i] << " ";
- }
- //Выведем на экран общее количество деталей, которое изготовил за 15 день данный рабочий.
- worker.detailsTotal = 0;
- for (int i = 0; i < 15; i++) {
- worker.detailsTotal += worker.detailsPerDay[i];
- }
- cout << endl << "Всего " << worker.name << " изготовил " << worker.detailsTotal << " деталей." << endl;
- fileOut << endl << "Всего " << worker.name << " изготовил " << worker.detailsTotal << " деталей." << endl;
- //Выведем на экран отклонение от плана за 15 дней для данного рабочего.
- worker.planDeviationSum = 0;
- for (int i = 0; i < 15; i++) {
- worker.planDeviationSum += abs(planPerDay - worker.detailsPerDay[i]);
- }
- cout << "Отклонение от плана за 15 дней у рабочего " << worker.name << " составляет: " << worker.planDeviationSum << " деталей." << endl;
- fileOut << "Отклонение от плана за 15 дней у рабочего " << worker.name << " составляет: " << worker.planDeviationSum << " деталей." << endl;
- //Выведем зарплату данного рабоче в соответствии тем, насколько продуктивно он отработал.
- worker.salary = amountOfMoney * (worker.detailsTotal / plannedDetails);
- cout << "Зарплата у рабочего " << worker.name << " составляет " << worker.salary << " грн.";
- fileOut << "Зарплата у рабочего " << worker.name << " составляет " << worker.salary << " грн.";
- //Найдём лучшего рабочего.
- if (worker.planDeviationSum <= bestWorker.planDeviationSum) {
- bestWorker = worker;
- }
- }
- //Выведем на экран значения всех полей лучшего работника - bestWorker.
- cout << "\n\nЛучший работник за 15 дней - " << bestWorker.name << ".\n";
- fileOut << "\n\nЛучший работник за 15 дней - " << bestWorker.name << ".\n";
- cout << "Его отклонение от плана составляет всего " << bestWorker.planDeviationSum << " деталей." << endl;
- fileOut << "Его отклонение от плана составляет всего " << bestWorker.planDeviationSum << " деталей." << endl;
- cout << "Его зарплата составляет " << bestWorker.salary << " грн." << endl;
- fileOut << "Его зарплата составляет " << bestWorker.salary << " грн." << endl;
- fileIn.close();
- fileOut.close();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement