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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Athena
2 / 2 / 1
Регистрация: 17.03.2015
Сообщений: 45
#1

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

29.09.2016, 09:16. Просмотров 200. Ответов 8
Метки нет (Все метки)

есть задача: создать класс 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;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 09:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конвертация времени в американский формат и обратно (C++):

Конвертация qint64 в int и обратно - C++
Здравствуйте, делаю программу и возникла необходимость конвертации qint64 в int и обратно. Как можно это делать? гугление не помогло

Конвертация int в char и обратно - C++
Помогите, я запутался... Есть 2 переменных: int a; char b; Допустим a = 0. Нужно преобразовать ее в символ, чтобы b = '0'. ...

Конвертация числа в строку и обратно, условие исключения, разность. - C++
Здравствуйте! Проблема с задачей: В четырёхзначном числе все цифры разные и отличны от нуля. если его записать в обратном порядке, ...

Подскажите формат даты/времени - C++
Здравствуйте! Подскажите пожалуйста формат даты/времени 29.03.2016 13:32:49 - &quot;f036ad939589d101&quot; 29.03.2016 22:26:35 -...

Формат Даты и Времени (работа с файлом) - C++
Очень прошу помощь. Как считать с файла строку в формате даты и времени? К примеру строку &quot;20.10.2012 14:45:45&quot;

Функция, получающая формат даты и времени в виде параметра - C++
Нужна функция получающая формат даты и времени в виде параметра и возвращающая дату и время в виде строки. Изучая Си написал следующую...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HighPredator
5542 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,450
Записей в блоге: 2
29.09.2016, 10:14 #2
Возможно имелось ввиду заменить методы plus, minus и sravn на перегрузку операторов.
0
Athena
2 / 2 / 1
Регистрация: 17.03.2015
Сообщений: 45
29.09.2016, 10:16  [ТС] #3
нет, там надо именно функции написать
0
kylroma
Одессит
200 / 71 / 22
Регистрация: 30.12.2013
Сообщений: 259
Записей в блоге: 1
Завершенные тесты: 1
29.09.2016, 10:21 #4
+1 за перегрузку операторов.
Я бы ещё имена переменных и методов изменил. типа: getMinutes(), getHour()
Возможно конвертацию времени стоит сделать в одном методе, а сам метод пусть разбирается из какого формата в какой переводить.
0
HighPredator
5542 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,450
Записей в блоге: 2
29.09.2016, 10:25 #5
Цитата Сообщение от Athena Посмотреть сообщение
нет, там надо именно функции написать
Тогда полный текст задания в студию. Потому что в таком виде вроде делать помимо сказанного особо нечего.
0
Athena
2 / 2 / 1
Регистрация: 17.03.2015
Сообщений: 45
29.09.2016, 10:57  [ТС] #6
ну как мне только что заявили то надо что бы функции плюс и минус принимали по два аргумента, только не пойму почему.... Вроде и с одним неплохо работает.
0
HighPredator
5542 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,450
Записей в блоге: 2
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;
}
Понимаете идею?
1
Athena
2 / 2 / 1
Регистрация: 17.03.2015
Сообщений: 45
29.09.2016, 11:40  [ТС] #8
А есть какая то большая разница между моим вариантом и вашим?
0
HighPredator
5542 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,450
Записей в блоге: 2
29.09.2016, 12:08 #9
Athena, как вызов происходит посмотрите.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 12:08
Привет! Вот еще темы с ответами:

Формат даты (американский и не очень) - VBA
Есть форма на ней 2 текстбокса, отформатированные для ввода даты есть 2 ячейки с форматом даты и есть такой код ...

перевод строки с датой в 'американский ' формат - MS Access
у меня есть строковая переменная с полной датой например '30.01.2004 10:00:00', есть ли какая-нибудь функция, которая переводит эту дату в...

Конвертация массива в NSData и обратно - Программирование iOS
Ребят, я тут с NSUserDefaults играюсь, и передо мной стоит задача. СОбрать спрайты со слоя, сохранить их в базе, и потом достать обратно....

Конвертация XML в JSON и обратно - C++ Qt
Есть ли в Qt стандартные средства конвертации форматов друг в друга?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.09.2016, 12:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru