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

PreTenDer666

[ajuda em VB6] passar um programa de Pascal para VB6

37 mensagens neste tópico

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  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que é o f ? Em termos lógicos... tipo d = minutos, f = ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O f iria fazer a conta b*(1024*1024), ou seja iria passar os GB para KB

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O f iria fazer a conta b*(1024*1024), ou seja iria passar os GB para KB

Ah ok :cheesygrin:

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 ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :cheesygrin:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

UnKnowN, esse ultimo codigo coloca-se onde? dps da letra "c"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

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 ? :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

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 ? :cheesygrin:

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

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 ? :cheesygrin:

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  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para mim não estava trocado pois estava a usar uma forma mais "grafica" :cheesygrin:

Text3.Text  = CStr(e) & ":" & CStr(d) & ":" & CStr©

assim tb está bem, não está?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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" :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

LOL! Nepia também nao percebi ... ;)

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.

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) / 3600)
        minutos = Fix((total_segundos - 3600 * 24 - horas * 3600) / 60)
        segundos = Fix(total_segundos - 3600 * 24 - horas * 3600 - minutos * 60)

        Me.TextBox2.Text = dia.ToString + "dia : " + horas.ToString + "h : " + minutos.ToString + "min : " + segundos.ToString + "seg"

Ya, já percebi brinkaero, mas tens aí umas conversões ... ;), 35,9 = 35 ? Nah, Fika mais Correcto = 36 ... Não ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, já percebi brinkaero, mas tens aí umas conversões ... ;), 35,9 = 35 ? Nah, Fika mais Correcto = 36 ... Não ?

Não, está correcto! O arredondamento tem de ser feito por defeito!

Quando digo que é 35.9 horas, quer dizer que são 35 horas e mais X minutos [glow=red,2,300](0.9 horas = X min)[/glow], não 36 horas.

Porque 36 h = 36 x 3600 seg = 129600 seg > 129227 seg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, já percebi brinkaero, mas tens aí umas conversões ... ;), 35,9 = 35 ? Nah, Fika mais Correcto = 36 ... Não ?

Não, está correcto! O arredondamento tem de ser feito por defeito!

Quando digo que é 35.9 horas, quer dizer que são 35 horas e mais X minutos [glow=red,2,300](0.9 horas = X min)[/glow], não 36 horas.

Porque 36 h = 36 x 3600 seg = 129600 seg > 129227 seg

Ah ya :) lol, nao pensei bem, Thanks pelos esclarecimentos ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para que serve a função CStr() ?

cstr = cint = cdbl = cbool...etc...

server para fazer o casting das variáveis, ou seja, em português simples quer dizer converter uma variável num outro formato

assim por exemplo :

dim i as integer

dim x as string

i=1000

x=cstr(i)

msgbox x

o cstr está a forçar/converter a variável inteira/númerica "i" em formato string

em linguagens baseadas em C

fazem o casting usando esta syntaxe

x=(string)i

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

brinkaero mas o meu codigo ja fazia isso e tambem ja tinha dias incluidos...estava mal???

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