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

Конвертация времени в американский формат и обратно - C++

Восстановить пароль Регистрация
 
Athena
 Аватар для Athena
1 / 1 / 0
Регистрация: 17.03.2015
Сообщений: 42
29.09.2016, 09:16     Конвертация времени в американский формат и обратно #1
есть задача: создать класс Time, в котором реализованы операции сложения, вычитания, сравнения, введения и выведения на екран. Возможность конвертации времени в американский формат и обратно, на пример 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
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Time{
private:
    int c,m;
public:
    Time (int clock=0, int min=0);
    int getC() const;
    int getM() const;
    void setC(int cl);
    void setM(int mn);
    Time plus(Time  &p) const;
    Time minus(Time const &p) const;
    int sravn(Time const &p) const;
    void conv_to_12();
    void conv_to_24(char *str); 
    ~Time(){}
};
 
void Time::conv_to_12() {
    if(c>=12) {
        c-=12;
        printf(" %02d:%02d pm\n", c, m);
    }
    else
        printf(" %02d:%02d am\n", c, m);
}
 
void Time::conv_to_24(char *str) {
    if (!strcmp(str, "pm"))
    {
        c += 12;
        printf(" %02d:%02d\n", c, m);
    }
    else if (!strcmp(str, "am"))
        printf(" %02d:%02d\n", c, m);
}
 
void Time::setC(int cl) {   c=cl; }
void Time::setM(int mn) {   m=mn; }
 
int Time::sravn(Time const &p) const {
    if(p.c>c||(p.c==c&&p.m>m)) 
        return 2;/*cout<<"vtoroye vremya bolshe vtorogo"<<endl;*/
    else return 1;/*cout<<"pervoye vremya bolshe pervogo"<<endl;*/
}
 
Time Time::plus (Time  & p) const {
    if (m+p.m>60) {
        return Time(c + p.c+1, m + p.m-60);
    }
    else return Time(c+p.c,m+p.m);
}
 
Time Time::minus(Time const &p) const {
    if(p.c>=c&&p.m>=m) {
        return Time(p.c-c,p.m-m);
    }
    else if(p.c>c&&p.m<m) {
        return Time(p.c-c-1,p.m-m+60);
    }
    else if(p.c<=c&&p.m<=m) {
        return Time(c-p.c,m-p.m);
    }
    else if(p.c<c&&p.m>m) {
        return Time(c-p.c-1,m-p.m+60);
    }
}
 
int Time::getC() const {return c;}
int Time::getM() const {return m;}
 
Time::Time(int clock,int min) : c(clock), m(min)
{ }
 
int main()
{
    Time p1(0,0),p2(0,0),p3(0,0),p4(0,0),p5(0,0),p6(0,0),p7(0,0);
    int cl,mn,cl1,mn1,cl2,mn2,cl3,mn3;
    char str[3]="";
    cout<<"Vvedite pervoe vremya: ";
    cin>>cl>>mn;
    cout<<endl;
    cout<<"Vvedite vtoroye vremya: ";
    cin>>cl1>>mn1;
    cout<<endl;
    p1.setC(cl), p1.setM(mn);
    cout<<"Pervoe vremya: "<<p1.getC()<<":"<<p1.getM()<<endl;
    p2.setC(cl1), p2.setM(mn1);
    cout<<endl;
    cout<<"Vtoroe vremya: "<<p2.getC()<<":"<<p2.getM()<<endl;
    cout<<endl;
    /////////////////////////////////////////////////////////////////////////////////////
    cout<<"Sloghenie: ";
    p3=p1.plus(p2);
    if(p3.getC()>=24) { cout<<"1 sutki "<<p3.getC()-24<<" chasov "<<p3.getM()<<" minut"<<endl; }
    else { cout<<p3.getC()<<" chasov "<<p3.getM()<<" minut"<<endl; }
    cout<<endl;
    /////////////////////////////////////////////////////////////////////////////////////
    cout<<"Vichitanie: ";
    p4=p1.minus(p2);
    cout<<p4.getC()<<" chasov "<<p4.getM()<<" minut"<<endl;
    cout<<endl;
    /////////////////////////////////////////////////////////////////////////////////////
    cout<<"Sravnenie: ";
    int x=0;
    x=p1.sravn(p2);
    cout<<"bolshe "<<x<<endl;
    cout<<endl;
    /////////////////////////////////////////////////////////////////////////////////////
    cout<<"Vvedite vremya v formate 24h: ";
    cin>>cl2>>mn2;
    cout<<endl;
    p6.setC(cl2), p6.setM(mn2);
    cout<<"Vremya dlya convertasii: "<<p6.getC()<<":"<<p6.getM()<<endl<<endl;
    cout<<"Otkonvertirovannoe vremya: ";
    p6.conv_to_12();
    cout<<endl;
    /////////////////////////////////////////////////////////////////////////////////////
    cout<<"Vvedite vremya v formate 12h: ";
    cin>>cl3>>mn3>>str;
    p7.setC(cl3), p7.setM(mn3);
    cout<<"Vremya dlya convertasii: "<<p7.getC()<<":"<<p7.getM()<<" "<<str<<endl<<endl;
    cout<<"Otkonvertirovannoe vremya: ";
    p7.conv_to_24(str);
    system("PAUSE");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 09:16     Конвертация времени в американский формат и обратно
Посмотрите здесь:

Конвертация int в char и обратно C++
Конвертация из TCHAR C++
C++ Конвертация числа в строку и обратно, условие исключения, разность.
C++ Конвертация типов с++
Формат Даты и Времени (работа с файлом) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
29.09.2016, 10:14     Конвертация времени в американский формат и обратно #2
Возможно имелось ввиду заменить методы plus, minus и sravn на перегрузку операторов.
Athena
 Аватар для Athena
1 / 1 / 0
Регистрация: 17.03.2015
Сообщений: 42
29.09.2016, 10:16  [ТС]     Конвертация времени в американский формат и обратно #3
нет, там надо именно функции написать
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
29.09.2016, 10:21     Конвертация времени в американский формат и обратно #4
+1 за перегрузку операторов.
Я бы ещё имена переменных и методов изменил. типа: getMinutes(), getHour()
Возможно конвертацию времени стоит сделать в одном методе, а сам метод пусть разбирается из какого формата в какой переводить.
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
29.09.2016, 10:25     Конвертация времени в американский формат и обратно #5
Цитата Сообщение от Athena Посмотреть сообщение
нет, там надо именно функции написать
Тогда полный текст задания в студию. Потому что в таком виде вроде делать помимо сказанного особо нечего.
Athena
 Аватар для Athena
1 / 1 / 0
Регистрация: 17.03.2015
Сообщений: 42
29.09.2016, 10:57  [ТС]     Конвертация времени в американский формат и обратно #6
ну как мне только что заявили то надо что бы функции плюс и минус принимали по два аргумента, только не пойму почему.... Вроде и с одним неплохо работает.
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
29.09.2016, 11:21     Конвертация времени в американский формат и обратно #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Значит преподаватель хотел видеть это в виде следующего:
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
class Time{
private:
    int c,m;
public:
    /* ... */
    
    static Time plus(const Time &op1, const Time &op2);
    
    /* ... */
};
 
/* ... */
Time Time::plus(const Time &op1, const Time &op2) {
    if (op1.m+op2.m > 60) {
        return Time(op1.c + op2.c + 1, op1.m + op2.m - 60);
    }
    else return Time(op1.c + op2.c, op1.m + op2.m);
}
/* ... */
int main()
{
    Time p1(12,33),p2(12,5),p3(0,0);
 
    p3 = Time::plus(p1, p2);
    
    if (p3.getC() >= 24) { 
        cout<<"1 sutki "<<p3.getC() - 24<<" chasov "<<p3.getM()<<" minut"<<endl;
    }
    else { 
        cout<<p3.getC()<<" chasov "<<p3.getM()<<" minut"<<endl; 
    }
    cout<<endl;
    
    return 0;
}
Понимаете идею?
Athena
 Аватар для Athena
1 / 1 / 0
Регистрация: 17.03.2015
Сообщений: 42
29.09.2016, 11:40  [ТС]     Конвертация времени в американский формат и обратно #8
А есть какая то большая разница между моим вариантом и вашим?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 12:08     Конвертация времени в американский формат и обратно
Еще ссылки по теме:

Конвертация qint64 в int и обратно C++
C++ Функция, получающая формат даты и времени в виде параметра
C++ Проверка на правильность времени, и показ времени

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
29.09.2016, 12:08     Конвертация времени в американский формат и обратно #9
Athena, как вызов происходит посмотрите.
Yandex
Объявления
29.09.2016, 12:08     Конвертация времени в американский формат и обратно
Ответ Создать тему
Опции темы

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