domingo, 16 de marzo de 2014

División por cero: Catastrofe mundial

     ¿Tu programa colapsa inesperadamente? ¿Se cierra sin previo aviso? En muchos programas hechos en C++ es frecuente ver tras una division por cero una imagen aterradora como está. Windows, en particular, siempre nos recibirá con este mensaje:



      En la imagen anterior se visualiza claramente como nuestro algoritmo se da un resbalón y cae, dejandonos con la mirada atónita. ¿Por qué ocurre eso? Ahora es necesario indagar las causas de una división por cero.

      El algoritmo no comprueba si el dividendo es cero. Cero entre algo dará infinito, algo demasiado problematico. Para muestra un ejemplo en C++ que falla ante este error:

//Codigo que falla al dividir por cero. Hecho por Jorge Mesa

#include <iostream>

#include <cstdlib>



int main(int argc, char *argv[]){

     int dividendo = 0;

     int divisor = 0;

     int resultado;



     ///Ahora se le pide al usuario un numero;

     cout << "Ingrese un dividendo: ";

     cin >> dividendo;



     ///Ahora se le pide un divisor;

     cout << endl; ///Para dejar una linea de espacio usa endl;

     cout << "Ingresa un divisor: ";

     cin >> divisor;

    

     ///Aqui es donde puede fallar si el divisor es cero.

    ///Con una simple verificacion pudo haberse evitado

    resultado = dividendo / divisor;

    cout << "El resultado es: " << resultado << endl;



     return 0; 

} 



Para solucionarlo, sólo para corregirlo añades este pedazo de codigo antes de dividir:

if(divisor == 0){

      cout << "Divisor invalido. Division por cero.";

      ///Aqui agregas el codigo que deseas ejecutar cuando ocurra ese error.



      return 0; ///Para salir de main y dejarlo sin errores. 

} 


Y eso es todo.

Es un error bastante simple, pero nos hará caer más de una vez si te descuidas. Por eso, siempre que hagas operaciones con variables asegurate que jamás tengas que dividir algo entre nada.

0 comentarios:

Publicar un comentario

Por favor deja un comentario dejando tus sugerencias y dudas sobre temas de este blog.