Unidad de Aprendizaje
"Algoritmia y Programación Estructurada"

18-19/2 Enero - Junio 2019
ESCOM IPN  -  ISC Plan 2009


Software

PSeInt, Notepad ++ y MinGW

Documentos Utiles

Temario de la unidad de aprendizaje
Formato de referencias IEEE

Tutoriales de programación en C

Introducción a la programación en C
Aprenda lenguaje ANSI C como si estuviera en primero
ANSI C Reference
C Reference Card (ANSI)
The C Programming Language (Book)

Evaluación

30 % Ejercicios y laboratorios (Escritos, programas, y simulaciones)*
30 % Practicas**
40 % Exámenes (Escritos y/o prácticas)

*Individuales
**En equipo


Sesiones de laboratorio

Sesion 01: Algoritmia en PSeInt 01
Sesion 02: Algoritmia en PSeInt 02
Sesion 03: Algoritmia en PSeInt 03

Practicas

Practica 01 "Modularidad en C (Funciones de Geometría)"

Realizar un programa modular capaz de ayudar a resolver ejercicios de geometría analítica, según una serie de requerimientos dados. Importante presentar en laboratorio la aplicación funcional y reportar detalladamemete la practica según se solicita.

Practica 02 "Construcción de bibliotecas en C "

Realizar un conjunto de 8 bibliotecas para C, las cuales incluyan la conversión de 8 tipos de unidades de medida.

Practica 03 "Eliminación Gaussiana"

Construir un programa en C capaz de dar solución a sistemas de ecuaciones lineales, con base en el método de eliminación gaussiana.

Practica 04 "Sistema bancario"

Recursos adicionales: problema_empleados.c

Construir un programa en C capaz de administrar un sistema bancario.


Ejercicios

Ejercicios 01 "Diagramas de flujo y pseudocódigo"
Ejercicios 02 "Soluciones algoritmicas"
Ejercicios 03 "Programación en C"

Temas

"Encuadre de la unidad de aprendizaje"

Presentación de la Unidad de Aprendizaje (Introducción, unidades tematicas, formato de las evaluaciónes, tareas, practicas y acuerdos).



Modulo 1 Algoritmia


Tema 01 "Algoritmia y diagramas de flujo"

En computación un algoritmo permite modelar la serie de pasos necesarios a realizar para poder resolver una parte o la totalidad de un problema computacional. Un algoritmo es univoco, lo que implica que si se ejecuta varias veces el mismo algoritmo sobre un conjunto de datos de entrada, siempre se obtiene la misma solución a la salida. Existen distintas formas gráfica de representar un algoritmo, el diagrama de flujo es una de ellas.

Tema 02 "Algoritmia y pseudocódigo"

El pseudocódigo es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, a usar (es un supuesto lenguaje). Es utilizado para describir algoritmos de manera formal  en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo. El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación.

Tema 03 "Resolución de Problemas"

Debido a su gran velocidad para realizar cálculos, almacenamiento, procesamiento y recuperación de información de manera precisa podemos decir que “La razón de ser de una computadora es poder resolver problemas capaces de ser modelados y representados en datos coherentes y ordenados (información) procesables para una computadora, apoyándose de su gran velocidad para tratar la información y su capacidad de seguir una serie de pasos programados con anterioridad”. Resolver problemas es todo un arte como tal y requiere de cuidado, practica y un esquema que facilite el diseño de una solución computable para un problema dado.

Tema 04 "Recursividad"

La recursión es una forma de pensar soluciones computables las cuales están en términos de sí mismas. O desarrollar un conjunto de espacios de búsqueda de un problema desarrollando todos los caminos posibles de manera recursiva.

Tema 05 "El Problema del Ordenamiento"

Ordenar es simplemente colocar información de una manera especial basándonos en un criterio de ordenamiento. El propósito principal de un ordenamiento es el de facilitar las búsquedas de datos del conjunto ordenado. Un ordenamiento es conviene usarlo cuándo se requiere hacer una cantidad considerable de búsquedas y es importante el factor tiempo.

Tema 06 "El Problema de la Busqueda"

Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento con ciertas propiedades dentro de una estructura de datos; por ejemplo, ubicar el registro correspondiente a cierta persona en una base de datos, buscar un número en un arreglo de números, etc.

Recursos del Modulo 1

Ejemplo_01 AreaTriangulo.psc, Ejemplo_02_IngresoEmpleados.psc, Ejemplo_03_MediaNumeros.psc, Ejemplo_04_Minimo10.psc, Ejemplo_04_Minimo10arreglo.psc, NumMinimaFrecuencia.psc, NumMaximaFrecuencia.psc, OrdenaBurbujaSimple.psc, OrdenamientoSeleccion.psc, Factorial.psc, FactorialRecursivo.psc, VoladosRecursivo.psc.



Modulo 2 Lenguaje C


Tema 07 "Lenguajes de Programación y el Lenguaje C"

Recursos adicionales: Estandar ANSI C C99 ISO-IEC 9899-TC2, C11 ISO-IEC 9899-201X, Manual de Referencia de C Online.

En la actualidad hay muchos tipos de lenguajes de programación, cada uno de ellos con sus propias reglas,  terminología, sintaxis y manera de crear un programa computacional. La clasificación de los lenguajes de programación puede realizarse desde tres aspectos básicos (abstracción, ejecución final y paradigma de programación). El lenguaje C es un lenguaje de programación creado en 1972 por Dennis MacAlistair Ritchie en los Laboratorios Bell. Se trata de un lenguaje compilado, fuertemente tipificado y de medio nivel, capaz de soportar la programación estructurada.

Tema 08 "Elementos de un programa en C"

Recursos adicionales: area_circulo.c, modulo3d.c. Un código fuente en C, es un conjunto de líneas que expresan computaciones bajo la sintaxis y semántica del lenguaje C. Un programa escrito en C tiene como características sobresalientes, el ser eficiente y veloz. Un programa escrito en lenguaje C puede incluir uno, varios o todos los elementos siguientes: Comentarios, Identificadores, Constantes, Variables, Operadores, Sentencias o instrucciones y Macros del pre-procesador.

Tema 09 "Tipos de datos en C & entrada y salida estándar "

Recursos adicionales: tamanio_tipos.c.

El lenguaje C es conocido como un lenguaje fuertemente tipificado (strongly-typed), esto porque es obligatorio asignar un tipo determinado a cada dato procesado. Todos los tipos de datos simples o básicos de C son, esencialmente, números enteros, números de coma flotante (reales) y caracteres. En lenguaje C no existen palabras reservadas para realizar entradas y salidas. Para ello, el programador puede hacer uso de las funciones de entrada y salida estándar proporcionadas por la biblioteca estándar de lenguaje C, como son printf y scanf, entre otras que se encuentran declaradas en la cabecera <stdio.h>.

Tema 10 "Operadores y manejo de expresiones en C"

Recursos adicionales: ProblemasMatematicos.c, ProblemasMatematicosSwitch.c.

Un operador en C es una palabra o símbolo que implica una acción sobre ciertas variables, estos pueden operar de manera: unaria (con 1 variable), binaria (con 2 variables) y ternaria (con 3 variables). En C existen operadores: aritméticos, relacionales, lógicos, de asignación, de dirección y de bits. En C las expresiones validas son aquellas que utilizan de manera adecuada algún tipo de operador, y el resultado de su evaluación depende del orden de los operadores en la expresión, su prioridad y asociatividad.

Tema 11 "Estructuras y sentencias de control en C"

Recursos adicionales: area_maxima.c.

Lenguaje C ofrece estructuras y sentencias capaces de controlar el flujo de las instrucciones de un programa, estas pueden ser estructuras secuenciales, selectivas e iterativas, así como de salto. La clase presenta cada una de las estructuras y operadores de flujo de C y su sintaxis.

Tema 12 "Arreglos estáticos en C"

Recursos adicionales: OrdenamientoBurbuja.c, 1000numeros.txt.

Un arreglo estático es una colección finita y constante (que no cambia su tamaño) de elementos del mismo tipo. Un arreglo también es conocido como vector, matriz o array. Se pueden crear arreglos de cualquier tipo de dato en C, es decir, tipos de dato simple, estructurado, archivos e incluso de apuntadores. Se conocen dos tipos de arreglos: los unidimensionales y los multidimensionales. Y al igual que otra variable primero se debe declarar antes de utilizarse.

Tema 13 "Manejo de cadenas en C"

Recursos adicionales: cadenas.c.

A diferencia de otros lenguajes de programación que emplean un tipo denominado cadena string para manipular un conjunto de símbolos, en C, se debe simular mediante un arreglo de caracteres, en donde la terminación de la cadena se debe indicar con nulo con valor 0.

Tema 14 "Tipos de datos estructurados en C"

Recursos adicionales: coordenada.c

C proporciona cinco diferentes elementos para creación de tipos de datos propios, es decir, tipos de datos que permiten al programador crear aplicaciones más potentes: estructuras, uniones, campo de bits y enumeraciones. El uso de las estructuras o tipos de datos estructurados, permiten al usuario crear nuevos tipos de datos más versátiles y específicos, para crear aplicaciones más potentes y resolver problemas aun más complejos. E.g. diseñar elementos que contengan registros para una base de datos, creación de datos como: pilas, colas, árboles, etc.

Tema 15 "Manejo de archivos en C"

Recursos adicionales: problema_empleados.c

Un archivo es un conjunto de bits almacenado en un dispositivo de memoria secundaria, el cuál puede ser almacenado con un conjunto de propiedades y recuperado de la misma manera por un programa. En C, un archivo es un concepto lógico que puede aplicarse a muchas cosas desde archivos de disco hasta terminales o una impresora. Para trabajar con un archivo se asocia una estructura especial de tipo FILE con un archivo especifico realizando una operación de apertura. Una vez que el archivo está abierto, la información puede ser intercambiada entre este y el programa.



Modulo 3 Programación Estructurada


Tema 16 "Programacion estructurada"

La programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. Un código fuente son las líneas de texto escritas bajo un lenguaje de programación que permite describir instrucciones computables. Un código fuente deberá de respetar la sintaxis de un lenguaje de programación capaz de permitir modelar las soluciones a un problema bajo un paradigma de programación. La programación estructurada es el paradigma más simple y útil base de casi la totalidad de los paradigmas de programación conocidos.

Tema 17 "Estructuras de control para la programacion estructurada en C"

C es un lenguaje de programación que permite programar de manera estructurada ya que establece una sintaxis y semántica propia para expresar computaciones, ofreciendo sentencias de control para describir secuencias, selecciones e iteraciones.

Tema 18 "Diseño Estructurado (Modularidad)"

Recursos adicionales: ambito_variables.c, funcion_suma.c, primo.c, ProblemasMatematicosFunciones.c.

C fue diseñado como lenguaje para soportar el paradigma de programación estructurada, el cual permite entre otras cosas diseñar algoritmos mediante la metodología divide y vencerás, la cual dice: Para un problema complejo, abstraerlo y dividirlo en pequeños subproblemas. Cada subproblema dividirlo en otros más pequeños y fáciles de entender. Y continuar así hasta tener dicho problema complejo particionado en pequeños módulos comprensibles y reutilizables para otros problemas. En la programación estructurada la modularización de una solución es posible al emplear funciones y procedimientos. Una función es un miniprograma dentro de un programa más general, en otras palabras, una función es un pequeño fragmento de código "funcional" que realiza una tarea específica, retornando simpre un valor a la salida. Por otro lado un procedimiento es un elemento que realizan una tarea en particular pero que no retornan un valor a la salida y pueden recibir o no parámetros a la entrada, el modular un programa implica identificar la xistencia de dos tipos de ámbito en la variables que puede manejar C, estas son las variables locales y globales. Las variables locales son aquellas declaradas dentro del ámbito de una función y su uso se restringe dentro de la misma función, mientras que una variable global puede ser consultada o modificada por cualquier función.



Modulo 4 Memoria Dinámica


Tema 19 "Arquitectura de una Computadora y el SO"

La arquitectura de una computadora es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso CPU trabaja internamente y accede a las direcciones de memoria. Por otro lado, el Sistema operativo (SO) es el software que actúa de interfaz entre los dispositivos de hardware de una computadora y los programas usados por el usuario. Es responsable de gestionar, coordinar las actividades y llevar a cabo el intercambio de los recursos así como actuar como plataforma para que el resto de aplicaciones del usuario se ejecutan en un equipo de cómputo.

Tema 20 "Apuntadores en C"

Los apuntadores o punteros son otros tipos de dato que se utilizan en lenguaje de programación C. Su utilidad radica en que permiten a un programa ser más potente, dinámico y flexible. Además, su uso le da al lenguaje C su potencia y la popularidad que ha adquirido, debido a que permiten el acceso a memoria de manera más eficiente, sin embargo, una mala referencia a dicha memoria provocará en el programa una salida inesperada.

Tema 21 "Memoria dinámica y su uso en C"

En muchas ocasiones no es posible conocer de antemano la cantidad de variables necesarias para un programa computacional. Existen aplicaciones que requieren de enormes cantidades de arreglos o datos por momentos breves en el funcionamiento de este, por lo que no es viable declarar de antemano a estas como variables, globales o locales de una función. Lo anterior implica emplear funciones de ANSI C que permiten reservar memoria de manera dinámica y ampliarla, reducirla o destruirla en tiempo de ejecución. El manejo de memoria dinámica es la base del poder del lenguaje C y le da la capacidad de crear programas complejos que emplean grandes cantidades de memoria y los maneja de manera eficiente.



Modulo 5 Buenas practicas de programación


Tema 22 "Documentación y reutilización de código"

Recursos adicionales: funcion_suma.c, primo.c

El hablar de software en ingeniería en sistemas abarca más allá del simple programa de computadora ya que incluye la documentación asociada a este. Existe por ello la necesidad de conocer el ciclo de vida del software y la importancia de las diferentes documentaciones a lo largo del desarrollo, implementación y mantenimiento de un programa computacional. Aunque muchas veces documentar se omite, la documentación --al igual que el diseño-- es una marca del orgullo profesional que el programador pone en sus creaciones.

Tema 23 "La importancia de realizar pruebas"

Las pruebas de software son las investigaciones empíricas y técnicas cuyo objetivo es proporcionar información objetiva e independiente sobre la calidad del producto a la parte interesada o stakeholder. Es una actividad más en el proceso de control de calidad. Las pruebas son básicamente un conjunto de actividades dentro del desarrollo de software. Dependiendo del tipo de pruebas, estas actividades podrán ser implementadas en cualquier momento de dicho proceso de desarrollo. Existen distintos modelos de desarrollo de software, así como modelos de pruebas. A cada uno corresponde un nivel distinto de involucramiento en las actividades de desarrollo.