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

MonkistaPT

Boas, preciso de uma ajuda num programa simples

11 mensagens neste tópico

Tenho de fazer um programa em que insero a base e o expoente e depois apareçe o resultado.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        Dim j As Integer
        Dim tot1 As Integer
        For i = 1 To Base.Text
            i = i + 1
            Total.Text = Total.Text + Base.Text
        Next
        For i = 2 To Base.Text
            i = i + 1
            tot1 = tot1 + Total.Text
            For j = 3 To Expoente.Text
                j = j + 1
                Total.Text = tot1
            Next
        Next
        'permite so a leitura do resultado'
        Total.ReadOnly = True
    End Sub

Da-me erro na parte tot1 = tot1 + Total.Text

Diz qualquer coisa sobre dividir por zero

acho que a solução seria fazer Dim tot1 as Double inves de Dim tot1 As integer mas e suposto dar um numero decimal ou inteiro ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exprimenta antes

tot1 = tot1 + CDbl(Total.Text)

ou

tot1 += CDbl(Total.Text)

Estavas a tentar somar um inteiro a uma string.

EDIT: Aliás, estás a fazer isso ao longo de todo o código... faz as conversões.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exprimenta antes

tot1 = tot1 + CDbl(Total.Text)

ou

tot1 += CDbl(Total.Text)

Estavas a tentar somar um inteiro a uma string.

EDIT: Aliás, estás a fazer isso ao longo de todo o código... faz as conversões.

pois a mim nao me  ensinaram nada disso lol stor nabo XDD

atao em vez de o tot1= tot1 + Total.Text ficar tot1 = tot1 + CDbl(Total.Text)

e onde ponho o tot1 += CDbl(total.text) ?? ou isso e 2 maneiras de fazer as converçoes ?

desculpa la a minha burrice lol XD mas o meu stor nao explica nada e manda nos ir ver a net lol enfim ... xD atao resumindamente como vai ficar esse codigo ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente, em todos os sítios onde uses o valor das textbox, deves converter o tipo.

Com option explicit desligado ele até pode papar, mas está muito mais propenso a falhas.

Sugiro isto:

Antes de calculares seja o que for, procura retirar e validar todos os valores que são inseridos nas caixas de texto para variáveis numéricas.

CInt() Tenta converter o que lhe dás para Integer

CDbl() Tenta converter o que lhe dás para Double

CLng() Tenta converter o que lhe dás para Long.... e por aí fora.

+= é um atalho. Ter  Variavel = Variavel + 1 é o mesmo que ter Variavel += 1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente, em todos os sítios onde uses o valor das textbox, deves converter o tipo.

Com option explicit desligado ele até pode papar, mas está muito mais propenso a falhas.

Sugiro isto:

Antes de calculares seja o que for, procura retirar e validar todos os valores que são inseridos nas caixas de texto para variáveis numéricas.

CInt() Tenta converter o que lhe dás para Integer

CDbl() Tenta converter o que lhe dás para Double

CLng() Tenta converter o que lhe dás para Long.... e por aí fora.

+= é um atalho. Ter  Variavel = Variavel + 1 é o mesmo que ter Variavel += 1

ohh obrigado por me explicares isso B)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        Dim j As Integer
        Dim tot1 As Integer
        For i = 1 To Base.Text
            i = i + 1
            Total.Text = 0
            Total.Text = CInt(Total.Text) + CInt(Base.Text)
        Next
        For i = 2 To (Base.Text)
            i = i + 1
            tot1 = CDbl(tot1) + Total.Text
            For j = 3 To CInt(Expoente.Text)
                j = j + 1
                Total.Text = (tot1)
            Next
        Next
        'permite so a leitura do resultado'
        Total.ReadOnly = True
    End Sub

atao vai ficar assim ?

xD ou ainda esta mal lol ? pelo menos ja faz os calculos loool

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se já faz os cálculos já estamos menos mal, não é verdade? B)

Falta-te só regularizar o tipo dos valores que usas nos ciclos.

For i = 1 To CInt(Base.Text)

Aqui,

CDbl(tot1) + Total.Text

O Text da textbox é que precisa de ser convertido.

Converter uma variável integer para double é quase como arredondares 5 às milésimas :P

Aqui,

Total.Text = (tot1)

o correcto até seria:

Total.Text = tot1.ToString

ou

Total.Text = CStr(tot1)

Meter parênteses em algo que já está sozinho, também não serve para nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol agora se meter 60 de base e 60 de expoente da erro  ... :S ca raio XD ...... programa para malucos XD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso já é porque estás a usar integers.

6060 está muito além do alcance de um Integer (2,147,483,647 com sinal).

Usa Double ao invés de Integer, que double já te lança lá para os expoentes 300 e tal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso já é porque estás a usar integers.

6060 está muito além do alcance de um Integer (2,147,483,647 com sinal).

Usa Double ao invés de Integer, que double já te lança lá para os expoentes 300 e tal.

yah, agora ja nao da erros lol ... fica e tipo 24324234234234242E + 43242342 lol

enfim eu nao sei se o stor quer em integer ou double qualquer coisa e so mudar :P muito obrigado zequinha xD , esta porra de programa deu  trabalho lol xD va beijinhos a prima lool , obrigado  e continua a ser um fofo a ajudar o pessoal B)  pessoal como tu e que devia haver milhoes :) xau ate amanha e fica fixe.

P.S - desculpa os meus comentarios e que eu sou um gajo com muitas piadas xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So acrescentar uma coisa ao que ja foi dito para evitar possiveis overflow exceptions.

Quando convertemos algo, e necessario controlarmos o que estamos a converter, por exemplo se estamos a converter para um inteiro algo que o utilizador coloca numa text box, nos devemos controlar isso para evitar futuros erros.

por exemplo

textbox1.text = "a"

cint(textbox1.text)

isto vai dar exception pois nao e possivel converter "a" para um inteiro.

Como evitar?

if isnumeric(textbox1.text) then cint(textbox1.text)

isto e uma forma.

Outra que e a que eu uso e ter o meu proprio cint que ja controla isso e inclusive eu poosso indicar o valor a retornar caso nao seja possivel converter, exemplo:

    Public Shared Function [CInt](ByVal Value As Object, Optional ByVal OnErrorReturn As Integer = 0) As Integer
        If Not IsNumeric(Value) Then Return OnErrorReturn
        Try
            Return CInt(Value)
        Catch ex As Exception
            Return OnErrorReturn
        End Try
    End Function

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