Advertisement
Guest User

Untitled

a guest
May 20th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <string>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. struct date { //структура для даты
  10.     int dd;
  11.     int mm;
  12.     int yy;
  13. };
  14.  
  15. struct student { //структура для студента
  16.     string surname;     //фамилия
  17.     string name;        //имя
  18.     string patronymic;  //отчество
  19.     date date_of_birth; //дата рождения
  20.     float m1;        //оценки по пяти предметам  
  21.     float m2;
  22.     float m3;
  23.     float m4;
  24.     float m5;
  25.     float sum;          //сумма
  26. };
  27.  
  28. date str_to_date(string str) { //перевод строки в дату
  29.     date x;
  30.  
  31.     string temp = str.substr(0, 2); //день
  32.     x.dd = atoi(temp.c_str());
  33.     temp = str.substr(3, 2);        //месяц
  34.     x.mm = atoi(temp.c_str());
  35.     temp = str.substr(6, 4);        //год
  36.     x.yy = atoi(temp.c_str());
  37.  
  38.     return x;
  39. }
  40.  
  41. vector<student> read() { //считывание данных из файла
  42.     ifstream in;         //открываем поток ввода из файла input.txt
  43.     in.open("input.txt");
  44.     cout << "Началось считывание из файла 'input.txt'" << endl;
  45.  
  46.     vector<student> group;
  47.     student temp;
  48.     string temp_date;
  49.  
  50.     //считываем до тех пор, пока это возможно
  51.     //(пользуемся тем фактом, что поток ввода может возвращать булево значение, если что-то считывается)
  52.     while (in >> temp.surname >> temp.name >> temp.patronymic >> temp_date >> temp.m1 >> temp.m2 >> temp.m3 >> temp.m4 >> temp.m5)
  53.     {
  54.         temp.date_of_birth = str_to_date(temp_date);
  55.         temp.sum = temp.m1 + temp.m2 + temp.m3 + temp.m4 + temp.m5; //подсчет суммы
  56.         group.push_back(temp);
  57.         cout << "Получены данные о " << group.size() << "-м студенте" << endl;
  58.     }
  59.  
  60.     cout << "Считывание из файла завершено" << endl;
  61.     in.close();  //закрываем поток
  62.     return group;
  63. }
  64.  
  65. void print(vector<student> x) { //вывод в файл
  66.     ofstream out;              //открываем поток файлового вывода
  67.     out.open("output.txt");
  68.     cout << "Началась запись в файл 'output.txt'" << endl;
  69.     for (int i = 0; i < x.size(); i++) {
  70.         out << setw(13) << left << x[i].surname; //выравниваем по левому краю
  71.         out << setw(10) << left << x[i].name;    //на каждое значение отводим определенное количество символов с помощью setw
  72.         out << setw(13) << left << x[i].patronymic;
  73.         if (x[i].date_of_birth.dd < 10) out << left << '0' << x[i].date_of_birth.dd << '.';
  74.         else out << left << x[i].date_of_birth.dd << '.';
  75.         if (x[i].date_of_birth.mm < 10) out << '0' << x[i].date_of_birth.mm << '.';
  76.         else out << x[i].date_of_birth.mm << '.';
  77.         out << setw(6) << left << x[i].date_of_birth.yy;
  78.         out << setw(4) << left << x[i].m1;
  79.         out << setw(4) << left << x[i].m2;
  80.         out << setw(4) << left << x[i].m3;
  81.         out << setw(4) << left << x[i].m4;
  82.         out << setw(4) << left << x[i].m5;
  83.         out << setw(5) << left << x[i].sum << endl;
  84.     }
  85.  
  86.     cout << "Запись данных в файл завершена" << endl;
  87.     out.close();
  88. }
  89.  
  90. void ins_sort(vector<student> &a) { //сортировка вставками по убыванию
  91.     int n = a.size();
  92.     for (int i = 0; i < n; i++) {
  93.         int j = i;
  94.         while (j > 0 && a[j].sum > a[j - 1].sum) { //перемещаем элемент влево до тех пор, пока слева от него не
  95.             swap(a[j], a[j - 1]);          //окажется больший элемент
  96.             j--;
  97.         }
  98.     }
  99. }
  100.  
  101. int main() {
  102.     setlocale(LC_ALL, "rus");
  103.  
  104.     vector<student> data = read();
  105.     ins_sort(data);
  106.     print(data);
  107.  
  108.     system("pause");
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement