Вы находитесь на странице: 1из 25
ay FASES EN LA RESOLUCION DE PROBLEMAS El proceso de resolucién de un problema con una computadora conduce a la escritura de un progra- ma y a su ejecucién en la misma. Aunque el proceso de diseftar programas es —esencialmente— un proceso creativo, se puede considerar una serie de fases o pasos comunes, que generalmente deben se- guir todos los programadores, Las fases de resolucién de un problema con computadora son: + Anilisis del problema. + Diseiio del algoritmo, * Codificacién, + Compilacién y ejecucién. + Verificaciéa. + Depuracion. + Mantenimiento, + Documentacién. Constimyen el ciclo de vida del software y las fases o etapas usuales son: + Andlisis. El problema se analiza teniendo presente la especificacisn de los requisitos dados por el cliente de la empresa © por la persona que encarga el programa, + Diseo, Una vez analizado et problema, se disefia una soluci6n que conduciré a un algoritmo gue resuelvu el problema. * Codificacién (implementaci6n), La solucién se escribe en Ta sintaxis del lenguaje de alto nivel} (por ejemplo, C) y se obtiene un programa. + Compilacién, ejecucién y verificacién, El programa se ejecuta, se comprueba rigurosamemte y se eliminan todos los errores (denominados < bugs», en inglés) que puedan aparecer. + Depuracién y mantenimiento. fl programa se actualiza y modifica cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de sns usuarios. + Documentacién. Escricura de las diferentes fases del ciclo de vida del software, esencialmente el anilisis, diseito y codificacin, unidos a manuales de usuario y de referencia, asi como nor- mas para el mantenimiento. Las dos primeras fases conducen a un disefio detallado escrit tercera etapa (codificacién) se implementa’ el algoritmo en un cédigo escrito en un lenguaje de pro- gramaci6n, reflejando las ideas desarrolladas en las fases de anilisis y diseiio, La fase de compilacidn y ejecucién traduce y ejecuta el programa. En las fases de verificacion y depuracién el programador busca errores de las tapas anteriores y los elimina. Comprobaré que mien- tras mas tiempo se gaste en Ia fase de andlisis y disefio menos se gastard en la depuracidn del progra- ‘ma, Por ttimo, se debe realizar a documentacién del programa. ‘Antes de conocer las tareas a realizar en cada fase. vamos a considerar el concepto y significado de la palabra algoritmo. La palabra algoritmo se deriva de la traduccion al latin de la palabra AlkhO- warizmi?, nombre de un matemstico y astrénomo arabe que escribié un tratado sobre manipulacién de miimeros y ecuaciones en el siglo Ix. Un algoritmo es un método para resolver un problema median- te una serie de pasos precisos, definidos y finitos. forma de algoritmo. Durante ia Caracteristicas de un algoritmo + preciso (indicar el orden de realizaci6n en cada paso), F © dofinido (si se sigue dos veces, obtiene el mismo resultado cada vez), & _* finito (iene fin; un nimero determinado de pasos). ee rican pT AT OE AO Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que utilizan algoritmos se denominan métodos algoritmicos, en oposicién a los métodos que implican algiin juicio o inter- pretacion que se denominan métodos heuristicos. Los métodos algoritmicos se pueden implementar en computadoras: sin embargo, los procesos heuristicos no han sido convertidos facilmente en las com- putadoras. En los diltimos afios las técnicas de inteligencia artificial han hecho posible la impleimennta- cién del proceso heuristico en computadoras. Ejemplos de algoritmos son: instrucciones para montar en una bicicleta, hacer una receta de coci- na, obtener el maximo comiin divisor de dos niimeros, ete. Los algoritmos se pueden expresar por for- mulas, diagramas de flujo o N-S y pseudocddigos. Esta ttima representacién es la mas utilizada en lenguajes estructurados como C. 2.1.1. Analisis del problema La primera fase de la resolucién de un problema con computadora es el andlisis del problema, Esta fase requiere una clara definicién, donde se contemple exactamente lo que debe hacer el programa y el resultado 0 solucién deseada. Dado que se busca una solucidn por computadara, se precisan especificaciones detalladas de en- trada y salida, La Figura 2.1 muestra los requisitos que se deben definir en el andlisis. Resolucién deun _— problema 1 ss ca Andlisis Disefio Resolucion dal det del problema con problema algoritmo ‘somputadora Figura 2.1. Analisis del problema. Para poder definir bien un problema es conveniente responder a las siguientes preguntas: + {Qué entradas se requieren? (tipo y cantidad). + (Cual es Ia salida deseada? (tipo y cantidad). * {Qué método produce la salida deseada? abres coste original Entrada} vida util valor de recuperacién depreciacién anual por aiio Salida void main() i double Coste, Depreciacién, valor _Recuperacién, Valor_actual, Acumulado, valor_anval; int Anio, Vidaitil; puts("Introduzea coste, valor recuperacién y vida util"); scanf("SLf 81f $1f*, sCoste, &Valor,Recuperacién,sVida Util); puts ("Introduzca afio actual"); scant "td", gAnie) : valor_Actual = Coste; Depreciacién = (Coste-Valor_Recuperacién) /Vida Util; Acumulado = 0; puts{ "Ano Depreciacién Dep. Acummlada"); while (Anio < vida 6til) 4 Acumulado = Acumulado + Depreciacién; Valor_Actual = Valor_Actual - Depreciacién; printi(*Afio: td, Depreciacién:$.21f, %.21f Acumulada" Anio, Depreciacién, Acumulado) ; tam ~ anio + 1; ’ s } ado, ia tarts Perc: Documentacién interna oF Como se verd mas tarde, la documentaci6n de un programa se clasifica en interna y externa. La do- cumentacion interna es la que se ineluye dentro del c6digo del programa fuente mediante comenta- ios que ayudan a 1a comprensidn del e6digo. Todas las lineas de programas que comiencen con un simbolo /* son comentarios. El programa no los necesita y 1a computadora los ignora, Estas Iineas de comentarios sélo sirven para hacer los programas mds féciles de comprender. El objetivo del progra- mador debe ser escribir c6digas sencillos y limpios. Debido a que las méquinas actuales soportan grandes memorias (256 MB 0 512 MB de memoria central minima en computadoras personales) no es necesario recurrir a téenicas de ahorro de memo- tia, por lo que es recomendable que incluya el mayor numero de comentarios posibles, pero, eso sf, que sean significativos. 2.1.5. Compilacién y ejecucién de un programa 2 Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducirlo en memoria mediante el teclado y almacenarlo posteriormente en un disco, Esta operacién se realiza con un pro grama editor, posteriormente el programa fuente se convierte en un archive de programa que se guar- da (graba) en disco. El programa fuente debe ser traducido a lenguaje maquina, este proceso se realiza con el com- pilador y el sistema operativo que se encarga précticamente de la compilacion, Si tras la compilacién se presentan errores (errores de compitacién) en el programa fuente, es pre- ciso volver a editar el programa, corregir los errores y compilar de nuevo. Este proceso se repite has- ta que no se producen errores, obtenigndose el programa objeto que todavia no es ejecutable direc- tamente. Suponiendo que no existen errores en el programa fuente, se debe instroir al sistema operativo para que realice la fase de montaje o enlace (link), carga, del programa objeto con las librerfas del programa del compilador. El proceso de montaje produce un programa ejecutable. La Figura 2.5 des- cribe el proceso completo de compilacién/ejecucién de un programa. UCP ‘Memoria externa EIDCIDE, Editor Teclado de textos ad a) Mernoria : externa f UCP Sy ‘Compilador| er@mUood .T.F.S b 1 Memoria : externa Figura 2.5. Fases de la compilaciér/ejecucion de un programa: a) edicién; b} compilacién; c} montaje 0 enlace. Cuando el programa ejecutable se ha creado, se puede ya ejecutar (correr o rodar) desde el siste- ma operativo con s6lo teclear su nombre (en e] caso de DOS). Suponiendo que no existen errores du- rante la ejecucién (llamados errores en tiempo de ejecucién), se obtendrd la salida de resultados del programa. Las instrucciones u drdenes para compilar y ejecutar un programa en C puede variar segiin el tipo de compilador. Asi el proceso de Visual C++ 6 es diferente de C bajo UNIX o bajo Linux, 2.4.6. Verificacién y depuracién de un programa La verificacién de un programa es el proceso de ejecucién det programa con una amplia variedad de datos de entrada, lamados datos de test 0 prueba, que determinarén si el programa tiene errores («bugs»). Para realizar la verificaciGn se debe desarrollar una amplia gama de datos de test: valo- es normales de entrada, valores extremos de entrada que comprueben los limites del programa y va- lores de entrada que comprueben aspectos especiales dle! programa, La depuracién es el proceso de encontrar los errores del programa y comregir o elimninar dichos errores. Cuando se ejecuta un programa se pueden producir tres tipos de errores: L._ Errores de compilacién. Se producen normalmente por un uso incorrecto de las reglas del len- guaje de programacién y suelen ser errores de sintaxis. Si existe un error de sintaxis, la com- putadora no puede comprender fa instrucciGn, no se obtendra el programa objeto y el compi- Iador imprimird una lista de todos los errores encontrados durante fa compilacién. 2. Errores de ejecucién. Estos errores se producen por instrucciones que la computadora puede comprender pero no ejecutar. Ejemplos tipicos son: division por cero y raices cuadradas de ntimeros negativos. En estos casos se detiene Ia ejecucién del programa y se imprime un men- saje de error. 3. Errores ldgicos. Se producen en la I6gica del programa y la fuente del error suele ser el di- sefio del algoritmo. Estos errores son los més diffcites de detectar. ya que el programa pue- de funcionar y no producir errores de compilacién ni de ejecucién, y slo puede advertir el error por la obtencién de resultados incorrectos. En este caso se debe volver a la fase de di- sefio del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y ejecutar una vez: mas. Documentacién y mantenimiento La documentacién de un problema consta de las descripciones de los pasos a dar en el proceso de re- solucién de un problema. La importancia de la documentacién debe ser destacada por su decisiva in- fluencia en el producto final. Programas pobremente documentados son dificiles de leer, ms diffciles de depurar y casi imposibles de mantener y modificar. La docimentacién de un programa puede ser interna y externa. La documentacién interna es la contenida en lineas de comeniarios. La documentacién externa incluye andlisis, diagramas de flujo y/o pseudocddigos, manuales de usuario con instrucciones para ejecutar el programa y para interpretar los resultados. La documentacién es vital cuando se desea corregir posibles errores foturos 0 bien cambiar el pro- ‘grama, Tales cambios se denominan manienimiento del programa. Después de cada cambio la docu- mentacién debe ser actualizada para facilitar cambios posteriores. Es préctica frecuente numerar las sucesivas versiones de los programas 1.0, 1.1, 2.0, 2.1, ete. (Si los cambios introducidos son impor- lantes, se varfa el primer digito [1.0, 2.0...], en caso de pequeiios cambios sélo se varia el segundo di- gito (2.0, 21...]) 2.2, PROGRAMACION MODULAR £S La programacién modular es uno de los métodos de disefio mas flexible y potentes para mejorar la pro- ductividad de un programa. En programacién modular el programa se divide en madulos (partes inde- pendientes), cada una de las cuales ejecuta una Gnica actividad 0 tarea y se codifican independientemen- fe de otros médulos, Cada uno de estos médulos se analizan, codifican y ponen a punto por separado. ‘Cada programa contiene um médulo denominado programa principal, que controla todo lo que suce- de; se transfiere el control a submcdulos (posteriormente se denominarén subprogramas}, de modo que ellos puedan ejecutar sus funciones; sin embargo, cada submédulo devuelve el control al médulo prin cipal cuando se haya completado su tarea. Si la tarea asignada a cada submédulo es demasiado comple- |ja, éste deberd romperse en otros médulos mas pequeiios. El proceso sucesivo de subdivisién de médu- {os continga hasta que cada middulo tenga solamente una tarea especifica que ejecutar. Esta tarea puede ser entrada, salida, manipulacién de datos, control de otros médulos © alguna combinacién de éstos, ‘Un modulo puede transferir temporalmente (bifurcar) el control a oro médulo; sin embargo, cada mé- dulo debe eventualmente devolver el control al médulo del cual se recibe originalmente el control. Los médulos son independientes en el sentido en que ningiin médulo puede tener acceso directo a cualquier otro médulo excepto el médulo al que Hama y sus propios submddulos. Sin embargo, tos resultados producidos por un médulo pueden ser utilizados por cualquier otro médulo cuando se trans- fiera a ellos e] control. at Riz 3 2 Méduto 1 Médulo 2 ‘Médulo 8 Médulo 4 Médulo 11 Médulo 12 Médulo 31 Médulo 41 Médulo 42 . a Médulo 21 Médulo 22 h Médulo 221) | Médulo 222 Figura 2.6. Programacién modular. bofezid 6.6.5 Dado que los médutos son independientes. diferentes programadores pueden trabajar simultanea- mente en diferentes partes del mismo programa. Esto ceducira el tiempo del diseito det algoritmo y posterior codificacién del programa. Ademas, un médulo se puede modificar radicalmente sin afectar a otfos médulos, incluso sin akerar su funcién principal. La descomposicién de un programa en médulos independientes més simples se conoce también como el método de «divide y venceras» (divide and conquer). Se disefia cada médulo con indepen- dencia de los demés, y siguiendo un método ascendente 0 descendente se Hegard hasta la descompo- sicién final del problema en médulos en forma jerdrquica. ve 2.3, PROGRAMACION ESTRUCTURADA Los términos programacién modular, programacién descendente y programacién estructurada se in- trodujeron en 1a segunda mitad de la década de Jos sesenta y a menudo sus términos se utilizan como sinénimos aunque no significan lo mismo, La programacién modular y descendente ya se ha exami nado anteriormente. La programacién estructurada significa escribir va. programa de acuerdo a Tas si- ‘guientes reglas: + El programa tiene un diseiio modular, *+ Los médulos son diseiiados de modo descendente. + Cada médulo se codifica utilizando las tres estructuras de control bésicas: secuencia, seleccién y repeticion. a Si esta familiarizado con lenguajes como BASIC, Pascal, FORTRAN o C, la programacién estructurada significa también programacién sin GOTO (C no requiere el uso de la sentencia GOTO). 5 El término programacién estructurada se refiere a un conjunto de técnicas que han ido evolucjo- nando desde los primeros trabajos de Edgar Dijkstra. Estas técnicas aumentan considerablementg la productividad del programa reduciendo en elevado grado el tiempo requetide para escribir, verificar, depurar y mantener los programas. La programacién estructurada utiliza un mimero limaitado de es- tructuras de control que minimizan la complejidad de los programas y, por consiguiente, reducen Jos errores; hace los programas mis féciles de escribir, verificar, leer y mantener. Los programas deben estar dotados de una estructura. sib es Rea + recursos abstractos, © diseito descendente (top-down), + estructuras bisicas. 2.3.1, Recursos abstractos es La programacién estructurada se auxilia de los recursos abstractos en Iugar de los recursos coneretos de que dispone un determinado lenguaje de programacién. Descomponer un programa en términos de recursos abstractos —segin Dijkstra— consiste en des- componer una determinada accién compleja en términos de un atimero de acciones mas simples ca- paces de ejecutarlas 0 que constituyan instrucciones de computadoras disponibles. 2.3.2. Disefio descendente (top-down) El disefio descendente (top-down) es el proceso mediante el cual un problema'se descompone en una serie de niveles o pasos sucesivos de refinamiento (stepwise). La metodologia descendente consiste en efectuar una relaci6n entre las sucesivas etapas de estructuracién de modo que se relacionasen unas con otras mediante entradas y salidas de informacién. Es decir. se descompone el problema en etapas © estructuras jerérquicas, de fortna que se puede considerar cada estructura desde dos puntos de vis- ta: (qué hace? y jcdmo lo hace? Si se considera un nivel » de refinamiento, las estructuras se consideran de la siguiente ma- era: a t Nivel n: desde el exterior Nivel a + 1: Vista desde el interior ° ~ glo que hace?» «gcdmo jo hace?» an a El diseffo descendente se puede ver en Ia Figura 2.7. 7 ays © Figura 2.7. Disefio descendente. 2.3.3, Estructuras de control Las estructuras de control de un lenguaje de programacién son métodos de especificar el orden en que Ias instrucciones de un algoritmo se ejecutarsn, Et orden de ejecucién de las sentencias (Lenguaje) 0 instrucciones determinan el flujo de conirol. Estas estructuras de control son, por consiguiente, fun- damentales en los lenguajes de programacién y en los disefios de algoritmos, especialmente los pseu- docédigos. a Las tres estructuras de control basico son: + secuencia + seleccion + repeticion Me xy se estudian en los Capitulos 4 y 5. La programacién estructurada hace Ios programas més faciles de escribir, verificar, leer y mante- ner; utiliza un otimero limitado de estructuras de control que minimizan a cornplejidad de los pro- blemas. 2.3.4. Teorema de la programacién estructurada: estructuras basicas En mayo de 1966, Bohm y Jacopini demostraron que wn programa propio puede ser escrito utilizan- do solamente tres tipos de estructuras de comol. * secuenciales, i * selectivas, + repetitivas. Un programa se define como propio si cumple las siguientes caracteristica + Posee un solo punto de entrada y uno de satida o fin para comrol del programa, men + Existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las partes del programa. + Todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin). Los Capitulos 4 y 5 se dedican al estudio de las estructuras de control selectivas y repetitivas. © a programacién estructurada significa: + El programa completo tiene un diseto modular + Los médulos se disefian con metodologia descendente (puede hacerse también ascen- dente), + Cada médulo se codifica utilizando las tres estructuras de control bésieas: secuenciales, selectivas y repetitivas (ausencia total de sentencias GOTO), + Estructuracién y modularidad son conceptos complementatios (se solapan). 2.4. CONCEPTO Y CARACTERISTICAS DE ALGORITMOS El objetivo fundamental de este texto es ensefiar a resolver problemas mediante una computadora. El programador de computadora es antes que nada una persona que resuelve problemas, por lo que para llegar a ser un programador efica7 se necesita aprender a resolver problemas de un modo riguroso y sistemdtico. A lo largo de todo este libro nos referiremos a la metodologta necesaria para resolver pro- blemas mediame programas, conceplo que se denomina metodologia de la programacién. El eje cen- tral de esta metodologia es el concepto, ya tratado, de algoritmo. Un algoritmo es un métode para resolver un problema. Aunque 'a popularizacién del término ba Regado con el advenimiento de 1a era informatica, algoritmo proviene de Mohammed al-KhoWaric- mi, matemético persa que vivié durante el siglo 1X y alcanz6 gran reputaciGn por el enunciado de las reglas paso a paso para sumar, restar, multiplicar y dividir numeros decimales; la waduccién al latin del apellido en la palabra algorisnues derivé posteriormente en algoritmo. Euclides, el gran matemé- tico griego (del siglo IV a.C.) que invent6 un método para encontrar el miximo comiin divisor de dos niimeros, se considera con Al-Khowarizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos). El profesor Niklaus Wirth —inventor de Pascal, Modula-2 y Oberon— titulé uno de sus mas fa~ mosos libros, Algoritmos + Estructuras de datos = Programas, significdndonos que sélo se puede Me- gar a realizar un buen programa con el disefio de un algoritmo y una correcta estructura de datos, Esta ecuacién sera una de las hipétesis fundamentales consideradas en esta obra. La resolucién de un problema exige el diseiio de un algoritmo que resuelva el problema pro- puesto, Diseno Programa Problema *| dol algoritmo de computadora Figura 2.8. Resolucion de un problema. Los pasos para Ja resolucidn de un problema son: 1. Disefo del algorinmo, que describe 1a secnencia ordenada de pasos —sin ambigiiedades— que conducen a la solucién de un problema dado. (Andlisis del problema y desarrollo del algorit- mo.) 2. Expresar el algoritmo como un programa en un lenguaje de programacidn adecuado. (Fase de codificacién.) . 3. Bjecucién y vatidacién del programa por a computadora. cAEE 2 Para liegar a la realizacién de un programa es necesario el disefio previo de un algoritmo, de modo que sin algoritmo no puede existir un programa, Los algoritmos son independientes tanto del lenguaje de programacién en que se expresan como de fa computadora que los ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferemte de programacién y ejecutarse en una computadora distinta; sin embargo, el algoritmo sera siempre ef mismo. Asf, por ejemplo, en una analogia con fa vida diaria, una receta de un plato de co- ccina se puede expresar en espaitol, inglés 0 franeés, pero cualquiera que sea el lenguaje, los pasos para 1a elaboraci6n del plato se realizardn sin importar el idioma det cocinero. En la ciencia de la computacién y en Ta programacién, los algoritmos son més importantes que los Jenguajes de programacién o las computadoras. Un lenguaje de programaciGn es tan s6lo un medio para expresar un algoritmo y una computadora es slo un procesador para ejecutarlo. Tanto el lenguaje de programacién como la computadora son los medios para obtener un fin: conseguir que el algorit- mo se ejecute y se efectie el proceso correspondiente. Dada la importancia del algoritmo en la ciencia de 1a computacién, un aspecto muy importante seré el diseno de algoritmos. A \a ensefianza y prictica de esta tarea se dedica gran parte de este libro. El disefio de la mayoria de los algoritmos requiere creatividad y conocimientos profundos de la técnica de la programacién. En esencia, la solucién de un problema se puede expresar mediante un algoriimo. . KiB, 2.4.1, Caracteristicas de los algoritmos Las caracteristicas fundamentates que debe cumplir todo algoritmo son: + Un algoritmo debe ser preciso e indicar el orden de realizacién de cada paso. + Un algoritino debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. + Un aigoritmo debe ser finito, Si se sigue un algoritmo, se debe terminar en algdin momento; 0 sea, debe tener un niimero finito de pasos. 2 La definicién de un algoritmo debe describir ires partes: Entrada, Proceso y Salida. En el algorit- mo de receta de cocina citado anieriormente se tendra: te Entrada: ingtedientes y utensilios empleados. Proceso: elaboracién de la receta en la cocina. ars Salida; terminacién del plato (por ejemplo, cordero).. ee 24.2, ‘Una computadora no tiene capacidad para solucionar problemas mas que cuando se le proporcionan Jos sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la mé- efio del algoritmo ‘quina constituyen, como ya conocemos, el algoritmo. La informacién proporeionada al algoritmo constituye su entrada y la informacién producida por el algoritmo constituye su salida. Los problemas complejos se pueden resolver més eficazmente con la computadora cuando’se rom- pen en subproblemas que sean mas ficiles de solucionar que el original. Este método se suele deno- minar divide y vencerds (divide and conquer) y consiste en dividit un problema complejo en otros més simples. As‘, el problema de encontrar la superticie y la longitud de un circulo se puede dividir en tres, problemas mas simples o subproblemas (Figura 2.9). ‘Superficie. ylongitud de circunferencia 9d nized) ilele Céleulo “Salida fe fe superficie | de longitud datos tS ‘So resultados Entrada sprer*2|lLeerere Salida Salida Salida radia (R) S=PI*R°2/|L=2*PI*R R Ss L Figura 2.9. Refinamiento de un algoritmo. 2.5. La descomposicién del problema original en subproblemas més simples y a continuacién dividir estos subproblemas en otros més simples que pueden ser implementados para su solucién en la com- putadora se denomina disefio descendente (top-down design). Notmalmente los pasos diseftados en el primer esbozo del algoriumo son incompletos e indicardin s6io unos pocos pasos (un maximo de doce aproximadamente). Tras esta primera descripcién, éstos se amplian en una descripcién més detallada con més pasos especificos. Este proceso se denomina refinamiento del algoritmo (stepwise refinement). Para problemas complejos se necesitan con frecuencia diferentes niveles de refinamiento antes de que se pueda obtener un algoritmo claro, preciso y completo. El problema de calculo de Ia circunferencia y superficie de un citculo se puede descomponer en subproblemas mis simples: (1) leer datos de entrada, (2) catcular superficie y longitud de circunfe- tencia y (3) escribir resultados (datos de salida). : ‘Subproblema Refinamiento eer radio leer radio 3. af no proyectan “Herry Potter" entonces 3.1, decidir otra actividad 3.2. bifurcar al paso 7 si_no 3.3. ir al cine fin. : ei hay cola entences ie so de 4.1. ponerse en ella 4.2, mientras haya personas delante hacer 4.2.1. avanzar en la cola fin_mientre fin_ei shat 5. si hay localidades entonces ” 5.1, comprar una entrada 4, itt 5.2. pasar a la sala wey 5.3. localizar la(s) butaca(s) 7 5.4, mientras proyectan la pel{cula hacer 5.4.1. ver la pelicula fin_mientras 5.5. abandonar el cine 8{_no 5.6. refunfuflar coe fin_si 6. volver a casa 7, fin 8 DE En el algoritmo anterior existen diferentes aspectos a considerar. En primer lugar, ciertas palabras reservadas se han escrito deliberadamente en negrita (mientras, si no; etc.). Estas palabras describen Tas estructuras de control fundamentales y procesos de toma de decisiGn en el algoritmo, Estas inclu- yen los conceptos importantes de seleccidn (expresadas por si-entonces-si_no if-then-else) y de repe- ticidn (expresadas con mientras-hacer 0 a veces repetir-hasta e iterar-fin_iterar, en inglés, while-do ¥ repeat-until} que se encuentran en casi todos Jos algoritmos, especialmente los de proceso de datos. La capacidad de decisién permite seleccionar alternativas de acciones a seguir o bien la repeticién wna y otra vez de operaciones basicas. ai proyectan la pelicula seleccionada ir al cine si_no ver la television, ir al ftitbol o ieer el perisdico mientras haya personas en la cola, ir avanzando repetidamente hasta llegar a la taquilla oe Otro aspecto a considerar es el método elegido para describir los algoritmos: empleo de indenta- cidn (sangrado 0 justificacién) en eseritura de algoritmos. En la actualidad es tan importante la escri- tura de programa como su posterior lectura, Ello se facilita con Ia indentacién de las acciones inte- tiores a las estructuras fundamentales citadas: sclectivas y repetitivas. A lo largo de todo el libro la indentacién o sangrado de los algoritmos ser norma constante. Para terminar estas consideraciones iniciales sobre algoritmos, describiremos las acciones necesa- rias para refinar el algoritmo objeto de nuestro estudio; para ello analicemos la accién Localizar la{s) butaca(s) . Si los nimeros de Ios asientos estén impresos en la entrada, la accién compuesta se resuelve con el siguiente algoritmo: 1. inicio //algoritme para encontrar la butaca del espectader 2. caminar hasta llegar a la primera fila de butacas 3. repetir compara mimero de fila con namero imprese en billete ef no son iguales, entonces pasar a la siguiente fila hhasta_que se localice la fila correcta 4, mientras rimero de butaca no coincida con minero de billets hacer avanzar a través de la fila a la siguiente butaca fin-mientrae . sentarse en la butaca 6. fin En este algoritmo Ia repeticisn se ha mostrado de dos modos, utilizando ambas notaciones, repe: tir... hasta que ymientras... fin_mientras. Se haconsiderado también, como ocurre nor- malmente, que el ntimero det asiento y fila coincide con el némero y fila rotutado en el billete. 2.5.1. Representacién gréfica de los algoritmos Para representar un algoritmo se debe utilizar algdin método que permita independizar dicho algorit- mo det lenguaje de programacién elegido. Ello permitira que un algoritmo pueda ser codifieado in- distintamente en cualquier lenguaje. Para conseguir este objetivo se precisa que el algoritmo sea re- presentado grifica o numéricamente, de modo que las sucesivas acciones no dependan de la sintaxis, de ninguin lenguaje de programacién, sino que la descripcién pueda servir fécilmente para su trans- formacién en un programa, es decir, su codificacién. rere Los métodos usuales para representar un aigoritmo son: " Diagrama de flujo. Diagrama N-S (Nassi-Schneiderman). Lenguaje de especificaci6n de algoritmos: pseudocédigo. Lenguaje espatiol, inglés... Formulas. vaeRe Los métodos 4 y 5 no suelen ser féciles de transformar en programas. Una deseripcién en espaiiol narrativo no es satistactoria, ya que es demasiado prolija y generalmente ambigua. Una formula, sin embargo. es buen sistema de representacién. Por ejemplo, las formulas para la solucién de una ecua- cuadrética (de segundo grado) es un medio sucinto de expresar el procedimiento algoritmico que se debe ejecutar para obtener las raices de dicha ecuaciGn. als (b+ WB = 4ac)/2a x2 = (-b - VOR 4ac) / 2a y significa lo siguiente: 1. Bleve at cuadrado b. 2. Toma a; multiplicar por ¢: multiplicar por 4 3. Restar el resultado obtenido de 2 del resultado de 1, etc. Sin embargo, no es frecuente que un algoritmo pueda ser expresado por medio de una simple formula. 2.5.2. Diagramas de flujo saat Un diagrama de flujo (flowchart) es una de las técnicas de representacién de algoritmos més antigua y ala vez mas utilizada, aunque su empleo ha disminuido considerablemente, sobre todo desde la apa- ficién de lenguajes de programacién estructurados. Un diagrama de flujo es un diagrama que utiliza Jos simbolos (cajas) estindar mostrados en la Tabla 2.2 y que tiene los pasos de algoritmo escritos en ‘esas cajas unidas por flechas, denominadas fineas de flujo, que indican la secuencia en que se debe ejecutar, La Figura 2.11 es un diagrama de flujo bésico. Este diagrama representa la resolucién de un pro- -grama que deduce el salario neto de un trabajador a partir de la lectura del nombre, horas trabajadas, precio de Ia hora y sabiendo que los impuestos aplicados son el 25 por 100 sobre el satario bruto, Los simbolos estindar normalizados por ANSI (abreviatura de American National Standars Insti- tuo) son muy variados. En la Figura 2.3 se representa una plantilla de dibujo tipica donde se con- templan Ia mayoria de los simbolos utilizados en el diagrama; sin embargo, los simbolos més utili dos representan: ‘Simbolos de diagramas de flujo Cada sfmbolo visto anteriormente indica el tipo de operacisn a ejecutar y el diagrama de flujo ilustra gtificamente la secuencia en la que se ejecutan las operaciones. Las lineas de flujo (->) representan el flujo secuencial de la légica del programa, Un recténgulo (C=) significa algiin tipo de proceso en la computadora, es decir, acciones a reali- zar (sumar dos nimeros, calcular la rafz cuadrada de un niimero, etc.). El paralelogramo (7) es un simbolo de entrada/salida que representa cualquier tipo de entrada Tabla 2.2. Simbolos de diagrama de flujo. vas Simbolos principales Funcién ‘Terminal (representa el comienzo, «inicio», y el final, «fin» de un programa. Puede represenar también una parada o interrupcidn programada que sea necesario realizar en un programa. Entrada/Salida (cualquier tipo de introduccién de datos en ta memoria desde los periféricos, wentrada>, o registro de la informacién procesada en un periférico, «salida». Proceso (cualquier tipo de operacién que pueda originar cambio de valor, formato o posicisn de la informacién almacenada en memoria, operaciones aritméticas, de transferencia, efc.). Decision (indica operaciones légicas o de comparaciém entre datos —normalmente dos— y ‘en funcién del resultado de fa misma determina cual de los distintos caminos alternativos del Programa se debe seguir; normalmente tiene dos salidas —respuestas ST 0 NO— pero puede {ener tres o més, segtin los casos). Decisién multiple (en funcién del resultado de la comparacidn se seguird uno de los diferen- tes caminos de acuerdo con dicho resultado) 7 Conector (sirve para enlazar dos partes cualesquieta de un ordinograma a través de un conector ‘en la salida y otto conector en la entrada. Se refiere a la conexién en ta misma pigina del dia- ‘grama) Indicador de diteccién 0 linea de flujo (indica el sentido de ejecucién de las operaciones). Linea conectora (sirve de unién entre dos simbolos). Coneetor (conexién entre dos puntos del organigrama situado en paginas diferentes). Brey Llamada subratina o a un proceso predeterminado (una subrutina es un médulo independien- te del programa principal, que recibe una entrada provedente de dicho programa. realiza una tarea determinada y regresa, al terminar, al programa principal) Pantalla (se utiliza en ocasiones en lugar del simbolo de F/S). Impresora (se utiliza en ocasiones en lugar del simbolo de F/S). ‘Teclado (se utiliza en ocasiones en lugar de! simbolo de F/S). NWIMCAaliiozore QO Comentarios (se utiliza para afiadir comentarios clasificadares a otros simbolos de} diagrama de flujo. Se pueden dibujar a cualquier lado del sfmbolo).. a ‘eer nombre, ww horas, precio > ' , sa ‘Boon ¥ a Figura 2.11, Diagrama de fiujo. © salida desde el programa o sistema; por ejemplo, entrada de {eclado, salida en impresora 0 panta- Tha, ete. El simbolo rombo (<>) es una caja de decisién que representa respuestas sifno o bien diferentes alternativas 1, 2, 3, 4, ..., etc. oo ‘Cada diagrama de flujo comienza y termina con un sfmbolo erminal (>). ‘Subprograma Simons & cs No ‘Entrada/ lO) OO [nm Figura 2,12. Simbolos més utllizados en un diagrama de flujo. Un pequefio circulo (O) es un conector y se utiliza para conectar caminos, tras roturas previas del flujo del algoritmo. ae Otros sfmbolos de diagramas de flujo menos utilizados de mayor detalle que los anteriores son: Un trapezoide (7) indica que un proceso manual se va a ejecutar en contraste con el recténgulo, ‘que indica proceso automdtico. El simbolo general de entrada/salida se puede subdividir en otros simbolos: teclado (Sn), pantalla (D), impresora (T>), disco magnético (), disquete o disco flexible (TH), casete (7D). El refinamiento del algoritmo conduce a los pasos sucesivos necesarios para realizar las operacio- nes de lectura, verificacisn del dltimo dato, suma y media de los datos. Si el primer dato lefdo es 0, la division S/C produciria un error si se ejecutara el algoritmo en una computadora, ya que no est permitida en ella la divisién por cero. Coo C- contador de numeros: sco S- sumador de nuimeros. dato <0 Sf Cate SES +dato ‘Sil primer dato leido es O la division s/c produciré un error si se ejecutara ol... algoritma en una computadora, ya que no esta permitida en ella la division por cero. Figura 2.13. 2.8.3. Pseudocédigo El pseudocédigo es un lenguaje de especificacién (descripcién) de algoritmos, El uso de tal lenguaje hace el paso de codificaci6n final (esto es, la traduccién a un lenguaje de programacién) relativamen- te fécil. Los lenguajes APL Pascal y Ada se ufilizan a veces como lenguajes de especificacién de al- oritmos, " El pseudacédigo nacié como un lenguaje similar al inglés y era un medio de representar basica~ mente las estructuras de control de programacién estructurada que se verin en capitulos posteriores. Se considera un primer borrador, dado que €l pseudocédigo tiene que traducirse posteriormente a un enguaje de programacidn, El pseudocédigo no puede ser ejecutado por una computadora. La ventaja del pseudocodigo es que en su uso, en ia planificacién de un programa, el programador se puede con- centrar en Ia Logica y en las estructuras de control y no preocuparse de las reglas de un lenguaie es- pecifico, Es también fécil modificar el pseudocédigo si se descubren errores 0 anomalfas en la logica del programa, mientras que en muchas ocasiones suele ser dificil el cambio en la Idgica, una vez. que esté codificado en un lenguaje de programacién, Otra ventaja del pseudocédigo es que puede ser tra- ducido facilmente a lenguajes estructurados como Pascal, C, FORTRAN 7790, C++, Java, C#, etc. El pseudoccdigo original utiliza para representar las acciones sucesivas palabras reservadas en in- glés —similares a sus homénimas en los lenguajes de programacién-—, tales como start, end, stop, if-then-else, while-end, repeat—unti1, etc. La escritura de pseudocédigo exige normalmente 1a indentacién (sangria en el margen izquierdo) de diferentes Iineas. La representacién en pseudocédigo del diagrama de flujo de la Figura 2.11 es la siguiente: start /yealculo de impuesto y salarios read nombre, horas, precio_hora salario_bruto © horas * precio_hora tasas ¢ 0,25 * salario_ brute salario_neto © salario_brute - tasas ae write nombre, salario_bruto, tasas, salario_neto end El aigoritmo comienza con la palabra etaxt y finaliza con la palabra ena, en inglés (en espaftol, inicio, fin). Entre estas palabras, slo se escribe una instruccién 0 aecién por linea. La linea precedida por // se denomina comentario, Ex una infocmacién al lector del programa y no realiza ninguna instrucci6n ejecutable, séto tiene efecto de documentacién interna de! programa. Al- gunos autores suelen utilizar corchetes o Haves. No es recomendable el uso de apéstrofos 0 simples comillas como representan en BASIC de Mi- crosoft los comentarios, ya que este cardcter es representativo de apertura o cierre de cadenas de ca- Tacteres en lenguajes como Pascal o FORTRAN, y daria lugar a confusién. Otro ejemplo aclaratorio en el uso del pseudocddigo podria ser un sencillo algoritmo del arranque matinal de un coche. inicio ssarrangue matinal de un coche introducir la llave de contacto tirar del estrangulador del aire girar la llave de contacto pisar el acelerador oir el ruide del motor pisar de nuevo el acelerador esperar unos instantes a que se caliente el motor llevar el estranguledor de aire a su posicion fin Por fortuna, aunque el pseudoeddigo nacié como un sustituto del lenguaje de programacién y, por cconsiguiente, sus palabras reservadas se conservaron 0 fueron muy similares a las de dichos lengua- Jes, pricticamente el inglés, el uso del pseudocédigo se ha extendido en la comunidad hispana con tér- minos en espaiiol como inicio, fin, parada, leer, escribir, si-entonces-si_no, mientras, fin_mientras, repetir, hasta_que, cc. Sin duda, el uso de ta terminologia del pseudocddigo en espanol ha facilitado y facilitard considerablemente el aprendizaje y uso diario de la programacién, En esta obra, al igual que en otras nuestras, utilizaremos el pseudocédigo en espaol y daremos en su momento las estructuras equivalentes en inglés, al objeto de facilitar Ia traduccién del pseudocédigo al lenguaje de programacién seleccionado. ‘Asi pues, en los pseudocédigos citados anteriormente deberfan ser sustituidas las palabras staxt, ena, read, write, por inicio, fin, 1 cxabir, respectivamente. ° inicio start leer read fin end escribir write 2.5.4. Diagramas de Nassi-Schneiderman (N-S) El diagrama N-S de Nassi-Schneiderman —también conocido como diagrama de Chapin— es como tun diagrama de fTujo en el que se omiten las flechas de uniGn y las cajas son contiguas. Las acciones sucesivas se escriben en cajas sucesivas y. como en los diagramas de flujo, se pueden escribir dife- rentes acciones en una caja ‘Un algoritmo se representa con un rectingulo en el que cada banda es una accién a realizar: accién 1 leer nombre, horas, precio calcular tae salaric © horas * precio . calcular impuestos + 0.25 + salario ‘us ab Lanitera caleular neto © salario - impuestos sobae escribir \ nombre, salario, impuestes, nete we nombre del algoritie caceién i> «aceién 2> accién 3> ant tin Figura 2.18. Representacién gréfiea N-S de un algoritmo. Ovo ejemplo es la representacién de la estructura condici 16). ») 0 econdicién? a no y acoién 2 « Figura 2.16. Estructura condicional o selective: a) diagrama de flujo: b) diagrama N-S.

Вам также может понравиться