Sobre Ubuntu y la función atoi en C++

Al fin me he cambiado por completo a Ubuntu y todo ha ido bastante bien; tal vez lo más latoso ha sido hacer que un maldito multifuncional Epson trabaje correctamente. Lo que más me preocupaba era instalar software que no se encontraba en el centro de software o en extensión .deb (ahora sé que también el .rpm se convierte fácilmente a .deb con alien). A decir verdad era por que no podía instalar Mathematica -duh!- que quizá es el único software que no he podido remplazar por alguno libre. Ahora sólo me incomoda que al parecer no existe MiKTeX para Linux que no sea i386 y tengo que instalar paquetes de LaTeX manualmente. De cualquier modo recomiendo mucho cambiarse y abandonar Windows o Mac, pues aunque es seguro equivocarse o fallar (como por ejemplo borrar el maldito cargador de arranque, no poder ejecutar un maldito archivo o ni siquiera saber acceder a un maldito directorio), también lo es aprender bastante cómo funciona el maldito corazón de tu computadora.Y bueno, quisiera dejar de maldecir, pero acá me he encontrado otro maldito problema! Obviamente he conservado mis bonitos programas en C++, aunque desde que descubrí Python no suelo usar ni C++ ni Java. Bueno, el problema es que con Windows me había mal acostumbrado a Visual Studio y no tenía ni idea de cómo compilar/ejecutar desde la terminal; pues solucioné eso rápidamente y acomodé varios programas de Project Euler, hasta que me encontré con el código del problema 8. El desgraciado no daba el resultado, ¡sólo arrojaba un maldito 0! el problema: la función atoi( ).

En mi forma de resolver el problema, debo extraer un caracter de la enorme cadena y convertir a entero para poder operar con ella. Al parecer en Visual Studio podía extraer un sólo caracter de una cadena y convertirlo a entero con atoi, mientras en g++ (el compilador predeterminado en Ubuntu, o gcc) no. Por ejemplo
char a[]="123";
cout << atoi(&a[1]);
en g++ no imprimiría un maldito "2", mientras que en Visual Studio sí. Tal vez me equivoque pero ya estará el buen usuario de Visual Studio para desmentirme, pues si no es así, no sé cómo demonios di la respuesta del problema.

Pero bueno, "resolverlo" es sencillo e incluso mejora el maldito programa. En Ubuntu la salida de lo anterior sería "23", asi que usar atoi( ) me parece descartado. Lo mejor sería hacer algo como
char a[]="123";
cout << int(a[1])-'0';
lo que suele llamarse "type-casting" o "conversión de tipos" pues lo que hace es dar información sobre el número de caracter ASCII de a[1]; por ello es necesario restar el ASCII de '0'.

Regresando al tema de Ubuntu, es incluso un tema ya un tanto desgastado, pero aunque en general es un poco más complicado cambiarse de Windows a Linux sin guía alguna más que Google; si no requieres hacer computación más fuerte, Ubuntu satisface todo lo que Windows y tienes la posibilidad de aprender un poco más, mientras que si te gusta la computación, incluso aunque no seas desarrollador, resulta bastante fructífero el intentarlo, además de todos los beneficios que acarrea el software libre en la sociedad. Consulta la filosofía de Ubuntu.

Me gustaría saber si existe algún lugar donde conseguir ordenadores sin OS o con algún distro de Linux (no Mac) preinstalado. Es un poco frustrante querer conseguir un ordenador nuevo y verse obligado a pagar la licencia de Windows o Mac.

"How to switch from Windows to Linux"

No comments:

Post a Comment