Advertisement
VEGASo

Lab #6 Ex. 2

Dec 15th, 2022
818
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.49 KB | None | 0 0
  1. /////////////////////////////////////////////////////////// Lab 6 Ex.2.cpp
  2. #include <iostream>
  3. #include <clocale>
  4. #include <string>
  5. #include <vector>
  6. #include <iterator>
  7. #include <windows.h>
  8.  
  9.  
  10. #include "Funcs.h"
  11.  
  12. using namespace std;
  13.  
  14. int main()
  15. {
  16.     setlocale(LC_ALL, "RU");  // Для корректного отображения русского языка
  17.     SetConsoleCP(1251);       //
  18.     SetConsoleOutputCP(1251); //
  19.  
  20.     Student group[Constants::numStud]{}; // Создаем массив с количеством эелементов указанных в Constants::
  21.  
  22.     cout << "Введите ФИО студента: \n";
  23.     getGroup(group); // Заносим введенные имена в массив
  24.    
  25.  
  26.     cout << endl;
  27.     for (int i{ 0 }; i < Constants::numStud; i++) // Выполняем до тех пор, пока i меньше числа студентов
  28.         getScoreRate(group, i); // Заносим введенные оценки в массив
  29.  
  30.  
  31.     for (int i{ 0 }; i < Constants::numStud; i++) // Считаем и записываем балы за КТ каждого студента
  32.     {
  33.         calcKT(group, i);
  34.         Auto(group, i);
  35.     }
  36.  
  37.     // Выводим таблицу
  38.     cout << "\nТаблица результатов: \n" << "N\t" << "ФИО\t\t" << "KT-1\t" << "KT-2\t" << "Итог\t" << "Автомат";
  39.     for (int i{ 0 }; i < Constants::numStud; i++)
  40.     {
  41.         cout << boolalpha << "\n" << group[i].id << "\t" << group[i].fio << "\t\t" << group[i].KT1 << "\t" << group[i].KT2 << "\t" << group[i].allKT << "\t" << group[i].Auto;
  42.     }
  43.     cout << endl;
  44.    
  45.  
  46.     return 0;
  47. }
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. /////////////////////////////////////////////////////////// Funcs.cpp
  59. #include <iostream>
  60. #include "Funcs.h"
  61.  
  62. using namespace std;
  63.  
  64.  
  65. void getGroup(Student* array) // Функция для заполнения ФИО студента
  66. {
  67.     for (int i{ 0 }; i < Constants::numStud; ++i)
  68.     {
  69.         array[i].id = i + 1;
  70.         cout << "студент N" << array[i].id << ": ";
  71.         getline(cin >> ws, array[i].fio);
  72.     }
  73. }
  74.  
  75.  
  76. void getScoreRate(Student* array, int num) // Функция для получения оценок студента
  77. {
  78.     if (num < 0 || num > Constants::numStud - 1)
  79.         return;
  80.  
  81.     cout << "Оценки студента " << array[num].fio << ": ";
  82.     for (int i{0}; i < Constants::scoreRate1 + Constants::scoreRate2; i++)
  83.         cin >> array[num].score[i];
  84.  
  85.     if (isMarsOk(array[num].score, Constants::scoreRate1 + Constants::scoreRate2))
  86.         return;
  87.     else
  88.     {
  89.         cout << "Вы ввели неверную оценку, введите оценки еще раз: ";
  90.         getScoreRate(array, num);
  91.     }
  92. }
  93.  
  94.  
  95. void calcKT(Student* array, int num)
  96. {
  97.     double sumScoreRate1{ 0.0 };
  98.     double sumScoreRate2{ 0.0 };
  99.  
  100.     // Расчет 1-ой КТ
  101.     for (int i{ 0 }; i < Constants::scoreRate1; i++)
  102.     {
  103.         sumScoreRate1 += (array[num].score[i] / static_cast<double>(Constants::maxMark));
  104.     }
  105.  
  106.     double KT1 = (Constants::maxMarkKT / Constants::scoreRate1) * sumScoreRate1;
  107.  
  108.  
  109.     // Расчет 2-ой КТ
  110.     for (int i{Constants::scoreRate1}; i < (Constants::scoreRate2) * 2; i++)
  111.     {
  112.         sumScoreRate2 += (array[num].score[i] / static_cast<double>(Constants::maxMark));
  113.     }
  114.  
  115.     double KT2 = (Constants::maxMarkKT / Constants::scoreRate2) * sumScoreRate2;
  116.  
  117.  
  118.     // Расчет итога
  119.     int allKT = 0;
  120.  
  121.     allKT = ((KT1 + KT2) / (Constants::maxMarkKT + Constants::maxMarkKT)) * Constants::maxMarkAllKT;
  122.  
  123.  
  124.  
  125.     array[num].KT1 = KT1;    // Заносим балы за КТ и Итог в структуру студента
  126.     array[num].KT2 = KT2;    //
  127.     array[num].allKT = allKT;//
  128. }
  129.  
  130.  
  131. void Auto(Student* array, int num) // Будет автомат или нет
  132. {
  133.     if (array[num].allKT > 50)
  134.     {
  135.         array[num].Auto = true;
  136.     }
  137. }
  138.  
  139.  
  140. bool isMarsOk(int* marks, int size) // Функция для проверки введенной оценки
  141. {
  142.     for (int i{ 0 }; i < size; ++i)
  143.         if (marks[i] < 0 || marks[i] > Constants::maxMark) // Если оценка меньше 0 или больше 5, то
  144.             return false;
  145.    
  146.     return true;
  147. }
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. /////////////////////////////////////////////////////////// Funcs.h
  156. #ifndef FUNCS_H
  157. #define FUNCS_H
  158.  
  159. #include <string>
  160. #include <vector>
  161.  
  162.  
  163. namespace Constants
  164. {
  165.     inline constexpr int numStud{3};        // Число студентов в группе
  166.     inline constexpr int scoreRate1{4};     // Число оценок в 1-ой КТ
  167.     inline constexpr int scoreRate2{4};     // Число оценок во 2-ой КТ
  168.     inline constexpr int maxMark{5};        // Макс оценка за работу
  169.     inline constexpr int maxMarkKT{100};    // Макс оценка за КТ
  170.     inline constexpr int maxMarkAllKT{100}; // Макс оценка за Итог
  171. };
  172.  
  173.  
  174. struct Student
  175. {
  176.     std::string fio;                                          // Фио студента
  177.     int id;                                                   // Номер студента
  178.     int score[Constants::scoreRate1 + Constants::scoreRate2]; // Оценки студента
  179.     int KT1;                                                  // Ну тут и так все ясно
  180.     int KT2;                                                  // Ну тут и так все ясно
  181.     int allKT;                                                // Ну тут тоже вроде все ясно
  182.     bool Auto = false;                                        // Мечта любого студента
  183. };
  184.  
  185.  
  186. void getGroup(Student* array);
  187. void getScoreRate(Student* array, int num);
  188. bool isMarsOk(int* marks, int size);
  189. void calcKT(Student* array, int num);
  190. void Auto(Student* array, int num);
  191.  
  192. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement