lunes, 9 de marzo de 2020

Plan de estudio

Bueno si lo que deseas aprender es a programar, puedes encontrar confuso el como empezar, ya que en programación hay cientos de lenguajes y enfoques, una de las preguntas más comunes es:

¿Con cual lenguaje debo empezar?.

Encontrarás todo tipo de respuestas para esta pregunta, en mi opinión, el lenguaje con el que aprendas es poco importante, así que no deberías preocuparte por eso, yo recomiendo empezar con herramientas que faciliten la comprensión y el desarrollo de la lógica de la programación.


Siguiendo esta línea de pensamiento en español tenemos una herramienta increíblemente potente para aprender, que te permite programar en español y te da acceso a código y diagramas de flujos, con todo tipo de configuraciones para imitar programación de muchos lenguajes, y un transformador de código a los lenguajes más populares. Pseint

Así que esta guía se enfocará en desarrollar tus habilidades lógicas y de pseudocódigo, para que después puedas migrar este conocimiento al lenguaje de tu eleccion sin ningun problema.

Ahora viene otra pregunta, ¿Que vamos a aprender?.

Bueno si bien mencioné que hay cientos de lenguajes y muchos enfoques, lo único que necesitamos es desarrollar la capacidad lógica y de transformar nuestros pensamientos en instrucciones entendibles por la máquina.

Esto es independiente del lenguaje o enfoque, cuando se domine esto, el resto será relativamente sencillo y solo cambiara las palabras con las que escribimos y el cómo ordenamos los algoritmos, pero no el que escribimos, esto seguirá siendo lo mismo y no tomará mucho tiempo, así que es relativamente sencillo.

Dicho esto, para poder transformar nuestras ideas a instrucciones que pueda entender la computadora,
¿Cuántos temas hay que dominar?.

Bueno dejare una lista con los temas que necesitamos aprender, los términos que utilizaré son propios es probable que lo encuentres con otros nombres en otros sitios:

1) Instrucciones secuenciales: básicamente son los algoritmos más sencillos, que es una lista de acciones simple que se ejecuta una tras otra sin variación, aqui lo que hay que aprender es:

- Las variables.
- Las instrucciones Leer y Escribir.
- Operaciones numéricas

Básicamente es como cuando un mago, crea un artefacto que cuando se activa con maná lanza una bola de fuego (o cualquier otro hechizo).

Sin mencionar que podríamos encadenar la cantidad de hechizos que deseemos, cualquier cantidad, el ahorro energético es considerable. 😀

La unica pega, es que no podemos elegir que hechizo se ejecutaría en determinada situación, ni elegir entre muchos objetivos, aparte que los hechizos muy largos aún costarian mucho maná.

2) Las condiciones, esto como casi todo en programación viene de las matemáticas, más concretamente este tema viene de Lógica Matemática.

Si tu tienes la capacidad de resolver acertijos o deducir cosas ya tienes esta habilidad, solo es necesario pulirla y usarla de forma consciente. Si no la tienes no te preocupes, no es tan complicado como parece.

Hay gente que se frustra mucho con este tema, pero creo que es porque se explica mal, este tema es bastante importante, porque será el que nos permita controlar y manipular el flujo de la información.
Los temas que se verán son:

- Tabla de verdad.
- Condiciones simples.
- Condiciones anidadas.
- Concatenación de condiciones.
- El según (Swich o When)

Esto implica que podríamos hacer que el artefacto mágico se activará solo, según lo que deseemos sin necesidad de pasarle maná, y que pueda atacar solo a los que deseemos 😈

También podemos hacer que un mismo artefacto active un sin fin de hechizos segun la situacion de forma automática. 😋, aunque bueno hechizos muy largos tomarían mucho de nuestro maná.

3) Los ciclos: los ciclos nos permiten indicarle a la máquina que repita una acción hasta que deseemos.

Los temas que se ven aquí, son los tipos de estructuras, y dos herramientas que nos permiten interactuar con los ciclos:

- Contador y Acumulador.
- Ciclo para (For)
- Ciclo mientras (while)
- Ciclo repetir (do while)

Aquí un mago ya seria capaz de usar miles de hechizos sin gastar apenas maná, con sus artefactos, e incluso distinguir a quién va cuantas bolas de fuego, esto es over power ningún mago medieval podría hacer esto 😱.

La única limitante es que no podríamos elegir a muchos objetivos al tiempo.

4) Las listas: estas nos permiten interactuar con grandes cantidades de información. Tan simple y poderoso como suena, podemos mover toda la cantidad de datos que queramos. Sin embargo este es el tema más complejo que hay, es más muy pocos programadores logran dominarlo.

Aquí solo veremos un nivel muy básico, que es el nivel bastante simple, pero que vamos los ingenieros de google hacen esto a otro nivel, y hay miles de formas de optimizar las interacciones con las mismas.

No entraré en mucho detalle, ya que en general a no ser que te dediques a optimizar códigos te bastará con el uso que te explicare aquí (en toda mi experiencia profesional no he necesitado ahondar más allá de lo superficial).

Los temas aquí serían:

4.1) Vectores o Listas de una dimensión (Arrays).
-Inicializar la lista
-Agregar elementos a la lista
-Actualizar elementos
-Eliminar elementos
-Invertir lista
-Ordenar listas numéricas.
-Ordenar listas de texto

4.2) Matrices o Listas de dos dimensiones.

-Agregar elementos
-Actualizar elementos
-Eliminar elementos
-Invertir Matrices
-Ordenar Matrices numéricas.
-Ordenar Matrices de texto

Aquí ya podríamos encargarnos de hordas de enemigos, distribuyendo hechizos de forma eficiente entre todos los objetivos, ya esto es un nivel casi de Dios 😇

Esto ya sería todo, como pueden ver en realidad no son tantísimos temas, y la mayoría son bastantes sencillos de entender, digamos que lo complejo empieza en los ciclos, antes de eso es relativamente fácil, pero intentaré que puedas aprender de la forma más fácil y sencilla de comprender, apoyándome en los diagramas de flujo de datos para poder visualizar los conceptos de forma más gráfica.

Bueno cualquier duda o sugerencia no duden en ponerla en los comentarios.


lunes, 24 de agosto de 2015

Guia 2 - Estructuras Condicionales

---------------------- Guía No.2 - algoritmos condicionales ----------------------------

Apoyo audio visual:
https://www.youtube.com/watch?v=3o3H5bL88ac
https://www.youtube.com/watch?v=ALcrP0e80Ec
https://www.youtube.com/watch?v=jKmQ8RpioIs


Si tiene problemas con los comandos matemáticos están disponibles en:
ayuda>>PSeudoCodigo>>Expresiones>>Funciones

Dicho esto, vamos con condicionales, como podrá notar, muchas veces uno quiere hacer un
programa que haga una u otra cosa según la información ingresada, para esto, hacemos
comprobaciones o condiciones, veamos un ejemplo sencillo.


Proceso Ej_VA
    // Nota: Estas barras sirven para comentar el código.
    //           todo lo que escriba después de ellas el programa lo ignora
    Escribir "Ingrese un numero"
    Leer N1
   
    Si N1 < 0
        // Si el numero es menor que 0 se multiplica por -1
        N1 = -1 * N1
    FinSi
    Escribir "El valor absoluto del numero es: ", N1
FinProceso

Como se puede ver podemos hacer que el programa responda de cualquier forma
a un evento que que ocurra. En el si podemos usar los operadores lógicos
los básicos son =, >, <, >=, <= y <> podemos verlos en
ayuda>>PSeudoCodigo>>Expresiones>>Operadores

Todos ellos comprueban algo y devuelve Verdadero-falso o true-false. si devuelve true
se ejecuta la condición y si devuelve false no se ejecuta o se ejecuta el sino, ejemplo

Proceso Ej_NP
    Escribir "Ingrese un numero"
    Leer N1
    R1 = N1 % 2 // Si el número es par regresa 0 y si no regresa 1
           // Nota 1: el % es el mismo mod se puede escribir también como N1 mod 2
           // Nota 2: el mod devuelve el residuo de una división por lo que si el mod es 0 la  
           //              división es exacta
    Si R1 = 0
        Escribir "El numero es par"
    Sino // si regresa false ejecuta lo siguiente
        Escribir "El numero es impar"
    Finsi
FinProceso

También podemos meter una condición dentro de otra, a eso se le llama anidar,
más específicamente condiciones anidadas.


Proceso Ej_NC
    Escribir "Ingrese un numero"
    Leer N1
    Si N1 < 0
        Escribir "El numero es negativo"
    Sino
        //Podemos agregar todas las condiciones que queramos dentro de otra
        Si N1 = 0
            Escribir "El numero es neutro"
        Sino
            Escribir "El numero es positivo"
        FinSi
    Finsi
FinProceso


Podemos agregar más de una condición con el y/o, esto sigue la respuesta intuitiva
si colocamos "o" cuando una sea true pasara y si colocamos "y" solo en caso de que
ambas sean true pasara, ejemplo


Proceso Ej_C
    Escribir "Ingrese un numero"
    Leer N1
           // Nota: el trunc quita la parte decimal de un número y deja solo la entera
    Si N1 <> trunc(N1) y N1 > 0
        Escribir "El numero es un decimal positivo"
    Sino
        Si N1 > 0
            Escribir "El numero es positivo"
        FinSi
    FinSi
    Si N1 = trunc(N1) o N1 < 0
        Escribir "El numero es entero y/o negativo"
    FinSI
FinProceso


Bien pongamos algunos ejercicios, para practicar, la idea es que puede hacerlos como
quiera lo importante es que funcionen.

Ejercicios propuestos:
Los ejercicios están ordenados según su dificultad, realice ejercicios hasta que se sienta cómodo codificando, e intente hacer los últimos.

1. Desarrollar un diagrama que permita determinar si un valor cualquiera es positivo o negativo
2. Desarrollar un diagrama que permita determinar sin un valor cualquiera es par o impar
3. Desarrolle un diagrama que permita determinar si un valor N es múltiplo de un Valor Z
4. Desarrollar un diagrama que permita determinar si un valor N (cualquiera), es divisor común de otros dos valores X y Y (que se ingresan por teclado)
5. Diseñar un diagrama que lea un valor N y determine si es múltiplo común de X y Z donde X y Z también se ingresan por teclado
6. Diseñar un diagrama que permita leer dos valores V1 y V2 y determine cuál es el mayor y cuál es el menor o si son iguales
7. Diseñe un diagrama que permita leer dos números N1 y N2 e indicar si uno de los dos divide exactamente al otro.
8. Crear un programa que reciba 2 números, los sume, reste, multiplique o divida (el usuario escoge).
9. Desarrollar un diagrama que permita el ingreso de dos valores X1 y X2 donde indique si el resultado de dividir la suma de los números entre la resta de X1 – X2 es exacta o no.
10. Desarrollar un diagrama que permita el ingreso de 3 números Num1, Num2, Num3 e indicar si la suma de los 3 números es par, impar o neutra.
11. Desarrollar un diagrama que permita leer 3 valores diferentes e indique cual es el mayor de ellos, el menor o si son iguales.
12. Desarrollar un diagrama que permita leer 3 valores X1, X2, X3 e indicar si alguno de ellos divide a los otros dos exactamente.
13. Diseñar un diagrama que permita emitir la factura correspondiente a una compra de un artículo del cual se adquiere una o varias unidades y se conoce su precio antes de IVA (iva igual al 16%), y si el precio bruto (precio de venta más IVA) es mayor de $500.000.oo se debe realizar un descuento del 15%.

14. Desarrolle un diagrama que permita determinar la nota minima que se debe sacar en el examen final del curso de acuerdo a las condiciones 75% (las 3 primeras notas) y 25%(nota 4), esta nota debe estar representada tanto en puntos y en nota.

Recordar que hay 4 notas y una nota final, y se dividen los puntos así:

Nota 1: 25
Nota 2: 100
Nota 3: 125
Nota 4: 125

Examen o Nota final: 125

La nota del examen podrá ser desde 0 puntos a 5 puntos.

15. Una fábrica de tornillos hace controles de calidad tomando una muestra del 10%
de los tornillos por cada lote de tornillos que sacan, dependiendo de la calidad
de los tornillos se harán descuentos para venderlos, si el porcentaje de tornillos
malos es menor al 5% se venderá al 100% del precio del lote, si el porcentaje esta
entre el 5% y 10% se hará un descuento del 10% al precio del lote, si el porcentaje
de tornillos dañados es del 10 al 15% al descuento original se le restará el
5% + 10000 pesos del precio del lote, si el porcentaje es del 15 al 30%, se hará un
descuento del 20% y se hará un llamado de atención a las personas que hicieron el lote,
si el porcentaje de tornillos dañados esta entre el 30 y 50% se aplicará el descuento
del 10% a 15% + el porcentaje de tornillos dañados dividido en 2, y se diezmara
el grupo que hizo el lote, si el porcentaje supera el 50% el lote no se venderá y
se desintegrará el grupo que realizó el lote, con posible despido del total de sus
integrantes (supongo que es una empresa romana :P).

Realizar un algoritmo que reciba el precio del lote de los tornillos, el numero de
tornillos por lote, y el número de tornillos dañados y muestre el precio del lote
de tornillos.

// XD lo deje bien enredado para ver si pueden jeje.




16. Hacer un algoritmo que lea un año y diga si es bisiesto o no.
    Un año es bisiesto si es divisible entre 4, a menos que sea divisible entre 100.
    Sin embargo, si un año es divisible entre 100 y además es divisible entre 400,
    también resulta bisiesto. Obviamente, esto elimina los años finiseculares
    (últimos de cada siglo, que ha de terminar en 00) divisibles sólo entre 4 y
    entre 100.

17. Desarrollar un diagrama de flujo que permita determinar el tiempo un segundo después de un tiempo ingresado en horas:minutos:segundos. Ejemplo 4:59:59 // 5:00:00.
18. Desarrollar un diagrama de flujo que permita determinar la fecha un día después a un fecha ingresada (tenga en cuenta meses de 30, 31, 28 días, cambio de año y el año bisiesto, ejemplo 31-12-2004 el día siguiente será 1-1-2005).

jueves, 20 de agosto de 2015

Guia 1 - Estructura Secuencial

---------------------- Guía No.1 - algoritmos secuenciales ----------------------------

Esta guía tiene un apoyo audiovisual revisar:


https://www.youtube.com/watch?v=fCbXCK2rWvE
https://www.youtube.com/watch?v=uDMfcZi5m1A




Empecemos por definir que es un algoritmo "Un algoritmo es una secuencia de pasos lógicos de forma ordenada, que resuelve una situación " recordar esto es muy importante, es el concepto básico que debemos aprender.

Si quieres verlo de forma más didactica recomiendo este video https://www.youtube.com/watch?v=U3CGMyjzlvM

Si bien en el campo agregan el concepto de pasos finitos, la verdad es que eso lo veo un poco como una limitante, estoy seguro que en unos años los programas de inteligencia artificial, serán pasos lógicos infinitos auto-construibles, y yo lo seguiré considerando algoritmo XD.

Para facilitar el aprendizaje usaremos el programa pseint, lo podemos descargar de la siguiente página
http://pseint.sourceforge.net/ .

También esta Free DFD que lo pueden descargar aquí: http://dfd.softonic.com/ , pero en esta guia nos enfocaremos en pseint, que maneja tanto diagramas de flujo de datos como algoritmos escritos.

Lo instalamos, la instalación es sencilla y no necesita mayor explicación, al terminar la instalación nos preguntara que tipo de perfil usaremos, para estas prácticas usaremos el perfil flexible, si escogió otro, vaya a Configurar>>Opciones de Lenguaje (perfiles)... escogemos flexible

Como podemos observar en el centro hay un control para escribir el código y este contiene lo siguiente

Proceso sin_titulo

FinProceso


Cambiemos el sin_titulo y pondremos el nombre que queramos (Sin espacios y que empiece por una letra)


Proceso Ejemplo

FinProceso


Recomiendo que guarde todos los ejercicios que haga, sea de los que le pongo o suyos propios para que cuando lo veamos dentro de un año digamos, en nuestros tiempos programábamos con pseint o DFD, así a lo viejito jajajaja :P

Lo primero que veremos es a escribir mensajes en la consola, para esto tipeamos la palabra clave escribir (podemos ver que es el primer control de la derecha) miremos un ejemplo.

Proceso E_MC
    Escribir "Hola soy el computador"
    Escribir "un interpretador traduce los codigos escritos"
    Escribir "en codigo binario y los envia al circuito de la tarjeta Madre"
    Escribir "y los resuelvo con el procesador"
    Escribir ""
    Escribir "Te doy la bienvenida al mundo de la programacion"
FinProceso


Nota el Escribir en DFD es así:
No se te olvide poner el texto entre la comillas; “” o ''.



Copia y pega el proceso, en pseint y oprime ejecutar (es un play verde :P), para probar el código, experimenta escribir algunos mensajes y pasamos a lo siguiente.

----------------------------------- variables -------------------------------------------------------------------

Bueno esto es lo primero que veremos, cuando programamos podemos guardar en la memoria temporal, valores numéricos o cadenas de textos, para su posterior uso, haciendo esto podemos obtener, manipular y procesar la información.

Las variables son nuestra herramienta básica con la cual haremos prácticamente todo, las variables empiezan con una letra, no tiene espacios, normalmente se distinguen mayúsculas y minúsculas, y pueden tener números pero no empezar por un número.



Nombre
Valido o invalido
1numero
invalido
numero1
valido
n1
valido
1n
invalido
primer_nombre
valido
primer nombre
invalido
nuMeRo
valido
Numero
valido
   
Se recomienda siempre usar minúsculas para las variables, para mantener un orden con las funciones (eso lo veremos después en poo, por ahora no se preocupe :P) en las variables podemos guardar cualquier cosa que queramos, guardemos texto en 2 variables y las mostraremos


Proceso E_VdT
    nombre = "Sergio " // El espacio al final es para que no quede pegado
    apellido = "Castro"
    Escribir "Mi primer nombre es : ", nombre
    Escribir "etimológicamente significa Guardián"
    Escribir "Mi primer nombre con mi apellido seria:"
    Escribir nombre, apellido
    Escribir "En juegos normalmente uso un juego de palabras y me pongo Casser"
FinProceso

En DFD el manejo de variables es con el cuadrado:

Como vemos el texto va dentro de comillas, y las variables no, pero el contenido de estas también esta entre comillas (estas se sacan con shit + 2), para escribir varias cosas ponemos una ‘  ,  ‘ para separar las cadenas de texto.


Ahora veremos un ejemplo con números


Proceso E_VcN
    n1 = 2754
    n2 = 4123
    r = n1 + n2
    Escribir "Me dijeron que sumara y mostrara esto"
    Escribir n1, " + ", n2, " = ", r
FinProceso


Como vemos cada dato lo metemos en una variable distinta y en la línea: r = n1 + n2 operamos y guardamos el resultado, para mostrarlo basta con ponerlo en el escribir.

Prueba hacer algunos que quieras, podemos restar con el - multiplicar con * y dividir con /

-------------------------------------------leer datos --------------------------------------------------

Para leer algo que escribe el usuario usamos la palabra reservada leer seguida de una variable
ej.

Proceso E_sumar
    escribir "Ingrese un numero"
    leer n1
    escribir "Ingrese otro numero"
    leer n2
    r = n1 + n2
    escribir "la suma de los 2 números es: ", r
FinProceso




Cada vez que usamos la palabra leer, almacenamos lo que ingrese el usuario en una variable, así la podemos manipular, con esto aprendimos las 3 partes de un algoritmo.

EPPSSS.jpg

Entrada de datos
Procesamiento de datos
Salida de datos


Solo existen esas 3 partes en un algoritmo, para facilitar el aprendizaje sólo veremos el Procesamiento de datos; la entrada y la salida las cubrirán el leer y el escribir.

Ahora ya entendido lo que es la variable, el leer, el escribir y los procesos básicos, vamos a dejar unos ejercicios y terminamos la primera guía, intentar guardarlos todos, e inventar unos propios.
Ejercicios propuestos:
Los ejercicios están ordenados según su dificultad, realice ejercicios hasta que se sienta cómodo codificando, e intente hacer los últimos.
1. Leer 2 números y al primero restarle el segundo, después mostrar la resta completa.
2. Crear un algoritmo que lea 2 números, y muestre la suma, la resta, la multiplicación y
la división de los 2 números.
3. Desarrolle un Algoritmo de flujo que permita leer un valor entero, calcular su cuadrado y mostrar su resultado.
4. Desarrollar un Algoritmo que permita ingresar el radio de un círculo para determinar el área del mismo (consultar la fórmula), y mostrar su resultado
5. Desarrollar un Algoritmo que permita determinar la hipotenusa de un triángulo rectángulo conociendo los valores de las longitudes de los catetos.
6. Desarrollar un Algoritmo que leer la temperatura en grados centígrados y muestre su resultado en Fahenheit y kelvin.
7. Desarrollar un Algoritmo que permita ingresar un valor en millas y lo convierta a kilómetros, centímetros y yarda.
8. Desarrollar un Algoritmo que permita convertir un valor en galones a Litros, barriles y litros
9.Desarrollar un Algoritmo que permita convertir ingresar un valor en libras y lo convierta en quintales, miligramo y toneladas.
10. Desarrollar un Algoritmo que convierta un valor dado en metros cuadrados (M2 ), en hectáreas y Centímetros cuadrados
11. Desarrollar que permita convertir un valor dado en Km/h en millas por hora y nudos (náutico)
12. Crear un algoritmo que pida 3 números a, b y c, y resuelva la fórmula general para una ecuación de segundo grado y muestre en pantalla las respuestas x1 y x2.
13. Cree un algoritmo que pida 4 números A,B,C,D
    Hacer y mostrar:
    E) que sume los A y B
    F) que le reste a B, C
    G) que multiplique C y D
    H) que divida la suma de E, F, G, entre 10

14. Inventarse algún algoritmo mínimo 1 y máximo 10000000000000000000000 ejercicios XD.

Si tiene problemas con los comandos matemáticos están disponibles en:
ayuda>>PSeudoCodigo>>Expresiones>>Funciones