• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PreTenDer666

Pascal em horas

13 mensagens neste tópico

Boas, estou a tentar fazer um programa para ver quanto tempo irei levar se eu fizer um upload a X kb/s

Em minutos ja consegui mas em horas nao,pois o programa nao entende que 60 minutos é 1 hora.

Como posso fazer isto?

Ex. a 10kb/s demoro 58minutos a 5kb/s demoro 1.93 :D mas deveria de ser 1h e 56minutos.

Alguem me consegue ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este problema já é um pouco mais complicado que o outro.. não estou a ver agora a solução.. tinha de estudar melhor isso..

veio me à cabeça um algoritemo para isso mas não sei se resultará..

tipo quando a variavel dos minutos for maior que 60 incrementas um valor na variavel horas.. e poe a 0 a variavel minutos e começas a contar outra vez.. e isto sempre assim.. neste ciclo..

o codigo é mais ou menos isto:

horas:=0;

if minutos>60 then

begin

minutos:=0;

horas:=horas+1;

mas tens de ver onde metes isto.. se não conseguires manda me o programa todo para eu tentar resolver isso.. mas tenta sozinho 1o..

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

GpL explica lá melhor o código ... nao percebi a parte

begin 
minutos:=0; 
horas:=horas+1;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O melhor mesmo é fazeres uma função para somar tempo H:MM:SS.

O meu pascal está muito por baixo mas julgo que com os grupos o o que reio eles chamam a isso

(é pá tenho ali uns livros que devem ter isso, vou ali ver já volto)

Turbo Building Blocks (Nada, é só mesmo para ir buscar a data e a hora so DOS)

Nada mesmo nem no google.

Claro que se multiplicares 93 por 0,6 tens 55,8 que arredondado int(55,8 + 0,5) dá 56 o que está certo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois é, isto está dificil e não estou a ver como é que se faz... :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ois

Deves tar a fazer alguma coisa mal, esses minutos nao devem tar la muito bem pq se a 10kb/s levas 58 minutos a 5kb/s devias levar

116 minutos, nao tou a ver onde e como foste buscar esse 1.93 .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apenas uma correção no codigo q o Gpl indicou:

if minutos>60 then

terá que ser 59 e não 60 :D (apenas um pequeno promenor  :-[)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, em relação a esta questão encontrei uma solução...mas foi sol de pouca-dura...está no exemplo de 116minutos ser 1h e 56m...ora a diferença é de 40. -> 116+40 = 156 mas se for por exemplo 126 minutos ai ja tenho de acrescentar 80 (o dobro) 126+80=206 ou seja 2h e 6minutos e assim continuamente....a cada 60 deve-se acrescentar 40...exemplo 61 minutos será 61+40...121 minutos será 121+80....186 será 186+120...e assim continuamente....alguem achas que com esta formula eu consigo chegar ao k eu queria?Se sim...utilizando k formula?[[ ]]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Private Sub calc_tempo(ByVal tempo As Integer) 'o parametro "tempo" é passado em numero de minutos
Dim hora() As String

horas = tempo / 60
hora() = Split(horas, ",") 'faz a divisão do valor guardado na var "horas" e guarda no array o valor inteiro (posicao 0) e o valor decimal (posicao 1)
horas = hora(0) 'o nr de horas é atribuido consoante o valor da primeira posicao do array
If UBound(hora) = 1 Then
    hora(1) = "0," & hora(1)
    minutos = hora(1) * 60
    minutos = Round(minutos, 1)
    If Len(minutos) = 1 Then minutos = "0" & minutos
Else
    minutos = "00"
End If

MsgBox "horas:" & horas & " minutos:" & minutos

End Sub

Isto é um exemplo em VB...como ja nao mexo em pascal ha mto tempo e nem sequer tenho aqui algo para testar fiz em VB ... à partida está correcto, mas quem perceba de VB e de Pascal tente passar para Pascal sff

Para download duma app com esta função de forma a fazerem o teste está aqui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto é mt simples, se eu percebi bem..

Supondo que tens uma variável "m" com os minutos, e que queres colocar em "h" as horas.

while (m>=60) do begin
h:=h+1;
m:=m-60;
end;
writeln(h,'::',m);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se existirem mais de 60 minutos, nesse caso ele soma uma unidade às horas, e subtrai 60 aos minutos.

Isso até os minutos serem inferiores a 60

Outra forma de resolução (mais eficaz e rápida):

h:=m div 60;
m:=m mod 60;

PS: Eu estou a partir do pressuposto que a variável "m" inicia a execução com um número de minutos desconhecido, pode ser 0, 35, 60, ou 150 por exemplo..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora