Advertisement
illfate

Untitled

May 15th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. #include <string>
  2. #include <conio.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include <fstream>
  6. using namespace std;
  7.  
  8.  
  9. struct student {
  10. string FIO;
  11. double physics;
  12. double mathematics;
  13. double informatics;
  14. double chemistry;
  15. double sb; //ключ
  16. };
  17.  
  18.  
  19. void PrintStudents(const vector<student>& students, ostream& in = cout) {
  20. for (int i = 0; i < students.size(); i++) {
  21. in << "Номер студента: " << i + 1 << endl;
  22. in << "\t\t\t" << "FIO: " << students[i].FIO << endl;
  23. in << "\t\t\t" << "Отметка по физике: " << students[i].physics << endl;
  24. in << "\t\t\t" << "Отметка по математике: " << students[i].mathematics << endl;
  25. in << "\t\t\t" << "Отметка по информатике: " << students[i].informatics << endl;
  26. in << "\t\t\t" << "Отметка по химии: " << students[i].chemistry << endl;
  27. in << "\t\t\t" << "Средний балл: " << (students[i].physics + students[i].mathematics + students[i].informatics + students[i].chemistry) / 4 << endl;
  28. in << "----------------------------------------------------------------------------------" << endl;
  29. }
  30. }
  31.  
  32. vector <student> stud; //массив студентов
  33. student somebody; //экземпляр структуры
  34. double su;
  35. ofstream fout; //поток вывода
  36. ifstream fin; //поток ввода
  37.  
  38. void add(vector<student>& stud) { //записывает вектор студентов в файл
  39. double sr_ball_univer = 0;
  40. int size = stud.size();
  41. su = 1;
  42. PrintStudents(stud, fout);
  43. for (int i = 0; i < size; i++) {
  44. sr_ball_univer += stud[i].sb;
  45. su = sr_ball_univer / size;
  46. }
  47. fout << "Средний балл университета: " << su << endl;
  48. fout << "----------------------------------------------------------------------------------" << endl;
  49. }
  50.  
  51.  
  52. /*void print_vector(vector <student> a) {
  53. int size = a.size();
  54. for (int i = 0; i < size; i++)
  55. cout << "" << a[i].sb << endl;
  56.  
  57. }*/
  58.  
  59.  
  60. /*void Sort_Vub(vector <student> a, int n) //cортировка методом прямого выбора
  61. {
  62. int i_max, i, j;
  63. double r;
  64. for (i = 0; i < n - 1; i++) {
  65. i_max = i;
  66. for (j = i + 1; j < n; j++)
  67. if (a[i_max].sb < a[j].sb) i_max = j;
  68. if (i_max != i) { // Переставляем элементы
  69. r = a[i_max].sb; a[i_max].sb = a[i].sb; a[i].sb = r;
  70. }
  71.  
  72. }
  73. }*/
  74.  
  75. //void quick_sort(vector <student>& a,int first, int last) {
  76. // if (first != last) {
  77. // int left = first;
  78. // int right = last;
  79. // int pivot = left++;
  80. // while (left != right) {
  81. // if (a[left].sb <= a[pivot].sb) {
  82. // ++left;
  83. // }
  84. // else {
  85. // while ((left != --right) && a[pivot].sb <= a[right].sb);
  86. // std::swap(a[left], a[right]);
  87. // }
  88. // }
  89. // --left;
  90. // std::swap(a[first], a[left]);
  91. // quick_sort(a,first, left);
  92. // quick_sort(a,right, last);
  93. // }
  94. //}
  95.  
  96. void QuickSort(vector<student>& arr, int left, int right) {
  97. int i = left, j = right;
  98. int tmp;
  99. double pivot = arr[(left + right) / 2].sb;
  100. while (i <= j) {
  101. while (arr[i].sb < pivot) {
  102. i++;
  103. }
  104. while (arr[j].sb > pivot) {
  105. j--;
  106. }
  107. if (i <= j) {
  108. swap(arr[i], arr[j]);
  109. i++;
  110. j--;
  111. }
  112.  
  113. };
  114.  
  115. if (left < j) {
  116. QuickSort(arr, left, j);
  117. }
  118. if (i < right) {
  119. QuickSort(arr, i, right);
  120. }
  121. }
  122.  
  123.  
  124. int Search_Binary(const vector<student>& a, int left, int right, double key)
  125. {
  126. int midd = 0;
  127. right = -1;
  128. while (left <= right) {
  129.  
  130. midd = (left + right) / 2;
  131.  
  132. if (key < a[midd].sb)
  133. right = midd - 1; //Search_Binary(a, left, midd - 1, key);
  134. else if (key > a[midd].sb)
  135. left = midd + 1; //Search_Binary(a, midd + 1, right, key);
  136. if (key = a[midd].sb)
  137. return midd; // функция возвращает индекс ячейки
  138. }
  139. // если границы сомкнулись
  140. return -1;
  141. }
  142.  
  143.  
  144. int main()
  145. {
  146. system("chcp 1251 >> nil");
  147. int cod, i;
  148.  
  149. string path = "myfile.txt";
  150. fout.open(path);
  151. fout << "" << endl;
  152. fout.close();
  153. start: cout << "--------------------------Меню------------------------------" << endl;
  154. cout << "Выход - 0" << endl << "Создание - 1" << endl << "Просмотр - 2" << endl << "Чтение из файла - 3 " << endl;
  155. cout << "My task -4" << endl;
  156. cout << "QuickSort - 5" << endl << "Двоичный поиск - 6" << endl;
  157. cout << "------------------------------------------------------------" << endl;
  158. cin >> cod;
  159. switch (cod) {
  160. case 0: return 0;
  161.  
  162. case 1: { //создание
  163. cout << "Введите данные нового студента" << endl;
  164. cout << "FIO: "; cin >> somebody.FIO;
  165. cout << "Отметка по физике: "; cin >> somebody.physics; // создание экземпляра
  166. cout << "Отметка по математике: "; cin >> somebody.mathematics;
  167. cout << "Отметка по информатике: "; cin >> somebody.informatics;
  168. cout << "Отметка по химии: "; cin >> somebody.chemistry;
  169. stud.push_back(somebody); // запись нового экземпляра в вектор
  170. fout.open(path); //открываем файл для записи нового студента
  171. if (!fout.is_open()) {
  172. cout << "Ошибка открытия файла";
  173. }
  174. else {
  175. add(stud);// кидает новый вектор студентов в файл myfile.txt
  176. }
  177. fout.close();//освобождение ресурсов которые он занимает
  178. break;
  179. }
  180.  
  181. case 2: { //просмотр, просто считываает в массив не добавляет
  182.  
  183. fin.open(path);
  184. if (!fin.is_open()) {
  185. cout << "Ошибка открытия файла";
  186. }
  187. else {
  188. char ch;
  189. while (fin.get(ch)) {// считывает файл методом посимвольного считывания
  190. cout << ch;
  191. }
  192. }
  193. fin.close();
  194. break;
  195. }
  196.  
  197.  
  198. case 3: {
  199. fin.open("students.txt", ifstream::app); // открываем файл как бы с флешки для чтения
  200. while (!fin.eof())
  201. {
  202. if (fin.eof()) { break; };
  203. fin >> somebody.FIO;
  204. fin >> somebody.physics;
  205. fin >> somebody.mathematics;
  206. fin >> somebody.informatics;
  207. fin >> somebody.chemistry;
  208. somebody.sb = (somebody.physics + somebody.mathematics + somebody.informatics + somebody.chemistry) / 4;
  209. stud.push_back(somebody); // закидывает экземпляр в вектор
  210. }
  211. fin.close();
  212. fout.open(path); // открытие myfile.txt для дозаписи
  213. add(stud); // кидает вектор студентов в файл myfile.txt
  214. fout.close();
  215. break;
  216. }
  217.  
  218. case 4: { //my task
  219. fout.open(path);
  220. int n, m, size;
  221. size = stud.size();
  222. double r;
  223. for (i = 0; i < size; i++) {
  224. if (stud[i].sb >= su)
  225. //cout << "" << stud[i].sb << endl;
  226. n = i;
  227.  
  228. }
  229. for (i = 0; i < n - 1; i++) {
  230. m = i;
  231. for (int j = i + 1; j < n; j++)
  232. if (stud[j].sb < stud[m].sb) m = j;
  233. r = stud[m].sb; // Переставляем элементы
  234. stud[m].sb = stud[i].sb;
  235. stud[i].sb = r;
  236.  
  237. }
  238.  
  239. fout.close();
  240.  
  241. break;
  242. }
  243.  
  244. case 5: {
  245. QuickSort(stud, 0, stud.size() - 1);
  246. PrintStudents(stud);
  247.  
  248. break;
  249. }
  250.  
  251. case 6: {
  252. double key;
  253. cout << "Введите средний балл студента: ";
  254. cin >> key;
  255.  
  256. int index = Search_Binary(stud, 0, stud.size(), key);
  257.  
  258. if (index >= 0)
  259. cout << "Указанный студент находится в ячейке с индексом: " << index << endl;
  260. else
  261. cout << "В массиве нет такого студента!" << endl;
  262. break;
  263. }
  264.  
  265. }
  266. goto start;
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement