Ir ao conteúdo
  • Cadastre-se

Visualg- erro no algoritmo calculadora


Posts recomendados

Olá, estou praticando um pouco a linguagem no visualg, nos meus tempos livres eu fico estudando, porém quando eu estava fazendo o algoritmo esta dando erro e não consigo sair dali já tem 2 dias...vou mostra o algoritmo o problema ta no "Bhaskara" não consigo dividir , problema é esse "escreval ("resposta da Primeira opção:", -B + j:1:0(/2*A) )"......... simplesmente não vai

Algoritmo "calculadora"
// objeitvo: para estudos
// criador: mateus Costa
// 10/07/2017
Var
num_1, num_2, num, desconto, juros, A, B, C, j, i, op : real
operacao, resp, opcao, x, enter: caracter
Inicio
repita
limpatela
escreval ("calculadora")
escreval ("Digite o tipo da operação exemplo: (-),(+),(x),(/),(%) (!)")
escreval ("mais exemplo: (bhaskara)")
leia(operacao)
escolha (operacao)
caso "bhaskara"
     escreval ("formula: (b)2 - 4.a.c")
     escreval ("digite a letra A:")
     leia(A)
     escreval ("digite a letra B:")
     leia(B)
     escreval ("digite a letra c:")
     leia(C)
     escreval ("....")
     escreval ("Reposta:",B*B - 4*A*c)
     escreval("....")
     escreval("Aperter Enter para continuar")
     leia(enter)
     escreval ("Segunda formula:– b ± delta")
     escreval ("              X=  -----------")
     escreval ("                    2.A")
 j <- 0
 i <- 0
 enquanto (j * i <= B*B - 4*A*c ) faca
          escreva (j, " ")
          j <- j + 0.1
          i <- i + 0.1
 fimenquanto
     escreval ("resposta fatorial do delta:", j  )
     escreval ("resposta fatorial do delta:", i  )
     escreval ("   ",-B + j:1:0 )
     escreval("x=--")
     escreval ("  ",2*A)
     escreval ("resposta da Primeira opção:", -B + j:1:0(/2*A) )
     
     
       
caso "!"
     escreval("digite o número desejado para a raiz quadrada:")
     leia(num)
     escreval("resultado é:", num * num)
caso "+"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 + num_2)
caso "-"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 - num_2)
caso "x"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 * num_2)
caso "/"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 / num_2)
caso "%"
     escreval ("digite UM numero:")
     leia (num)
     escreval ("escolha opção 1, para:desconto")
     escreval ("escolha opção 2, para:juros")
     leia(opcao)
     escolha (opcao)
     caso "1"
     escreval ("digite o desconto:")
     leia(desconto)
     escreval ("resultado é:", num - num * (desconto) / 100)
     escreval ("desconto:", num * (desconto) / 100)
     caso "2"
     escreval ("digite o juros:")
     leia(juros)
     escreval ("resultado é:", num + num *(juros) / 100)
     escreval ("Juros:", num * (juros) / 100)
fimescolha
fimescolha
fimescolha
Escreval ("voce deseja continuar sim ou não:?")
leia(resp)
ate(resp <> "sim")
limpatela
Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @mateus costa r.

 

3 horas atrás, mateus costa r disse:

o problema ta no "Bhaskara" não consigo dividir , problema é esse "escreval ("resposta da Primeira opção:", -B + j:1:0(/2*A) )"......... simplesmente não vai

 

Creio que a sintaxe esteja incorreta.

 

1) Creio que não seja possível usar essa "formatação" usando ":1:0" durante a conta, ou seja, a formatação vem depois do resultado.

2) Após você está fazendo "(/2*A)", creio que também não seja válido, pois o numerador não está sendo informado... seria algo como "abre parênteses dividido por 2*A".

 

Para tentar ajudar, creio que a conta seria algo assim:

(-B+j)/(2*A)

"menos b mais raiz de delta, sobre dois a"

 

obs.: lembrando que várias possibilidades de respostas: nenhuma raiz, única raiz ou duas raízes reais (depende do valor do Delta)

 

Tem alguns outros detalhes que precisariam ser revisto no código, como:

 

3 horas atrás, mateus costa r disse:

     escreval ("formula: (b)2 - 4.a.c")

Seria "formula" do que? Veja, a 'fórmula de Bhaskara' não é essa, isso seria apenas uma parte: o valor do Delta.

 

Por ai vai.

 

No aguardo.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 10/07/2017 às 16:50, Simon Viegas disse:

Olá @mateus costa r.

 

 

Creio que a sintaxe esteja incorreta.

 

1) Creio que não seja possível usar essa "formatação" usando ":1:0" durante a conta, ou seja, a formatação vem depois do resultado.

2) Após você está fazendo "(/2*A)", creio que também não seja válido, pois o numerador não está sendo informado... seria algo como "abre parênteses dividido por 2*A".

 

Para tentar ajudar, creio que a conta seria algo assim:


(-B+j)/(2*A)

"menos b mais raiz de delta, sobre dois a"

 

obs.: lembrando que várias possibilidades de respostas: nenhuma raiz, única raiz ou duas raízes reais (depende do valor do Delta)

 

Tem alguns outros detalhes que precisariam ser revisto no código, como:

 

Seria "formula" do que? Veja, a 'fórmula de Bhaskara' não é essa, isso seria apenas uma parte: o valor do Delta.

 

Por ai vai.

 

No aguardo.

 

 

olá amigo, obg por ter respondido.

primeiro: a parte da "formula" seria só para lembrar ... tanto a mim e ao usuário. Só um detalhe :)

irei explicar o problema com maiores detalhes agora... eu estou fazendo a equação do 2 grau inteira, consegui fazer ela funcionar só que , quando chegar na parte de dividir (é onde estar o problema) ele não dividi... porque? eu fiz isso:

j <- 0
 i <- 0
 enquanto (j * i <= B*B - 4*A*c ) faca
          escreva (j, " ")
          j <- j + 0.1
          i <- i + 0.1

quando o delta aparece por exemplo 196 que é 14 x 14. porém, eu não sabia como fazer para acha esse 14 x 14 entende? para chegar nessa parte >     

   

 escreval ("Segunda formula:– b ± delta")
     escreval ("                         X=  -----------")
     escreval ("                                    2.A")

como você pode ver, essa parte você precisa saber qual e o numero que dar a raiz, essa foi a maneira que eu consegui usando o "enquanto", ate chegar no numero que dar na raiz multiplicando 0,1 + 0,1 ate chegar no resultado.... porém quando chega ele dar numero quebrado, com virgula e o resultado final fica diferente, então eu usei o "1:0" para aproximar, e isso funcionou e faltava só dividir... ai que veio minha tristeza ele dar o erro... não consigo solucionar isso. espero que tenha entendido :/ qualquer coisa envio print dos erros e dos algoritmos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 14/07/2017 às 19:02, mateus costa r disse:

e faltava só dividir... ai que veio minha tristeza ele dar o erro... não consigo solucionar isso. espero que tenha entendido :/ qualquer coisa envio print dos erros e dos algoritmos.

Já expliquei..

 

Em 14/07/2017 às 19:02, mateus costa r disse:

Para tentar ajudar, creio que a conta seria algo assim:


(-B+j)/(2*A)

 

 

 

Quem é j nessa fórmula?  (é a raiz de Delta)

 

x'=(-B+j)/(2*A)

x''=(-B-j)/(2*A)

 

Ou seja, "-b, mais ou menos a raiz de Delta, tudo isso sobre 2a"

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

22 horas atrás, Simon Viegas disse:

Já expliquei..

 

 

 

 

Quem é j nessa fórmula?  (é a raiz de Delta)

 

x'=(-B+j)/(2*A)

x''=(-B-j)/(2*A)

 

Ou seja, "-b, mais ou menos a raiz de Delta, tudo isso sobre 2a"

 

No aguardo.

acho que entenderá melhor com imagens o "J" e  "I" foi a maneira que encontrei de acha o numero da raiz tipo raiz de 25 e 5, porque ? 5x5  = 25 entendeu , J x I = 25 ...

parte1.png

parte 2.png

opa, o final da imagem o resultado se repeti 2 vezes... (foi mal) acabei repetindo o 

(-B+j)/(2*A) ...rs.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @mateus costa r.

 

1) VARIÁVEIS J E I

14 horas atrás, mateus costa r disse:

acho que entenderá melhor com imagens o "J" e  "I" foi a maneira que encontrei de acha o numero da raiz tipo raiz de 25 e 5, porque ? 5x5  = 25 entendeu , J x I = 25 ...

 

Eu já tinha entendido... :) veja:

 

Em 15/07/2017 às 19:31, Simon Viegas disse:

Quem é j nessa fórmula?  (é a raiz de Delta)

 

Eu fiz uma pergunta retórica! A resposta coloquei entre parênteses.

 

 

E complemento:

 

Em 15/07/2017 às 19:31, Simon Viegas disse:

x'=(-B+j)/(2*A)

x''=(-B-j)/(2*A)

 

Ou seja, "-b, mais ou menos a raiz de Delta, tudo isso sobre 2a"

 

"-b" = -B

"mais ou menos a raiz de Delta" = +j   e  -j   respectivamente

"tudo isso sobre 2a" = /(2*A)

 

 

 

2) DENOMINAÇÃO

No código você fala em "resposta fatorial do delta", mas j não é o fatorial de Delta, mas sim a raiz de Delta. Fatorial é outra coisa, vide aqui.

 

 

 

3) OUTRAS VERIFICAÇÕES

Em relação a outras verificações, eu precisaria do código para poder fazer alguns testes... mas por exemplo,  lá na linha 43 o resultado está dando errado porque você está arrendando sem nenhuma casa decimal. "-B+J" dá 2,1, e não 2.

 

 

***

 

Por ai vai...

 

 

Por favor, poste o texto do código para que possamos analisar melhor.

 

No aguardo.

 

 

 

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Simon Viegas disse:

Olá @mateus costa r.

 

1) VARIÁVEIS J E I

 

Eu já tinha entendido... :) veja:

 

 

Eu fiz uma pergunta retórica! A resposta coloquei entre parênteses.

 

 

E complemento:

 

 

"-b" = -B

"mais ou menos a raiz de Delta" = +j   e  -j   respectivamente

"tudo isso sobre 2a" = /(2*A)

 

 

 

2) DENOMINAÇÃO

No código você fala em "resposta fatorial do delta", mas j não é o fatorial de Delta, mas sim a raiz de Delta. Fatorial é outra coisa, vide aqui.

 

 

 

3) OUTRAS VERIFICAÇÕES

Em relação a outras verificações, eu precisaria do código para poder fazer alguns testes... mas por exemplo,  lá na linha 43 o resultado está dando errado porque você está arrendando sem nenhuma casa decimal. "-B+J" dá 2,1, e não 2.

 

 

***

 

Por ai vai...

 

 

Por favor, poste o texto do código para que possamos analisar melhor.

 

No aguardo.

 

 

 

 

olá, irei colocar a raiz do delta... um pequeno erro de matemática :/ . 

Eu estou usando esse site para a formula de bhaskara> http://brasilescola.uol.com.br/matematica/formula-bhaskara.htm  < o exemplo que to usando ta nele.

aqui ta o código :

Algoritmo "calculadora"
// objeitvo: para estudos
// criador: mateus Costa
// 10/07/2017
Var
num_1, num_2, num, desconto, juros, A, B, C, j, i, op: real
operacao, resp, opcao, enter, x: caracter
Inicio
repita
limpatela
escreval ("____________________________________________________________")
escreval ("calculadora")
escreval ("Digite o tipo da operação exemplo: (-),(+),(x),(/),(%) (!)")
escreval ("(bhaskara)")
escreval ("____________________________________________________________")
leia(operacao)
escolha (operacao)
caso "bhaskara"
     escreval ("formula: (b)2 - 4.a.c")
     escreval ("digite a letra A:")
     leia(A)
     escreval ("digite a letra B:")
     leia(B)
     escreval ("digite a letra c:")
     leia(C)
     escreval ("..............................")
     escreval ("Reposta:",B*B - 4*A*c)
     escreval("...............................")
     escreval("Aperter Enter para continuar")
     leia(enter)
     escreval ("Segunda formula:– b ± delta")
     escreval ("              X=  -----------")
     escreval ("                    2.A")
 j <- 0
 i <- 0
 enquanto (j * i <= B*B - 4*A*c ) faca
          escreva (j, " ")
          j <- j + 0.1
          i <- i + 0.1
fimenquanto
     escreval ("resposta fatorial do delta:", j  )
     escreval ("resposta fatorial do delta:", i  )
     escreval ("   ",-B + j:1:0 )
     escreval("x=----")
     escreval ("  ",2*A)
     escreval ("resposta da Primeira opção de X:",(-B+j)/(2*A):1:0 )
     escreval ("resposta da segunda opção X:",(-B-j)/(2*A):1:0 )
     escreval ("--------------------------")
     escreval ("Portanto, as raízes da equação:")
     escreval ((A),"+",(B),"x",(C),"=","0"," são ",(-B+j)/(2*A):1:0," e ",(-B-j)/(2*A):1:0)
     escreval ("--------------------------")

caso "!"
     escreval("digite o número desejado para a raiz quadrada:")
     leia(num)
     escreval("resultado é:", num * num)
caso "+"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 + num_2)
caso "-"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 - num_2)
caso "x"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 * num_2)
caso "/"
     escreval ("digite o primeiro numero")
     leia(num_1)
     escreval ("digite o segundo numero")
     leia(num_2)
     escreval ("Resultado:",num_1 / num_2)
caso "%"
     escreval ("digite UM numero:")
     leia (num)
     escreval ("escolha opção 1, para:desconto")
     escreval ("escolha opção 2, para:juros")
     leia(opcao)
     escolha (opcao)
     caso "1"
     escreval ("digite o desconto:")
     leia(desconto)
     escreval ("resultado é:", num - num * (desconto) / 100)
     escreval ("desconto:", num * (desconto) / 100)
     caso "2"
     escreval ("digite o juros:")
     leia(juros)
     escreval ("resultado é:", num + num *(juros) / 100)
     escreval ("Juros:", num * (juros) / 100)

fimescolha
fimescolha
fimescolha
Escreval ("voce deseja continuar sim ou não:?")
leia(resp)
ate(resp <> "sim") e (resp <> "s")
limpatela
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @mateus costa r.

 

Minhas sugestões:

 

1) CÁLCULO DE RAÍZES

Tomando como base seu código:

4 horas atrás, mateus costa r disse:

 j <- 0
 i <- 0
 enquanto (j * i <= B*B - 4*A*c ) faca
          escreva (j, " ")
          j <- j + 0.1
          i <- i + 0.1

 

 

Obs.: os itens 1.1 e 1.2 eu já deixarei exemplos de como podem ficar (meio que "já dando a resposta")...

 

1.1) Recálculos desnecessários

Em vez de usar "B*B - 4*A*C" no enquanto, use uma variável para armazenar o resultado. Do jeito que está, a cada loop do enquanto a conta estará sendo refeita... ou seja, um trabalho extra pro processador. Ficaria algo assim:

 j <- 0
 i <- 0
 Delta<- b*b-4*a*c
 enquanto (j*i <= Delta) faca
    escreva (j, " ")
    j <- j+0.1
    i <- i+0.1

 

1.2) Duplicação de variável

Percebem-se que as variáveis j e i serão sempre idênticas, ou seja, basta usar apenas uma delas...  ficando algo como:

 j <- 0
 Delta <- b*b-4*a*c
 enquanto (j*j <= Delta) faca
    escreva (j," ")
    j <- j+0.1

 

Outra coisa... a própria definição sugere que deveria ser uma variável só:

Citação

Na matemática, a raiz quadrada de um número x é um número único e não negativo que, quando multiplicado por si próprio, se iguala a x.[1]

 

Fonte: Wikipédia

 

 

1.3) Quanto a eficácia da operação

Nesse seu código você está utilizando uma técnica com laço de repetição para calcular a raiz quadrada de um número... mas a conta não  está batendo, veja:

 

Ao usar a=1, b=12 e c=-13, Delta daria 196, correto? Quanto dá a raiz de Delta, ou seja, a raiz de 196?

 

Pela calculadora deu 14, mas no seu código está dando 14.1. Precisa corrigir isso.

 

 

 

 

2) ARREDONDAMENTO DE RESULTADO
 

Em 14/07/2017 às 19:02, mateus costa r disse:

porém quando chega ele dar numero quebrado, com virgula e o resultado final fica diferente, então eu usei o "1:0" para aproximar, e isso funcionou e faltava só dividir...

 

Então, na verdade não necessariamente funcionou, apenas meio que fez dar uma reposta equivalente ao que você desejava. São coisas diferentes. Veja, o resultado do cálculo via Bhaskara inclui a parte fracionada também (quando ocorre)! O número teria que ser exato (ou com um arredondamento menor). O problema está lá no item 1.3), ou seja, está fazendo o cálculo da raiz de Delta errado, daí consequentemente as raízes da equação também vão dar erradas.

 

Por sinal, em vez de ":1:0", sugeriria algo como "1:3" ou mais, ou simplesmente não arredondar. Não precisa.

 

RESUMINDO: ao usar 1, 12 e -13, o programa deveria retornar x1=1 e x2=-13, sem precisar arredondar (o resultado já é redondo).

 

 

 

3) ETAPAS PARA CALCULAR VIA BHASKARA

 

4 horas atrás, mateus costa r disse:

Eu estou usando esse site para a formula de bhaskara> http://brasilescola.uol.com.br/matematica/formula-bhaskara.htm  < o exemplo que to usando ta nele.

aqui ta o código :

 

Pelo link que você postou, são 3 etapas:

Etapa 1: Calcular discriminante
Etapa 2: Substitua discriminante e coeficientes na fórmula de Bhaskara
Etapa 3: Calcule as raízes da equação

Está faltando a primeira! Ou seja, é necessário "discriminar" a categoria da equação do segundo grau de acordo com o valor de Delta: se é maior que 0, igual a 0 ou maior que 0. Cada categoria tem um tipo de resposta diferente.

 

RESUMINDO: a modo de calcular muda de acordo com o valor de Delta.

 

 

***

 

No aguardo.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...