Создать класс time для работы со временем в формате час минута секунда

0 / 0 / 0

Регистрация: 22.10.2011

Сообщений: 3

1

22.10.2011, 15:09. Показов 17855. Ответов 7


Создать класс Time для работы со временем в формате «час. минута.секунда» . Класс должен включать в себя не менее четырёх функций инициализации числами, строкой (например 23:59:59), секундами и временем. Обязательными операциями являются вычисление разницы между двумя моментами времени в секундах, сложение времени из заданного количества секунд, вычитание времени из заданного количества секунд, сравнение моментов времени, перевод в секунды, перевод в минуты( с округлением до целой минуты).

буду благодарен.



0



Gepar

1186 / 542 / 78

Регистрация: 01.07.2009

Сообщений: 3,517

22.10.2011, 16:29

2

Вообще задание совсем не сложное и если хотите хотя бы чего-то узнать по с++ то Вам нужно решать это задание самому (спрашивая в теме если чего-то не получается). Ваше задание подразумевает создание класса/структуры с тремя полями

C++
1
2
3
4
5
6
7
8
struct TIME
{
private:
int h; //час
int m;//минута
int s;//секунда
...
}

наличия set/get методов, конструктора и указанных в задании функций. Сложностей никаких в задании нет и всё идёт элементарно на проверку на допустимость и последующую установку значений да возврат в случае get функций.

Добавлено через 5 минут
Вообще задание совсем не сложное и если хотите хотя бы чего-то узнать по с++ то Вам нужно решать это задание самому (спрашивая в теме если чего-то не получается). Ваше задание подразумевает создание класса/структуры с тремя полями

C++
1
2
3
4
5
6
7
8
struct TIME
{
private:
int h; //час
int m;//минута
int s;//секунда
...
}

наличия set/get методов, конструктора и указанных в задании функций. Сложностей никаких в задании нет и всё идёт элементарно на проверку на допустимость и последующую установку значений да возврат в случае get функций.



0



Студент

148 / 148 / 64

Регистрация: 18.01.2011

Сообщений: 469

22.10.2011, 18:29

3

А можно ли задать переменной h текущий «час» по времени, и переменной m текущую минуту?



0



0 / 0 / 0

Регистрация: 22.10.2011

Сообщений: 3

22.10.2011, 22:48

 [ТС]

4

да,конечно можно.



0



Студент

148 / 148 / 64

Регистрация: 18.01.2011

Сообщений: 469

22.10.2011, 23:25

5

а можете сказать, а лучше показать.



0



1 / 1 / 0

Регистрация: 22.02.2013

Сообщений: 39

18.06.2013, 16:00

6

а можно весь код прогрыммы?



0



igorrr37

2480 / 1907 / 951

Регистрация: 21.12.2010

Сообщений: 3,474

Записей в блоге: 10

18.06.2013, 19:41

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
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
#include <iostream>
#include <stdexcept>
#include <locale>
#include <cstdlib>
#include <string>
#include <sstream>
 
class Time
{
public:
    typedef unsigned short ushort;
    Time(ushort hs, ushort ms, ushort ss)
    {
        set_time(hs, ms, ss);
    }
 
    explicit Time(size_t ss = 0)
    {
        set_time(ss);
    }
 
    explicit Time(std::string const& stime)
    {
        set_time(stime);
    }
 
    void set_time(ushort hs, ushort ms, ushort ss)
    {
        _hs = hs;
        _ms = ms;
        _ss = ss;
        check();
    }
 
    void set_time(size_t ss)
    {
        _hs = ss / 3600;
        _ms = (ss % 3600) / 60;
        _ss = (ss % 3600) % 60;
        check();
    }
 
    void set_time(std::string const& stime) // "23:59:59"
    {
        std::stringstream sstr;
        for(auto const& val : stime)
            sstr << (val == ':' ? ' ' : val);
        sstr >> _hs >> _ms >> _ss;
        if(!sstr || !sstr.eof())
            throw std::runtime_error("Time::set_time: !sstr || !sstr.eof()");
        check();
    }
 
    friend std::ostream& operator<<(std::ostream& ost, Time const& rhs)
    {
        return ost << rhs._hs << ':' << rhs._ms << ':' << rhs._ss;
    }
 
    operator std::string() const
    {
        std::stringstream sstr;
        sstr << _hs << ':' << _ms << ':' << _ss;
        return sstr.str();
    }
 
private:
    ushort _hs, _ms, _ss;
    void check() const
    {
        if(_hs >= 24  || _ms >= 60 || _ss >= 60)
            throw std::runtime_error("Time::check: _hs >= 24  || _ms >= 60 || _ss >= 60");
    }
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    Time hms1("23:45:40"), hms2(23 * 3600 + 45 * 60 + 41), hms3(23, 45, 42);
    std::string shms3 = hms3;
    std::cout << hms1 << 'n' << hms2 << 'n' << shms3 << "nn";
    system("pause");
    return 0;
}



2



1 / 1 / 0

Регистрация: 22.02.2013

Сообщений: 39

18.06.2013, 21:33

8

Цитата
Сообщение от igorrr37
Посмотреть сообщение

for(auto const& val : stime)

говорит что здесь ошибка(



0



Помогите пожалуйста с условием:

Реализовать класс Time, который содержит три поля типа int,
предназначенные для хранения часов, минут и секунд. Перегрузить
операции ввода–вывода в поток, которые работают с объектами данного
класса в следующем формате: ЧЧ:ММ:СС. Перегрузить операторы
инкремента(++) и декремента(—), которые работают в обеих формах:
префиксной и постфиксной. Увеличение или уменьшение времени выполнять
для поля секунд, корректировка полей минут и часов выполняется только
в случае переполнения поля секунд и/или минут соответственно. В
функции main привести примеры реализации класса Time.

Сам класс и вывод времени есть. Как перегрузить операции ввода–вывода в поток, которые работают с объектами данного класса, чтобы получить следующий формат: ЧЧ:ММ:СС?

#include <iostream>

class Time
{
    int m_Hours;
        int m_Minutes;
        int m_Seconds;

public: 
         Time()// конструктор по умолчанию который 
   {
         m_Hours=0;
         m_Minutes=0;
         m_Seconds=0;

   }
      Time(int hours , int minutes, int seconds)
   {
         m_Hours=hours;
         m_Minutes=minutes;
         m_Seconds=seconds;

   }

   void ShowTime()
  {
      cout<<m_Hours<<" : "<< m_Minutes<<" : "<< m_Seconds<<endl;
  }
};

using namespace std;

int main(void)
{
    setlocale(LC_CTYPE, "Russian");
    // ваши действия 

    cout << endl;
    system("pause");
    return 0;
}

Подскажите как можно сделать корректировку: корректировка полей минут
и часов выполняется только в случае переполнения поля секунд и/или
минут соответственно

#include <iostream>
#include <windows.h>
using namespace std;

class Time {
  int m_Hours;
  int m_Minutes;
  int m_Seconds;


  public:


    Time() // конструктор по умолчанию который 
    {
      m_Hours = 0;
      m_Minutes = 0;
      m_Seconds = 0;


    }


  Time(const int & hours,
    const int & minutes,
      const int & seconds) {
    m_Hours = hours;
    m_Minutes = minutes;
    m_Seconds = seconds;


  }
  void ShowTime() {
    cout << m_Hours << " : " << m_Minutes << " : " << m_Seconds << endl;
  }


  // префиксная форма
  int operator++() {
    return ( * this).m_Seconds++;
  }


  int operator--() {
    return ( * this).m_Seconds--;
  }


  // постфиксная форма
  int operator++(int) {
    return ++( * this).m_Seconds;
  }


  int operator--(int) {
    return --( * this).m_Seconds;
  }


  ostream & operator << (ostream & out) {
    cout << "nFrom overload << operator: ";
    out << ( * this).m_Hours << ":" << ( * this).m_Minutes << ":" << ( * this).m_Seconds;
    return out;
  }


  istream & operator >> (istream & in ) {
    cout << "nEnter hours: ";
    cin >> ( * this).m_Hours;
    cout << "Enter minutes: ";
    cin >> ( * this).m_Minutes;
    cout << "Enter secods: ";
    cin >> ( * this).m_Seconds;
    return in;
  }


};


int main(void) {
  Time time(12, 32, 12);
  time.ShowTime();
  time++;
  time.ShowTime();
  time--;
  time.ShowTime();
  ++time;
  time.ShowTime();
  --time;
  time.ShowTime();
  time << cout;
  time >> cin;
  time.ShowTime();
  system("pause");
  return 0;
}

Формулировка задачи:

Создать класс Time для работы со временем в формате «час. минута.секунда» . Класс должен включать в себя не менее четырёх функций инициализации числами, строкой (например 23:59:59), секундами и временем. Обязательными операциями являются вычисление разницы между двумя моментами времени в секундах, сложение времени из заданного количества секунд, вычитание времени из заданного количества секунд, сравнение моментов времени, перевод в секунды, перевод в минуты( с округлением до целой минуты).

помогите пожалуйста)

Код к задаче: «Создать класс Time»

textual

private int totalSeconds;
 
public int Second
{
    get
    {
        return totalSeconds % 60;
    }
}
public int Minute
{
    get
    {
        return (totalSeconds / 60) % 60;
    }
}
public int Hour
{
    get
    {
        return totalSeconds / 3600;
    }
}

Полезно ли:

14   голосов , оценка 3.929 из 5

Составьте описание класса для представления времени. Предусмотрите возможности установки времени и изменения его отдельных полей (час, минута, секунда) с проверкой допустимости вводимых значений. В случае недопустимых значений полей, поле устанавливается в значение 0. Создать методы изменения времени на заданное количество часов, минут и секунд.

Решение

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

Класс Time содержит закрытые поля для хранения секунд, минут и часов. Установка этих полей происходит с помощью методов set_hh, set_mm и set_ss, выполняющих валидацию данных – при некорректном значении параметра выставляется ноль. Эти методы вызываются в конструкторе. Всего конструкторов три – делегируют свою работу третьему с помощью this().

Наиболее интересный метод – add_seconds(int) добавляет к текущему времени заданное число секунд, при этом учитывается возможность «переноса» в разряд минут и часов. Методы add_minutes и add_hours делегируют свои работу методу add_seconds.
Исходный код класса целиком:

import java.util.Scanner;
class Time {
 private int hh, mm, ss;

 public Time(int hh_, int mm_, int ss_) {
  set_hh(hh_);
  set_mm(mm_);
  set_ss(ss_);
 }

 public Time(int hh_, int mm_) {
  this(hh_, mm_, 0);
 }

 public Time() {
  this(0, 0, 0);
 }

 public void set_hh(int hh_) {
  if (hh_ < 0 || hh_ > 23)
   hh = 0;
  else
   hh = hh_;
 }

 public void set_mm(int mm_) {
  if (mm_ < 0 || mm_ > 59)
   mm = 0;
  else
   mm = mm_;
 }

 public void set_ss(int ss_) {
  if (ss_ < 0 || ss_ > 59)
   ss = 0;
  else
   ss = ss_;
 }

 public int hours() {
  return hh;
 }

 public int minutes() {
  return mm;
 }

 public int seconds() {
  return ss;
 }

 public void print() {
  System.out.println(toString());
 }

 public String toString() {
   return String.format("%02d:%02d:%02d", hh, mm, ss);
 }
    
 static Time read(Scanner scanner) {
   Time time = new Time();
   System.out.println("hh: ");
   time.set_hh(scanner.nextInt());
      
   System.out.println("mm: ");
   time.set_mm(scanner.nextInt());
      
   System.out.println("ss: ");
   time.set_ss(scanner.nextInt());
      
   return time;
 }

 public void add_seconds(int ss_) {
  ss += ss_;

  mm += ss / 60;
  ss = ss % 60;

  hh += mm / 60;
  mm = mm % 60;

  hh = hh % 24;
 }

 public void add_minutes(int mm_) {
  add_seconds(mm_ * 60);
 }

 public void add_hours(int hh_) {
  add_seconds(hh_ * 60 * 60);
 }
}

Для тестирования этого класса создан следующий модуль Main.java:

public class Main {
 public static void main(String[] args) {
  Time a = new Time(5, 44, 3);
  Time b = new Time(50, 3);
  Time c = new Time();

  a.print();
  b.print();
  c.print();
  System.out.println("-----------------");

  a.set_hh(25);
  a.set_mm(22);
  a.set_ss(50);

  b.add_seconds(50);
  c.add_seconds(70);

  a.print();
  b.print();
  c.print();
  System.out.println("-----------------");

  a.add_minutes(20);
  b.add_hours(3);
  c.add_hours(33);

  a.print();
  b.print();
  c.print();
  System.out.println("-----------------");
 }
}

Тут с помощью разных конструкторов создается три объекта. При этом, во второй конструктор передается некорректное значение часов.

Затем, тестируются методы установки и добавления часов, секунд и минут. При добавлении объекту c 70 секунд, его значение увеличивается на 1 минуту 10 секунд. Результаты работы программы приведены на рисунке:

Запустить код можно в онлайн-компиляторе.

Модераторы:Hawk, Romeo, Absurd, DeeJayC, WinMain

shilovec5377

Сообщения:8
Зарегистрирован:16 июн 2014, 15:50

Всем привет.
Подскажите как можно сделать корректировку:
корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно

Вот условие:

Реализовать класс Time, который содержит три поля типаint, предназначенные для хранения часов, минут и секунд. Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС. Перегрузить операторы инкремента(++) и декремента(—), которые работают в обеих формах: префиксной и постфиксной. Увеличение или уменьшение времени выполнять для поля секунд, корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно. В функцииmain привести примеры реализации классаTime.

Код: Выделить всё

#include <iostream>
#include <windows.h>
using namespace std;
 
 
class Time {
    int m_Hours;
    int m_Minutes;
    int m_Seconds;
 
 
public:
 
 
    Time()// конструктор по умолчанию который 
    {
        m_Hours = 0;
        m_Minutes = 0;
        m_Seconds = 0;
 
 
    }
 
 
    Time(const int &hours, const int &minutes, const int &seconds) {
        m_Hours = hours;
        m_Minutes = minutes;
        m_Seconds = seconds;
 
 
    }
    void ShowTime()
    {
        cout << m_Hours << " : " << m_Minutes << " : " << m_Seconds << endl;
    }
 
 
    // префиксная форма
    int operator++()
    {
        return (*this).m_Seconds++;
    }
 
 
    int operator--()
    {
        return (*this).m_Seconds--;
    }
 
 
    // постфиксная форма
    int operator++(int)
    {       
        return ++(*this).m_Seconds;
    }
 
 
    int operator--(int)
    {
        return  --(*this).m_Seconds;
    }
 
 
    ostream &operator<<(ostream &out)
    {
        cout << "nFrom overload << operator: ";
        out << (*this).m_Hours << ":" << (*this).m_Minutes << ":" << (*this).m_Seconds;
        return out;
    }
 
 
    istream &operator>>(istream &in)
    {
        cout << "nEnter hours: ";
        cin >> (*this).m_Hours;
        cout << "Enter minutes: ";
        cin >> (*this).m_Minutes;
        cout << "Enter secods: ";
        cin >> (*this).m_Seconds;
        return in;
    }
 
 
};
 
 
int main(void) {
    Time time(12, 32, 12);
    time.ShowTime();
    time++;
    time.ShowTime();
    time--;
    time.ShowTime();
    ++time;
    time.ShowTime();
    --time;
    time.ShowTime();
    time << cout;
    time >> cin;
    time.ShowTime();
    system("pause");
    return 0;
}

Аватара пользователя

Romeo

Сообщения:3091
Зарегистрирован:02 мар 2004, 17:25
Откуда:Крым, Севастополь
Контактная информация:

08 июн 2015, 14:50

На пвесдокоде:

Код: Выделить всё

Инкремент Секунды;
Если (Секунды равны 60)
{
   Секунды = 0:
   Инкремент Минуты;
   Если (Минуты равны 60)
   {
      Минуты = 0;
      Инкремент Часы;
   }
}

Декремент предлагаю додумать самому. Принцип тот же.

И ещё замечание. Зря ты в постфиксной форме вызываешь префиксную. Вообще-то это не одно и то же. Если разницы не знаешь — дай знать, уточню.

Entites should not be multiplied beyond necessity @ William Occam

Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)

Сообщение «Спасибо» малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой «Reputation» в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Аватара пользователя

WinMain

Сообщения:913
Зарегистрирован:14 янв 2005, 10:30
Откуда:Москва
Контактная информация:

08 июн 2015, 16:22

Можешь посмотреть реализацию уже имеющегося класса CTime из библиотеки ATL.
Для этого открой заголовочный файл atltime.h
Вот небольшой пример использования этого класса…

Код: Выделить всё

#include "stdafx.h"
#include <atltime.h>
#include <iostream>
#include <locale.h>

using namespace std;

LPCSTR lc = setlocale(LC_ALL, "russian");

ostream& operator<<(ostream& os, const CTime& ct)
{
	os << ct.GetHour() << ":" << ct.GetMinute() << ":" << ct.GetSecond();
	return os;
}

int _tmain(int argc, _TCHAR* argv[])
{
	CTime ct = CTime::GetCurrentTime();

	cout << "Текущее время " << ct << endl;

	cout << "Инкремент " << ct + 1 << endl;

	cout << "Декремент " << ct + -1 << endl;

	_gettch();

	return 0;
}

• Поля данных час, минута и секунда, представляющие время.
• Метод построения без параметров, который создает объект Time с текущим временем (значение поля данных представляет текущее время).
• Метод построения для создания объекта Time, этот объект имеет конкретное значение времени, это значение выражается в миллисекундах, время, прошедшее с полуночи января 1970 года до текущего сегмента (значение поля данных представляет это время).
• Метод для создания объекта Time с определенными часами, минутами и секундами. • Методы получения трех полей данных: часы, минуты и секунды.
• — метод с именем setTimeClong elapseTime) использует прошедшее время для установки нового времени для объекта. Например, если прошедшее время составляет 555550000 миллисекунд, оно будет преобразовано в 10 часов 10 минут и 10 секунд.
Нарисуйте диаграмму UML этого класса и реализуйте этот класс. Напишите тестовую программу для создания двух объектов Time (используя new Time () и new Time (555550000)), а затем отобразите их часы, минуты и секунды.

—————————————— Блок метода:


import java.util.*;

/**
 *
 */
public class Time {

    /**
     * Default constructor
     */
    public Time() {
        time = System.currentTimeMillis() + 8 * 60 * 60 * 1000;
        // Время, полученное по току, - это среднее время по Гринвичу, которое на восемь часов отстает от пекинского времени, системного времени.
        hour = time / 1000 / 3600 % 24;
        // Получаем час
        minute = time / 1000 % 3600 / 60;
        // Получаем минуты
        second = time / 1000 % 3600 % 60;
        // Получаем секунды
    }

    public long getHour() {
        return hour;
    }

    public void setHour(long hour) {
        this.hour = hour;
    }

    public long getMinute() {
        return minute;
    }

    public void setMinute(long minute) {
        this.minute = minute;
    }

    public long getSecond() {
        return second;
    }

    public void setSecond(long second) {
        this.second = second;
    }

    /**
     *
     */
    private long hour;

    /**
     *
     */
    private long minute;

    /**
     *
     */
    private long second;

    /**
     *
     */
    private long time;

    /**
     *
     */

    /**
     * @param time
     */
    public Time(long time) {
        // TODO implement here
        hour = time / 1000 / 3600 % 24;
        // Получаем час
        minute = time / 1000 % 3600 / 60;
        // Получаем минуты
        second = time / 1000 % 3600 % 60;
        // Получаем секунды
    }

    /**
     * @param hour
     * @param minute
     * @param second
     */
    public Time(long hour, long minute, long second) {
        // TODO implement here
        this.hour=hour;
        this.second=second;
        this.minute=minute;
    }

    /**
     * @param elapseTime
     * @return
     */
    public void setTime(long elapseTime) {
        // TODO implement here
        time = elapseTime;
    }

}

—————————— Блок кода:

public class Exercise10_01 {
    public static void main(String[] args) {
        Time time=new Time();
        Time tim1=new Time(555550000);
        System.out.println("The current time is "+time.getHour()+" : "+time.getMinute()+" : "+time.getSecond());
        System.out.print("The input millisecond conversion time is "+tim1.getHour()+" : "+tim1.getMinute()+" : "+tim1.getSecond());
    }
}

——— Обсуждение: Ответ на вопрос должен быть неправильным, преобразование 555550 000 должно быть 10:19:10

Операции со временем

Уровень сложности:






  • Задание
  • Решение

Время задается в формате час, минута, секунда. Реализовать:

1) вычитание из времени указанного пользователем количества секунд;

2) подсчёт числа секунд между двумя моментами времени, лежащими в пределах одних суток.

Вот пример работы программы:

Не помню уже, кто предоставил данное решение этой задачи, но ктобы это ни был — огромное ему/ей спасибо. Задачка не самая простая, но код получился хороший, удобочитаемый. Вот исходник программы:

#include <iostream>
#include <cassert>
using namespace std;

struct Time
{
    int sec;
    int min;
    int hour;
};

Time inTime();

int main ()
{
    Time myTime = inTime();

    int numSec;
    cout << "Введите количество секунд: ";
    cin >> numSec;
    assert(numSec >= 0);

    int res = (myTime.sec + (myTime.min  * 60) + (myTime.hour * 3600) - numSec); // перевод в секунды
    myTime.hour = res / 3600;
    myTime.min = (res %= 3600) / 60;
    myTime.sec = res % 60;
    cout << "Оставшееся время: " << myTime.hour << ":" <<myTime.min << ":" <<myTime.sec << endl;

    cout << "Введите первый момент времениn";
    Time myTime1 = inTime();
    cout << "Введите второй момент времениn";
    Time myTime2 = inTime();

    int sec1 = (myTime1.sec + (myTime1.min  * 60) + (myTime1.hour * 3600)),
        sec2 = (myTime2.sec + (myTime2.min  * 60) + (myTime2.hour * 3600));

    if (sec1 > sec2)
        sec1 -= sec2;
    else
        sec1 = sec2 - sec1;

    cout << "Количество секунд между введенными моментами времени: " << sec1 << endl;

  return 0;
}

// ввод времени
Time inTime()
{
    Time t;
    cout << "Введите значения времени!n>> часы: ";
    cin >> t.hour;
    assert(t.hour >= 0 && t.hour <= 24);

    cout << ">>минуты: ";
    cin  >> t.min;
    assert(t.min >= 0 && t.min < 60);

    cout << ">>секунды: ";
    cin >> t.sec;
    assert(t.sec >= 0 && t.sec < 60);
return t;
}

Смотрим результат работы программы:

CppStudio.com

Введите значения времени!
>> часы: 4
>>минуты: 32
>>секунды: 47
Введите количество секунд: 145
Оставшееся время: 4:30:22
Введите первый момент времени
Введите значения времени!
>> часы: 12
>>минуты: 10
>>секунды: 12
Введите второй момент времени
Введите значения времени!
>> часы: 18
>>минуты: 45
>>секунды: 0
Количество секунд между введенными моментами времени: 23688

Следующие статьи помогут вам в решении данной задачи:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

Понравилась статья? Поделить с друзьями:
  • Солнцевский районный суд города москвы реквизиты для оплаты госпошлины
  • Сопроводительное письмо составляется для отклика в конкретную компанию
  • Составить бизнес план для открытия собственного дела в центр занятости
  • Составь к задаче схему рассуждений турист проехал на автомобиле 146 км
  • Сотрудникам компании выдают электронную карту от 1 до 1200 17 символов