
En esta sesión responderemos la pregunta ¿Qué es un programa? entendiendo el proceso interno del computador, así como la organización del mismo. Estableceremos la definición principal del computador como una máquina definida por un proceso de Entrada - Proceso - Salida.
Estos, aunque son conceptos básicos, son importantes, ya que se debe entender el computador cómo una máquina que puede resolver problemas siempre que nosotros, los programadores le demos las instrucciones correctas de como resolver un determinado problema.
Observación:
Lo importante es pensar, resolver con el cerebro el problema, la codificación debe verse como el instrumento para comunicarnos con el computador, saber codificar no es saber programar.
En esta sesión instalaremos DEV C++, esta será la plataforma que usaremos para aprender estructura y sintaxis. Dev C++, es una herramienta simple y rápida, una de las más básicas para aprender.
Dev C++ es una herramienta poderosa, más si lo que nos interesa es aprender a pensar y a traducir nuestros pensamientos a lenguajes de alto nivel como C++. Dev evita complicaciones de forma y de fondo.
Para descargar acceder a: https://sourceforge.net/projects/orwelldevcpp/
El código de ejemplo que usaremos para la prueba de la instalación es el siguiente:
#include<iostream>
int main()
{
return 0;
}
En esta sesión iniciaremos con la determinación de los fundamentos de la programación. Estudiaremos los tipos de datos simples: int, float, char y bool, El objetivo es comprender de manera simple como se conciben los tipos de datos, así como determinar ejemplos para su uso.
En esta sesión conceptualizaremos a los identificadores, Los identificadores serán los nombres de los diferentes objetos que debemos manejar para resolver un problema en código, es decir, en lenguajes de alto nivel. El objetivo es comprender su importancia y a la vez visualizar la simplicidad en su declaración e inicialización.
En esta sesión abordaremos el aspecto más importante en la solución de problemas de este curso, la modularidad, se plantea como herramienta principal para la organización y planteamiento de algoritmos. De hecho la modularidad es un paradigma para la elaboración de soluciones a problemas, pues en general un problema es más fácil de resolver si lo picamos en pedazos más pequeños y más simples de resolver.
Nos introduciremos en la modularidad y empezaremos a dar organización a la producción algorítmica precisando los pasos que se siguen en la producción de cualquier programa, generando conocimiento en cuanto a las fases de análisis y de producción de algoritmos
El laboratorio 1 tiene por objetivo iniciar el uso de los objetos de control de entradas por teclado, así como de entender como es la estructura de la librería iostream en el uso de los espacios con nombres, que es donde vivo cout.
El laboratorio 2 esta diseñado para precisar la técnica de entradas procesos salidas, así como de manejar el objeto cin de la libaría iostream. también se darán pausas para la documentación de nuestros códigos.
En esta sesión estudiaremos la jerarquía de operadores y veremos un ejemplo sencillo para entender como opera el computador, esto nos permitirá hacer linealización de formulas.
En esta sesión estudiaremos la linealización de formulas, esto lo ejemplificaremos para algunos casos. La linealización es fundamental en los procesos de proposición de algoritmos. Ya que usualmente las formulas matemáticas modelan la solución de muchos problemas de la vida real.
Esta sesión no tendrá recursos, una actividad ideal es que realice toda la codificación desde cero.
En esta sesión estudiaremos la división entera, y precisaremos dos operadores particulares (cociente y módulo). Finalmente reconstruiremos la tabla de jerarquía de operadores.
En esta sesión resolveremos un problema sencillo de promedio, y discutiremos sobre las divisiones procesadas por el computador.
En esta sesión hacemos una corrida en frio del laboratorio 3, con el objetivo de explicar como es la interacción con la Memoria RAM cuándo ejecutamos nuestro código.
A continuación encontrará en los recursos de esta sesión un archivo denominado EjerciciosSecuencialidad01.pdf, el cual contiene un conjunto de problemas que considero importante resolver cuándo se está iniciando, estos ejercicios son pensados para principiantes y catalogados con Nivel bajo.
En este laboratorio construiremos una tabla de multiplicar, sólo usando estructuras secuenciales.
En esta sesión estudiaremos más a profundidad el uso del objeto cout de la librería iostream
Para el convertidor de decimal a hexadecimal. yo usé el disponible en: https://www.rapidtables.org/convert/number/decimal-to-hex.html
En esta sesión estudiaremos más a profundidad el objeto cin de los librería iostream.
En este laboratorio estudiaremos principalmente el uso en problemas reales de la división entera y el módulo.
En este laboratorio desarrollamos todas las técnicas de producción de algoritmos necesaria para la codificación secuencial, es importante resaltar que estas técnicas de producción en muchos casos se hacen automáticamente en nuestro cerebro, sin embargo es importante cuándo estamos iniciando escribirlas a mano de manera de internalizar mejor dichos métodos. En esta sesión también introducimos el concepto de constante.
Una de las bases fundamentales de la programación es la modularidad, en esta sesión abordamos más profundamente la nociones de modularidad, más adelante veremos el tema a detalle, por el momento es importante empezar a sentar precedentes del tema para familiarizarnos con él.
En este laboratorio estudiamos el uso de la función sqrt(), también iniciamos conceptos de lectura destructiva, que usaremos en los ciclos de repetición más adelante.
Además iniciaremos el concepto de variables contadoras en programación.
En este laboratorio estudiaremos otra función de la biblioteca cmath, la función potencia pow().
En esta sesión iniciamos con el primer ejercicios propuesto, en este se buscará reforzar la producción algorítmica desde el análisis del problema.
En esta sesión codificaremos en c++ el ejercicio 1, usando estructura secuencial, parte importante de esta sesión es visualizar que la codificación es un proceso sencillo siempre que hayamos dedicado el tiempo suficiente a la fase de análisis y producción de algoritmos.
En esta sesión abordamos la solución del ejercicio 1 aplicando la modularidad, estos son los primeros pasos que daremos en la producción modular.
En esta sesión desarrollamos el segundo ejercicio, donde involucramos algunos pasos de investigación de fórmulas. Recuerde que es importante que lea el ejercicio e intente por su propia cuenta producir una solución, y luego compararla con la expuesta en el video.
En esta sesión diagramaremos el ejercicio 2 de forma modular. Es importante que estudie la producción de los algoritmos específicos de la sesión pasada y de esta sesión., ya que se muestra cómo podemos variar estas producciones, no sólo en la secuencialidad y modularidad, sino en la escritura, pudiendo ser una especificación más a código como en esta sesión o más neutral como en la sesión anterior.
En esta sesión estudiaremos un problema que puede ser un reto. así que manos a la obra.
Es esta sesión estudiaremos la producción de un ejercicio tipo examen para la aplicación de la división entera.
En esta sesión se hará una corrida en frío y visualización de la traza de la simulación. También en los recursos podrá encontrar un archivo denominado Reto2Modular.cpp, el cual contiene el mismo ejercicio desde la producción modular. es importante que usted los revise e intente entender la codificación allí expuesta.
En esta sesión hacemos un recuento de lo que hemos aprendido y haremos una corrida en frio de un código nuevo para finalizar la sección.
En esta sesión estudiaremos las estructuras secuenciales a partir de condiciones lógicas atómicas. Más adelante estudiaremos las proposiciones moleculares. En principio debemos entender que una proposición atómica es la expresión más básica que contiene un valor de certeza, es decir, son expresiones que pueden ser verdaderas o falsas.
En esta sesión codificaremos tres planteamientos simples. el objetivo es aprender a usar estructuras de decisiones en el código.
El archivos que desarrollamos en en video lo encontrará en los recursos. así cómo se han encontrado los recursos en las sesiones anteriores.
En esta sesión reconstruiremos la jerarquía de operadores, y empezaremos el estudio de los booleanos con una expresión de nivel intermedio, en general no se usan expresiones sumamente complejas pero es necesario enfrentarnos a ejercicios un poco complejos.
Cuándo hablamos de expresiones booleanas o más simplemente proposiciones en programación generalmente son expresiones que resultan naturales en la producción de la solución de un problema que sabemos solucionar. Sin embargo también es de suma importancia conocer la parte técnica de su funcionamiento con el compilador.
En esta sesión hacemos una corrida en frio de un código existente, y nos familiarizaremos más con los tipos de datos booleanos.
En esta sesión definiremos una estructura de decisión doble y a ejemplificaremos en un problema.
En esta sesión resolvemos un primer ejercicio de estructuras de decisión y nos introduciremos en el control de restricciones que nosotros dispongamos para nuestros programas. En muchas oportunidades el algoritmo que producimos precisamente en la fase de algoritmo general o algoritmo específico, no serán las versiones finales de nuestro solución pero si serán un gran inicio.
Formalmente estudiaremos lo necesario para comprender los conectores de disyunción conjunción y negación.
Para esta sesión se plantea un ejercicio de ordenamiento simple. y empezamos a matizar formas de análisis de entrada, proceso y salida. Es importante tener en cuenta que a medida que avanzamos no usaremos todas las técnicas que hemos visto, pero eso no es impedimento para practicarlas si así lo queremos y lo consideramos. En este ejercicio plateamos una solución basada en casos
En esta sesión veremos una versión de mayor nivel cognitivo, usando estructuras de decisión anidadas. Seguimos inspirados en los casos pero esta vez se reformulara solo dejando que se ejecute lo estrictamente necesario.
En esta sesión abordamos un ejercicio fundamental, que incluso es esencial para programación avanzada con tipos de datos compuestos.
En esta sesión codificaremos el algoritmo planteados anteriormente ya luego de estudiar como se deben intercambiar contenidos de variables usando lenguajes de alto nivel.
En esta sesión platearemos un ejercicio sencillo y lo desarrollaremos de dos forma, la primera con estructuras de decisión apiladas, esta es una forma común de resolver problemas, sin embargo no todo el tiempo es la más óptima, la segunda forma es con estructuras de decisión anidadas, es decir, estructuras de decisión dentro de otras estructuras de decisión, esto ya lo hemos hecho antes, pero en esta oportunidad se buscara aclarar cualquier duda que pueda tenerse.
En esta sesión veremos la segunda versión del ejercicio anterior usando estructuras de decisión anidadas y dobles.
En esta sesión se formulara un problema que subyace en los ejercicios anteriores, pero en esta oportunidad usaremos exclusivamente la técnica de la modularidad.
En esta sesión diagramaremos un algoritmo que nos permita hacer un programa para calcular las raíces de una ecuación de segundo grado en los números reales.
En esta sesión desarrollaremos un ejercicio un poco más avanzado, teniendo como base el laboratorio anterior, por lo que es muy importante tenerlo muy bien estudiado. Diseñaremos un programa que nos permite obtener la factorización de una ecuación de segundo grado que tenga raíces reales.
En esta sesión, iniciamos en laboratorio 4, en este se mostrarán 3 formas de resolver un mismo problemas, hasta llegar a la presentación de las estructuras switch, que son estructuras que pueden reemplazar a las estructuras de decisión dobles anidadas.
En esta sesión presentamos otra forma de solución usando estructuras de decisiones boles anidadas.
En esta sesión presentamos formalmente un estructura switch.
En esta sesión reforzaremos el uso de las estructuras switch.
En esta sesión empezaremos a usar las técnicas de formulación de algoritmos de forma variada. afocándonos nuevamente a los procedimiento y funciones.
En esta sesión haremos una corrida en frio del código visto en el laboratorio 6 a fin de reformar los conocimientos sobre modularidad y su funcionamiento con la memoria RAM.
En esta sesión se propone un reto, con la intención de producir un programa sea desde la modularidad o desde l secuencialidad, usando desde luego, estructuras de decisión.
En esta sesión estudiaremos todos los tipos de datos simples y sus rangos sean tipos de datos con signo o sin signo.
En esta sesión introduciremos el concepto de apuntador y de dirección de memoria y estudiaremos los operadores unarios & (dirección) y * (indirección);
En esta sesión estudiaremos la última versión de nuestra tabla vinculada a la jerarquía de operadores unarios y binarios de c++.
En esta sesión introduciremos la estructura de repetición for.
En esta sesión estudiaremos más a profundidad la estructura for.
En esta sesión reformularemos la escritura de una tabla de multiplicar en pantalla, esto permitirá ir evolucionando el concepto de estructura de repetición for y de entender como podemos aprovecharla.
En este laboratorio abordamos un problema típico en los cursos universitarios de programación y diseño de algoritmos, decidir si un número es o no primo. Este problema particularmente permite entender como se analiza en general un problema hasta dar con cómo usar una estructura de repetición, en este caso un ciclo for.
En esta sesión estudiaremos otro problema tipo, calcular el factorial de un número.
En esta sesión abordamos la reutilización de código, recordemos nada de lo que hagamos es desechable.
En esta sesión iniciaremos el estudio de las estructuras de repetición while.
En esta sesión estudiaremos como reescribir una estructura de repetición for a una estructura de repetición for, y veremos procesos adicionales que nos permitirán ir profundizando los conceptos
En esta sesión estudiaremos como usar ciclos while contador principalmente por contador.
En esta sesión seguiremos estudiando el uso de la estructura while, y se mostrara formas de solución sobre la marcha.
En esta sesión iniciaremos un proyecto en DEV C++, EL proyecto como tal lo desarrollaremos en varias sesiones, y en cada una de las sesiones desarrollaremos algo importante del mismo.
En esta sesión desarrollaremos la función main visto desde el punto de un algoritmo general o específico, y determinaremos a medida que analizamos los diferentes argumentos que usaremos, sus tipos y si serán variables o constantes.
En esta sesión nos concentraremos en el desarrollo del procedimiento Mostrar_pedido().
En esta sesión desarrollaremos total pagar() y manejaremos la presencia de algunos errores de sintaxis.
En esta sesión finalizaremos nuestro proyecto generando la posibilidad de rechazar, volver a pedir o aceptar el pedido en el restaurante.
En esta sesión compararemos las diferentes estructuras de decisión e introduciremos una nueva estructura do-while.
En esta sesión veremos la administración de un ciclo do-while, par el calculo del número más grande de un conjunto de números dados por el usuario.
En esta sección pondremos en practica la reutilización de código y seguiremos profundizando en el uso de la estructura de decisión do-while.
En esta sesión reformularemos el proyecto 1, ahora usando estructuras do-while y controlando los posibles errores en el suministro de información por parte del usuario.
Antes de iniciar con arreglos unidimensionales se introducirá la generación de números aleatorios. usando las función rand(), es importante resaltar que el tema principal no es la generación de números aleatorios por lo que se especificará una de las formas más básicas para tan generación, hay muchas más formas incluso aplicadas a las estadísticas per ese no es el unto focal de este curso.
En esta sesión nos concentraremos en el uso de los arreglos en c++, plantearemos dos ejercicios básicos en los que haremos distinción de las principales operaciones con arreglos unidimensionales.
En esta sesión estudiaremos la suma de arreglos unidimensionales.
En esta sesión seguiremos estudiando los arreglos unidimensionales y en esta ocasión estudiaremos como recorres un arreglo para buscar su valor mayor.
En esta sesión se dará una introducción a los arreglos bidimensionales. y estudiaremos incisivamente el pase de parámetros por referencia, es importante que al final de la sesión tengamos claro las diferentes formas de hacer un pase de arreglo por parámetro.
En esta sesión se presenta el problema a solucionar, el cual trata de la administración de una sala de teatro que a su vez esta dividida en dos zonas, Este es el primer proyecto que encontramos con varias especificaciones en cuánto a las pautas solicitadas por un cliente, En esta sesión diagramamos de una manera directa el algoritmo general del módulo principal, es decir construiremos la función main().
En esta sesión desarrollaremos los procedimientos de inicialización de las zonas en ceros, agregaremos un métodos de impresión de la sala en consola y finalizaremos especificando la función hay cliente, que permitirá hacer la repetición del código las veces que sea necesarias.
En esta sesión desarrollaremos el método atender usuario, este es el método más importante del proyecto, ya que por medio de sus instrucciones el usuario podrá hacer reservas, cancelarlas o cambiarlas.
En esta sesión desarrollaremos los procedimientos: Reservar, Cancelar, y Cambiar.
En esta sesión construiremos el modulo Cambiar, Este módulo tiene varias implicaciones porque se requiere quitar una reservación hecha, y usar ese dinero para hacer otra reservación esto a su vez implica que tengamos que pedir la diferencia al cliente final o en otros casos devolver.
En esta sesión, desarrollaremos los procedimientos que resuelven reservar.
En esta sesión desarrollaremos el procedimientos ReservarPosicion()
En esta sesión desarrollaremos el procedimiento ReservarVariosFila().
En esta sección desarrollaremos el procedimientos ReservarVariosAleatorios().
En esta sesión desarrollaremos el procedimiento ImprimirEstadisticas().
En esta sesión haremos una revisión de nuestro código buscando posibles errores, y se harán algunas mejoras.
En esta sesión abordaremos el tema de cadena de caracteres. este tema es muy importante, ya que las cadenas de caracteres son tan necesarias como lo son los demás tipos de datos y su estudio es fundamental.
En esta sesión estudiaremos el proceso que se debe llevar a cabo para eliminar espacios repetidos dentro de una cadena de caracteres.
En esta sesión estudiaremos como contar palabras dentro de una cadena de caracteres.
En esta sesión hacemos bocetaremos los procesos necesarios para insertar una palabra después de otra en un cadena de caracteres, Es importante destacar que no se está desarrollando las cadenas de caracteres en su máxima expresión y el laboratorio 3, por ejemplo, mediría la capacidad de entendimiento abstracto del participante, la intensión es paso a paso ser capaces de entender explicaciones las directas.
En esta sesión nos dedicaremos a mejorar el código que laboratorio y corregiremos algunos errores lógicos.
En esta sesión estudiaremos como diseñar un algoritmo que permita saber si una palabra dada por un usuario es o no palíndroma.
En esta sesión desarrollaremos un proyecto corto de cadenas de caracteres, Para ello será necesario que se descargue el proyecto cargado en los recursos y debe seguir las instrucciones del video.
Llegamos al final de este curso, en esta sesión dilucidaremos de que hemos aprendido y que falta por aprender.
Es siempre un placer poder compartir conocimiento a quién realmente quiere y se preocupa por aprender,
Espero le sea de utilidad los puntos discutidos a lo largo de este curso.
Este curso es sin lugar dudas, un compendio de conceptos fundamentales vinculados a la programación modular y estructurada, abordamos la modularidad desde el inicio, como consecuencia natural en la producción de algorítmica. Este curso está diseñado tomando en cuenta, fundamentalmente, la necesidad de aprender a producir algoritmo traducibles a lenguajes de alto nivel, ya que es aquí donde los estudiantes universitarios requieren mayor empuje.
Este curso desarrolla habilidades propias de producción de código usando tipos de dato simples y compuestos, estructuras secuenciales, de decisión y de repetición. Así como conceptos indispensables, como lo son los apuntadores para trabajar con pases de parámetros por valor y por referencia. A todo esto se unen técnicas de producción de algoritmos que a su vez subyacen en faces de análisis, de producción de algoritmo general, de producción de algoritmo especifico, de Especificación de parámetros y de codificación en C++.
Este curso esta destinado a estudiantes que no hayan visto un curso de programación y que por ende tengan pocos o nulos conocimientos en el área y quieran tener una base sólida, también para estudiantes que han tomado cursos de programación pero no han logrado comprender la dinámica de la programación modular y estructurada y desde luego también para estudiantes que requieran de un buen repaso en el tema.
Tutor:
Isaac Guerrero Mora
Profesor de Programación e Investigador desde 2008.