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 |
|||||||
Вообще задание совсем не сложное и если хотите хотя бы чего-то узнать по с++ то Вам нужно решать это задание самому (спрашивая в теме если чего-то не получается). Ваше задание подразумевает создание класса/структуры с тремя полями
наличия set/get методов, конструктора и указанных в задании функций. Сложностей никаких в задании нет и всё идёт элементарно на проверку на допустимость и последующую установку значений да возврат в случае get функций. Добавлено через 5 минут
наличия 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 |
|||
конструкторы
2 |
1 / 1 / 0 Регистрация: 22.02.2013 Сообщений: 39 |
|
18.06.2013, 21:33 |
8 |
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
Следующие статьи помогут вам в решении данной задачи:
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.