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

memyself

[VB2005][RESOLVIDO] Ajuda com calculos

9 mensagens neste tópico

boas...

eu tou a tentar criar um programa...

mas antes de comecar a por as minhas ideias em pratica...

portanto, numa aplicacao, pus 3 textbox e um botao numa form...

e a experiencia é:

textbox 1  --> insere-se uma hora   (ex: 14:00)

textbox 2  --> insere-se uma hora   (ex: 16:45)

textbox 3  --> apresenta o resultado da soma  (ex: 30:45)

alguém me consegue explicar como posso fazer esta soma de horas ?

porque no que tentei, estava a fazer soma de strings, o que nao e possivel...

agradeco desde ja

cumpz

EDIT: Sera que existe uma solucao para me facilitar este calculo, ou terei de fazer os calculos manualmente (usando left(), mid(), int()....) ?!?!?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta solução parece-me um pouco lame, mas resolve-te o prob

Dim var As String
Dim var2 As String
Dim num() As String
Dim num2() As String
var = textbox1.text
var2 = textbox2.text

num = Split(var, ":", , vbTextCompare)
num2 = Split(var2, ":", , vbTextCompare)

textbox3.text = num(0)+num2(0) & ":" & num(1)+num2(1)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao me esta a dar certo esse codigo...

quando corro o prog e clico no botao para obter o resultado, da-me um erro a dizer "Index was outside the bounds of the array.", na parte a vermelho do calculo:

textbox3.text = num(0)+num2(0) & ":" & num(1)+num2(1)

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bom, olha para solucionar o teu problema criei 4 labels, e o código k fiz foi este  e funcionou

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim var() As String
        Dim var2() As String
        var = Split(TextBox1.Text, ":", , CompareMethod.Text)
        Label1.Text = var(0)
        Label2.Text = var(1)
        var2 = Split(TextBox2.Text, ":", , CompareMethod.Text)
        Label3.Text = var2(0)
        Label4.Text = var2(1)
        Dim sum1 As Integer = Label1.Text
        Dim sum2 As Integer = Label2.Text
        Dim sum3 As Integer = Label3.Text
        Dim sum4 As Integer = Label4.Text

        TextBox3.Text = sum1 + sum3 & ":" & sum2 + sum4
    End Sub

*editado*

é verdade eu criei as labels pra ver se estava a dar certo, de uma vez k dá, podes substituí-las por outras 4 variáveis, ou um array :P

*editado*

já agora deixo aqui o outro código funcional, já com a array

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim var() As String
        Dim var2() As String
        Dim sum(4) As Integer
        var = Split(TextBox1.Text, ":", , CompareMethod.Text)
        sum(1) = var(0)
        sum(2) = var(1)
        var2 = Split(TextBox2.Text, ":", , CompareMethod.Text)
        sum(3) = var2(0)
        sum(4) = var2(1)
        TextBox3.Text = sum(1) + sum(3) & ":" & sum(2) + sum(4)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como estava a calcular, o problema agora e que obtenho um resultado de 28:75.... :P

por isso eu estava a perguntar se nao existe um funcao tipo hour ou algo do genero...para saber automaticamente que tem de substituir para a hora seguinte a seguir aos 60 minutos....

ou terei de fazer isso manualmente ?!?

(estou so a pedir um sim ou nao ....lol)

e ja agora, podes explicar em texto o que a funcao split faz  ?!?

é que nunca tinha ouvido falar nela !!!  ;)

desde ja agradeco a preciosa ajuda...

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pra começar deixo aki o código k te acrescenta mais 1 hora após 60 minutos

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim var() As String
        Dim var2() As String
        Dim sum(4) As Integer
        var = Split(TextBox1.Text, ":", , CompareMethod.Text)
        sum(1) = var(0)
        sum(2) = var(1)
        var2 = Split(TextBox2.Text, ":", , CompareMethod.Text)
        sum(3) = var2(0)
        sum(4) = var2(1)
        Dim horas As Integer = sum(1) + sum(3)
        Dim minutos As Integer = sum(2) + sum(4)
        While minutos > 59
            horas = horas + 1
            minutos = minutos - 60
        End While
        If minutos < 10 Then
            TextBox3.Text = horas & ":0" & minutos
        Else
            TextBox3.Text = horas & ":" & minutos
        End If
    End Sub

Agora, o k a função split faz eh dividir uma string pela string desejada

do género, tu keres dividir 14:15 pelos ":", e guardares os dois valores num array separado.

A funçao split permite-te isso mesmo, grava o 14 na string(0) e o 15 na string(1), se tivesses qq coisa como 15:16:17:18

a função split iria gravar string(0) = 15, string(1) = 16, string(2) = 17 e string(3) = 18...

Espero que tenhas percebido ;)

É verdade, esqueci-me de voltar a dizer, acho k este exemplo eh um bocado lame, mas como entrei nesta cena de programar praí à 2as semanas n se pode exegir muito de mim :P

deve haver outra maneira de fazer isto, acrescentei ao teu código (se ainda n tiveres reparado), quando os minutos são  menores k 10, ele adiciona o 0 antes dos minutos, tipo:

12:01 + 12:01 = 24:02

*editado*

O código tinha um erro aki

        While minutos > 60

alterei para > 59, porque se o valor for exactamente 60 ele apresenta 60

e 60 minutos é +1 hora :)

Sorry, repara que tiro na mesma os 60 minutos à variável minutos, tenho de fazer isso para tirar 1 hora dos minutos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yah... eu tinha reparado nisso...

bem...

obrigadao pela ajuda...

agora vou tratar de introduzir os limites de introducao nas textboxes (nao inserir mais de 59 minutos por exemplo)

obrigado pela explicacao da funcao split...

agora que ja sei, posso usa-la no futuro...

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes também criar mais um if para se horas > 23, e apresentas 1 dias 1:02 por exemplo :P

cumpz...

fica

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