Форум программистов CodeGuru
23 Июль 2018, 05:31:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Классы на C++  (Прочитано 17600 раз)
0 Пользователей и 1 Гость смотрят эту тему.
positivemann
Новичок
*
Офлайн Офлайн

Сообщений: 2



Просмотр профиля
« : 15 Март 2010, 15:40:13 »

Всем привет  Улыбка. Такое дело к вам: есть задача на C++, уже неделю пытаюсь её сделать, делаю даже по примеру , но ничего не получается, иногда выдаёт совершенно непонятные для меня ошибки. Вот условие задачи: Класс «Дата» должен включать поля данных: день, месяц, год; методы: вывод даты и времени года и перегруженные операции: добавление (+) к дате целого числа (количества дней), сравнение двух дат (< , >).
Помогите разобраться, если можете, а то уже срочно надо, думал сделаю, а не получается. Вот листин того, что я сделал уже (если есть тупые ошибки, не судите строго - мог пропустить, т.к. задолбался уже и в проге я не слишком силён):
Код:
#include <vcl.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;

char bufRus [256];
char* Rus(char* mes)
{ CharToOem (mes, bufRus);
    return bufRus;
}

class Data
{ private:
      int d,m,y;
   public:
      Data(int d, int m, int y);

      void view(){
        cout << Rus("Результат: ") << d << ":" << m << ":" << y << "\n";
      }

/*      int proverka() {
        int day=10000*h+100*m+s;
        if (day>240000 || day<0) return 0;
        else return 1;
      } */

/*      void now(){
        if (d>31) {
            m++; s=s-60;
        }
        if (m>60) {
            h++; m=m-60;
        }

        int day=10000*h+100*m+s;
        if (day>=60000 && day<=120000) {
            cout << Rus("Утро");
        }
        else if (day<180000 && day>120000) {
            cout << Rus("День");
        }
        else if (day>=180000 && day<=235959) {
            cout << Rus("Вечер");
        }
        else if (day>=000000 && day<60000) {
            cout << Rus("Ночь");
        }
        else cout << Rus("Неопределено. \nОшибка! Вы ввели нереальное время.");
      }*/
       void now(){
        if (d>30) {
            m++; d=d-30;
        }
        if (m>12) {
            y++; m=m-12;
        }

        if (d=12 || d=1 || d=2) {
            cout << Rus ("зима");
        }
       else    if (d=3 || d=4 || d=5) {
            cout << Rus ("весна");
        }
       else    if (d=6 || d=7 || d=8) {
            cout << Rus ("лето");
        }
       else    if (d=9 || d=10 || d=11) {
            cout << Rus ("осень");
        else cout << Rus("Неопределено. \nОшибка! Вы ввели нереальную дату.");
        }
              friend Data operator+(Data d1, Data d2);
      friend int operator>(Data d1,Data d2);
      friend int operator<(Data d1,Data d2);
      ~Data();  //деструктор

  };

Data::Data(int d1, int m1, int y1)
{       d=d1;
       m=m1;
       y=y1;
}
Data::~Data()
  {}

Data operator+(Data d1, Data d2)
{
    if (d1.d>30) {    d1.m++; d1.d=d1.d-30; }
    if (d1.m>12) {  d1.y++; d1.m=d1.m-12; }
    int d2 = d1.d + n;
    d2.m = 0;
    d2.y = 0;
    int m2=d1.m;
    int y2=d1.y;
    if (d2>30) {
        m2++; d2=d2-30;
    }

    if (m2>30) {
        y2++; m2=m2-12;
    }
    return Data(d2,m2,y2);
}
int operator>(Data d1,Data d2)
{
    int Year1=1000000*d1.d+10000*d1.m+d1.y;
    int Year2=1000000*d2.d+10000*d2.m+d2.y;

    if (Year1>Year2) return 1;
    else return 0;
}

int operator<(Data d1,Data d2)
{
    int Year1=1000000*d1.d+10000*d1.m+d1.y;
    int Year2=1000000*d2.d+10000*d2.m+d2.y;

    if (Year1<Year2) return 1;
    else return 0;
}

int main()
{
  int key;
  int n;
  int d1,m1,y1;
  do
  {  cout<< Rus("\n1 - Вывод времени года \n2 - Прибавление количества дней\n3 - Сравнение 2-х дат\n0 - Выход.\n\nВаш выбор: ");
     cin >> key;
     if (key == 1) {
       cout << Rus("\nДата (в формате \"дд мм гг\"): ");
       cin >> d1; cin >> m1; cin >> y1;
       Data Data1(d1,m1,y1); //создание объекта
       cout << Rus("\nВремя года: ");
       Data1.now();
       cout <<"\n";
     }
     else if (key == 2) {
       cout << Rus("\nДата 1 (в формате \"дд мм гг\"): ");
       cin >> d1; cin >> m1; cin >> y1;
       Data Data1(d1,m1,y1); //создание объекта
       cout << Rus ("Количество прибавляемых дней: ");
       Data Data3(0,0,0); //создание объекта 2
     }
     else if (key == 3) {
       cout << Rus("\nДата 1 в (формате \"дд мм гг\"): ");
       cin >> d1; cin >> m1; cin >> y1;
       Data Data1(d1,m1,y1); //создание объекта 1
       cout << Rus("Дата 2 (в формате \"дд мм гг\"): ");
       cin >> d2; cin >> m2; cin >> y2;
       Data Data2(d2,m2,y2); //создание объекта 2
       if (Data1>Data2) {
        cout << Rus("Дата 1 больше, чем дата 2.\n");
       }
       else if (Data1<Data2) {
        cout << Rus("Дата 2 больше, чем дата 1.\n");
       }
       else cout << Rus("Вы ввели равные даты.\n");
     }
   }
   while (key!=0);
}
P.S. В комментарии включил код, который проверяет время суток, мне же нужно время года, есть ниже, но не знаю правильно или нет, пожалуйста, посмотрите. Перегрузка операций обяхателна по условию. Заранее спасибо.
Записан

Если хочешь, чтобы жизнь тебе улыбнулась, сначала улыбнись жизни сам. (Джон Смит).
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 15 Март 2010, 20:42:42 »

но ничего не получается, иногда выдаёт совершенно непонятные для меня ошибки.

Неплохо было бы сказать, что именно не получается, и какие именно ошибки и где "выдаются" (на этапе компиляции, на этапе исполнения, и.т.д.). И, конечно же, привести текст ошибок.

P.S. В комментарии включил код, который проверяет время суток, мне же нужно время года, есть ниже, но не знаю правильно или нет, пожалуйста, посмотрите. Перегрузка операций обяхателна по условию. Заранее спасибо.

Я так понимаю, в классе Data переменная-член класса m должна содержать номер месяца ?
Если так, то надо как бы ее анализировать. Т.е. получится 4 варианта, по 3 месяца на каждое время года.
Если я правильно понимаю, то декабрь-февраль - это зима, март-май - весна, июнь-август - лето, и сентябрь-ноябрь - осень.
Записан

positivemann
Новичок
*
Офлайн Офлайн

Сообщений: 2



Просмотр профиля
« Ответ #2 : 15 Март 2010, 21:14:54 »

Цитировать
Неплохо было бы сказать, что именно не получается, и какие именно ошибки и где "выдаются" (на этапе компиляции, на этапе исполнения, и.т.д.). И, конечно же, привести текст ошибок.
Т.е. запустить Вам не на чем?)Например, бесят ошибки, когда говорит что-то про один параметр в классе Data, у меня там два параметра...я бы знал в чём дело, не спрашивал бы)
Записан

Если хочешь, чтобы жизнь тебе улыбнулась, сначала улыбнись жизни сам. (Джон Смит).
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 16 Март 2010, 08:13:01 »

Т.е. запустить Вам не на чем?)

Borland C++ Builder -а нету, да и не использую я его.
Хотя, что тут к билдеру то относится ? Только
Код:
#include <vcl.h>
Голливудская улыбка

да и зачем "запускать" ? Ошибки прокомментировать и так можно.

Например, бесят ошибки, когда говорит что-то про один параметр в классе Data

У классов нет параметров.

у меня там два параметра...я бы знал в чём дело, не спрашивал бы)

Хм... а можете кусок кода привести, где "2 параметра у класса" ?

А насчет ошибок. Все-таки их текст желательно приводить в подобных случаях.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!