Помогите плиз!! нужна срочная помощь с программой на с++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by WeReWoLf777, 3 Jun 2010.

  1. WeReWoLf777

    WeReWoLf777 New Member

    Joined:
    23 Mar 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Нужно сделать перегрузку ввода из файла и функцию чтения из файла, остальное все пашет помогите!! завтро здавать курсач а не пашет
    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();
    }
    
     
  2. ImmortalWarrior

    ImmortalWarrior New Member

    Joined:
    22 Mar 2009
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    У меня скомпилилось после нижеуказанных исправлений, но дальше не копал.
    Укажу направления:
    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" (да, я зануда!);
     
    2 people like this.
  3. WeReWoLf777

    WeReWoLf777 New Member

    Joined:
    23 Mar 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    спс большое)