Форум программистов, компьютерный форум CyberForum.ru

Класс time - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
mixon-21
 Аватар для mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
21.08.2013, 22:10     Класс time #1
Создайте класс Время, в котором реализованы операции сложения, вычитания, сравнения, ввода и вывод на экран. Возможность конвертации времени из американского формата am (pm): 10:00 pm = 22:00, 12:00 pm =00:00

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;
class myTaim
{
public:
myTaim(){???????????:confused:};
~myTaim(){???????????:confused:};
 
};
 
int _tmain(int argc, _TCHAR* argv[])
{
??????????????? :confused:
}
подскажите на словах что и как писать. плиз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
21.08.2013, 22:45     Класс time #2
для начала посмотрите как пишется по английски время, уберите my - просто это некрасиво писать в названиях класса, есть пространства имен для этого
Ded_Vasilij
 Аватар для Ded_Vasilij
229 / 211 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
21.08.2013, 22:49     Класс time #3
три закрытых поля - часы, минуты, секунды. При сложении следить за переходом секунд в минуты, минут в часы - типа "2 пишем, один в уме", сравнивать по полям
типа
C++
1
2
3
4
  bool myTaim::operator==(myTaime t)
  { 
       return (hour==t.hour&&minute==t.minute&&secund==t.secund);
   }
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
22.08.2013, 09:02     Класс time #4
Клуб любителей некорректно поставить задачу вновь открылся.

Форматирование времени в двенадцати часовом формате имеет смысл, когда мы говорим про некий момент внутри суток.
Сложение и вычитание "времени" имеет смысл, когда мы говорим о некоторых абстрактных промежутках времени.

Совершенно разные пограничные условия и смысл значений.

Как вы себе представляете в двенадцати часовом формате минус тридцать два часа восемнадцать минут? Это что, минус восемь часов утра?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <iomanip>
#include <cmath>
 
class SimpleTime {
 public:
  SimpleTime() : time(0) {}
  SimpleTime(double time) : time(time) {}
  SimpleTime(int hours, int minutes, double seconds)
    : time(hours * 3600 + minutes * 60 + seconds) {}
  int getHours() const {
    return int(time) / 3600;
  }
  int getMinutes() const {
    return std::abs(int(time) % 3600) / 60;
  }
  double getSeconds() const {
    return std::abs(time) - std::abs(getHours()) * 3600 - getMinutes() * 60;
  }
  double asDouble() const {
    return time;
  }
 private:
  double time;
};
 
SimpleTime operator+(const SimpleTime &a, const SimpleTime &b) {
  return SimpleTime(a.asDouble() + b.asDouble());
}
 
SimpleTime operator-(const SimpleTime &a, const SimpleTime &b) {
  return SimpleTime(a.asDouble() - b.asDouble());
}
 
int compare(const SimpleTime &a, const SimpleTime &b, const double epsilon = 0.00001) {
  return ((std::fabs(a.asDouble() - b.asDouble()) < epsilon) ? 0 :
    (a.asDouble() < b.asDouble()) ? -1 : 1);
}
 
bool operator==(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) == 0;
}
 
bool operator!=(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) != 0;
}
 
bool operator<(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) < 0;
}
 
bool operator>(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) > 0;
}
 
bool operator<=(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) <= 0;
}
 
bool operator>=(const SimpleTime &a, const SimpleTime &b) {
  return compare(a, b) >= 0;
}
 
std::ostream &operator<<(std::ostream &stream, const SimpleTime &time) {
  int hours = time.getHours();
  return stream <<
    std::setfill('0') << std::setw(2) <<
    ((hours % 12 == 0) ? 12 : hours % 12) << ":" << 
    std::setfill('0') << std::setw(2) <<
    time.getMinutes() << ":" << 
    std::setfill('0') << std::setw(6) <<
    std::fixed << std::setprecision(3) <<
    time.getSeconds() << " " <<
    ((hours % 24 >= 12) ? "pm" : "am");
    
}
 
int main(int, char**) {
  std::cout << (SimpleTime(-18, -1, -0.54) + SimpleTime(-32, -18, -10)) << std::endl;
  std::cout << (SimpleTime(-18, -1, -0.54) > SimpleTime(-32, -18, -10)) << std::endl;
}
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
22.08.2013, 11:30     Класс time #5
Цитата Сообщение от mixon-21 Посмотреть сообщение
Создайте класс Время, в котором реализованы операции сложения, вычитания, сравнения, ввода и вывод на экран. Возможность конвертации времени из американского формата am (pm): 10:00 pm = 22:00, 12:00 pm =00:00

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;
class myTaim
{
public:
myTaim(){???????????:confused:};
~myTaim(){???????????:confused:};
 
};
 
int _tmain(int argc, _TCHAR* argv[])
{
??????????????? :confused:
}
подскажите на словах что и как писать. плиз
Сам не давно писал задачку из учебника, надо было написать класс подсчета и вывода времени(военном формате и стандартном - АМ,PM) и даты, думаю разберешься.

Class.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef DATE_H
#define DATE_H
class DateAndTime
{
public:
DateAndTime();  
void setTime(int,int,int);
void printTime();
void printTimest();
void tick(int);
void setDate(int,int,int);
void printDate();
void nextDay(int);
 
 
private:
int day;
int month;
int year;
int hour;
int minute;
int sec;
};
#endif
Class.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "iostream"
#include "Date.h"
 
DateAndTime::DateAndTime()
{
setDate(1,1,1900);
setTime(0,0,0);
}
 
void DateAndTime::setDate( int d,int m ,int y)
{
 if(m==1 || m==3 || m==6 || m==8 || m==10 || m==12)
 {
     day=(d>0 && d<32)?d:1;
     month=(m> 0&& m<12)?m:1;
     year=(y >1900 && y<9999)?y:1900;
 }
 else if(m==2)
 {
day=(d>0 && d<29)?d:1;
     month=(m> 0&& m<12)?m:1;
     year=(y >1900 && y<9999)?y:1900;
 }
 else if( m==4 || m==5 || m==7 || m==9 || m==11)
 {
     day=(d>0 && d<31)?d:1;
     month=(m> 0&& m<12)?m:1;
     year=(y >1900 && y<9999)?y:1900;
 }
 
 
}
void DateAndTime::printDate()
{
    std::cout<<" Сегодня " <<day<<"."<<month<<"."<<year<<"\n";
}
void DateAndTime::nextDay (int a)
{
    day+=a;
    if(month==1 || month==3 || month==6 || month==8 || month==10 || month==12)
 { 
     if(day==32)
     {
         day=1;
         month+=1;
     }
     
 }
 else if(month==2)
 {
 
     if(day==29)
     {
         day=1;
         month+=1;
     }
 }
 else if( month==4 || month==5 || month==7 || month==9 || month==11)
 {
     
     if(day==31)
     {
         day=1;
         month+=1;
     }
 }
 
 if(day==31 && month==12)
 {
     day=1;
     month=1;
     year+=1;
 }
 
}
 
 
void DateAndTime::setTime(int h,int m, int s)
{
    hour=(h<24 && h>0)?h:0;
    minute=(m<60 && m>0)?m:0;
    sec=(s<60 && s>0)?s:0;
}
void DateAndTime::printTime()
{
    std::cout<<"Время в военном формате равно: "<<hour<<":"<<minute<<":"<<sec;
}
void DateAndTime::printTimest()
{
    std::cout<<"Время в стандартном формате равно: ";
    std::cout<<((hour==0 || hour==12)?12:hour%12)
        <<":"<<(minute<10?"0":"")<<minute<<":"
        <<(sec<10?"0":"")<<sec<<(hour<12?"AM":"PM")<<"\n";
}
void DateAndTime::tick(int a)
{
    sec+=a;
    if(sec==60)
    {
    sec=0;
    minute+=1;
    }
    if(minute==60)
    {
        sec=0;
    minute=0;
    hour+=1;
    }
    if(hour==24)
    {
        sec=1;
        minute=0;
        hour=0;
        nextDay(1);
    }
}

Main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "iostream"
#include "Date.h"
 
int main()
{
setlocale(LC_ALL,"");
DateAndTime D;
D.setDate(20,8,2013);
D.setTime(22,58,40);
D.printTime();
D.printDate();
 
for (int x=0;x<5000;x++)
{
    D.tick(1);
    
D.printTime();
D.printDate();
}
 
 
system("pause");
return 0;
}
Yandex
Объявления
22.08.2013, 11:30     Класс time
Ответ Создать тему
Опции темы

Текущее время: 15:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru