ORGANIZACION

Ciclo de desarrollo de un programa Planteamiento de un problema El problema es un determinado asunto o cuestión que requiere de una solución, entorno ala sociedad se trata de un asunto particular, que en cualquier momento que se solucione dará beneficios ala sociedad (un ejemplo, lograr disminuir la taza de pobreza de algunas) Análisis del problema existen toda una serie de fases por las que es necesario pasar desde que se plantea un problema hasta que se obtiene un programa de computador que lo resuelve; la finalidad fundamental de esta asignatura no es convertir a los alumnos en expertos en el tema pero es necesario que conozcan unos aspectos metodológicos mínimos de cara a desarrollar su trabajo con computadores de una forma eficaz (y más agradable). En una primera fase, análisis, se estudia el problema a resolver: qué datos precisan ser introducidos para obtener la solución, en qué consistirá dicha solución, qué errores puede presentar, etc. En caso de disponerse de más información relativa al problema, por ejemplo cualquier tipo de fórmula o expresión matemática también se incluiría como información de análisis. Un aspecto importante es que durante el análisis no se busca una forma de resolver el problema, tan sólo se trata de comprender la naturaleza del mismo; una forma práctica de enfocar el análisis es dividiéndolo, a su vez, en fases de entrada, proceso, salida y condiciones erróneas. Análisis: Condiciones de error: Si el dato introducido no es válido (número negativo o cero) debería indicarse: “Dato no válido.” Nivel 1 Determinar si un año indicado por el usuario es o no un año bisiesto. 2.1. Solicitar un año al usuario. 2.2. Determinar si el año es bisiesto o no. Nivel 2 2.3. Indicar al usuario el resultado obtenido. Nivel 3 2.1.1. Dar un mensaje al usuario solicitando un año. 2.1.2. Leer el año. 2.1.3. Si el año no es válido indicárselo al usuario. 2.2.1. Si el año no es múltiplo de 4 no es bisiesto. 2.2.2. Si el año es múltiplo de 4 pero no de 100 es bisiesto. 2.2.3. Si el año es múltiplo de 400 es bisiesto. Elaboración de algoritmos Algoritmo: Un algoritmo es una secuencia de pasos que es llevado a cabo de forma mecánica y sistemática por un actor que se desenvuelve en un entorno dado para resolver un problema determinado en un tiempo finito. Esa podría ser una definición válida de algoritmo, otra posible definición sería la siguiente: Un algoritmo es una combinación de instrucciones combinadas de forma adecuada para resolver un determinado problema en una cantidad finita de tiempo. Cada instrucción es una indicación sencilla y no ambigua. Características de un algoritmo Un algoritmo resuelve un problema específico: subir una escalera, obtener una tortilla de papas o hacer una multiplicación. Un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado: una persona cuyo universo inmediato se reduce a su propio cuerpo y una escalera; un cocinero con una sartén, huevos, papas, aceite, sal y cebolla; o un niño con lápiz y papel. Un algoritmo consta de una serie de pasos que deben llevarse a cabo siguiendo una secuencia marcada: algunos de los pasos en uno de los algoritmos anteriores serían: dar la vuelta a la tortilla, batir los huevos, pelar las papas o romper los huevos; dichos pasos deben aplicarse en un orden prefijado y no de cualquier manera. Un algoritmo se aplica de forma mecánica: un algoritmo no precisa decisiones subjetivas ni creatividad en su aplicación, cualquiera con una receta adecuada para obtener tortilla de papas logrará una tortilla de papas. Sin embargo, sí es necesario un acto creativo para desarrollar un nuevo algoritmo. Un algoritmo termina en un tiempo finito: todos los algoritmos deben finalizar, pueden tardar más o menos tiempo en lograr un resultado pero dicho tiempo debe ser finito. “ALGORITMO”, ¿por qué denominamos “algoritmos” a los algoritmos y no “recetas” o “combinaciones de indicaciones sencillas y no ambiguas...”? El término proviene de Mahommad ibn Musa al-Khowârizmî (Mahommed, hijo de Musa, natural de Kharizm), matemático persa del siglo IX; las matemáticas le deben la introducción del sistema de numeración actual y del álgebra. En su libro De numero indiorum (Sobre los números hindúes) proporciona las reglas para realizar las operaciones aritméticas (con los nuevos números, por supuesto), dichas reglas se denominaron “reglas de al-Khowârizmî” y, por deformación “algoritmos”, haciéndose extensivo el término a cualquier conjunto de reglas para resolver un problema determinado. Diagrama de flujo Organigramas (Diagramas de Flujo) Los organigramas o diagramas de flujo permiten describir los algoritmos de forma gráfica; para ello utilizan una serie de bloques que indican distintas circunstancias y flechas que muestran bajo qué condiciones se pasa de un bloque a otro. Algunos de los símbolos son los siguientes: 

Terminal Punto de comienzo o final de un programa.

Entrada/Salida Información introducida para su proceso o generada como resultado. 

Decisión Operación que determina varios caminos alternativos a seguir.  Proceso Cualquier proceso distinto de la E/S o las decisiones. Los organigramas presentan varias ventajas frente al lenguaje natural: • Los símbolos son universales. • Son menos propensos a la ambigüedad. • Por estar basados en un número pequeño de bloques y reglas para su empleo permiten delimitar mejor los algoritmos. • Se aproximan más a la forma en que trabaja el computador. Sin embargo: • El hecho de emplear símbolos supone que una persona que desconozca los símbolos puede tener dificultades para comprender el algoritmo o no entenderlo en absoluto. • Aunque los símbolos son universales el texto que se coloca en su interior sigue siendo lenguaje natural. • La representación gráfica puede resultar bastante tediosa y en el caso de algoritmos complejos • Extremadamente confusa. • Un computador no es capaz de utilizar una representación visual como descripción de un algoritmo. Actualmente, los organigramas no son muy utilizados aunque para mostrar el funcionamiento de algoritmos sencillos siguen siendo resultando prácticos. Seudocódigo El seudolenguaje y/o pseudocódigo pretende aunar en un solo tipo de representación las ventajas del lenguaje natural y de los organigramas sin ninguno de sus problemas; por tanto, el pseudocódigo: • Es fácilmente comprensible para una persona que lo vea por vez primera. • Está bien delimitado. • Elimina las ambigüedades del lenguaje natural. • Se representa de una forma compacta. De esta forma, el pseudocódigo se suele ver como un subconjunto de un lenguaje natural que proporciona un número limitado de operaciones para la construcción de algoritmos; la única finalidad del pseudocódigo (como de los organigramas) es la comunicación entre seres humanos. Codificación Un lenguaje de programación comparte las mismas características que el pseudocódigo pero, además de ser comprensible para un ser humano, resulta comprensible para un computador; esto es, un algoritmo descrito mediante un lenguaje de programación puede ser ejecutado por una máquina.  A continuación se muestra el algoritmo anterior descrito en el lenguaje de programación PASCAL:  program segundoGrado Var a,b,c : Integer ;  Begin writeln *,'Deme los coeficientes y resolveré una ecuación de 2º grado' writeln *, '¿Cuánto vale A?' <span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">readln *, a <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">writeln *, '¿Cuánto vale B?' <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">readln *, b <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">writeln *, '¿Cuánto vale C?' <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">readln *, c <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">discr = b*b-4*a*c <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">if (discr==0) then <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">s = -b/(2*a) <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">writeln *, 'Sólo hay una solución: ', s <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">else <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">if (discr>0) then <span style="line-height: normal; margin: 0cm 0cm 0pt 70.8pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">s1 = (-b+sqrt(discr))/(2*a) <span style="line-height: normal; margin: 0cm 0cm 0pt 70.8pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">s2 = (-b-sqrt(discr))/(2*a) <span style="line-height: normal; margin: 0cm 0cm 0pt 70.8pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">writeln *, 'Las soluciones son: ',s1,s2 <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">else <span style="line-height: normal; margin: 0cm 0cm 0pt 70.8pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">writeln *, 'No hay soluciones reales' <span style="line-height: normal; margin: 0cm 0cm 0pt 35.4pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">end if <span style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-align: justify; text-indent: 35.4pt;"><span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">end if   <span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;">end <span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;"> <span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;"> <span style="color: navy; font-family: 'Arial','sans-serif'; font-size: 10pt;"> Diseño 2.3.1. Si el año es bisiesto dar el mensaje “El año es bisiesto”. 2.3.2. Si el año no es bisiesto dar el mensaje “El año no es bisiesto”. Si el problema es muy sencillo puede realizarse un organigrama que describa el algoritmo que lo resuelve, en caso contrario es preferible utilizar un pseudocódigo; es necesario decir que el pseudocódigo también se desarrollar por niveles, de hecho, por cada caja/problema anterior debería obtenerse un pseudocódigo que lo resuelva. Codificación Problema Pseudocódigo del algoritmo que lo resuelve Determinar si un año indicado por el usuario es o no un año bisiesto. Solicitar un año al usuario Determinar si el año es bisiesto o no   Indicar al usuario el resultado obtenido Solicitar un año al usuario escribir “Por favor, deme un año” leer AÑO si AÑO = 0 entonces escribir “El año no es válido” si no   determinar si el año es bisiesto o no    indicar al usuario el resultado obtenido fin_si Determinar si el año es bisiesto o no si el año es múltiplo de 4 entonces si el año es múltiplo de 400 entonces BISIESTO ! si   si no    si el año es múltiplo de 100 entonces BISIESTO ! no   si no    BISIESTO ! si   fin_si fin_si si no   BISIESTO ! no   fin_si Indicar al usuario el resultado obtenido si BISIESTO = si entonces escribir “El año es bisiesto” si no   escribir “El año no es bisiesto” fin_si Compilación Una vez hecho esto es posible obtener el pseudocódigo completo y detallado que resuelve el problema: escribir ‘Por favor, deme un año’ leer AÑO si AÑO = 0 entonces escribir ‘El año no es válido’ si no   si el año es múltiplo de 4 entonces si el año es múltiplo de 400 entonces BISIESTO ! si   si no    si el año es múltiplo de 100 entonces BISIESTO ! no   si no    BISIESTO ! si   fin_si fin_si si no   BISIESTO ! no   fin_si si BISIESTO = si entonces escribir ‘El año es bisiesto’ si no   escribir ‘El año no es bisiesto’ fin_si fin_si