Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Помогите плиз!! нужна срочная помощь с программой на с++ (https://forum.antichat.xyz/showthread.php?t=208928)

WeReWoLf777 03.06.2010 19:38

Помогите плиз!! нужна срочная помощь с программой на с++
 
Нужно сделать перегрузку ввода из файла и функцию чтения из файла, остальное все пашет помогите!! завтро здавать курсач а не пашет
Код:

#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();
}


ImmortalWarrior 05.06.2010 02:03

У меня скомпилилось после нижеуказанных исправлений, но дальше не копал.
Укажу направления:
1) Перегруженная операция ввода из файлового потока может быть такой:
Код:

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) Тогда, с учетом этого, функция загрузки из файла может быть такой:
Код:

void Raspisanye::Load()
{
        ifstream myFS("text.txt");
        myFS >> (*this);
        myFS.close();
}

3) Обязательно нужны проверки на недопустимые входные данные, неверные операции ввода/вывода; обработка исключительных ситуаций.

4) "LENGHT" - нет такого слова в английском, правильно "LENGTH" (да, я зануда!);

WeReWoLf777 06.06.2010 23:28

спс большое)


Время: 04:46