Нужно сделать перегрузку ввода из файла и функцию чтения из файла, остальное все пашет помогите!! завтро здавать курсач а не пашет Code: #include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <windows.h> using namespace std; const string SUBJECTS[] = {"Биология", "Химия", "Информатика", "Математика"}; const int COUNT_SUBJECTS = sizeof(SUBJECTS) / sizeof(SUBJECTS[0]); const string DAYS[] = {"ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ"}; const int COUNT_DAYS = sizeof(DAYS)/sizeof(DAYS[0]); const int COUNT_LESSONS = 4; const int LENGHT = 9; class Raspisanye { int mas[COUNT_DAYS][COUNT_LESSONS]; public: Raspisanye(); int GetLesson(int day, int lesson); string GetLessonName(int day, int lesson); void SetLesson(int subj, int day, int lesson); int Static(); int StaticMax(); int StaticMin(); double StaticMid(); int GetSubjectNumber(); int GetDaysNumber(); int GetLesNumber(); friend ostream& operator<< (ostream&, Raspisanye&); friend ofstream& operator<< (ofstream&, Raspisanye&); friend ifstream& operator>> (ifstream&, Raspisanye&); void Save(); void Load(); }; Raspisanye::Raspisanye() { for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { SetLesson(LENGHT, day, lesson); } } } int Raspisanye::GetLesson(int day, int lesson) { return mas[day][lesson]; } string Raspisanye::GetLessonName(int day, int lesson) { int subj = GetLesson(day, lesson); if (subj == LENGHT) { return "Нет_пары"; } return SUBJECTS[subj]; } void Raspisanye::SetLesson(int subj, int day, int lesson) { mas[day][lesson] = subj; } ostream& operator<< (ostream& str, Raspisanye& r) { str << " "; for (int day = 0; day < COUNT_DAYS; day++) { str.width(12); str << DAYS[day]; } str << endl; for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { str.width(3); str << (lesson+1); for (int day = 0; day < COUNT_DAYS; day++) { str.width(12); str << r.GetLessonName(day, lesson); } str << endl; } return str; } ofstream& operator<< (ofstream& str, Raspisanye& r) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { for (int day = 0; day < COUNT_DAYS; day++) { str << r.GetLesson(day, lesson); } str << endl; } return str; } ifstream& operator>> (ifstream& str, Raspisanye& r) //не пашет перегрузка помогите!!!! { for (int i = 0; i < COUNT_LESSONS; i++) { for (int j = 0; j < COUNT_DAYS; j++) { str >> r.SetLesson(subj, day, lesson); } str << endl; } return str; } int Raspisanye::Static() { int s = 0; for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { if (GetLesson(day, lesson) != LENGHT) { s++; } } } return s; } int Raspisanye::StaticMax() { int max1[COUNT_DAYS]; int s = 0; int max = 0; for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { if (GetLesson(day, lesson) != LENGHT) { s++; } } max1[day]=s; s=0; } max = max1[0]; for (int i = 0; i < COUNT_DAYS; i++) { if (max1[i] > max) { max = max1[i]; } } return max; } int Raspisanye::StaticMin() { int min1[COUNT_DAYS]; int s = 0; int min = 0; for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { if (GetLesson(day, lesson) != LENGHT) { s++; } } min1[day]=s; s=0; } min = min1[0]; for (int i = 0; i < COUNT_DAYS; i++) { if (min1[i] < min) { min = min1[i]; } } return min; } double Raspisanye::StaticMid() { double mid1[COUNT_DAYS]; double s = 0; double mid = 0; for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { if (GetLesson(day, lesson) != LENGHT) { s++; } } mid1[day] = s; s = 0; } for (int day = 0; day < COUNT_DAYS; day++) { s = s + mid1[day]; } mid = ( s / COUNT_DAYS); return mid; } int Raspisanye::GetSubjectNumber() { for (int k = 0; k < COUNT_SUBJECTS; k++) { cout << (k+1) << " - " << SUBJECTS[k] << endl; } int y = 0; while (!((y>=1) && (y<=COUNT_SUBJECTS))) { cout << "Введите номер дисциплины "; cin >> y; } return (y-1); } int Raspisanye::GetDaysNumber() { int x = 0; while (!((x>=1) && (x<=COUNT_DAYS))) { cout << "Введите номер дня "; cin >> x; } return (x-1); } int Raspisanye::GetLesNumber() { int y = 0; while (!((y>=1) && (y<=4))) { cout << "Введите номер пары "; cin >> y; } return (y-1); } void Raspisanye::Save() { ofstream myFile("text.txt"); myFile << (*this); myFile.close(); } void Raspisanye::Load() // не работает помогите (функция ввода массива в програму из файла) { string s; ifstream myFS("text.txt"); while(myFS>>s) { getline(myFS,s); for (int i = 0; i < 6; i++) { cout<<s[i]; } } /* for (int day = 0; day < COUNT_DAYS; day++) { for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { myFS.width(20); myFS >> mas[day][lesson]; } } cout << endl;*/ myFS.close(); } void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); Raspisanye r; r.Load(); cout << r; while (true) { int numDays = r.GetDaysNumber(); int numLes = r.GetLesNumber(); int numSubject = r.GetSubjectNumber(); r.SetLesson(numSubject, numDays, numLes); cout << r; int numStatic = r.Static(); int numMax = r.StaticMax(); int numMin = r.StaticMin(); double numMid = r.StaticMid(); cout << "Общее число пар в неделю - " << numStatic << endl; cout << "Максимальное колличество пар в день - " << numMax << endl; cout << "Минимальное колличество пар в день - " << numMin << endl; cout << "Среднее колличество пар в день - " << numMid << endl; cout << "Введите 1 для выхода из программы или 0 для продолжения работы " << endl; int c; cin >> c; if (c==1) break; } r.Save(); }
У меня скомпилилось после нижеуказанных исправлений, но дальше не копал. Укажу направления: 1) Перегруженная операция ввода из файлового потока может быть такой: Code: ifstream& operator>> (ifstream& str, Raspisanye& r) { int subj; for (int lesson = 0; lesson < COUNT_LESSONS; lesson++) { for (int day = 0; day < COUNT_DAYS; day++) { str >> subj; r.SetLesson(subj,day,lesson); } } return str; } 2) Тогда, с учетом этого, функция загрузки из файла может быть такой: Code: void Raspisanye::Load() { ifstream myFS("text.txt"); myFS >> (*this); myFS.close(); } 3) Обязательно нужны проверки на недопустимые входные данные, неверные операции ввода/вывода; обработка исключительных ситуаций. 4) "LENGHT" - нет такого слова в английском, правильно "LENGTH" (да, я зануда!);