review del semestre

--Originally published at Aprendiendo a programar en C++

Durante este semestre, particularmente en esta clase, logre aprender mucho acerca de la responsabilidad y la procrastinación, fue un poco dificil darme cuenta de que no soy an responsable como daba por hecho, y es que si términe con todos mis deberes, pero no fue si no hasta el ultimo mes (mas que nada la ultima semana) que básicamente hice todo, fue pesado, algo apresurado e incluso dificil, pero se logro el objetivo, aunque definitivamente tratare de volverme mas responsable, y sobre todo organizado.

Todo esto es parte de mi critica positiva del semestre, aunque me falta lo que considero mas valioso el haber “aprendido a aprender” que es una habilidad muy valiosa desde mi punto de vista, aunque claro, noto muy poca revisión o exigencia en el curso, cosa que puede perjudicarnos, porque a pesar de que creo que es un buen sistema, la mayoría (por no decir que todos) venimos con el sistema más exigente y poco funcional, el principal problema de esto, es que es un salto muy grande que no todos podemos amortiguar, quizá el cambio debería ser un poco mas paulatino, no en un semestre y en una sola materia, es el unico pero que le pongo al sistema de ken, sin embargo como maestro es excelente, aunque siento que se desperdicia ese potencial de maestro al dejarnos tan libres, pero es lo que mencionaba acerca del gran salto de sistema educacional.


videojuegos en c++

--Originally published at Aprendiendo a programar en C++

como parte de mi proyecto final, me puse a investigar acerca de los videojuegos y sus principales plataformas, para esto descubrí que si existen videojuegos hechos con c++ solamente que se utilizan otras herramientas para graficos ajenas a c++ pero compatibles, sin embargo si se pueden hacer juegos “vintage” tales como space invaders, snake (juego legendario de celulares nokia) y una infinidad de juegos mas.

En mi caso yo hice un juego similar al ping pong de atari, basicamente por lo sencillo, puesto que un videojuego mas complejo hubiera requerido de mas tiempo y sobre todo conocimientos, para este videojuego precise de librerias graficas tales como SFML, y use code blocks, esto por que asi venia en un curso que estuvo revisando para creacion de videojuegos en c++.

a continuacion les dejare los links de un par de cursos que encontre y utilice para mi proyecto final:

videojuegos c++

videojuegos en c++ (videos)

Al final lo que mas aprendi sobre este proyecto, fue la utilizacion de librerias graficas, que por cierto no forman parte del curso, y que encontre interesantes aunque un poco “raras” al principio.


Validación de datos en c++

--Originally published at Aprendiendo a programar en C++

En aplicaciones de consola C++, uno de los puntos más problemáticos es la lectura de datos por parte del usuario.

Las funciones de entrada C y los métodos del stream cin resultan poco potentes a la hora de hacer lecturas discriminadas de número enteros, o en coma flotante, fechas o cadenas que se ajuste a un formato determinado.

Después de hacer algunos programas, todos nos damos cuenta de que es mala idea usar el operador >> de cin para leer un número. Si el usuario introduce una cadena no numérica, el valor leído es cero, pero la cadena permanece en el buffer de entrada del teclado, y se intenta leer en sucesivas lecturas.

El resultado es que no se leen los datos que se pretenden leer, y generalmente el programa termina por entrar en un bucle infinito o, en el mejor de los datos, da un resultado incorrecto.

Cuando leemos cadenas también existe peligro, concretamente, de overbuffering, es decir, de sobrepasar el espacio de memoria correspondiente a la cadena a leer.

Esto es más cierto cuando leemos cadenas C, en forma de array de caracteres terminadas en nulo. Si usamos objetos de tipo string este peligro no existe.

Con esto en mente, parece claro que es mejor leer siempre cadenas. En el caso de querer capturar valores numéricos, se debe validar la cadena leída. Si la validación tiene éxito se convierte el valor leído a número, y si no, se repite el proceso.

Generalizando, para validar cualquier formato de dato, el proceso es el siguiente:

  • Leer una cadena.
  • Verificar si el formato es correcto.
    • Si es correcto: retornar el valor leído.
    • Si no es correcto: volver al principio.

Encontré este video que explica perfectamente como funciona la validación de datos en c++, les pondré el link a continuación:

Validación de

Continue reading "Validación de datos en c++"

Array / vectores

--Originally published at Aprendiendo a programar en C++

Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de datos que nos ofrece C++, siendo además una de las principales y más útiles estructuras que podremos tener como herramienta de programación. Los arrays, arreglos o vectores (como los quieras llamar), son utilizados para almacenar múltiples valores en una única variable. En un aspecto más profundo, los arrays, permiten almacenar muchos valores en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera rápida y sencilla. Estos valores pueden ser números, letras o cualquier tipo de variable que deseemos incluso tipos de datos propios.

En múltiples ocasiones es necesario almacenar gran cantidad de información en una variable y a menudo sucede que no conocemos con exactitud la cantidad de datos que debemos almacenar, pero sabemos que sí sería más de uno, como por ejemplo almacenar las identificaciones de las personas ingresadas al sistema. Los arrays, arreglos o vectores son una estructura que nos permite solucionar este tipo de problemas.

Para declarar un vector en C++, se deben seguir las mismas normas básicas que se siguen para declarar una variable cualquiera, con un pequeño cambio en la sintaxis. Para declarar un vector, arreglo o como lo quieras llamar, necesitaremos saber el tipo de los datos que irán al interior de este, es decir, serán número enteros, o numero decimales o cadenas de texto, etc. necesitamos también, como siempre, un nombre para el vector y un tamaño máximo.

Para una mejor explicación, dejaré el link hacia un video:

arrays en c++


Recursividad

--Originally published at Aprendiendo a programar en C++

Se dice que una función es recursiva cuando se define en función de si misma.

No todas la funciones pueden llamarse a si mismas, sino que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente.

Tampoco todos los lenguajes de programación permiten usar recursividad.

C++ permite la recursividad. Cada vez que se llama a una función, se crea un juego de variables locales, de este modo, si la función hace una llamada a si misma, se guardan sus variables y parámetros, usando la pila, y la nueva instancia de la función trabajará con su propia copia de las variables locales. Cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros de la pila y continua la ejecución en el punto en que había sido llamada.

Por ejemplo:

Prodríamos crear una función recursiva para calcular el factorial de un número entero.

El factorial se simboliza como n!, se lee como “n factorial”, y la definición es:

n! = n * (n-1) * (n-2) * … * 1

Hay algunas limitaciones:

  • No es posible calcular el factorial de números negativos, no está definido.
  • El factorial de cero es 1.

De modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos:

/* Función recursiva para cálculo de factoriales */
int factorial(int n) {
   if(n < 0) return 0;
   else if(n > 1) return n*factorial(n-1); /* Recursividad */
   return 1; /* Condición de terminación, n == 1 */

Finalmente dejare un enlace a una página que explica a fondo el uso de la recursividad:

Recursividad


Crear y usar libreria

--Originally published at Aprendiendo a programar en C++

En este post, haré una lista de los pasos a seguir para crear y posteriormente utilizar una librería para c++.

  1. Genera las funciones que te interesan y escribelas todas juntas (código y cabeceras) en un mismo archivo de texto (Puedes usar el editor de texto del compilador, el bloc de notas, igual da…) tal y como se ilustra a continuación con un sencillo ejemplo:

    int multiplica(int A, int B);
    int suma(int A, int B);
    int resta(int A, int B);

    int multiplica(int A, int B)
    {
    return(A*B);
    }
    int suma(int A, int B)
    {
    return(A+B);
    }
    int resta(int A, int B)
    {
    return(A-B);
    }

  2. El fichero creado anteriormente, guárdalo con extensión .h, por ejemplo milibreria.h (importante no ejecutarlo para que no le pueda cambiar sola la extensión). Se deberá guardar en la carpeta include del compilador. Esta carpeta se puede encontrar fácilmente en la misma carpeta del compilador., accediendo a Mi PC (Equipo) y en la carpeta donde se guardan todos los programas. Otra opción es que si solo se desea usar mibiblioteca.h una única vez, se puede guardar el fichero en la misma carpeta del código que queramos compilar.
  3. Ahora, para utilizar esta librería tenemos dos opciones, que dependerán de la carpeta en la que se haya guardado dicha librería. Si se guardo en la carpeta include llamaremos la librería como cualquier otra #include <milibreria.h>  y si se guardo dentro de la carpeta del código la llamaremos así: #include “milibreria.h”.
  4.  Finalmente podemos utilizar las funciones de la librería, sin necesidad de escribirlas de nuevo.

De todas formas dejaré este artículo en el que se explica a fondo la creación de librerías:

crear librerías


While / do while

--Originally published at Aprendiendo a programar en C++

En este post escribiré acerca de los loops while y do while, trataré de explicarlos y mencionar sus diferencias.

While:

Los ciclos while son también una estructura cíclica, que nos permite ejecutar una o varias líneas de código de manera repetitiva sin necesidad de tener un valor inicial e incluso a veces sin siquiera conocer cuando se va a dar el valor final que esperamos, los ciclos while, no dependen directamente de valores numéricos, sino de valores booleanos, es decir su ejecución depende del valor de verdad de una condición dada, verdadera o falso, nada más. De este modo los ciclos while, son mucho más efectivos para condiciones indeterminadas, que no conocemos cuando se van a dar a diferencia de los ciclos for, con los cuales se debe tener claro un principio, un final y un tamaño de paso.

Para comprender mejor el funcionamiento del ciclo while, pongamos un buen ejemplo, imaginemos que por algún motivo, queremos pedirle a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un número mayor a 100. Como vemos, aquí no podríamos utilizar un ciclo for, pues no tenemos ni idea de cuándo al usuario se le va a ocurrir ingresar un número mayor que 100, es algo indeterminado para nosotros, sin embargo el ciclo while nos permite ejecutar una acción de forma infinita hasta que se cumpla alguna condición especifica, en nuestro caso sería que el numero ingresado sea mayor a 100. De modo que si el usuario nos ingresa de manera sucesiva los siguientes numero 1,50,99, 49, 21, 30, 100 …, nuestro programa no finalizara, pues ninguno de estos números es mayor que 100, sin embargo si nos ingresara el numero 300, el programa finalizaría inmediatamente.

Do while:

Los ciclos do-while son una estructura

Continue reading "While / do while"

Tipos básicos

--Originally published at Aprendiendo a programar en C++

En este blog mostrare los tipos básicos de c++ y para que sirven.

Enteros:

Se definen con int y admiten de forma opcional dos prefijos modificadores:

  • short y long: Modifica el tamaño en bits del entero. Existen por tanto tres tipos de enteros: int, short int (que se puede abreviar como short), y long int (que se puede abreviar como long).

    El lenguaje C no define tamaños fijos para sus tipos de datos básicos. Lo único que garantiza es que un short int tiene un tamaño menor o igual que un int y este a su vez un tamaño menor o igual a un long int. Esta característica del lenguaje ha complicado la creación de programas que sean compatibles entre varias plataformas.

Caracteres:

Las variables de tipo letra se declaran como char. Para referirse a una letra se rodea de comillas simples: 'M'. Como las letras se representan internamente como números, el lenguaje C permite realizar operaciones aritméticas como 'M' + 25.

Las cadenas de texto o strings son simplemente tablas de char. Las funciones de biblioteca para manipular estas cadenas asumen que el último byte tiene valor cero. Las cadenas de texto se escriben en el programa rodeadas de dobles comillas y contienen el valor cero al final.

Números reales:

Los números reales se definen con float o double. La diferencia entre ambas es la precisión que ofrece su representación interna. Hay un número infinito de reales, pero se representan con un número finito de bits. A mayor número de bits, mayor número de reales se representan, y por tanto, mayor precisión. Los reales definidos con double tienen un

Continue reading "Tipos básicos"

Comentar codigo

--Originally published at Aprendiendo a programar en C++

En este blog mostraré como comentar en el código en c++; para empezar es importante saber la utilidad de comentar nuestro código, puede servirnos para recordar la función de cada parte de nuestro código, la función del mismo programa o incluso nos puede servir momentáneamente para probar otras lineas de código, debido a que cualquier cosa que este marcada como comentario, no afecta al programa ya que no se ejecutan los comentarios. El hecho de comentar para que sirven ciertas lineas o funciones es particularmente útil cuando nuestro código es muy largo y también resulta muy útil cuando se trabaja en equipo, o cuando queremos compartir nuestro código con cualquier persona, ya que no tendrán que investigar para que sirve cada línea.

Ahora, existen dos formas de comentar tu código, una es poniendo “//” al principio de la línea, cabe mencionar que este tipo  de comment solo sirve para una línea, pero también puedes comentar poniendo “/*” al principio de tu comentario y cerrarlo de esta forma “*/” cabe mencionar que este tipo de comentario puede abarcar todas las lineas que quieras.

comentando codigo

Esto no lleva a otra parte importante a la hora de escribir código, que es el estilo de programación, en esto entra el orden, la legibilidad, la forma en que nombras tus variables y los mismos comentarios. Lo ideal, evidentemente es ser ordenados a la hora de escribir código, ya que en caso de un error o modificación, no tendremos mayor problema en ubicarnos en nuestro código y en definitiva, es mas fácil encontrar  errores en códigos ordenados.

Por ejemplo, es mil veces recomendable escribir en forma de lista que en forma horizontal como en el siguiente ejemplo:

NO RECOMENDADO = numero1 = 1; numero2 = 4; numero 3 = 6;

RECOMENDADO = numero 1 = 1;

numero2 =

Continue reading "Comentar codigo"

Quiz09, Distancia entre puntos

--Originally published at Aprendiendo a programar en C++

Para este quiz se nos pidió crear una  función que reciba 4 parámetros, “x1,x2,y1,y2” dichos puntos son las coordenadas de dos puntos en un plano cartesiano (x1,y1) y (x2,y2) respectivamente, con estos datos, nuestra función tiene que regresar la distancia que existe entre estos puntos, para esto utilizaremos la fórmula de pitágoras para la hipotenusa {c=sqrt(x^2+y^2)} cabe mencionar que sqrt = raíz cuadrada. Para obtener los valores “x” y “y”, tenemos que restar x1 a x2 (x2-x1) y el resultado elevarlo al cuadrado, lo mismo seria para las y, por lo tanto podríamos modificar la formula a {c=sqrt((x2-x1)^2+(y2-y1)^2)}; sin embargo he notado que los programas no corren correctamente cuando las formulas son muy largas, así que si se puede simplificar seria mejor hacerlo.

Es importante mencionar que se debe crear el código completo para probar la función, por código completo me refiero al int main() y poner la libreria cmath para poder usar la raíz.

Finalmente dejo un ss de mi código:

quiz09