Jump to content
Sign in to follow this  
PreTenDer666

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

Recommended Posts

PreTenDer666

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:

Share this post


Link to post
Share on other sites
PreTenDer666

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

Share this post


Link to post
Share on other sites
UnKnowN

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

Share this post


Link to post
Share on other sites
vbtipo

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.

Share this post


Link to post
Share on other sites
UnKnowN

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

Share this post


Link to post
Share on other sites
PreTenDer666

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:

Share this post


Link to post
Share on other sites
brink@ero

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"

Share this post


Link to post
Share on other sites
UnKnowN

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:

Share this post


Link to post
Share on other sites
brink@ero

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.

Share this post


Link to post
Share on other sites
UnKnowN

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  😳

Share this post


Link to post
Share on other sites
PreTenDer666

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?

Share this post


Link to post
Share on other sites
UnKnowN

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 

Share this post


Link to post
Share on other sites
PreTenDer666

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á?

Share this post


Link to post
Share on other sites
PreTenDer666

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:

Share this post


Link to post
Share on other sites
PreTenDer666

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

Share this post


Link to post
Share on other sites
brink@ero

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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.