Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
registro

Cronômetro 3 - em horas (crescente)

Recommended Posts

Terceira versão simples do programinha de cronômetro crescente no formato hh:mm:ss que fiz em pascal. Vai de 00h:00m:00s a 24h:00m:00s Se houver erros, reportar por favor. Fiz todos os testes, mas nunca se sabe  :)

 

Editado por dif
Remover anexo. Não manifeste publicamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um menu,coloque para escolher o tipo de cronometro e digitar o tempo

Editado por DREIGON

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Por favor, caso deseje avaliações, poste o código fonte (em vez do ".exe"). :)

No aguardo...

 

Terceira versão simples do programinha de cronômetro crescente no formato hh:mm:ss que fiz em pascal. Vai de 00h:00m:00s a 24h:00m:00s Se houver erros, reportar por favor. Fiz todos os testes, mas nunca se sabe  :)

ANEXO REMOVIDO PELA MODERAÇÃO

Editado por Simon Viegas

Compartilhar este post


Link para o post
Compartilhar em outros sites
Acredito que talvez há outras formas de desenvolver, mas por enquanto fico com essa. Processa até 24h. Qualquer bugs/sugestão reportar por favor  ;)


Program Cronometro_Crescente;

 var

 h,m,s: integer; 


 procedure sessentaSegundos;
 begin


  if (h = 0) and (m = 0) and (s < 10) then
  begin
     clrscr;
     gotoxy(35,12);
     textcolor(red);
     write('0',h,'h:0',m,'m:0',s,'s');
     delay(1000);
     s := s + 1;
  end
     else
     begin
         if (h = 0) and (m = 0) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:0',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
         end;
     end;


 end;


 procedure sessentaMinutos;
 begin


 if (h = 0) and ((m >= 1) and (m < 10)) and (s < 10) then
 begin
      clrscr;
      gotoxy(35,12);
      textcolor(red);
      write('0',h,'h:0',m,'m:0',s,'s');
      delay(1000);
      s := s + 1;
 end;




     if (h = 0) and ((m >= 1) and (m < 10)) and (s >= 10) then
     begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:0',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
     end;
               


         if (h = 0) and ((m >= 10) and (m <= 59)) and (s < 10) then
         begin
             clrscr;
             gotoxy(35,12);
             textcolor(red);
             write('0',h,'h:',m,'m:0',s,'s');
             delay(1000);
             s := s + 1;
         end;




         if (h = 0) and ((m >= 10) and (m <= 59)) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
         end;


 end;


 procedure apartirDeUmaHora;
 begin
  if ((h >= 1) and (h < 10)) and (m = 0) and (s < 10) then
  begin
      clrscr;
      gotoxy(35,12);
      textcolor(red);
      write('0',h,'h:0',m,'m:0',s,'s');
      delay(1000);
      s := s + 1;
  end;
         
      if ((h >= 1) and (h < 10)) and (m = 0) and (s >= 10) then
      begin
        clrscr;
        gotoxy(35,12);
        textcolor(red);
        write('0',h,'h:0',m,'m:',s,'s');
        delay(1000);
        s := s + 1;
      end;
         
        if ((h >= 1) and (h < 10)) and ((m >= 1) and (m < 10)) and (s < 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:0',m,'m:0',s,'s');
          delay(1000);
          s := s + 1;
         end;
       
         if ((h >= 1) and (h < 10)) and ((m >= 1) and (m < 10)) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:0',m,'m:',s,'s');    
          delay(1000);
          s := s + 1;
         end;


       
         if ((h >= 1) and (h < 10)) and ((m >= 10) and (m <= 59)) and (s < 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:',m,'m:0',s,'s'); {alterado}
          delay(1000);
          s := s + 1;
         end;
       
       
         if ((h >= 1) and (h < 10)) and ((m >= 10) and (m <= 59)) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write('0',h,'h:',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
         end;


 end;


 procedure apartirDeDezHoras;
 begin
  if ((h >= 10) and (h <= 23)) and (m = 0) and (s < 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:0',m,'m:0',s,'s');
          delay(1000);
          s := s + 1;
         end;
         
         
         {***}
         
         if ((h >= 10) and (h <= 23)) and (m = 0) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:0',m,'m:',s,'s'); {FIM}
          delay(1000);
          s := s + 1;
         end;
         
         if ((h >= 10) and (h <= 23)) and ((m >= 1) and (m < 10)) and (s < 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:0',m,'m:0',s,'s');
          delay(1000);
          s := s + 1;
         end;


       
         if ((h >= 10) and (h <= 23)) and ((m >= 1) and (m < 10)) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:0',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
         end;
       
         if ((h >= 10) and (h <= 23)) and ((m >= 10) and (m <= 59)) and (s < 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:',m,'m:0',s,'s');
          delay(1000);
          s := s + 1;
         end;
       
       
         if ((h >= 10) and (h <= 23)) and ((m >= 10)) and (m <= 59) and (s >= 10) then
         begin
          clrscr;
          gotoxy(35,12);
          textcolor(red);
          write(h,'h:',m,'m:',s,'s');
          delay(1000);
          s := s + 1;
         end;


 end;


 procedure printaAteUmaHoraCravada;
 begin


 if (h = 0) and (m = 0) and (s = 60) then
    begin
        s := 0;
  m := m + 1;
        clrscr;
        gotoxy(35,12);
        textcolor(red);
        write('0',h,'h:0',m,'m:0',s,'s');
        delay(1000);
        s := s + 1;
    end                 
    else
    begin
      if (h = 0) and ((m >= 1) and (m <= 8)) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;
    end;
    
      if (h = 0) and ((m >= 9) and (m <= 58)) and (s = 60) then
      begin
       s := 0;
       m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;


    
      if (h = 0) and (m = 59) and (s = 60) then
      begin
       h := 1;
 m := 0;
 s := 0;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
       m := 0;
      end; {ateUmaHoraCravada}


 end;


 procedure printaAteNoveHorasCravada;
 begin


 if ((h >= 1) and (h < 10)) and (m = 0) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;
      
      
      if ((h >= 1) and (h < 10)) and ((m >= 1) and (m <= 8)) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;
      
      if ((h >= 1) and (h < 10)) and ((m >= 9) and (m <= 58)) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:',m,'m:0',s,'s');  {u.aqui}
       delay(1000);
       s := s + 1;
      end;
      


      if ((h >= 1) and (h <= 8)) and (m = 59) and (s = 60) then
      begin
       h := h + 1;
       s := 0;
 m := 0;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write('0',h,'h:0',m,'m:0',s,'s');   {u.aqui 2}
       delay(1000);
       s := s + 1;
      end;


 end;


 procedure printaAcimaDeDezHorasCravada;
 begin


 if ((h >= 9) and (h <= 23)) and (m = 0) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write(h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;
            
      
      if ((h >= 9) and (h <= 23)) and ((m >= 1) and (m < 10)) and (s = 60) then
      begin
       s := 0;
 m := m + 1;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write(h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;
      
      if ((h >= 9) and (h <= 23)) and ((m >= 10) and (m <= 58)) and (s = 60) then
      begin
       s := 0;
 m := 0;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write(h,'h:0',m,'m:',s,'s');
       delay(1000);
       s := s + 1;
       m := m + 1;
      end;


    
    if ((h >= 9) and (h <= 23)) and (m = 59) and (s = 60) then
      begin
       h := h + 1;
       s := 0;
 m := 0;
       clrscr;
       gotoxy(35,12);
       textcolor(red);
       write(h,'h:0',m,'m:0',s,'s');
       delay(1000);
       s := s + 1;
      end;


 end;
  
 Begin
    h := 0;
    m := 0;
    s := 0;
  
    clrscr;
    gotoxy(35,12);
    textcolor(red);
    write('0',h,'h:0',m,'m:0',s,'s');
    delay(1000);
    s := s + 1;     


    
  repeat
     
         while (s < 60) do
    begin 
     
         sessentaSegundos; 
        
         sessentaMinutos;
         
         apartirDeUmaHora;
         
         apartirDeDezHoras;                                                                                                                   
                                               
    end;
      
         printaAteUmaHoraCravada;
          
         printaAteNoveHorasCravada;
         
         printaAcimaDeDezHorasCravada;
               
  until(h = 24);
  
  clrscr;
  gotoxy(30,12);
  textcolor(red);
  write('*** 24h DECORRIDAS ***');
     
 End.
Editado por Simon Viegas
Inserir tag CODE (botão <> - código)
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Um dos pontos é que está utilizando o Delay, e isso envolve pelo menos dois pontos:

1) o Delay pode variar de computador para computador (nem sem 1000 = 1 segundo real);

2) apesar de relativamente ser muito pouco, existe uma perda de tempo durante os processos... como os controles dos laçõs, das verificações do ifs etc... ou seja, cada segundo no programa está sendo contato da seguinte forma:
- tempo decorrido para execução de cada comando + 1000 milisegundos.

Obs.: Creio que a perda com a sincronição com "o mundo real" não seja muito grande... mas não deixa de ser um erro de lógica.

 

Mais, por enquanto vamos ignorar "essa possível diferença"... ok?

 

 

Outro ponto é que está sendo executando comandos sem necessidade...

Ex.:

  while (s < 60) do    begin    sessentaSegundos;    sessentaMinutos;    apartirDeUmaHora;    apartirDeDezHoras;                                                                                                                        end;

Se começa com "0", e tem um controle de "60" ciclos, para que executar os 3 últimos comandos dentro desse laço?

 

 

Agora, em relação a lógica para calcular o tempo, eu sugiro de uma forma diferente...

Você meio que está verificado a cada loop em qual se situação se encontra as casas... eu acho que poderia ser apenas contabilizando e adicionando ao segundo. Daí, ao completar 60, soma mais um no minuto... este tem uma verificação interna que se completar 60, soma um na hora... este ao completar 24 soma um ao dia... etc. Entendeu? O "evento de receber um é que exige o controle na casa"...  o programa em execução precisa apenas se preocupa em "contabilizar um segundo (tempo), e somar um ao segundo (variável)"....

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Simon, vamos lá:

 

* Quanto ao delay, estou ciente do atraso. O problema se resolve com o cálculo básico que o programa leva pra executar diferentes procedures e desse valor tirar e diferença pra que no mínimo fique mais próximo do "mundo real". Apenas uma análise minuciosa.

 

 

 

* A execução dos comandos sem necessidade acontece mesmo, mas não apenas nos três últimos comandos. Na lógica feita, sempre pelos menos 3 comandos dentro do while executarão sem necessidade. Nos primeiros 60min. Um tratamento baseado na situação atual do cronometro em questão durante o processo do programa resolve (embora duplique e tenha mais linhas de códigos, pois já está feito nos procedures).

 

 

while (s < 60) do
    begin
    sessentaSegundos;
    sessentaMinutos;
    apartirDeUmaHora;
    apartirDeDezHoras;                                                                                                                    
   
end;

 

 

* Nesse while há o seguinte controle: a cada 59s, o programa sai do while e printa o minuto/hora cravado/cavada em questão. Quando completar 1min cravado (s=60), sai do laço while e printa 00h:01m:00s no procedure printaAteUmaHoraCravada. Quando completar 1h cravada (s=60), sai do laço while e printa 01h:00m:00s no procedure printaAteUmaHoraCravada e assim por diante conforme a hora seja adicionada. De maneira que a cada 59s, o programa sai do laço while e printa o minuto ou hora cravada em questão em uns dos procedures fora while durante a execução do programa.      

 

 

* "Agora, em relação a lógica para calcular o tempo, eu sugiro de uma forma diferente...

Você meio que está verificado a cada loop em qual se situação se encontra as casas... eu acho que poderia ser apenas contabilizando e adicionando ao segundo. Daí, ao completar 60, soma mais um no minuto... este tem uma verificação interna que se completar 60, soma um na hora... este ao completar 24 soma um ao dia... etc. Entendeu? O "evento de receber um é que exige o controle na casa"...  o programa em execução precisa apenas se preocupa em "contabilizar um segundo (tempo), e somar um ao segundo (variável)"...."

 

* Não consegui pegar a ideia acima. Pode explicar de outra forma!? O controle de segundos, minutos e horas estão sendo tratados normal a cada 60s.

 

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

* Quanto ao delay, estou ciente do atraso. O problema se resolve com o cálculo básico que o programa leva pra executar diferentes procedures e desse valor tirar e diferença pra que no mínimo fique mais próximo do "mundo real". Apenas uma análise minuciosa.

 

Acho que não precisa se preocupar com isso agora... Creio que a diferença entre o tempo do programa e do "mundo real" seja muito pequena (irrisória), não vejo necessidade de cálculos (só apenas em nível didático - acho superválido por sinal)... e tem outra, o próprio ato de calcular já altera a medição, já que demanda também de recursos... ai já viu :)

Uma alternativa que iria propor é usar o relógio do Windows... o Pascal pode ter acessar a ele... provavelmente também vai haver imprecisões, mas não serão acumulativas, como no caso do Delay+processos (essa soma tende a sempre "atrasar mais um pouco" ou "adiantar mais um pouco" a cada loop). Sugiro que use o Delay mesmo, sem calcular nada por enquanto..

 

 

 

 

* A execução dos comandos sem necessidade acontece mesmo, mas não apenas nos três últimos comandos. Na lógica feita, sempre pelos menos 3 comandos dentro do while executarão sem necessidade. Nos primeiros 60min. Um tratamento baseado na situação atual do cronometro em questão durante o processo do programa resolve (embora duplique e tenha mais linhas de códigos, pois já está feito nos procedures).

 

Tem toda razão, resumidamente QUASE SEMPRE HAVERÁ 3 COMANDOS SENDO EXECUTADO SEM NECESSIDADE...

 

 

 

* Nesse while há o seguinte controle: a cada 59s, o programa sai do while e printa o minuto/hora cravado/cavada em questão. Quando completar 1min cravado (s=60), sai do laço while e printa 00h:01m:00s no procedure printaAteUmaHoraCravada. Quando completar 1h cravada (s=60), sai do laço while e printa 01h:00m:00s no procedure printaAteUmaHoraCravada e assim por diante conforme a hora seja adicionada. De maneira que a cada 59s, o programa sai do laço while e printa o minuto ou hora cravada em questão em uns dos procedures fora while durante a execução do programa.   

 

Vamos, lá... então, é que idealizo que você não deveria ter esse controle por "60 segundos", mas sim apenas se preocupando em adicionar "1" a cada 1 segundo (tempo) ao segundo (variável).

Não deve existir loop com controle algum... apenas algo que controle o tempo... cada "casa" deve se autocontrolar...

 

Imagine esse algoritmo (execute de verdade)

- abra a calculadora do Windows;;

- digite "0";

- digite "+";

- digite "1";

- pressione ENTER a cada 1 segundo*. (pode digitar mais rápido, rs)

 

No caso, você está sempre adicionando "1" na casa decimal, correto? o que vai acontecer ao chegar no 9 e adicionar mais 1? O decimal vai para zero, e é enviado um 1 para a próxima casa.... ficando 10 (um e zero... que chamamos de dez)..... e quando chegar a 99 mais 1????? O decimal vai para 0 e envia um para a próxima. A próxima como está com 9, vai para 0 e enviar 1 para a próxima... ficam 100.. por ai vai.

 

Ou seja, é uma EFEITO EM CASCATA e não uma "VERIFICAÇÃO A CADA X SEGUNDO EM CADA CASA".... sacou?

 

 

 

Obs.: O princípio do relógio é exatamente o mesmo, só muda o valor de cada "casa decimal" (como se chama a casa do relógio? rs). A primeira vai até 59 (segundo), a segunda até 59 (minutos), a terceira até 23 (horas), a quarta até 354 (dias) etc.

 

Obs2.: Por enquanto não vai fazer diferença se usar Delay ou qualquer outra forma para contar o tempo, o que está em jogo é a "a alimentação de cada casa e a sua retroverificação".

 

Obs.:2 Para testar, user um Delay menor (ex.: 200 ou 100..) :D.

 

 

No aguardo.

Editado por Simon Viegas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só dando um pitaco rápido. Se quiser facilitar a formatação da hora sem ter trabalho algum, basta usar a função Format() da Sysutils. É uma mão na roda..

 

 

 

 

 

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×