C++ - Alguém sabe como dar entrada de segundos em horas?

    Autor Mensagem
    janick
    Veterano
    # mar/10


    Beleza? To aqui resolvendo uns exercícios de C++ e estou a uma boa meia hora preso em um que pede para "Ler uma medida de tempo dada em segundos e escrever esta mesma medida expressa em horas, minutos e segundos, no formato H:M:S. Por exemplo: se a medida for 5000 segundos, teremos: 1:23:20."

    Ta dando quase certo, mas por exemplo, se eu coloco uma medida segundos que 60 minutos quando transforma os segundos em minutos em horas, ele não subtrai 60 minutos e adiciona uma hora, ele põe por exemplo, 61 minutos, 82 minutos. E ai, como eu resolvo isso, alguém sabe?

    janick
    Veterano
    # mar/10
    · votar


    # include <iostream>
    # include <math.h>
    using namespace std;
    int main ()

    {
    int TEMPO, SEGUNDOS, MINUTOS, HORAS;
    cout << "\n\nInforme a medida de tempo em segundos: ";
    cin >> TEMPO;
    SEGUNDOS=TEMPO%60;
    MINUTOS=TEMPO/60;
    HORAS=TEMPO/600;
    cout << "\n\nMedida expressa em horas: "<<HORAS<<":"<<MINUTOS<<":"<<SEGUNDOS<< "\n\n";
    }

    Aqui o meu programa.

    Gan
    Veterano
    # mar/10
    · votar


    e aew champz, faz assim:

    int main(){

    int tempo = 5000;

    int hora = tempo/3600;

    int resto = tempo % 3600;

    int minutos = resto / 60;

    int segundos = resto % 60;

    printf("%d:%d:%d",hora,minutos,segundos);
    }

    janick
    Veterano
    # mar/10
    · votar


    Saquei! Mas como eu faço para informar um numero em segundos via "cin" e ele jogar isso pra H:M:S ? a formula ta certa, mas essa parte que eu n to conseguindo

    Simonetti
    Veterano
    # mar/10
    · votar


    # include <iostream>
    # include <math.h>
    using namespace std;
    int main ()

    {
    int TEMPO, SEGUNDOS, MINUTOS, HORAS;
    cout << "\n\nInforme a medida de tempo em segundos: ";
    cin >> TEMPO;

    SEGUNDOS = TEMPO % 60;
    MINUTOS = ((TEMPO - SEG) / 60) % 60;
    HORAS= (TEMPO - SEGUNDOS - MINUTOS * 60) %3600

    cout << "\n\nMedida expressa em horas: "<<HORAS<<":"<<MINUTOS<<":"<<SEGUNDOS<< "\n\n";
    }

    Gan
    Veterano
    # mar/10
    · votar


    janick
    qual fórmula q tá certa?? a sua???

    Palermo
    Veterano
    # mar/10 · Editado por: Palermo
    · votar


    janick
    Saquei! Mas como eu faço para informar um numero em segundos via "cin" e ele jogar isso pra H:M:S ? a formula ta certa, mas essa parte que eu n to conseguindo

    igual como você fez cara.
    cout << "\n\nInforme a medida de tempo em segundos: ";
    cin >> TEMPO;



    Ele colocou fixo o tempo. Você apenas declara a variavel tempo e faz o cin.

    janick
    Veterano
    # mar/10
    · votar


    Simonetti
    Oi! Fantástico! Deu certo aqui, depois que eu joguei no complilador, mas deixa eu te perguntar uma coisa, quando a medida dos minutos tem a casa das unidades zero, a mesma não aparece, aparece apenas o algarismo das dezenas. Como eu resolvo isso?
    Palermo
    Oi cara! Agora entendi... mas mesmo trocando para cin >> tempo, não deu certo, continuou com um resultado fixo! Mas agora eu dei um jeito aqui!

    janick
    Veterano
    # mar/10
    · votar


    Vacilo meu aqui! Deu certíssimo!

    Obrigado à todos que colaboraram aqui no tópico, me ajudaram demais tanto à fazer como entender qual era meu erro!

    janick
    Veterano
    # mar/10
    · votar


    Engraçado, eu coloco 72.000 segundos = 1 hora, e da 0:0:0 :S

    janick
    Veterano
    # mar/10
    · votar


    comofas agora?

    janick
    Veterano
    # mar/10
    · votar


    # include <iostream>
    # include <math.h>
    using namespace std;
    int main ()

    {
    int TEMPO, SEGUNDOS, MINUTOS, HORAS;
    cout << "\n\nInforme a medida de tempo em segundos: ";
    cin >> TEMPO;

    SEGUNDOS = TEMPO % 60;
    MINUTOS = ((TEMPO - SEGUNDOS) / 60) % 60;
    HORAS= (TEMPO - SEGUNDOS - MINUTOS * 60) %3600;

    cout << "\n\nMedida expressa em horas: "<<HORAS<<":"<<MINUTOS<<":"<<SEGUNDOS<< "\n\n";
    }

    Gan
    Veterano
    # mar/10
    · votar


    janick
    Engraçado, eu coloco 72.000 segundos = 1 hora, e da 0:0:0 :S
    72.000 segundos não é uma hora, 3600 segundos é uma hora.

    bem, mas no código q eu postei não dá esse problema nem pra 3600, nem pra 7200 e nem pra 72.000...

    seu programa pode estar explodindo por causa do tamanho do inteiro no compilador que você usa, Se o seu compilador representa inteiros sem sinal com 16 bits, então vc não vai conseguir representar uma grandeza maior do q 2^16

    ZakkWyldeEMG
    Veterano
    # mar/10
    · votar


    declara aquele TEMPO como unsigned long int

    Guilherme 90
    Veterano
    # mar/10
    · votar


    Dahora isso aí!

    ^^

    janick
    Veterano
    # mar/10
    · votar


    Gan
    Duas horas digo. eu ponho 3600 da a mesma merda. e 3599, da 0:59:59

    =/

    Não ta demonstrando o algarismo da casa das unidades, comofas?

    -Toolbar-
    Veterano
    # mar/10
    · votar


    É bem legal ver os tópicos assim e entender. \o/

    Jesus de Nazaré Rei dos Judeus
    Veterano
    # mar/10
    · votar


    dornocelebro

    janick
    Veterano
    # mar/10
    · votar


    Jesus de Nazaré Rei dos Judeus
    Não tinha nada melhor para comentar não seu acéfalo?

    ZakkWyldeEMG
    Veterano
    # mar/10 · Editado por: ZakkWyldeEMG
    · votar


    SEGUNDOS = TEMPO % 60;
    MINUTOS = ((TEMPO - SEGUNDOS) / 60) % 60;
    HORAS= (TEMPO - SEGUNDOS - MINUTOS * 60) %3600;


    o correto seria somente:

    HORAS = TEMPO/3600;

    agora a formatação dos zeros eu tava tentando isso:

    Podemos também determinar o caractere a ser utilizado para preencher os espaços em branco de um campo de exibição. Isto é feito com o seguinte método:

    cout.fill ( "caractere");

    Onde substituímos "caractere" pelo caractere que será exibido. É necessário utilizar aspas entre o caractere, para indicar para o compilador que não se trata de uma variável.

    O exemplo abaixo mostra a utilização conjunta destes dois métodos:

    int variavel = 10;
    cout.width ( 8 );
    cout.fill("0");
    cout << variavel;

    Este exemplo fará a seguinte exibição na tela, preenchendo os espaços em branco determinados por cout.width com o caractere 0, determinado por cout.fill:

    00000010


    Fonte: http://apostilacpp.awardspace.com/index.php?pagina=modulo05

    Mas não deu certo.

    janick
    Veterano
    # mar/10
    · votar


    ZakkWyldeEMG
    CARA! Foi só fazer isso que rodou perfeitamente meu programa :)

    Muito obrigado aos amigos foristas que me ajudaram, era o único exercício de uma lista de PC que faltava eu fazer, agora vou levar tudo funfano beleza \o/

    ZakkWyldeEMG
    Veterano
    # mar/10
    · votar


    janick

    eu me encuquei com o lance da formatação e por falta de atenção, esqueci um detalhe. aí vai a correção:

    #include <cstdlib>
    #include <iostream>
    #include "math.h"

    using namespace std;

    int main ()

    {

    unsigned int TEMPO, SEGUNDOS, MINUTOS, HORAS;

    cout << "\n\nInforme a medida de tempo em segundos: ";
    cin >> TEMPO;

    SEGUNDOS = TEMPO % 60;
    MINUTOS = ((TEMPO - SEGUNDOS) / 60) % 60;
    HORAS = TEMPO / 3600;

    cout << "\n\nMedida expressa em horas: ";
    cout.fill('0');
    cout.width(2);
    cout <<HORAS;
    cout <<":";
    cout.fill('0');
    cout.width(2);
    cout <<MINUTOS;
    cout <<":";
    cout.fill('0');
    cout.width(2);
    cout <<SEGUNDOS;
    cout << "\n\n";
    system("PAUSE");

    }

    ZakkWyldeEMG
    Veterano
    # mar/10
    · votar


    apesar de eu ter viajado no enunciado (só pedia formato H:M:S e não HH:MM:SS como um relógio convencional), aí fica o segundo jeito

    =)

    janick
    Veterano
    # mar/10
    · votar


    ZakkWyldeEMG

    Caralho! hehehe esse HH:MM:SS fica tenso MESMO. E o cara nem ensinou pra gente esses conceitos ainda, mas vou tentar aprender!

    Guilherme 90
    Veterano
    # mar/10
    · votar


    Eu to tentando aqui também..

    [/mentira]

    Socomegaton
    Veterano
    # mar/10
    · votar


    Faz em VB hehehe.

    -Toolbar-
    Veterano
    # mar/10
    · votar


    Pqp. Agora fiquei mó confuso em fazer isso aqui.. =/

    Foda é que é bem simples mas eu não consigo! ¬¬

    "Dado o preço de um produto (valor inteiro), elaborar um programa para verificar qual a menor quantidade de notas necessárias para efetuar o pagamento da compra. Considerar os valores das notas atuais (1, 2, 5, 10, 20, 50 e 100). Utilizar os operadores % (resto) e / (divisão inteira) para a solução deste problema."

    =l

    quem estiver disposto em ajudar, valeu!

    -Toolbar-
    Veterano
    # mar/10
    · votar


    obrigado

      Enviar sua resposta para este assunto
              Tablatura   
      Responder tópico na versão original
       

      Tópicos relacionados a C++ - Alguém sabe como dar entrada de segundos em horas?