Instalación graphviz 2.36 en Ubuntu 13.10

lunes, 24 de febrero de 2014 2 comentarios



Sueña y serás libre en espíritu, lucha y serás libre en vida
— Che Guevara


Un cordial saludo gente,    en este post  mostrare la instalación manual de graphviz en su versión 2.36 para Ubuntu 13.10.
Una forma instantánea de instalación puede ser descargado desde launchpad.net.
Para los que no desean una versión actual y poseen una conexión a Internet, pueden usar el siguiente comando desde su terminal:
sudo apt-get  update
sudo apt-get install graphviz


Las herramientas:




Graphviz para Ubuntu 13.10.


¿Qué es Graphviz?
Graphviz es de código abierto de software de visualización gráfica. Visualización gráfica es una forma de representar información estructural como diagramas de grafos y redes abstractas.
Características
Visualización gráfica es una forma de representar información estructural como diagramas de grafos y redes abstractas. Tiene importantes aplicaciones en la red, la bioinformática, la ingeniería de software, base de datos y diseño de páginas web, aprendizaje de máquina, y en las interfaces visuales para otros dominios técnicos.
Gráfico de Visualización
En la práctica, los gráficos suelen ser generados a partir de orígenes de datos externos, pero también pueden ser creados y editados manualmente, ya sea como archivos de texto sin procesar o dentro de un editor gráfico. (Graphviz no fue pensado para ser un reemplazo Visio, por lo que es probable que sea frustrante para tratar de usarlo de esa manera.)
Página oficial : http://www.graphviz.org/



Package: libgd2-xpm


Versión 2 de la biblioteca de gráficos GD
GD es una biblioteca de gráficos. Permite a un código dibujar rápidamente imágenes completas con líneas, arcos, textos, varios colores, cortar y pegar desde otras imágenes, rellenar, y guardar el resultado como un archivo PNG. Es particularmente útil en aplicaciones web, donde el PNG es una de los formatos que aceptan la mayoría de los navegadores para añadir imágenes en línea.
Este es el paquete ejecutable de la biblioteca, que permite usar XPM (mapa de píxeles de X) y fontconfig.
Pagina oficial: www.libgd.org


Pasos de  instalación


Para realizar la instalación en la versión 13.10 de Ubuntu. Es necesario descargar la versión adecuada de la misma.

  • Ingresando a la página oficial : http://www.graphviz.org/
  • Ir a la pestaña de descargas, aceptar los términos de descarga.


  • Seleccionar  la versión con la arquitectura adecuada  para nuestro pc, siendo este como 32 o 64 bits.


  • En cualquiera de los casos solamente necesitamos descargar  graphviz_2.36.0-1~saucy_.



  • En cualquier parte de nuestro pc donde se encuentre ubicado nuestro archivo. Daremos clic derecho al archivo y elegir las opciones abrir con gestor de paquetes.


  • Si en proceso de instalación existe error, ver el apartado de error de dependencia para dar solución.
  • Si todo marcha bien permitimos que instale como un programa cualquiera y esperamos el tiempo necesario.



  • Después de ello, ya es posible ser usado sin modificar entornos de variables.




Error de dependencia de librerías.

En algunos casos, suele pasar que hagan falta algún tipo de librerías.
Para dar solución al problema, basta con descargar la librería en : http://packages.ubuntu.com/search?keywords=libgd2-xpm
Package: libgd2-xpm-

  • Según la versión de su sistema operativo:


  • En cualquier parte de nuestro pc donde se encuentre nuestro archivo. Daremos clic derecho al archivo y elegir las opciones abrir con gestor de paquetes.



  • Permitimos que instale como un programa cualquiera y esperamos el tiempo necesario.
  • Nuevamente intentamos instalar graphviz_2.36.0-1~saucy.

NOTA: Si existieran mas problemas de dependencia es necesario actualizar nuestro sistema operativo o buscar las librerías necesarias.

Vídeo: 


Descripción de un primer programa en C++

domingo, 9 de febrero de 2014 0 comentarios



"El aprendizaje es experiencia, todo lo demás es información". A. Einstein

Todo programa es un conjunto de instrucciones que la máquina debe ejecutar en un determinado orden. De forma general y sin entrar en detalles, se puede afirmar que las instrucciones básicas se inscriben en la función main. Por lo tanto, una vez se ha iniciado el programa, el ordenador busca la función main y ejecuta todas las instrucciones que encuentra hasta que dicha función termina.


El método Main

El método Main es un método especial al cual se refiere el punto de partida del programa. Para facilitar la colocación y ejecución ordenada de los módulos, cada programa C++ debe tener una y sólo una función llamada main(). La función main() se conoce como una función controladora, porque   indica  a los otros módulos la secuencia en la que tienen que ejecutarse.
Estructura basica de un programa en C++
La palabra clave int indica que la función devolverá el valor de un número entero.
Del mismo modo, cuando los paréntesis que siguen al nombre de la función están vacíos, significa que no se transmitirán datos a la función cuando se esté ejecutando. (Los datos transmitidos a una función al momento de ejecutarla se llaman argumentos de la función.)
Las llaves { y }, determinan el principio y el fin del cuerpo de la función y encierran las instrucciones que la componen. Las instrucciones dentro de las llaves determinan lo que hace la función.
Cada instrucción dentro de la función debe terminar con un punto y coma (;).





Librerías:


Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados librerías. Estos  contienen el código objeto de muchos programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, manejar números, realizar funciones matemáticas, etc. Las librerías están clasificadas por el tipo de trabajos que hacen, hay librerías de entrada y salida, matemáticas, de manejo de memoria, de manejo de textos, etc.
Hay un conjunto de librerías muy especiales, que se incluyen con todos los compiladores de C y de C++. Son las librerías ANSI o estándar. Pero también hay librerías no estándar  y  dentro de estas las hay públicas y comerciales.


Las primeras línea de un programa basico


#include<iostream>
Es un comando preprocesador que utiliza la palabra reservada include. Los comandos preprocesadores comienzan con un signo de número (#) y ejecutan alguna acción antes que el compilador traduzca el programa fuente a código de máquina. De manera específica, el comando preprocesador #include causa que el contenido del archivo invocado, en este caso el archivo iostream, sea insertado en donde el comando #include aparezca en el programa.
El iostream es una parte de la biblioteca estándar que contiene, entre otro código, dos clases nombradas istream y ostream. Estas dos clases proporcionan las declaraciones de datos y métodos utilizados para la entrada y salida de datos, respectivamente. El archivo iostream se conoce como un archivo de encabezado debido a que siempre se coloca una referencia a él en la parte superior, o cabeza, de un programa C++ usando el comando #include.
Puede ser que se pregunte qué tiene que ver el archivo iostream con este programa simple. La respuesta es que el objeto cout se crea a partir de la clase ostream. Por tanto, el archivo de encabezado iostream debe incluirse en todos los programas que usen cout. los comandos preprocesadores no terminan con un punto y coma.
Después del comando preprocesador include hay una instrucción que contiene la palabra reservada using. La instrucción, using namespace std; le dice al compilador dónde buscar para encontrar los archivos de encabezado en ausencia de cualquier designación explícita adicional. Se puede pensar en un espacio de nombres como un archivo de código fuente al que tiene acceso el compilador cuando busca clases o funciones preescritas. Debido a que el archivo de encabezado iostream está contenido dentro de un espacio de nombres llamado std, el compilador usará de manera automática el objeto cout de iostream a partir de este espacio de nombres siempre que se haga referencia a cout. El uso de espacio de nombres le permite crear sus propias clases y funciones con los mismos nombres provistos por la biblioteca estándar y colocarlos en espacios de nombres invocados de manera diferente. Puede señalar al programa cuál clase o función usar al indicar el espacio de nombres donde desea que el compilador busque la clase o función.

La instrucción using es seguida por el inicio de la función main() del programa. Esta función comienza con la línea de encabezado desarrollada al principio de esta sección. El cuerpo de la función, entre llaves, consta de sólo dos instrucciones. La primera instrucción en main() pasa un mensaje al objeto cout. El mensaje es la cadena “¡Hola mundo!”. Debido a que cout es un objeto de una clase preescrita, no tenemos que escribirlo; está disponible para su uso con sólo activarlo en forma correcta. Como todos los objetos de C++, cout sólo puede ejecutar ciertas acciones bien definidas. Para cout, la acción es ensamblar datos para mostrar la salida. Cuando se pasa una cadena de caracteres a cout, el objeto asegura que la cadena se despliegue de manera correcta en su monitor.


Comentarios


Un comentario de línea empieza con dos diagonales (//) y continúa hasta el final de la línea. Por ejemplo, las siguientes líneas son comentarios de línea:

//Ďste es un comentario
//ƒeste programa imprime un mensaje
//ƒeste programa calcula una raíz cuadradaƒ
Los símbolos //, sin espacio en blanco entre ellos, designan el inicio del comentario de línea.
El final de la línea en la que está escrito el comentario designa el final del comentario.
Un comentario de línea puede escribirse ya sea en una sola línea o al final de la misma línea que contiene una instrucción del programa. El programa 2.4 ilustra el uso de comentarios de línea dentro de un programa.
Sin embargo, los comentarios que abarcan dos o más líneas se escriben de manera más conveniente como comentarios en bloque tipo C que como múltiples comentarios de línea. Los comentarios en bloque comienzan con los símbolos /* y terminan con los símbolos */. Por
ejemplo:


/*ăste es  un comentario en bloque que
ƒƒƒƒabarca
ƒƒƒƒtres líneasƒ*/

En C++, la estructura del programa pretende que sea legible y comprensible, haciendo innecesario el uso de comentarios extensos. Esto se refuerza si los nombres de función, clase y variable, que se describen en el siguiente capítulo, son seleccionados con cuidado para transmitir su significado a cualquiera que lea el programa. Sin embargo, si el propósito de una función, clase o instrucción aún no está claro a partir de su estructura, nombre o contexto, incluya comentarios donde se necesiten aclaraciones. El código oscuro, sin comentarios, es una señal segura de mala programación y se hace presente cuando el programa debe ser sometido a mantenimiento o ser leído por otros. Del mismo modo, los comentarios excesivos también son una señal de mala programación, porque implican que hubo un razonamiento insuficiente para hacer que el código se explicara por sí solo. Por lo general, cualquier programa que escriba deberá comenzar con una serie de comentarios iniciales al programa que incluyan una descripción breve de éste, su nombre y la fecha de la última modificación. Por consideraciones de espacio, y debido a que todos los programas en este texto fueron escritos por el autor, sólo se usarán comentarios iniciales para descripciones breves de los programas cuando no se proporcionen como parte del texto descriptivo acompañante.



Nota


Aprovecho para aclarar que los programas de Windows tienen dos modos de cara al usuario:
• El modo consola simula el funcionamiento de una ventana MS-DOS, trabaja en modo de texto, es decir, la ventana es una especie de tabla en la que cada casilla sólo puede contener un carácter. El modo consola de Windows no permite usar gráficos de alta resolución. Pero esto no es una gran pérdida, pues como veremos, ni C ni C++ incluyen manejo de gráficos de alta resolución. Esto se hace mediante librerías externas no estándar.
• El otro modo es el GUI, Interfaz Gráfico de Usuario. Es el modo tradicional de los programas de Windows, con ventanas, menús, iconos, etc. La creación de éste tipo de programas se explica en otro curso de este mismo sitio, y requiere el conocimiento de la librería de funciones Win API32.



Ejemplo:

Código del primer demo.


 

#include <iostream> 
using namespace std; 

int main() {
   cout << "Hola Mundo" << endl;
   return 0;
   
}

Introducción a las clases y los objetos

jueves, 16 de enero de 2014 0 comentarios



"Muchos de nuestros sueños parecen al principio imposibles, luego pueden parecer improbables, y luego, cuando nos comprometemos firmemente, se vuelven inevitables. "
– Christopher Reeve
Primero que nada se aclara que C++ es un lenguaje capaz de soportar dos diferentes paradigmas, Programación orientada a objetos y programación estructural, como se mencionó en publicaciones  anteriores.  

Programación estructurada

VS

Programación orientada a objeto


La programación estructurada pretende resolver un problema de principio a fin en una sola estructura de código. La programación orientada a objetos, resuelve el problema identificando los actores que tienen participación en el problema e identificando también sus acciones. Con esta información se crean los objetos (que son una interpretación de algunos de estos actores), estos objetos están compuestos por clases donde se detalla las acciones que realizan y las propiedades de estos. Al tener creados los objetos solo es ponerlos a interactuar entre ellos.




Lo que debemos saber de Objetos


Objeto es un principio de alto nivel, un concepto que nos permite organizar software.    Si se programa con enfoque orientado a objetos, se intenta descubrir e implementar los objetos que juegan un rol en el dominio del problema y en consecuencia del programa. La idea fundamental de los lenguajes orientados a objetos es combinar en una única unidad o módulo, tanto los datos como las funciones que operan sobre esos datos. Tal unidad se llama objeto.

Difinicion:
Un objeto se puede definir desde el punto de vista conceptual como una entidad individual de un sistema y que se caracteriza por un estado y un comportamiento. Desde el punto de vista de implementación, un objeto es una entidad que posee un conjunto de datos y un conjunto de operaciones (funciones o métodos).

La programación orientada a objetos, tal vez el paradigma de programación más utilizado en el mundo del desarrollo de software y de la ingeniería de software del siglo XXI , trae un nuevo enfoque a los retos que se plantean en la programación estructurada cuando los problemas a resolver son complejos.
Cuando se trata de resolver un problema con orientación a objetos, dicho problema no se descompone en funciones como en programación estructurada tradicional, caso de C, sino en objetos. El pensar en términos de objetos tiene una gran ventaja: se asocian los objetos del problema a los objetos del mundo real.
Las funciones de un objeto se llaman funciones miembro en C++ o métodos y son el único medio para acceder a sus datos. Los datos de un objeto, se conocen también como atributos o variables de instancia. Si se desea leer datos de un objeto, se llama a una función miembro del objeto.Se accede a los datos y se devuelve un valor. No se puede acceder a los datos directamente.
Los datos están ocultos, de modo que están protegidos de alteraciones accidentales. Los datos y las funciones se dice que están encapsulados en una única entidad. El encapsulamiento de datos y la ocultación de los datos son términos clave en la descripción de lenguajes orientados a objetos.
Un programa C++ se compone, normalmente, de un número de objetos que se comunican unos con otros mediante la llamada a otras funciones miembro.


Lo que debemos saber de las Clases


Antes de la creación de un objeto, se debe definir en primer lugar su formato general, su plantilla, que recibe el  nombre de clase. En POO los objetos son miembros o instancias de clases. En esencia, una clase es un tipo de datos al igual que cualquier otro tipo de dato definido en un lenguaje de programación. La diferencia reside en que la clase es un tipo de dato que contiene datos y funciones. Una clase describe muchos objetos y es preciso definirla, aunque su definición no implica creación de objetos.

Definición:
Una clase contiene la especificación de los datos que describen un objeto junto con la descripción de las acciones que un objeto conoce cómo ha de ejecutar. Por lo tanto, puede definirse como una plantilla el cual funciona como una estructura de dato o tipo de dato que contiene funciones (métodos) como miembros y datos.

Puede decirse que el concepto de clase es estático y el concepto de objeto es dinámico; ya que, sólo existe en tiempo de ejecución. Cada objeto de una clase comparte con el resto las operaciones  y a la vez posee sus propios valores para los atributos que posee: esto es  su estado. Las operaciones, también llamadas mensajes, se usarán tanto para cambiar el estado de un objeto como para comunicar objetos entre sí mediante el paso de mensajes.

Una clase es una descripción general de un conjunto de objetos similares. Por definición, todos los objetos de una clase comparten los mismos atributos (datos) y las mismas operaciones (métodos). Una clase encapsula las abstracciones de datos y operaciones necesarias para describir una entidad u objeto del mundo real.
Una clase se representa en UML mediante un rectángulo que contiene en una banda con el nombre de la clase y opcionalmente otras dos bandas con el nombre de sus atributos y de sus operaciones o métodos.





El algoritmo y su importancia

0 comentarios





"No es lo que tu tienes, sino como usas lo que tienes lo que marca la diferencia." 

Zig Ziglar
Antes que se escriba un programa, el programador debe entender con claridad y planificar qué datos van a usarse, el resultado deseado y el procedimiento que va a utilizarse para producir este resultado. En esta oportunidad nos enfocaremos en  los procesos de solución  los cuales se denomina algoritmos.

Algoritmo


Con más precisión, un algoritmo se define como una secuencia paso a paso de instrucciones que deben realizarse y describe cómo han de procesarse los datos para producir las salidas deseadas.
En la década de 1930, antes de la llegada de las computadoras, los matemáticos trabajaron con gran celo para formalizar y estudiar el concepto de algoritmo, que entonces se definía de manera informal como un conjunto claramente especificado de instrucciones sencillas a seguir para resolver un problema o calcular una función. Se idearon e investigaron varios modelos de cómputo formales. Muchos de los primeros trabajos en este campo, llamado teoría de la computabilidad, hicieron hincapié en describir o caracterizar los problemas que se podían resolver algorítmicamente, y en presentar algunos problemas que no se podían resolver de esa manera.
Sin importar cuál campo de trabajo elija o cuál pueda ser su estilo de vida, tendrá que resolver problemas. Crear un programa no es diferente porque un programa es una solución desarrollada para resolver un problema particular. Por ello, escribir un programa casi es el último paso en un proceso de determinar primero cuál es el problema y el método que se usará para resolverlo.




Características


Un algoritmo es un conjunto finito de reglas que dan una secuencia de operaciones para resolver un determinado problema. Es, por consiguiente, un método para resolver un problema que tiene en general una entrada y una salida. Las características fundamentales que debe cumplir todo algoritmo son:
  • Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
  • Un algoritmo debe estar bien definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
  • Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; es decir, debe tener un número finito de pasos.

La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida.
  • Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre. Estas entradas son tomadas de conjuntos específicos de objetos".
  • Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando lápiz y papel".
  • Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas".


Herramientas   para diseñar algoritmos


Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo indicando cómo hace el algoritmo la tarea solicitada, y eso se traduce en la construcción de un algoritmo. El resultado final del diseño es una solución que debe ser fácil de traducir a estructuras de datos y estructuras de control de un lenguaje de programación específico.
Las dos herramientas más comúnmente utilizadas para diseñar algoritmos son: diagramas de flujo y pseudocódigos.



Algoritmos de forma gráfica (Diagramas de flujo)


Cuando una secuencia de actividades que definen un problema es muy simple en su naturaleza, es decir que sólo implique seguir una serie de pasos, uno después de otro, y que no tenga decisiones lógicas ni alternativas a tomar, es muy fácil describirlo en palabras. Pero si esta secuencia de actividades se hace más compleja será no sólo difícil describirlo en palabras sino también retener todas las alternativas.
Un diagrama de flujo u organigrama es una representación diagramática que ilustra la secuencia de las operaciones que se realizarán para conseguir la solución de un problema. Los diagramas de flujo se dibujan generalmente antes de comenzar a programar el código frente a la computadora. Los diagramas de flujo facilitan la comunicación entre los programadores y la gente del negocio.

Ejemplo:




Algoritmos de forma escrita (Pseudocódigo)


Un pseudocódigo e un falso lenguaje siendo así  una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio de un algoritmo.
El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de la solución a un problema. No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir, no hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el estudio y diseño de aplicaciones

Ejemplo: Realizar el pseudocódigo de un programa que permita calcular el área de un rectángulo. Se debe introducir la base y la altura para poder realizar el cálculo..
Programa; área
Entorno: BASE, ALTURA, AREA son número enteros
Algoritmo:
            escribir “Introduzca la base y la altura”
            leer BASE, ALTURA
            calcular AREA = BASE * ALTURA
            escribir “El área del rectángulo es “AREA
Finprograma





Instalación Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL)

viernes, 3 de enero de 2014 0 comentarios




"Encuentra un trabajo que te guste y no volverás a trabajar ni un sólo día de tu vida" 
Confucio
Un cordial saludo gente,    en este post  mostrare la instalación de Qt Creator  en su versión 5.2 para Windows 7, sin ninguna librería extra.
Básicamente es una plataforma IDE    (entorno de desarrollo integrado) adaptado a las necesidades de los desarrolladores. Entre los lenguajes que maneja este editor podemos mencionar:
C ++, QML y ECMA.
En Esta oportunidad  usaremos el entorno de desarrollo para programar en el lenguaje c++, usando el compilador que nos ofrece el mismo archivo de Qt 5.2 llamado MinGw. El cual representa una configuración rápida y sin muchas complicaciones.

Las herramientas:



Qt 5.2.0 for Windows


Librerías de Qt y el ID de desarrollo en cualquiera de sus versiones, para este caso usare la versión Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL, 689 MB).
Obtenidas desde su pagina oficial http://qt-project.org/downloads





Si elegiste la versión más reciente solamente debes darle instalar a un único archivo como a continuación se muestra.




En esta sección para seleccionar componentes, como se muestra continuación se han desplegado todas las librerías las cuales nos ofrece el instalador, en este caso seleccionamos todas.
Esto permitirá que se instalen las librerías MinGW, la que contiene el compilador g++ y gcc.


Aceptamos los términos de uso bajo algún tipo de licencia GPL  a nuestro gusto. 


Esperamos que termine la instalación.

Al finalizar la instalación podemos abrir el IDE para  hacer uso del mismo.



Configuraciones variable de entorno


Una variable del entorno es un valor dinámico cargado en la memoria, que puede ser utilizado por varios procesos que funcionan simultáneamente. En la mayoría de los sistemas operativos, la ubicación de algunas bibliotecas o de los archivos ejecutables del sistema más importantes puede variar según la instalación.
Por eso es posible, para un programa dado, remitirse a una ubicación basada en las variables del entorno que definen estos datos.
Para su modificación es necesario  agregar la siguiente información a la variable del sistema Path:
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin;
C:\Qt\Qt5.2.0\Tools\MinGW_32\bin;





Para agregarlas a la variable de entorno solamente debemos ir a Inicio->clic derecho sobre equipo y elegimos propiedades:


Seleccionamos la opción de configuraciones avanzadas del sistema.


Elegimos variables de entorno y editamos en la sección de path.



Al añadir las rutas se deben de ingresa de la siguiente manera:
Anteponiendo un punto y coma , al final de la listas de rutas existentes sin eliminar alguna de ellas.
;C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin; C:\Qt\Qt5.2.0\Tools\MinGW_32\bin;

Al finalizar la modificación damos aceptar y aplicar los cambios, saliendo de las propiedades del sistema.

Procedemos a verificar en el terminal (ventana DOS o cmd)con las siguientes instrucciones:
mingw32-make


Y si despliega dicho mensaje, significa que todo esta bien, de los contrario mostrara algo como esto:


Con esta ya esta configurado y listo para usarse.


Vídeo:







 
Taller de desarrollo c++ © 2013 | Designed by Alexander C.P , in collaboration with cienciaeducacion100 , Ciencias y Sistemas and cienciaeducacion100@gmail.com