PreTenDer666 Posted April 9, 2006 at 08:52 AM Report #21460 Posted April 9, 2006 at 08:52 AM Boas, visto que já consegui fazer o que queria em Pascal, decidi então fazer o mesmo programa em VB6, mas aqui é que está o meu problema...eu já tinha alguns conhecimentos de Pascal, agora VB6 não percebo "the point of a horn" ? O objectivo desde programa é: 1º inserir a velocidade de upload em kb 2º inserir a quantidade de GB a "upar" 3º dar o respectivo resultado em segundos, minutos e horas. a = velocidade de upload b = GB a "upar" c = segundos d = minutos e = horas f = b * (1024 * 1024) c = f / a d = (f / a) / 60 e = d / 60 Isto é apenas para eu aprender a funcionar um pouco com o VB6. Penso que, se conseguir aprender a fazer este consigo fazer o outro que tenho em mente. Agradeço desde já toda a ajuda que me prestarem 😁
UnKnowN Posted April 9, 2006 at 09:01 AM Report #21462 Posted April 9, 2006 at 09:01 AM O que é o f ? Em termos lógicos... tipo d = minutos, f = ?
PreTenDer666 Posted April 9, 2006 at 09:08 AM Author Report #21463 Posted April 9, 2006 at 09:08 AM O f iria fazer a conta b*(1024*1024), ou seja iria passar os GB para KB
UnKnowN Posted April 9, 2006 at 09:53 AM Report #21464 Posted April 9, 2006 at 09:53 AM O f iria fazer a conta b*(1024*1024), ou seja iria passar os GB para KB Ah ok 😁 Entao podes criar 2 campos para a velocidade de upload e para os GB a "upar" e 1 terceiro campo para indicação das horas, minutos, segundos, dps no botão metes o seguinte código: Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * (1024 * 1024) c = f / a d = (f / a) / 60 e = d / 60 Text3.Text = e & ":" & d & ":" & c End Sub Eu fiz este Código, mas dá-me 1 erro no f = b * (1024 * 1024) Se alguém puder ajudar ...
vbtipo Posted April 9, 2006 at 10:17 AM Report #21465 Posted April 9, 2006 at 10:17 AM O código está bem feito o erro que te dá é por causa dos parenteses, tens que os tirar daí. Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = f / a d = (f / a) / 60 e = d / 60 Text3.Text = e & ":" & d & ":" & c End Sub Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.
UnKnowN Posted April 9, 2006 at 10:28 AM Report #21466 Posted April 9, 2006 at 10:28 AM O código está bem feito o erro que te dá é por causa dos parenteses, tens que os tirar daí. Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = f / a d = (f / a) / 60 e = d / 60 Text3.Text = e & ":" & d & ":" & c End Sub Ok Thanks vbtipo 😁 EDIT: Fui experimentar o programa e tipo, nas horas, minutos e segundos akilo dá nºs com vírgulas e não fica mt bem por isso acoselhava 1 maneira que o vbmaster já falou ka no forum If c = 60 Then c = 0 d = d + 1 End If If d = 60 Then d = 0 e = e + 1 End If c = c + 1
PreTenDer666 Posted April 10, 2006 at 05:28 AM Author Report #21541 Posted April 10, 2006 at 05:28 AM UnKnowN, esse ultimo codigo coloca-se onde? dps da letra "c"?
PreTenDer666 Posted April 10, 2006 at 06:47 AM Author Report #21542 Posted April 10, 2006 at 06:47 AM Pois em pascal eu não consegui fazer a parte de dar (ex:) 1h e 24 m e 20 seg...entao fiz de outra maneira...coloquei o tempo todo em segundos, em minutos, em horas e em dias....dai estas contas estarem mal, pois dão o resultado em horas(total)+minutos(total)+segundos(total). O programa em VB vai em anexo para perceberem o que estava a dizer (neste momento esta igual ao pascal). Se me conseguirem ajudar em colocar isso apenas numa linha, do estilo: "1:59:59" ficava muito melhor 😉 P.S. Impressionante a diferenca do que se têm de escrever em Pascal e do que se têm de escrever em VB6 😁
brink@ero Posted April 10, 2006 at 08:53 AM Report #21550 Posted April 10, 2006 at 08:53 AM Para a questão do tempo, neste caso tens o tempo em horas: Dados: 1Mb=1024kb 1h=3600s Velocidade: X kb/s Tamanho: Y Mb Resultado: Tempo= ( Y / X ) / ( 1024 * 3600 ) Se quiseres o tempo repartido: t_h : t_min : t_seg t_h = parte inteira [ ( Y / X ) / ( 1024 * 3600 ) ] t_min = parte inteira [ ( Y / X ) / ( 1024 * 60 ) - t_h*60 ] t_seg = parte inteira [ ( Y / X ) / ( 1024 ) - ( t_h*60 + t_min)*60 ] Fonte:http://www.portugal-a-programar.pt/index.php?showtopic=1697#quickreply Uma das maneiras de retirar a parte inteira é criares uma variável auxiliar do tipo integer (deve existir outras maneiras mais prácticas que eu agora não estou a ver...) Fica aqui o exemplo: 'Tempo total em segundos - Me.TextBox1.Text Dim horas, minutos, segundos, total_segundos As Integer total_segundos = TextBox1.Text horas = total_segundos / 3600 minutos = (total_segundos - horas * 3600) / 60 - 0.5 segundos = total_segundos - horas * 3600 - minutos * 60 - 0.5 'Aquilo que tu pediste: Me.TextBox2.Text = horas.ToString + "h : " + minutos.ToString + "min : " + segundos.ToString + "seg"
UnKnowN Posted April 10, 2006 at 10:42 AM Report #21557 Posted April 10, 2006 at 10:42 AM Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = f / a d = (f / a) / 60 e = d / 60 If c = 60 Then c = 0 d = d + 1 End If If d = 60 Then d = 0 e = e + 1 End If c = c + 1 Text3.Text = Round(e) & ":" & Round(d) & ":" & Round(c) End Sub Assim dá-te valores aproximadamente correctos, sem vírgulas 😉 EDIT PS: Não percebo o porquê do c = c+1 se alguem me puder esclarecer agradeço 😛 PS2: Não percebi uma coisa que aconteceu que foi, no 1º campo pus 2222 e no segundo pus 2 e o resultado foi de 0:16:944 se nao estou em erro, alguém me sabe explicar o porque do 944 ? 😁
brink@ero Posted April 10, 2006 at 11:20 AM Report #21561 Posted April 10, 2006 at 11:20 AM Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = f / a d = (f / a) / 60 e = d / 60 If c = 60 Then c = 0 d = d + 1 End If If d = 60 Then d = 0 e = e + 1 End If c = c + 1 Text3.Text = Round(e) & ":" & Round(d) & ":" & Round(c) End Sub Assim dá-te valores aproximadamente correctos, sem vírgulas 😉 EDIT PS: Não percebo o porquê do c = c+1 se alguem me puder esclarecer agradeço 😛 PS2: Não percebi uma coisa que aconteceu que foi, no 1º campo pus 2222 e no segundo pus 2 e o resultado foi de 0:16:944 se nao estou em erro, alguém me sabe explicar o porque do 944 ? 😁 Leste o meu post? Lê o meu post! Estão a fazer a conversão mal!!! O tempo total em segundos = aprox. 944 seg = 15.7 min = aprox 16 min Mas o que deves querer é isto: 15 min : 44 seg A resposta está no post anterior!! A solução do vbmaster é para um relógio em vb, não para conversão de tempo! :nono: Vocês estão a confundir coisas. PS: Lamento que o código esteja em vb.net, mas o que interessa é a ideia e as diferênças são poucas.
UnKnowN Posted April 10, 2006 at 11:58 AM Report #21562 Posted April 10, 2006 at 11:58 AM Em 10/04/2006 às 13:20, brinkaero disse: Leste o meu post? Lê o meu post! Estão a fazer a conversão mal!!! O tempo total em segundos = aprox. 944 seg = 15.7 min = aprox 16 min Mas o que deves querer é isto: 15 min : 44 seg A resposta está no post anterior!! A solução do vbmaster é para um relógio em vb, não para conversão de tempo! :nono: Vocês estão a confundir coisas. PS: Lamento que o código esteja em vb.net, mas o que interessa é a ideia e as diferênças são poucas. Ok, Ok, Desculpa, mas é que não estava (nem estou) a perceber o teu raciocínio no teu post e então, àla que se faz tarde. Bem, agora pedia-te muito era que explicasses as contas que fizeste ?
PreTenDer666 Posted April 10, 2006 at 01:53 PM Author Report #21570 Posted April 10, 2006 at 01:53 PM Acho que já esta resolvido Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = Round(f / a, 0) d = Round(c Mod 60, 0) e = Round((c / 60) / 60, 0) c = Round((((f / a) / 60) Mod 60), 0) Text3.Text = c Text4.Text = d Text5.Text = e End Sub Que acham?
UnKnowN Posted April 10, 2006 at 02:06 PM Report #21571 Posted April 10, 2006 at 02:06 PM Acho que já esta resolvido Private Sub Command1_Click() Dim a, b, c, d, e, f As Double a = Val(Text1.Text) b = Val(Text2.Text) f = b * 1024 * 1024 c = Round(f / a, 0) d = Round(c Mod 60, 0) e = Round((c / 60) / 60, 0) c = Round((((f / a) / 60) Mod 60), 0) Text3.Text = c Text4.Text = d Text5.Text = e End Sub Que acham? Acho que em vez de usares 3 campos para horas, minutos e segundos devias usar só um: Text3.Text = e & ":" & d ":" & c 'Primeiro as Horas dps os Minutos e de Seguida os Segundos, tu tinhas tudo ao contrário
PreTenDer666 Posted April 10, 2006 at 03:11 PM Author Report #21574 Posted April 10, 2006 at 03:11 PM Para mim não estava trocado pois estava a usar uma forma mais "grafica" 😁 Text3.Text = CStr(e) & ":" & CStr(d) & ":" & CStr© assim tb está bem, não está?
UnKnowN Posted April 10, 2006 at 03:36 PM Report #21575 Posted April 10, 2006 at 03:36 PM A função CStr() não conheço ... =(
PreTenDer666 Posted April 10, 2006 at 04:47 PM Author Report #21576 Posted April 10, 2006 at 04:47 PM OK, pedi ajuda a uma amiga, e para além de me ter dado na cabeça para alterar as letras por coisas que eu dps nao me perca, disse-me para colocar em vez do Round o Fix. pk o round alem de tirar as decimais ainda arredonda para cima o fix apenas retira a parte decimal e ignora-a fix(1.6) = 1 round(1.6)=2 Ficando assim: Private Sub Command1_Click() Dim up, gb, seg, min, hora, kb As Double up = Val(Text1.Text) gb = Val(Text2.Text) kb = gb * 1024 * 1024 seg = Fix(kb / up) min = Fix(seg Mod 60) hora = Fix(((seg / 60) / 60) Mod 24) dia = Fix(((seg / 60) / 60) / 24) seg = Fix(((kb / up) / 60) Mod 60) Text3.Text = seg Text4.Text = min Text5.Text = hora Text6.Text = dia Esta bom assim? Que acham? P.S: Acrescentei Dias para ficar mais "bonito" 😁
UnKnowN Posted April 10, 2006 at 08:00 PM Report #21598 Posted April 10, 2006 at 08:00 PM Para que serve a função CStr() ?
PreTenDer666 Posted April 11, 2006 at 04:44 AM Author Report #21625 Posted April 11, 2006 at 04:44 AM Pois apenas posso responder-te o que ela me respondeu: Citação:cstr converte numa string como estamos a trabalhar com floats converto em strings para concatenar Mas não percebi, e ela como estava com trabalho não me respondeu "melhor"...se percebeste dps explica-me 😉
brink@ero Posted April 11, 2006 at 08:45 AM Report #21628 Posted April 11, 2006 at 08:45 AM Em 10/04/2006 às 13:58, UnKnowN disse: Ok, Ok, Desculpa, mas é que não estava (nem estou) a perceber o teu raciocínio no teu post e então, àla que se faz tarde. Bem, agora pedia-te muito era que explicasses as contas que fizeste ? Vocês tem X de tempo em segundos, e querem converter isso do tipo dias : horas : minutos : segundos. Por exemplo: Vocês têm um tempo total em segundos = 129227 seg, fica: n.º total de dias = 129227 / 60 / 60 / 24 = 1.5 = 1 dia = 24 h n.º total de horas = 129227 / 60 / 60 = 35.9 h = 35 h Mas nestas 35 h, temos um dia e X horas. Então como se calcula o n.º X de horas? Bem, sabemos que um dia tem 24 horas, então o n.º de horas X = 35 - 24 x n.º de dias = 35 - 24 x 1 = 11h Ou, pelo o tempo que sobra: 129227 - 1 x 24 x 3600 = 42827 seg = 42827 / 3600 h = 11.9 h = 11 h Então já sabemos que 129227 demora pelo menos 1 dia e 11 horas. E quantos minutos? e segundos? Como 1 dia e 11 h são 1 x 24 x 3600 + 11 x 3600 = 126000 seg Faltam 129227 - (1 x 24 x 3600 + 11 x 3600) = 129227 - 126000 = 3227 seg Que são 3227 / 60 = 53.8 min = 53 min E por fim, os segundos é o que sobrar: 129227 - (1 x 24 x 3600 + 11 x 3600 + 53 x 60) = 47 segundos Logo resultado final: 1dia : 11h : 53min : 47seg Espero que tenham percebido. Deixo aqui oura vez o código, já com dias e com a instrução Fix 'Tempo em segundos - Me.TextBox1.Text Dim dia, horas, minutos, segundos, total_segundos As Integer total_segundos = TextBox1.Text dia = Fix(total_segundos / (3600 * 24)) horas = Fix((total_segundos - 3600 * 24 * dia) / 3600) minutos = Fix((total_segundos - 3600 * 24 * dia - horas * 3600) / 60) segundos = Fix(total_segundos - 3600 * 24 * dia - horas * 3600 - minutos * 60) Me.TextBox2.Text = dia.ToString + "dia : " + horas.ToString + "h : " + minutos.ToString + "min : " + segundos.ToString + "seg" EDIT: Código já corrigido. Tinha-me esquecido de incluir a variável dia nas contas.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now