Jump to content
MonkistaPT

Boas, preciso de uma ajuda num programa simples

Recommended Posts

MonkistaPT

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 ?

Share this post


Link to post
Share on other sites
ribeiro55

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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
MonkistaPT

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

Share this post


Link to post
Share on other sites
ribeiro55

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


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
MonkistaPT

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

Share this post


Link to post
Share on other sites
ribeiro55

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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
MonkistaPT

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

Share this post


Link to post
Share on other sites
ribeiro55

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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
MonkistaPT

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

Share this post


Link to post
Share on other sites
ribeiro55

Porta-te mas é bem.  :spank:

O "zequinha" tem nick, e nome.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Pwyll

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

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

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