Error Division by 0

1

Hello

I would like a help, I am starting with the language and I am trying some doubts, What I want in my code is that the calculation of the division is not divided by zero. At the moment I enter the value of Y = 0 return a message "Invalid, can not be divided by 0".

When I make an insert with divider 0 it returns this message:

Calculadora03.rb:32:in '/': divided by 0 (ZeroDivisionError)
        from Calculadora03.rb:32:in 'calculo'
        from Calculadora03.rb:57:in '<main>'

This is my code:

def escolha_operador
    puts "Escolha o tipo de operação abaixo:"
    puts "1 Adição"
    puts "2 Subtração"
    puts "3 Multiplicação"
    puts "4 Divisão"
    puts ""

    tipo_operador = gets.chomp().to_i

    if tipo_operador == 1
        return "Adição"
    elsif tipo_operador == 2
        return "Subtração"
    elsif tipo_operador == 3
        return "Multiplicação"
    elsif tipo_operador == 4
        return "Divisão"
    else
        return "erro"
    end
end

def calculo(operacao, x, y)
    if operacao == "Adição"
        return resultado = x + y
    elsif operacao == "Subtração"
        return resultado = x - y
    elsif operacao == "Multiplicação"
        return resultado = x * y
    elsif operacao == "Divisão"
        return resultado = x / y
    end
  # elsif operacao == "Divisão"
    #   rescue ZeroDivisionError
    #   else
    #   return resultado = x / y
  # end
end

continuar = 1

while continuar == 1

  calculo_atual = escolha_operador()

  if calculo_atual == "erro"

    puts "Opção invalido! Escolha a opção correta."

    else
    puts "Entre com o primeiro valor da #{calculo_atual}: "
    p_numero = gets.to_i
    puts "Entre com o segundo valor da #{calculo_atual}: "
    s_numero = gets.to_i

    result = calculo(calculo_atual, p_numero, s_numero)

    puts "O resultado é #{result}"
    puts "Deseja continuar o calculo? Digite 1- Sim ou 2- Não"
    continuar = gets.to_i

        system ('cls')

    if continuar != 1


    end
  end
end
    
asked by anonymous 20.09.2017 / 21:56

5 answers

5

As Isaac said, put an IF for y , it should look like this:

elsif operacao == "Divisão"
    if y != 0
        return resultado = x / y
    else
        return "Invalido, não pode ser divido por 0"
    end
end

Then this:

result = calculo(calculo_atual, p_numero, s_numero)

puts "O resultado é #{result}"

Will display something like:

  

The result is Invalid, can not be divided by 0

    
21.09.2017 / 20:17
1

It is a rule of math, nothing can be divided by 0. In any programming language will give error if you try to divide by 0. You can set%% to check that the divider is not if .

    
20.09.2017 / 22:29
1

Divisions by zero throw an exception of type ZeroDivisionError , which can be captured with raise and translated to a Float::NaN , not just:

def calculo(operacao, x, y)
    if operacao == "Adição"
        return resultado = x + y
    elsif operacao == "Subtração"
        return resultado = x - y
    elsif operacao == "Multiplicação"
        return resultado = x * y
    elsif operacao == "Divisão"
        return resultado = x / y
    end
rescue ZeroDivisionError
    return Float::NAN
end

p calculo("Divisão", 1, 0 )
p calculo("Divisão", 10, 2 )
p calculo("Divisão", 70, 5 )
p calculo("Divisão", 20, -5 )

Output:

NaN
5
14
-4

Example on repl.it

    
11.10.2017 / 19:18
0

Change the piece of code to this:

def calculo(operacao, x, y)
if operacao == "Adição"
    return resultado = x + y
elsif operacao == "Subtração"
    return resultado = x - y
elsif operacao == "Multiplicação"
    return resultado = x * y
elsif operacao == "Divisão"
    if y != 0
       return resultado = x / y
    end
end

The problem is that you can not divide a number by zero. It's a mathematical rule.

    
21.09.2017 / 11:38
0

According to the above comments, the mathematical rule makes it impossible to divide by 0.

So if you want to try to even divide some number by 0, you could try the solution

10.try(:/, 0)

where you get the answer: ZeroDivisionError: divided by 0.

However, remembering that good practice should be checking the value before attempting such an operation.

    
29.09.2017 / 19:56