Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <conio.h>
- #include <iostream>
- #include <vector>
- #include <fstream>
- using namespace std;
- struct student {
- string FIO;
- double physics;
- double mathematics;
- double informatics;
- double chemistry;
- double sb; //ключ
- };
- void PrintStudents(const vector<student>& students, ostream& in = cout) {
- for (int i = 0; i < students.size(); i++) {
- in << "Номер студента: " << i + 1 << endl;
- in << "\t\t\t" << "FIO: " << students[i].FIO << endl;
- in << "\t\t\t" << "Отметка по физике: " << students[i].physics << endl;
- in << "\t\t\t" << "Отметка по математике: " << students[i].mathematics << endl;
- in << "\t\t\t" << "Отметка по информатике: " << students[i].informatics << endl;
- in << "\t\t\t" << "Отметка по химии: " << students[i].chemistry << endl;
- in << "\t\t\t" << "Средний балл: " << (students[i].physics + students[i].mathematics + students[i].informatics + students[i].chemistry) / 4 << endl;
- in << "----------------------------------------------------------------------------------" << endl;
- }
- }
- vector <student> stud; //массив студентов
- student somebody; //экземпляр структуры
- double su;
- ofstream fout; //поток вывода
- ifstream fin; //поток ввода
- void add(vector<student>& stud) { //записывает вектор студентов в файл
- double sr_ball_univer = 0;
- int size = stud.size();
- su = 1;
- PrintStudents(stud, fout);
- for (int i = 0; i < size; i++) {
- sr_ball_univer += stud[i].sb;
- su = sr_ball_univer / size;
- }
- fout << "Средний балл университета: " << su << endl;
- fout << "----------------------------------------------------------------------------------" << endl;
- }
- /*void print_vector(vector <student> a) {
- int size = a.size();
- for (int i = 0; i < size; i++)
- cout << "" << a[i].sb << endl;
- }*/
- /*void Sort_Vub(vector <student> a, int n) //cортировка методом прямого выбора
- {
- int i_max, i, j;
- double r;
- for (i = 0; i < n - 1; i++) {
- i_max = i;
- for (j = i + 1; j < n; j++)
- if (a[i_max].sb < a[j].sb) i_max = j;
- if (i_max != i) { // Переставляем элементы
- r = a[i_max].sb; a[i_max].sb = a[i].sb; a[i].sb = r;
- }
- }
- }*/
- //void quick_sort(vector <student>& a,int first, int last) {
- // if (first != last) {
- // int left = first;
- // int right = last;
- // int pivot = left++;
- // while (left != right) {
- // if (a[left].sb <= a[pivot].sb) {
- // ++left;
- // }
- // else {
- // while ((left != --right) && a[pivot].sb <= a[right].sb);
- // std::swap(a[left], a[right]);
- // }
- // }
- // --left;
- // std::swap(a[first], a[left]);
- // quick_sort(a,first, left);
- // quick_sort(a,right, last);
- // }
- //}
- void QuickSort(vector<student>& arr, int left, int right) {
- int i = left, j = right;
- int tmp;
- double pivot = arr[(left + right) / 2].sb;
- while (i <= j) {
- while (arr[i].sb < pivot) {
- i++;
- }
- while (arr[j].sb > pivot) {
- j--;
- }
- if (i <= j) {
- swap(arr[i], arr[j]);
- i++;
- j--;
- }
- };
- if (left < j) {
- QuickSort(arr, left, j);
- }
- if (i < right) {
- QuickSort(arr, i, right);
- }
- }
- int Search_Binary(const vector<student>& a, int left, int right, double key)
- {
- int midd = 0;
- right = -1;
- while (left <= right) {
- midd = (left + right) / 2;
- if (key < a[midd].sb)
- right = midd - 1; //Search_Binary(a, left, midd - 1, key);
- else if (key > a[midd].sb)
- left = midd + 1; //Search_Binary(a, midd + 1, right, key);
- if (key = a[midd].sb)
- return midd; // функция возвращает индекс ячейки
- }
- // если границы сомкнулись
- return -1;
- }
- int main()
- {
- system("chcp 1251 >> nil");
- int cod, i;
- string path = "myfile.txt";
- fout.open(path);
- fout << "" << endl;
- fout.close();
- start: cout << "--------------------------Меню------------------------------" << endl;
- cout << "Выход - 0" << endl << "Создание - 1" << endl << "Просмотр - 2" << endl << "Чтение из файла - 3 " << endl;
- cout << "My task -4" << endl;
- cout << "QuickSort - 5" << endl << "Двоичный поиск - 6" << endl;
- cout << "------------------------------------------------------------" << endl;
- cin >> cod;
- switch (cod) {
- case 0: return 0;
- case 1: { //создание
- cout << "Введите данные нового студента" << endl;
- cout << "FIO: "; cin >> somebody.FIO;
- cout << "Отметка по физике: "; cin >> somebody.physics; // создание экземпляра
- cout << "Отметка по математике: "; cin >> somebody.mathematics;
- cout << "Отметка по информатике: "; cin >> somebody.informatics;
- cout << "Отметка по химии: "; cin >> somebody.chemistry;
- stud.push_back(somebody); // запись нового экземпляра в вектор
- fout.open(path); //открываем файл для записи нового студента
- if (!fout.is_open()) {
- cout << "Ошибка открытия файла";
- }
- else {
- add(stud);// кидает новый вектор студентов в файл myfile.txt
- }
- fout.close();//освобождение ресурсов которые он занимает
- break;
- }
- case 2: { //просмотр, просто считываает в массив не добавляет
- fin.open(path);
- if (!fin.is_open()) {
- cout << "Ошибка открытия файла";
- }
- else {
- char ch;
- while (fin.get(ch)) {// считывает файл методом посимвольного считывания
- cout << ch;
- }
- }
- fin.close();
- break;
- }
- case 3: {
- fin.open("students.txt", ifstream::app); // открываем файл как бы с флешки для чтения
- while (!fin.eof())
- {
- if (fin.eof()) { break; };
- fin >> somebody.FIO;
- fin >> somebody.physics;
- fin >> somebody.mathematics;
- fin >> somebody.informatics;
- fin >> somebody.chemistry;
- somebody.sb = (somebody.physics + somebody.mathematics + somebody.informatics + somebody.chemistry) / 4;
- stud.push_back(somebody); // закидывает экземпляр в вектор
- }
- fin.close();
- fout.open(path); // открытие myfile.txt для дозаписи
- add(stud); // кидает вектор студентов в файл myfile.txt
- fout.close();
- break;
- }
- case 4: { //my task
- fout.open(path);
- int n, m, size;
- size = stud.size();
- double r;
- for (i = 0; i < size; i++) {
- if (stud[i].sb >= su)
- //cout << "" << stud[i].sb << endl;
- n = i;
- }
- for (i = 0; i < n - 1; i++) {
- m = i;
- for (int j = i + 1; j < n; j++)
- if (stud[j].sb < stud[m].sb) m = j;
- r = stud[m].sb; // Переставляем элементы
- stud[m].sb = stud[i].sb;
- stud[i].sb = r;
- }
- fout.close();
- break;
- }
- case 5: {
- QuickSort(stud, 0, stud.size() - 1);
- PrintStudents(stud);
- break;
- }
- case 6: {
- double key;
- cout << "Введите средний балл студента: ";
- cin >> key;
- int index = Search_Binary(stud, 0, stud.size(), key);
- if (index >= 0)
- cout << "Указанный студент находится в ячейке с индексом: " << index << endl;
- else
- cout << "В массиве нет такого студента!" << endl;
- break;
- }
- }
- goto start;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement