Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Ciencias Exactas Ingeniería y Tecnología Primer Semestre Programa de la asignatura: Fundamentos de programación Unidad 1. Preparando el camino hacia la programación Universidad Abierta y a Distancia de México Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 2 Índice Unidad 1. Preparando el camino hacia la programación .................................................................. 3 Presentación de la unidad ................................................................................................................................... 3 Propósitos ...................................................................................................................................................................... 4 Competencia específica ....................................................................................................................................... 4 Logros……………………………………………………………………………………………………..………………………………………………..……4 1.1. Introducción a la programación ................................................................................................................ 5 1.1.1. Ejecución de programas en la computadora .................................................................................9 1.1.2. Lenguaje de programación ..................................................................................................................... 12 1.1.3. Paradigmas de programación ............................................................................................................... 17 1. 2. Metodología de la programación .......................................................................................................... 18 1.2.1. Fases de la metodología de programación ................................................................................... 18 Cierre de la unidad ................................................................................................................................................. 30 Fuentes de consulta .............................................................................................................................................. 30 Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 3 Unidad 1. Preparando el camino hacia la programación Presentación de la unidad La ingeniería de software es la disciplina formada por un conjunto de métodos, herramientas y técnicas que se utilizan en el desarrollo de programas informáticos. Los programas informáticos son una serie de instrucciones con una secuencia lógica que tienen como fin resolver un problema específico. Aunque la programación en un proyecto de menor escala se le considera como la etapa final, en un proyecto a gran escala, la programación forma parte de una de las fases de desarrollo y se le considera como la acción de desarrollar programas pilar fundamental al momento de crear una aplicación es por eso que el ingeniero en software debe analizar la situación, diseñar el proyecto, desarrollar el software, hacer las pruebas necesarias para el correcto funcionamiento y la implementación del sistema mediante el uso de las computadoras y la programación para resolver problemas. "Un programa es la codificación de un algoritmo en un lenguaje de programación determinado”. (Jiménez y Otero, 2014, p.17). Por la capacidad de datos que pueden almacenar y manipular, las computadoras han cobrado gran importancia para el manejo de datos y recursos. Para resolver problemas mediante la computadora, es necesario desarrollar programas escritos en un lenguaje que ella pueda procesar y ser ejecutados por ella. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 4 Propósitos Al finalizar la unidad podrás: • Comprender los conceptos básicos relacionados con la computadora y los lenguajes de programación. • Comprender qué es la programación. • Distinguirás los paradigmas de programación y los lenguajes asociados a éstos. • Reconocerás las fases de la metodología de la programación. • Codificarás programas sencillos en lenguaje C. • Identificarás los datos de entrada y salida de un algoritmo. • Diseñarás algoritmos que solucionen problemas sencillos. • Representarás algoritmos en diagrama de flujo y en pseudocódigo. • Conocerás el procedimiento a seguir para verificar la correcta ejecución de un algoritmo. Competencia específica Desarrollar y comprobar pseudocódigo para comprender la estructura de un programa en un lenguaje de programación con la resolución de problemas simples mediante algoritmos representados a través de diagramas de flujo. Logros • Comprender los conceptos básicos de programación. • Identificar la metodología de la programación. • Desarrollar algoritmos con base en problemas simples. • Desarrollar y verificar el pseudocódigo de un algoritmo. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 5 1.1. Introducción a la programación Como ya se mencionó, la acción de programar consiste en indicarle a la computadora qué es lo que tiene que hacer. Para esto, los desarrolladores de software escriben programas compuestos de un conjunto de instrucciones que son interpretadas y ejecutadas por la computadora para buscar la resolución de un problema. Se concibe un programa como “un sistema para transformar datos” (Winder, 1995, p.3). Para fines de este curso entenderemos que una computadora es una máquina electrónica que recibe datos de entrada y los procesa de acuerdo al conjunto de instrucciones, llamado programa, para obtener nuevos datos que son el resultado del proceso, tal como se ilustra en la siguiente figura: Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 6 Un programa se compone, entre otras cosas, de: • Datos: variables o constantes. • Operadores: lógicos, aritméticos, relacionales y jerárquicos. • Estructuras de control: secuenciales, selectivas y repetitivas. Un programa es la forma en que el usuario o programador establece comunicación con la computadora, de acuerdo a un conjunto de instrucciones, para obtener nuevos datos que son el resultado del proceso, tal como se ilustra en la siguiente figura: Elementos básicos de una computadora Los componentes de una computadora son básicamente: hardware y software. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 7 Los recursos de hardware son todos aquellos elementos de la computadora que se pueden palpar como, por ejemplo: el monitor, el teclado, el disco duro y la memoria, entre otros (Sánchez, 2005). Los recursos de software son aquellos elementos intangibles sin los cuales la computadora no funcionaría, es decir, el soporte lógico: programas y datos, entre los que se encuentran los sistemas operativos, editores de texto, compiladores, bases de datos, videojuegos, etc. (Sánchez, 2005). Con el fin de poder entender la interacción de estos recursos y la estructura interna de la computadora, se hará referencia al modelo de Von Neumann que propone que tanto el programa como los datos sean almacenados en la memoria permanente lo que permite que la computadora no tenga que reconstruirse, pues para programarla únicamente se deberá introducir el programa por el dispositivo indicado y posteriormente alimentarla con los datos de entrada para que calcule la salida correspondiente. Arquitectura de una computadora Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 8 Los elementos que componen esta arquitectura de la computadora según el modelo de Von Newman son: la unidad central de procesamiento (CPU por sus siglas en Inglés – Central Processor Unit) que está integrada por la unidad aritmética-lógica(ALU por sus siglas en Inglés - Arithmetic Logic Unit) y la unidad de control (CU por sus siglas en Inglés – Control Unit), la memoria y los dispositivos de entrada como el teclado, el ratón, un escáner, etc., y los de salida como el monitor, una impresora, una bocina o altavoz, por ejemplo. Para consultar una breve reseña y el concepto de programación, lee detenidamente el documento U1. Conceptos de programación y cómputo que se encuentra en la sección Material de apoyo. 1.1.1. Ejecución de programas en la computadora Continuando con los elementos necesarios que integran el ámbito de la programación, abajo se expone una explicación del funcionamiento de una computadora en relación con la ejecución de un programa. Según Joyanes y Zohanero (2005), al ejecutar cualquier programa una vez que el programa y los datos fueron almacenados en la memoria principal, se realiza el siguiente proceso en el interior de la CPU: 1. La Unidad de Control consulta en la memoria la instrucción indicada en el contador del programa y la almacena en el registro de instrucciones, actualizando el contador del programa con la dirección de memoria de la siguiente instrucción. 2. Una vez almacenada la instrucción en el registro del programa, la unidad de control la decodifica, detectando los dispositivos implicados en su ejecución. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 9 3. Una vez detectados los dispositivos, la misma Unidad de Control, les envía las señales de control, indicándoles la acción a realizar y, si es el caso, los datos y/o la dirección de memoria correspondiente. 4. Cuando cada dispositivo concluye con las acciones designadas, envía una señal a la unidad de control, para que ésta continúe con el mismo procedimiento para la siguiente instrucción, así hasta ejecutar todo el programa. Al período en el que se ejecuta una instrucción se le conoce como ciclo de instrucción o ciclo fetch. Para revisar a detalle el funcionamiento del CPU consulta el siguiente documento Unidad 1. Funcionamiento de la Unidad Central de Procesamiento CPU en la sección Material de apoyo. Con el fin de ilustrar este procedimiento, se analizará la ejecución del siguiente programa escrito en un lenguaje de programación ficticio. Ejemplo de ciclo de instrucción: El siguiente conjunto de instrucciones calcula el área de un rectángulo. Para comenzar es necesario delimitar el problema cuyo objetivo es obtener el área de un rectángulo. Como se sabe, los datos que se requieren para poder calcularla, según la fórmula, son las medidas de la base, las medidas de la altura, realizar la operación de multiplicación la base del rectángulo, por el dato que corresponde a la altura: 𝑏 ∗ ℎ Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 10 El ejemplo de programa para calcular el área de un rectángulo es el siguiente: Imprimir “Ingresa la base:” Leer b Imprimir “Ingresa la altura:” Leer h área← b*h Imprimir área Antes de definir paso a paso la ejecución de este programa se describirá la función de cada una de las instrucciones que lo integran. En programación hay una nomenclatura en la cual la información contenida dentro de los signos <> (se les conoce como picoparéntesis o signos mayor y menor que) debe ser modificada por el programador, es decir, son datos que se proporcionan a la computadora y dependen del objetivo planteado. Según el ejemplo la palabra Dato puede ser una letra o un símbolo dependiendo del planteamiento, es decir, es el nombre del campo o variable y éste debe ser modificado. Instrucción Descripción Imprimir <Dato> Imprime en el dispositivo de salida estándar el <Dato> indicado en la instrucción, que puede ser un mensaje de texto o el valor de una variable. Leer <X> Lee por medio del teclado un dato, lo almacena en la variable <X> indicado y lo almacena en la memoria RAM. <X> ← <Dato> La flecha representa una asignación, esta acción actualiza la dirección de memoria asignada a <X> con el valor <Dato>. Lista de instrucciones en lenguaje de programación Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 11 Cabe señalar que, en los lenguajes de programación, las direcciones de memoria se representan por medio de variables, para hacerlos más legibles. De tal manera que <X> representa una variable y <Dato> puede ser un mensaje o cualquier valor. Ahora sí, de acuerdo con la información anterior, en la siguiente tabla se describe el ejemplo de un programa paso a paso explicando las acciones que realiza la unidad de control junto con las otras unidades de la computadora involucradas en la ejecución de cada una de las instrucciones del programa. Instrucción Descripción Imprimir “Ingresa base:” ▪ La unidad de control envía señales al monitor para que imprima el mensaje “Ingresa base:”. Leer b ▪ La unidad de control coordina las acciones necesarias para que, por medio del teclado, el usuario introduzca un número y lo almacene en la memoria principal, en el espacio correspondiente a la variable b. Imprimir “Ingresa altura:” ▪ La unidad de control, nuevamente, envía una señal al monitor para que imprima el mensaje “Ingresa altura:”. Leer h ▪ La unidad de control coordina las acciones necesarias para que el usuario introduzca un número, por medio del teclado, y lo almacene en el espacio de memoria correspondiente a la variable h. área← b *h ▪ La unidad de control envía la señal indicada a la ALU para que realice la multiplicación, posteriormente envía la señal a la memoria junto con el resultado de la multiplicación para que se almacene en el espacio de memoria correspondiente a la variable área. Imprimir área ▪ La unidad de control trae de la memoria el dato almacenado en el espacio asignado a la variable área y coordina las acciones para que el monitor imprima este valor. Ejemplo de ejecución paso a paso de un programa Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 12 Para revisar el tema sobre el lenguaje máquina, consulta el documento U1. Lenguajes de bajo nivel en la sección Material de apoyo. 1.1.2. Lenguaje de programación El lenguaje de programación sirve para escribir código orientado a resolver algún problema o necesidad. Cada lenguaje de programación se define a partir de un conjunto de símbolos básicos, llamado alfabeto; un conjunto de reglas, llamado sintaxis, que definen la forma de manipularlos o combinarlos para representar instrucciones; y las reglas que especifican los efectos de dichas instrucciones cuando son ejecutadas por la computadora, conocidas como semántica. De esta manera se puede decir que los elementos que conforman un lenguaje de programación son: 𝐿𝑒𝑛𝑔𝑢𝑎𝑗𝑒 𝑑𝑒 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎𝑐𝑖ó𝑛 = 𝑎𝑙𝑓𝑎𝑏𝑒𝑡𝑜 + 𝑠𝑖𝑛𝑡𝑎𝑥𝑖𝑠 + 𝑠𝑒𝑚á𝑛𝑡𝑖𝑐𝑎 Los lenguajes de programación se clasifican en lenguajes de bajo nivel y lenguajes de alto nivel dependiendo de su legibilidad para el ser humano. Los primeros se caracterizan porque sus instrucciones se parecen más a las acciones elementales que ejecuta una computadora, como son: sumar, restar, guardar en memoria, etcétera. En cambio, las instrucciones de los lenguajes de alto nivel son más parecidas a un lenguaje humano, por lo regular en idioma inglés. Los programas escritos en bajo nivel describen a detalle lo que sucede a nivel de hardware, mientras que los programas escritos en un lenguaje de alto nivel Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 13 lo ocultan, teniendo como ventaja que son más fáciles de entender para las personas. Estructura de un lenguaje Como en muchos otros lenguajes, una función es un código de programación que tiene una tarea específica y formaparte del programa original. Es una secuencia de instrucciones precisas, para realizar una tarea en específico. Una función está definida por los siguientes elementos: • Cabecera de la función. Está integrada por un tipo de dato, un nombre de la función y una la lista de parámetros. • Código de programación. Es único para cada función. Se incluye el valor devuelto por la función. Los aspectos más importantes en el diseño de una función son: • Tipo de resultado. Se refiere al tipo de dato que devuelve la función. • Lista de parámetros. • Cuerpo de una función. Se encierra entre llaves {}. • Paso de parámetros. • Declaración de variables de forma local. Dentro de una función pueden declararse variables de distintos tipos, pero estas perduran únicamente dentro la función. • Valor devuelto por la función. Una función devuelve un único valor, el valor que devuelve puede ser de cualquier tipo de datos reconocido. El nombre de una función comienza con una letra o un subrayado (_) y puede contener las letras y subrayados que se desee. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 14 A continuación, se muestra la estructura general de una función en lenguaje programación C: Tipos de datos Los tipos de datos que suelen utilizarse en la mayoría de los lenguajes de programación son: • Cadena (texto). • Entero (número entero). • Decimal (número con punto decimal). Evolución de los lenguajes de programación Con las primeras computadoras surgió el primer lenguaje de programación que fue precisamente el lenguaje de máquina, el cual es considerado el lenguaje de primera generación. Las instrucciones en lenguaje de máquina dependían de las características de cada equipo, por lo que dada la dificultad de desarrollar programas en unos y ceros, los investigadores de la época desarrollaron el lenguaje ensamblador, cuyo conjunto de instrucciones consta de palabras nemotécnicas que corresponden a las operaciones básicas que una computadora puede ejecutar. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 15 Para ilustrar esto se revisará la siguiente instrucción:1 Mueve el contenido del registro 8 al contenido del registro 10 En lenguaje de máquina, ésta se podría representar como: 0010 0000 1000 0100 Lo anterior es ilegible para el ser humano, en cambio en lenguaje ensamblador esta instrucción se puede representar de la siguiente forma: MOV R8, R10 El código anterior continúa estando en clave, pero es definitivamente más amigable que las cadenas de ceros y unos. Para traducir de lenguaje ensamblador a lenguaje de máquina, se desarrollaron programas llamados ensambladores (en inglés, assemblers). Este lenguaje fue considerado de segunda generación. Posteriormente, en la década de los 50´s aparecieron los primeros lenguajes de alto nivel, cuyas instrucciones son más parecidas al idioma inglés y, por lo tanto, más fácil de utilizar para los programadores, además de que son independientes de la arquitectura de las computadoras. Algunos ejemplos son: FORTRAN y COBOL (que son los primeros lenguajes que aparecieron y en sus inicios se utilizaron para aplicaciones científicas), C, Pascal, Ada, Lisp y Prolog (utilizados principalmente en inteligencia artificial), Java, C++, C#, entre otros. Al igual que el lenguaje ensamblador, los programas escritos en un lenguaje de alto nivel deben ser codificados a lenguaje de máquina, así que junto con 1 Este ejemplo es una adaptación de la versión original que aparece en (Joyanes & Zohanero, 2005, pág. 32) Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 16 ellos se desarrollaron programas traductores, que de acuerdo con la forma en que trabajan se dividen en dos tipos: compiladores e intérpretes. Compiladores. Traducen todo el programa escrito en un lenguaje de alto nivel, llamado programa o código fuente, generando un nuevo programa objeto que está escrito en lenguaje de máquina y a partir de éste se genera un programa ejecutable, el cual puede ejecutarse cada vez que se desee sin tener que compilar el programa fuente nuevamente. Además, como parte del proceso de traducción el compilador detecta los errores que hay en el código fuente, informándole al programador para que los corrija, pues un programa sólo se compila si no tiene errores. Intérprete. Revisa cada línea de código individualmente, la analiza y enseguida la ejecuta, sin revisar todo el código y sin generar un programa objeto, así que cada vez que se quiere ejecutar el programa se vuelve a traducir el programa fuente línea por línea. Por lo anterior, los compiladores requieren una fase extra antes de poder generar un programa ejecutable, y aunque esto pareciera menos eficiente en cuanto a tiempo, los programas creados con compiladores se ejecutan mucho más rápido que el mismo programa ejecutado con un intérprete. Adicionalmente, cuando un programa ya ha sido compilado puede ejecutarse nuevamente sin tener que compilarse, mientras que los programas que son interpretados, se deben volver a traducir cada vez que se ejecutan. Para revisar una explicación más detallada sobre los lenguajes de bajo nivel, revisa el documento U1. Lenguajes de bajo nivel en la sección Material de apoyo. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 17 Conforme han ido evolucionando las computadoras también lo han hecho las estrategias para solucionar problemas, generando nuevos programas con diferentes filosofías, llamadas paradigmas de programación. 1.1.3. Paradigmas de programación Un paradigma “es un conjunto explícitamente determinado de conceptos y proposiciones usadas para dirigir investigación dentro de un campo determinado” (Cedano, Et al, 2014, p. 165). “Los paradigmas de programación se definen como las diversas maneras que a lo largo de la transformación de los lenguajes de programación se han reconocido como estilos para programar y resolver problemas. […] Cuando se describen los distintos enfoques del desarrollo de un programa y las técnicas- y lenguajes- correspondientes, se habla de paradigma de programación. Éste define la forma en que se estructura el código, y la relación de éste con los datos.” (Ibidem, p. 165). Un lenguaje de programación siempre sigue un paradigma de programación, aunque también podemos encontrar lenguajes con la influencia de dos paradigmas, tal es el caso del lenguaje C, que surgió bajo el paradigma procedimental y se transformó al paradigma orientado a objetos, de tal manera que puede soportar ambos paradigmas. Los paradigmas de programación más importantes son: imperativo, funcional, lógico y orientado a objetos. Para revisar en qué consisten estos paradigmas, revisa el documento U1. Paradigmas de programación en la sección Material de apoyo. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 18 1. 2. Metodología de la programación En programación, se entiende como metodología al “conjunto de estrategias usadas para abordar un problema y transformarlo en un programa codificado que tendrá una estructura o arquitectura acorde con un paradigma de programación” (Martínez y Martín, 2003, p.46). La Importancia de contar con una metodología radica en la necesidad de sistematizar las acciones a realizar para la resolución del problema propuesto considerando todos los requerimientos, datos y objetivo del programa, es decir, todos los elementos necesarios para desarrollar un programa que dé solución a un requerimiento específico, con ello se reduce la probabilidad de error al momento de ejecutar un programa, y los costos que implica realizar correcciones. 1.2.1. Fases de la metodología de programación Independientemente del paradigma que seelija y del lenguaje que se utilice para programar, existe un conjunto de fases que deben seguirse para realizar un programa de computadora que constituyen una metodología (Levine, 2001): Fases de la metodología de programación Planteamiento del problema Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 19 Es la primera fase del ciclo, consiste en seleccionar y plantear el problema que se quiere resolver para poder comenzar su análisis. Es muy importante tener bien claro y delimitar desde un inicio el problema a resolver pues de esto dependerá el éxito de las siguientes fases del proceso. En el planteamiento del problema se deben considerar los insumos (datos de entrada) que se necesitan para resolver el problema; los pasos a seguir para su solución y el producto final (datos de salida). Análisis del problema En esta fase se determina ¿qué hace el programa? Por lo cual debe definirse de manera clara y concisa el problema en cuestión, se debe establecer el ámbito del problema, las características, limitaciones y modelos de lo que se desea resolver. Este paso debe conducir a una especificación completa del problema en donde se describa cuáles son los datos requeridos para resolverlo (datos de entrada) y cuál es el resultado deseado (salida). El análisis del ejemplo es muy simple y se resume en la siguiente tabla: ¿Cuál es la salida deseada? El área de un rectángulo, la cual identificaremos como área ¿Qué método(s) se pueden utilizar para llegar a la solución? El área de un rectángulo se puede calcular con la siguiente fórmula: Á𝑟𝑒𝑎 = 𝐵𝑎𝑠𝑒 ∗ 𝐴𝑙𝑡𝑢𝑟𝑎 ¿Qué datos de entrada se requieren? Por el planteamiento del problema y dado el método anterior, los únicos datos que se requieren son: la medida de la base que se representa por b y Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 20 la medida de la altura indicada por h ¿Qué datos o información adicional es necesaria para solucionar el problema? En este caso no se requiere más información. ¿Existe algún problema o condiciones que deban cumplirse? Las únicas restricciones son que las medidas de la base y altura sean mayores a cero. Análisis del problema ejemplo Diseño del algoritmo En esta fase se define ¿cómo el programa resuelve el problema? Para ello, se describe paso a paso la solución del mismo, lo cual se conoce como algoritmo. Cuando el problema es grande se recomienda dividirlo en problemas más pequeños y resolver por separado cada uno de ellos. A esta metodología se le conoce como diseño descendente (top-down) o modular. Existen diferentes formas de representar un algoritmo, algunas formales como una fórmula matemática, o informales, como es el caso del lenguaje natural. Para continuar con el desarrollo del programa ejemplo, se planteará la solución como una secuencia de pasos conocida como pseudocódigo: Ejemplo de pseudocódigo 1. Obtener la medida de la base (𝑏) y la altura (ℎ) 2. Calcular: á𝑟𝑒𝑎 = 𝑏 ∗ ℎ 3. Imprimir el resultado (á𝑟𝑒𝑎) Calcula el área de un rectángulo Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 21 Los algoritmos en la programación. Como ya se mencionó, las computadoras necesitan recibir indicaciones en un formato entendible para ellas, con el fin de que realicen las acciones deseadas. Las indicaciones u órdenes se agrupan en un programa, al conjunto de programas se le conoce como software. Para analizar la estructura de un programa, éste "se puede dividir en dos partes que son: el formato de representación interno del programa, que constituye el lenguaje máquina o código ejecutable, y el formato de presentación externa, que es un archivo o un conjunto de archivos, que puede o no estar en un formato que puede ser leído por el usuario (es decir, en un formato que respeta las reglas)” (Juganaru, 2014, p.2). Para que la computadora realice las acciones deseadas, es necesario elegir el software más adecuado para escribir un programa que realice la acción deseada., a esta acción se le denomina programación, con ello, no se afirma que la programación es sólo la escritura de código, la programación implica “un conjunto de tareas que se deben cumplir, a fin de que el código que se escribió resulte correcto y robusto, y cumpla con el objetivo o los objetivos para los que fue creado.” (Ibídem) Para ello, es preciso realizar dos acciones dependiendo del tipo de problema a resolver o acciones a realizar: • “Conocer las herramientas, los formalismos y los métodos para transformar un problema en un programa escrito en un lenguaje (que posiblemente no será el lenguaje máquina), y para que dicho programa pueda ser transformado en un código ejecutable. • Saber transformar el problema inicial en un algoritmo y luego en un programa” (Ibídem). Para los casos de problemas muy generales, existen métodos conocidos que solo se adaptan a un problema en particular, el método es por lo general un algoritmo o una técnica de programación. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 22 La palabra algoritmo proviene del nombre de un matemático persa conocido como Mohammad Al-KhoWârizmi, nacido alrededor del 780 d. c. en KhoWârizm, de ahí su seudónimo. Se considera como el padre de la algoritmia porque definió las reglas paso a paso para sumar, restar, multiplicar y dividir números decimales. La traducción al latín de Al-Khwārizmī es algoritmi, que da origen a la palabra algoritmo (Joyanes & Zohanero, 2005). Según la RAE (2016) un algoritmo es un “Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema”, y también es “Método y notación en las distintas formas del cálculo”. Formalmente, en programación, un algoritmo se define como una secuencia finita de instrucciones precisas y eficaces para resolver un problema, que trabaja con uno o más datos (entrada) y devuelve un resultado (salida) (Viso & Peláez, 2007). Para llegar a la solución de un problema se requiere creatividad, ya que el programador sólo cuenta con la especificación del problema y su experiencia en resolverlos de una forma estructurada de inicio a fin. Existen dos maneras de representar un algoritmo: una gráfica, conocida como diagramas de flujo; y otra, similar a un lenguaje humano, la cual se denomina pseudocódigo. Los diagramas de flujo son una representación totalmente gráfica de un algoritmo que utiliza símbolos para representar las instrucciones y flechas para unirlas e indicar el orden en el que deben ejecutarse llamadas líneas de flujo, lo anterior hace más fácil seguir la secuencia de la ejecución de las instrucciones. Dichos símbolos fueron normalizados por el Instituto Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 23 Norteamericano de Normalización ANSI (American National Standards Institute, por sus siglas en inglés). Algunos de los símbolos más utilizados se muestran en el siguiente cuadro: Símbolo Descripción Terminal. Representa el inicio y el final de un algoritmo. Entrada y Salida (E/S). Representa la lectura de datos desde el dispositivo de entrada estándar, así como la impresión de datos en el dispositivo de salida estándar. Proceso. Representa cualquier tipo de operación que pueda originar un cambio de la información almacenada en memoria, asignaciones u operaciones aritméticas. Escribir. Despliega los textos o contenidos de las variables en cuestión. Decisión. Nos permite analizar una situación, con base en los valores verdadero y falso. Toma una decisión de las instrucciones que a continuación ejecuta el algoritmo. Conector. Sirve para enlazar dos partes cualesquiera del diagrama que están en la misma página.Línea de flujo. Indica el orden de la ejecución de las operaciones. La flecha indica cuál es la siguiente instrucción que se debe realizar. Conector. Conecta a dos puntos del diagrama cuando éstos se encuentran en páginas diferentes. Representa el inicio y el final de un programa. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 24 Llamada a subrutina. Llama a un proceso determinado o subrutina. Una subrutina es un módulo independiente del módulo principal, que realiza una tarea determinada y al finalizar regresa el control de flujo al módulo principal. Símbolos básicos de los diagramas de flujo A continuación, consulta el documento U1. Algoritmos y diagramas de flujo, en la sección Material de apoyo. A continuación, se muestra el diagrama de flujo del problema que hemos tomado como ejemplo en esta Unidad y que consiste en calcular el área de un rectángulo: Ejemplo de diagrama de flujo Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 25 El pseudocódigo es un lenguaje de especificación formal de algoritmos. La solución de un problema se representa de manera narrativa utilizando palabras claves, generalmente verbos, escritos en un lenguaje natural, que en nuestro caso será español. Es una de las representaciones de algoritmos más utilizadas por su parecido con el lenguaje natural y porque su codificación en un lenguaje de programación estructurado y modular como C es directa. En el ejemplo anterior se muestra el pseudocódigo escrito en solución al problema de calcular el área de un rectángulo. Un algoritmo también se puede expresar mediante una fórmula matemática, en el caso del ejemplo que hemos tratado, esta fórmula es: á𝑟𝑒𝑎 = 𝑏𝑎𝑠𝑒 × 𝑎𝑙𝑡𝑢𝑟𝑎 Se puede utilizar cualquiera de las dos representaciones para diseñar un algoritmo, pues en cualquiera de las dos se puede expresar un algoritmo estructurado, de tal manera que la más conveniente depende del estilo de cada programador. La forma de evaluar el correcto funcionamiento del pseudocódigo es a través de una prueba de escritorio. La prueba de escritorio consiste en que el programador siga los pasos descritos en el pseudocódigo simulando el comportamiento de la computadora. Para ello requiere definir un conjunto de datos de prueba que le permita evaluar todos los posibles resultados que se obtendrán una vez que se lleve a cabo todos los pasos descritos en el pseudocódigo. Para fines de comprobación y de familiarización del funcionamiento de un pseudocódigo se recomienda utilizar un número finito de datos y escribir las variables en una hoja de papel, para el caso de un Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 26 problema simple, para el desarrollo de sistemas más complejos existen herramientas más acordes para realizar esta comprobación. A continuación, se expone un ejemplo de prueba de escritorio considerando los datos del problema anterior. Datos de entrada Operación o instrucción a realizar Resultado Base, altura Área=base*altura Área 5, 10 5*10 50 En este ejemplo no se muestran variables porque se trata de un pseudocódigo; en el caso de verificar el funcionamiento del código de un programa, será necesario desglosar cada una de las variables que intervienen en el proceso. Implementación (codificación) El algoritmo no puede ser ejecutado por una computadora, por ello debe traducirse a un lenguaje de programación (como por ejemplo el lenguaje C) para obtener un programa fuente que se traduzca a lenguaje de máquina que pueda ser ejecutado por la computadora. En el siguiente cuadro se muestra la codificación del algoritmo en lenguaje C, por el momento no profundizaremos en la estructura y los componentes de este lenguaje, simplemente se expone este código a manera de ejemplo de lo que se produce en la fase de implementación o codificación. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 27 #include<stdio.h> #include<stdlib.h> main() { int b,h, area; printf("Ingresa la base y altura:"); scanf("%d %d", &b,&h); area = b * h; printf("Area = %d", area); } Ejemplo de Programa en lenguaje C que calcula área de un rectángulo. En la unidad 2 se estudiará con más detalle este tema abordando el lenguaje C. Validación y pruebas Esta fase se lleva a cabo una vez que se ha codificado el algoritmo previamente diseñado con el fin de verificar que su ejecución sea correcta. Existen diferentes formas de probar que la solución es correcta, algunas de ellas son formales y otras informales: las primeras se utilizan para garantizar que el programa o algoritmo siempre calcule el resultado deseado para cualquier conjunto de datos de entrada; en cambio, en las segundas sólo se prueba que funciona correctamente para algunos datos de entrada, tratando de encontrar posibles errores, en este caso no se puede garantizar que el programa o algoritmo calcule la salida correcta para cualquier conjunto de datos. En cualquiera de los dos casos, si se encuentra alguna falla se debe corregir y volver a realizar pruebas. Dado que el problema que estamos analizando como ejemplo es muy sencillo, si se ejecuta manualmente el programa o algoritmo relacionado para un caso Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 28 específico de rectángulo se observará que el resultado es correcto. En la siguiente figura se ilustra la ejecución del programa: Resultado de la ejecución del programa ejemplo Documentación Cualquier proyecto de software por la complejidad que tiene requiere que tanto las ideas principales como el desarrollo de principio a fin sea documentado con el fin de que se pueda entender la lógica del programa y de ser necesario se pueda modificar o darle mantenimiento posteriormente, sin tantas complicaciones. Es común que si se desea modificar un programa y no se tiene información acerca de cómo fue construido originalmente, sea más fácil volverlo a hacer desde el principio que intentar entender la lógica aplicada en un inicio. Uno de los mejores ejemplos de la importancia de la documentación es el software libre, en el cual colaboran diversos desarrolladores para su elaboración, teniendo el código fuente disponible para modificarlo a su conveniencia. Estos desarrolladores se encuentran en diferentes puntos geográficos del globo terráqueo e incluso varios hablan diferentes idiomas, así es que la documentación les permite entender lo que está haciendo cada uno y bajo qué método está trabajando. Como parte de la documentación también deben incluirse manuales de usuario y las normas de mantenimiento para que se haga un buen uso del software y éste se mantenga al día. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 29 Mantenimiento Esta fase tiene sentido una vez que fue terminada y liberada una primera versión del programa, misma que ya está siendo utilizada. En esta fase se actualiza y modifica dicho programa para corregir errores no detectados o para cambiar y/o agregar una nueva función. Siguiendo con nuestro ejemplo, se podría extender el programa ejemplo que calcula el área de un rectángulo para obtener también su perímetro: #include<stdio.h> #include<stdlib.h> main() { int b,h, area, perimetro; printf("Ingresa la base y altura:"); scanf("%d %d", &b,&h); perimetro = 2*b + 2*h; area = b * h; printf("Perimetro = %d", perimetro); printf("Area = %d", area); } Ejemplo de mejora al programa original incluyendo el cálculo del perímetro de un rectángulo En el programa se resaltan las instrucciones que se añadieron para calcular el perímetro. La metodología de programación sirve para desarrollar softwaredesde el inicio con su diseño hasta el final con su implementación, de ahí la importancia de entender las diferentes fases y las actividades involucradas en cada una de ellas, con el fin de dar una solución óptima al problema en cuestión. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 30 Cierre de la Unidad Al concluir esta primera unidad se abordó de manera general, las partes que integran una computadora y la manera en que cada una de ellas interactúa para obtener el resultado esperado por el usuario. Así mismo, se expusieron las diversas formas de comunicación con las máquinas a través de lo que se denominan lenguajes de programación y cómo los distintos paradigmas que existen permiten aplicar las opciones que resulten más favorecedoras para la resolución de los problemas que se nos planteen, distinguiendo los elementos de un programa y desarrollo del mismo mediante la programación. Es muy importante tener en mente que el desarrollo y puesta en marcha exitosa de un programa depende de que se siga metódicamente cada una de las fases involucradas en dicho proceso creativo, independientemente del lenguaje que se utilice. Lo anterior, nos permitirá diseñar algoritmos y soluciones óptimas bien estructuradas para responder a las necesidades de la industria en la que te desarrolles profesionalmente. Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 31 Fuentes de consulta • Cedano Olvera, M. A. Et al. (2014). Fundamentos de computación para ingenieros. México: Grupo Editorial Patria. • Jiménez, C. M. y Otero, C. B. (2013). Fundamentos de ordenadores: programación en C. Barcelona: Universitat Politécnica de Catalunya. • Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de datos. España: Mc Graw Hill. • Juganaru, M.M. (2014). Introducción a la programación. 1ª Ed. México: Editorial Patria. • Levine, G. (2001). Introducción a la Computación y a la Programación Estructurada. México: Mc Graw Hill. • Martínez Gil, F.A., y Martín Quetglás, G. (2003). Introducción a la programación estructurada en C. Valencia: Universitat de València • Mejía Mesa, A. (2004). Guía práctica para manejar y reparar el computador (p. 36-41). Bogotá: Panamericana Formas e Impresos. • Quero Catalinas, E. (2002). Sistemas operativos y lenguajes de programación. Madrid: Thomson Ediciones-Paraninfo. p.128-130 Unidad 1. Preparando el camino hacia la programación UNADM | DCEIT | FPR 32 • Rabasa Dolado, A., Santamaría Arana, L. (2004). Metodología de programación. Principios y aplicaciones. Alicante: Editorial Club Universitario. • RAE Real Academia Española (2016). Algoritmo. Recuperado de http://dle.rae.es/?id=1nmLTsh • Sánchez Montúfar, L.A. (2005). Informática. México: Pearson Educación • Winder, R. (1995). Desarrollo de software con C++. Madrid: Díaz de Santos. http://dle.rae.es/?id=1nmLTsh
Compartir