MonkistaPT Posted December 16, 2009 at 08:24 PM Report #300842 Posted December 16, 2009 at 08:24 PM 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 ?
ribeiro55 Posted December 16, 2009 at 08:32 PM Report #300845 Posted December 16, 2009 at 08:32 PM 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"
MonkistaPT Posted December 16, 2009 at 09:04 PM Author Report #300860 Posted December 16, 2009 at 09:04 PM 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 ??
ribeiro55 Posted December 16, 2009 at 09:21 PM Report #300878 Posted December 16, 2009 at 09:21 PM 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"
MonkistaPT Posted December 16, 2009 at 10:07 PM Author Report #300916 Posted December 16, 2009 at 10:07 PM 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
ribeiro55 Posted December 16, 2009 at 10:12 PM Report #300920 Posted December 16, 2009 at 10:12 PM 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 😛 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"
MonkistaPT Posted December 16, 2009 at 10:40 PM Author Report #300927 Posted December 16, 2009 at 10:40 PM lol agora se meter 60 de base e 60 de expoente da erro ... :S ca raio XD ...... programa para malucos XD
ribeiro55 Posted December 16, 2009 at 10:51 PM Report #300929 Posted December 16, 2009 at 10:51 PM 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"
MonkistaPT Posted December 16, 2009 at 11:07 PM Author Report #300934 Posted December 16, 2009 at 11:07 PM 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 😛 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
ribeiro55 Posted December 16, 2009 at 11:21 PM Report #300938 Posted December 16, 2009 at 11:21 PM 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"
Pwyll Posted December 17, 2009 at 01:45 PM Report #301057 Posted December 17, 2009 at 01:45 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now