Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MOISES.MOURA

[Resolvido] hora no formato HH:MM:SS em C++

Recommended Posts

Boa tarde.

estou com um problema em um exercicio da faculdade, que é o seguinte:

Crie um construtor-padrão (sem argumentos) que inicialize os membros de dados

com zero.

Crie um segundo construtor que inicialize todos os membros de dados com os

valores recebidos como argumento.

Crie uma função-membro (método) init() que executa a mesma tarefa do construtor

do item anterior.

Crie um método mostra() para imprimir a hora no formato hh:mm:ss.

Implemente um método soma() que receba dois objetos da classe Tempo,

passados como argumentos, e realize a soma de ambos os objetos, colocando o

resultado da soma no objeto do qual é membro.

Crie uma sobrecarga do método soma() que soma o objeto que recebe como único

argumento com o objeto do qual é membro e retorna um novo objeto com o total.

Escreva um método que subtraia dois objetos da classe Tempo e retorne o número

de segundos entre eles.

o que foi feito do programa foi

ClasseTempo()
	{
		hora=0;
		min=0;
		seg=0;
	}
	ClasseTempo(int h, int m, int s)
	{
		hora=h;
		min=m;
		seg=s;
	}
	int InitTempo(int h, int m, int s)
	{
			hora=h;
			min=m;
			seg=s;
	}
	 void Soma(ClasseTempo T1, ClasseTempo T2)//T1+T2
	{
		int SegTotal,RestoSeg,MinTotal,QuocSeg,RestoMin,HoraTotal,RestoHora,QuocMin;
		SegTotal=T1.seg+T2.seg;//soma dos segundos

		RestoSeg=SegTotal%60;//armazena o resto da divisao da soma dos segundos
		QuocSeg=SegTotal/60;//armazena o quociente da divisao da soma dos segundos
		MinTotal=T1.min+T2.min+QuocSeg;//soma os minutos soma tambem o valor de QuocSeg,pois,se e pq aumentou um minuto

		RestoMin=MinTotal%60;//armazena o resto da divisao da soma dos minutos
		QuocMin=MinTotal/60;//armazena o quociente da divisão da soma dos minutos

		HoraTotal=T1.hora+T2.hora+QuocMin;//armazena as horas totais

		RestoHora=HoraTotal;//armazena o quociente da divisao da hora

		hora=RestoHora;//armazena o resultado da soma das horas
		min=RestoMin;//armazena o resultado da soma dos minutos
		seg=RestoSeg;//armazena o resultado da soma dos segundos
	}
	void MostraTempo()
	{
			cout<<" "<<hora<<":"<<min<<":"<<seg<<endl;
	}
};
int main()
{
ClasseTempo T;
ClasseTempo t1;
//ClasseTempo t2;
int hora,min,seg;
//T.ClasseTempo();
cout<<"informe a hora: "<<endl;
cin>>hora;

cout<<"informe os minutos: "<<endl;
cin>>min;

cout<<"informe os segundos: "<<endl;
cin>>seg;
ClasseTempo t2(hora,min,seg);
t1.InitTempo(hora,min,seg);
T.Soma(t1,t2);
T.MostraTempo();
getch();
return 0;
}
a dificuldade e a seguinte, ja procurei em diversos foruns como mostrar a hora no formato HH:MM:SS, e essa sobrecarga do metodo soma(), tambem não ficou bem claro para mim.

desde ja agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá MOISES.MOURA, tudo certo?

 

A forma como você mostra o tempo não está bem?

tente um:

void MostraHora()
{
	printf("%d:%d:%d\n", hora, min, seg);
}

Sobre a "Soma" você deve criar dois métodos:

metodo 1 - Soma dois objetos da classe "ClasseTempo" e atribui o valor dessa soma no objeto cujo método é membro.

exemplo:

meuTempo.Somar(tempo1, tempo2);
Tem que somar "tempo1" com "tempo2" e atribuir o valor da soma em "meuTempo"

 

metodo 2 - Soma um objeto da classe "ClasseTempo" com o objeto cujo método é membro, atribui o valor a esse objeto.

Exemplo:

meuTempo.Somar(tempo1);
Tem que somar "meuTempo" com "tempo1" e jogar o valor da soma em "meuTempo"

 

 

os dois métodos ficariam mais ou menos assim:

void Soma(ClasseTempo T1, ClasseTempo T2)
		{
			int HH, MM, SS;

			SS = T1.seg + T2.seg;
			MM = T1.min + T2.min;
			HH = T1.hora + T2.hora;

			MM += SS/60;
			SS = SS%60;

			HH += MM/60;
			MM = MM%60;

			InitTempo(HH, MM, SS);
		}

		void Soma(ClasseTempo T1)
		{
			int HH, MM, SS;

			SS = T1.seg + seg;
			MM = T1.min + min;
			HH = T1.hora + hora;

			MM += SS/60;
			SS = SS%60;

			HH += MM/60;
			MM = MM%60;

			InitTempo(HH, MM, SS);
		}

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

AÊ Victor, o formato das horas continua sem ser HH:MM:ss, ta tipo assim 2:3:1, onde, 2 horas 3 minutos e 1 segundo, e tem q mostrar 02 horas, 03 min e 01 seg, quanto aos metodos, eles fazem a mesma função de antes, o maior problema é mostrar as horas no formato citado,voce sabe alguma função que eu possa criar para mostrar nesse formato, algum comando ou onde posso correr atras para fazê-lo, de qq forma valeu de novo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala MOISES

 

Puts...você tem toda razão.. eu nem me toquei que você queria imprimir os zeros da direita do número. Erro meu. hahahahahaha

 

é fácil de você pensar em algo....

olha só:

só é preciso imprimir um zero antes do número se ele for menor que 10, concorda?

então vamos criar uma funçãozinha simples que faz isso:

void MostraHora()
{
	(hora < 10) ? (printf("0%d:", hora)) : (printf("%d:", hora));
	(min < 10) ? (printf("0%d:", min)) : (printf("%d:", min));
	(seg < 10) ? (printf("0%d\n", seg)) : (printf("%d\n", seg));
}
Se você não entendeu a sintaxe:

Em C podemos fazer um if de duas formas:

1- A forma tradicional

2- (condição) ? (se_verdadeiro) : (se_falso);

Compartilhar este post


Link para o post
Compartilhar em outros sites

VictorCacciari tamém to fazendo com ele moises mais tipo agora ta mostrando resultado certinho somando agora folta Escrever um método que subtraia dois objetos da classe Tempo e retorne o número

de segundos entre eles.

como sera que fasso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moises, que bom que funcionou! =D

 

Glaucco, pra subtrair os dois tempos e descobrir a variação entre eles, em segundos é muito simples.

Converte tudo pra segundo!

 

ex:

3 horas 34 minutos e 13 segundos

é igual à:
3*3600 + 34*60 + 13 segundos

//uma hora tem 3600 segundos, um minuto tem 60 segundos!

depois que você converter o tempo1 e o tempo2 para segundos fica fácil né!

=P

Compartilhar este post


Link para o post
Compartilhar em outros sites

:P

relaxa, tamos aqui pra isso!

 

veja se você entende:

int IntervaloSegundos(ClasseTempo T1, ClasseTempo T2)
{
int seg1, seg2;

seg1 = T1.hora*3600 + T1.min*60 + T1.seg;
seg2 = T2.hora*3600 + T2.min*60 + T2.seg;

return seg1 - seg2;
}

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado novamente VictorCacciari funciono beleza. Resolvido D+^^.

 

#include <iostream>
using namespace std;
class Tempo {
private:
	int hora,min,seg;
public:
	Tempo() {
		hora=0;
		min=0;
		seg=0;
	}
	Tempo(int h, int m, int s) {
		hora=h;
		min=m;
		seg=s;
	}
	int InitTempo(int h, int m, int s) {
		hora=h;
		min=m;
		seg=s;
	}
	void Soma(Tempo T1,Tempo T2) {
		int HH, MM, SS;
		SS = T1.seg + T2.seg;
		MM = T1.min + T2.min;
		HH = T1.hora + T2.hora;
		MM += SS/60;
		SS = SS%60;
		HH += MM/60;
		MM = MM%60;
		InitTempo(HH, MM, SS);
	}
	void Soma(Tempo T1) {
		int HH, MM, SS;
		SS = T1.seg + seg;
		MM = T1.min + min;
		HH = T1.hora + hora;
		MM += SS/60;
		SS = SS%60;
		HH += MM/60;
		MM = MM%60;
		InitTempo(HH, MM, SS);
	}
	int IntervaloSegundos(Tempo T1,Tempo T2) {
		int seg1, seg2;

		seg1 = T1.hora*3600 + T1.min*60 + T1.seg;
		seg2 = T2.hora*3600 + T2.min*60 + T2.seg;

		return seg1 - seg2;
	}
	void MostraTempo() {
		(hora < 10) ? (printf("0%d:", hora)) : (printf("%d:", hora));
		(min < 10) ? (printf("0%d:", min)) : (printf("%d:", min));
		(seg < 10) ? (printf("0%d\n", seg)) : (printf("%d\n", seg));
	}
};
int main() {
	Tempo T;
	Tempo t1;
	int hora,min,seg;
	cout<<"informe a hora: "<<endl;
	cin>>hora;
	cout<<"informe os minutos: "<<endl;
	cin>>min;
	cout<<"informe os segundos: "<<endl;
	cin>>seg;
	Tempo t2(hora,min,seg);
	t1.InitTempo(hora,min,seg);
	T.Soma(t1,t2);
	T.MostraTempo();
	system("PAUSE");
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Glaucco

 

Que bom que funcionou!

 

vou marcar como "Resolvido"

 

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.