En este captulo se tratarn varios temas bsicos referentes a el uso de algoritmos y
pseudocodigos. El papel de los programas de computadoras es esencial, sin una lista de instrucciones a seguir, la computadora es virtualmente intil. Los lenguajes de programacin nos permiten escribir esos programas y por consiguiente comunicarnos con las computadoras. Mucha gente piensa que estudiar metodologa de la programacin es una cosa ardua y muy aburrida. Intentare hacer que esto no sea as y que todo lo que aprendas a partir de este momento te sea de mucha utilidad para la creacin de esos programas que tienes en mente. Si todava no ves claro el porqu de la metodologa mira el siguiente ejemplo, despus ya me dirs que opinas. Imaginate que deseas realiar un programa sobre el calculo de horas a pagar de un trabajador promedio, y solo llegas a sentarte !rente a tu computadora sin haber planeado como en!rentar el programa, llevas horas y horas ingresando codigo y probando los resultados. "uego de # horas te desesperas y a$n no has llegado a resolver lo del pago de horas adicionales trabajadas%. &qui ves un ejemplo de lo que puede suceder si solamente llegas a escribir codigo y codigo sin haber plani!icado antes lo que haras en el programa. Estos son los temas a tratar en este captulo: Resolucin de Problemas con Computadora Fases para la resolucin de Problemas 1. Diseo de Algoritmos 2. mplementacin del Algoritmo !. Depuracin "ipos de Datos denti#cador $peradores de Programacin Precedencia de $peradores Escritura % &ectura de Datos La esolucin de !roblemas tili"ando la Computadora #un$ue el proceso de dise%ar programas es un proceso creativo, se pueden considerar una serie de fases o pasos comunes, $ue generalmente deben seguir todos los programadores. "a resolucin de problemas con computadoras se pueden dividir en tres !ases' &nlisis del problema (ise)o del algoritmo *esolucin del algoritmo en la computadora +l anlisis y el dise)o del algoritmo requiere la descripcin del problema en subproblemas a base de refinamientos sucesivos y una herramienta de programacin' (iagrama de !lujo (iagrama ,-S .seudocdigo (urante la tercera etapa se implementa este algoritmo en un cdigo escrito en un lenguaje de programacin, re!lejando las ideas obtenidas en las !ases de anlisis y dise)o. &ntes de conocer las tareas a realiar en cada !ase, de!iniremos el concepto y signi!icado de la palabra algoritmo. Qu es Algoritmo? Se deriva de la traduccin al latn de la palabra rabe &l/ho0arismi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de n$meros y ecuaciones en el siglo I1. 2n algoritmo es un mtodo para resolver un problema mediante una serie de pasos precisos, de!inidos y !initos. Caractersticas del Algoritmo preciso, tiene que indicar el orden de realiacin en cada paso. de!inido, es decir, si el algoritmo se prueba dos veces, en estas dos pruebas, se debe obtener el mismo resultado. !inito, es decir, que el algoritmo tiene que tener un n$mero determinado de pasos. (ebe producir un resultado en un tiempo !inito. +jemplos de algoritmos son' Ver una pelcula 1. Buscar el videocasette de la pelcula 2. SI el televisor y la video se encuentran apagados, encenderlos 3. Sacar el video del estuche 4. Introducirlo en la videocasetera 5. Tomar el control del televisor y la video . !iri"irme a el so#a $. %onerme comodo &. !is#rutar la pelcula 3jate como he descrito en estos pasos el algoritmo para poder ver una pelcula en la video, este peque)o algoritmo cumple con los requisitos descritos arriba, ya que cada paso precisa un orden y tiene un orden de pasos !initos. +n este algoritmo aparece la palabra SI remarcada en may$sculas, el uso de esta palabra la veremos mas adelante, cuando discutamos sobre el control del !lujo del programa o estructuras de control. "os algoritmos se pueden e#presar por !rmulas, diagramas de !lujo, y pseudocdigos conocidos como herramientas de programacin. +st $ltima representacin es la mas utiliada por su sencille y parecido a el lenguaje humano. 4omo ejercicio te recomendara que escribieras algunos algoritmos de sucesos en tu vida cotidiana, como por ejemplo' encender el auto,ir al cine,etc.. &ases para la esolucin de !roblemas En esta seccin describire brevemente las fases o pasos a seguir para la resolucin de problemas con ayuda de la computadora. Anlisis del Problema +sta !ase requiere una clara de!inicin donde se contemple e#actamente lo que debe hacer el programa y el resultado o solucin deseada. (ado que se busca una solucin se precisan especi!icaciones de entrada y salida. .ara poder de!inir bien un problema es conveniente responder a las siguientes preguntas' 56u entradas se requieren7 8cantidad y tipo9 54ul es la salida deseada7 8cantidad y tipo9 56u mtodo produce la salida deseada7 Diseo del Algoritmo +n la !ase de anlisis en el proceso de programacin se determina que hace el programa. +n la !ase de dise)o se determina como hace el programa la tarea solicitada. "os mtodos utiliados para el proceso del dise)o se basan en el conocido divide y vencers. +s decir la resolucin de un problema complejo se realia diviendo el problema en subproblemas y a continuacin dividir estos subproblemas en otros de nivel mas bajo, hasta que sea implementada una solucin en la computadora. +ste mtodo se conoce tecnicamente como dise)o descendente 8top-do0n9 o modular. 4ada programa bien dise)ado consta de un programa principal 8el mdulo de nivel mas alto9 que llama a subprogramas 8mdulos9 de nivel mas bajo, que a su ve pueden llamar a otros subprogramas. "os mdulos pueden ser planeados, codi!icados, comprobados y depurados independientemente y a continuacin combinarlos entre s. +ste proceso implica la ejecucin de estos pasos hasta que el programa se ha terminado' .rogramar un mdulo comprobar el mdulo Si es necesario, depurar el mdulo 4ombinar el mdulo, con el resto de los otros mdulos +l dise)o del algoritmo es independiente del lenguaje de programacin en el que se vaya a codi!icar posteriormente. Implementacin del Algoritmo .ara implementar un algoritmo en la computadora, se debe ejecutar los siguientes pasos' 4odi!icacin 4ompilacin y ejecucin :eri!icacin (epuracin (ocumentacin 4odi!icacin' +s la escritura en un lenguaje de programacin de la representacin de un algoritmo. (ado que el dise)o del algoritmo es independiente del lenguaje de programacin utiliado en su implementacin, el cdigo puede ser escrito con igual !acilidad en un lenguaje o en otro. 4ompilacin y ejecucin' 2na ve que el algoritmo se ha convertido en un programa !uente, es preciso introducirlo en memoria mediante el teclado y almacenarlo posteriormente en un disco. +sta operacin se realia con un editor de te#to, posteriormente el programa !uente se convierte en un archivo de programa que se guarda en un disco. +l programa !uente debe ser traducido a lenguaje mquina. +ste proceso se realia con el compilador y el sistema operativo que se encarga practicamente de la compilacin. Si al compilar el programa !uente se presentan errores 8errores de compilacin9, es necesario volver a editar el programa, corregir los errores y compilar de nuevo. +sto se repite hasta que ya no se presenten mas errores, obteniendose el programa objeto, el cual todava no es ejecutable directamente. &l ya no e#istir errores en el programa !uente se debe instruir al sistema operativo para que e!ectue la !ase de montaje o enlace, del programa !uente con las librerias del programa del compilador. +ste proceso de montaje produce un programa ejecutable. 4uando se ha creado un programa ejecutable este se puede ya ejecutar desde el sistema operativo con solo teclear su nombre. Suponiendo que no e#isten errores durante la ejecucin 8errores en tiempo de ejecucin9, se obtendr la salida de resultados:eri!icacin y depuracin' +s el proceso de ejecucin del programa con una amplia variedad de datos de entrada, llamados datos de test o prueba como son' valores normales de entrada, valores e#temos de entrada que comprueben los lmites del programa y valores de entrada que comprueben aspectos especiales del programa. +stos determinarn si el programa contiene errores o no. &l ejecutar un programa se pueden producir tres tipos de errores' +rrores de 4ompilacin' Se producen normalmente por un uso incorrecto de las reglas del lenguaje de programacin, suelen ser errores de sinta#is. +rrores de +jecucin' Se producen por instrucciones que la computadora puede comprender pero no ejecutar. +n estos casos se detiene la ejecucin del programa y se imprime un mensaje de error. +jemplo de esto puede ser una divisin por cero. +rrores "gicos' Se producen en la lgica del programa y la !uente del error suele ser el dise)o del algoritmo, son mas di!iciles de detectar puesto que el programa puede !uncionar y no producir errores de compilacin ni de ejecucin pero regresar resultados incorrectos. +n este caso se debe regresar a la !ase de dise)o, modi!icar el algoritmo, cambiar el programa !uente y compilar y depurar una ve mas. (ocumentacin' "a importancia de la documentacin debe ser destacada por su in!luencia en la etapa !inal, ya que programas pobremente documentados son di!iciles de leer, mas di!iciles de depurar y casi imposibles de mantener y modi!icar. .uede ser interna y e#terna. "a documentacin interna es la contenida en lineas de comentarios. "a documentacin e#terna incluye anlisis, diagramas de !lujo y;o pseudocodigos, manuales de usuarios con instrucciones para ejecutar el programa y para interpretar los resultados. "a documentacin es vital cuando se desea corregir posibles errores !uturos o bien cambiar el programa. +stos cambios se denominan mantenimiento del programa. &dems es de buena costumbre para todo buen programador, dejar comentado su codigo, esto es para que el !uturo programador pueda darle mantenimiento !cilmente a el programa, o incluso, si es el mismo creador quien debe darle mantenimiento. Herramientas de Programacin "as herramientas de programacin mas utiliadas comunmente para dise)ar algoritmos son' .seudocodigos (iagramas ,-S (iagramas de !lujo Siendo el pseudocodigo el mas popular por su sencille y su parecido a el lenguaje humano correctos del programa. 'ipos de (atos Los diferentes objetos de informacin con los $ue un programa trabaja se denominan datos. <odos los datos tienen un tipo asociados con ellos que nos servir para poder conocer con que in!ormacin trabajaremos. +s decir, cuando ingresemos el sueldo de un trabajador necesitamos que este contenga decimales, o al solicitar la edad de una persona est tiene que estar con numeros enteros, etc.. &dems la suma entre caracteres no tiene sentido. "a asignacin de tipos a los datos tiene dos objetivos principales' (etectar errores de operaciones aritmticas en los programas (eterminar como ejecutar las operaciones ipos de Datos Comunes +stos son los tipos de datos mas $tiliados en los lenguajes de programacin' )mericos Caracteres y Lgicos 'ipos )mericos (entro de estos tipos se puede hacer mencin de los tipos enteros, reales o de coma !lotante, y de los e#ponenciales. 'ipos Carcter "os tipos carcter se dividen tambin en caracteres &S4II, como por ejemplo' a & = > , etc.. +l otro grupo de caracteres son los strings o cadenas de caracteres, como por ejemplo' ?@ola Mundo?. 'ipos Lgicos "os tipos lgicos solamente pueden tomar los valores verdadero o !also. En esta seccin conoceremos los otros objetos $ue se tili"an en los programas, a saber, las variables y las constantes* adems conoceremos tambi+n lo $ue es un identificador y para $ue se tili"a. ,dentificadores *epresentan los nombres de los objetos de un programa 8constantes, variables, tipos de datos, procedimientos, !unciones, etc.9. +s una secuencia de carcteres que puede ser de cualquier longitud, aunque tiene ciertas reglas que hay que seguir, las cuales son' A. (ebe comenar con una letra o ?B? y no puede contener espacios en blanco. C. "etras, dgitos y carcteres subrayados 8?B?9 estn permitidos despus del primer carcter. +n sntesis un identi!icador es un mtodo para nombrar a las celdas de memoria en la computadora, en lugar de memoriarnos una direccin de memoria. Se utilian para nombrar variables, constantes, procedimientos y !unciones. Constantes "as constantes son valores que no pueden cambiar en la ejecucin del programa. *ecibe un valor en el momento de la compilacin del programa y este no puede ser modi!icado. !ariables "as variables son valores que se pueden modi!icar durante la ejecucin de un programa. &l contrario de las constantes estos reciben un valor, pero este valor puede ser modi!icado durante la ejecucin o la compilacin del programa. "entencia de Asignacin Se utilia para asignar o almacenar valores a variables o constantes. +s una operacin que sit$a un valor determinado en una posicin de memoria. Se demuestra en pseudocdigo con el smbolo D- 82na !lecha apuntando hacia el identi!icador, donde se desea guardar el valor.9. varia'le () e*presi+n +l tipo de e#presin debe ser del mismo tipo que el de la variable, en caso contrario en la !ase de compilacin se producira un error de tipos. &unque a la !echa e#isten lenguajes de programacin con una potente herramienta para la conversin de datos 8tal es el caso de :isual Easic9, no es recomendable asignar valores de un tipo di!erente a variables de otro tipo. #eglas de Asignacin 1. 'na (ariable en el lado derec)o de una sentencia de asignacin debe tener un (alor antes de *ue la sentencia de asignacin se e+ecute. ,asta *ue un programa le da un (alor a una (ariable- esa (ariable no tiene (alor. Por e+emplo: .i / no tiene un (alor antes de e+ecutar % 01 /21- se producir3 un error lgico. 2. En la i4*uierda de una sentencia de asignacin solo pueden e/istir (ariables. Por consiguiente no es (alido lo siguiente: 5alor67eto 1 "asas 01 !891:. &dems hay que recordar que la operacin de asignacin es una operacin destructiva debido a que el valor almacenado en una variable se pierde o se destruye y se sustituye por el nuevo valor en la sentencia de asignacin. -peradores utili"ados en !rogramacin En todos los lenguajes de programacin se tili"an operadores para efectuar operaciones aritmeticas. Combinando las variables y constantes en e.presiones aritm+ticas por medio de funciones adecuadas. 2na expresin es un conjunto de datos o !unciones unidos por operadores aritmticos, los cuales se muestran en la siguiente tabla' $perado r .igni#cado 2 .uma 1 Resta ; <ultiplicacin = Di(isin > E/ponenciaci n <od <dulo $peradores %gicos +n ocasiones en los programas se necesitan realiar comparaciones entre distintos valores, esto se realia utiliando los operadores relaciones, los cuales se listan a continuacin' $perado r .igni#cado 0 <enor *ue ? <a%or *ue 0@ <enor o igual *ue ?@ <a%or o igual *ue @ gual a 0? Distinto a- diAerente de !recedencia de -peradores Cuando una e.presin aritm+tica se evala, el resultado es un nmero. #/ora bien, cuando aparecen dos o mas e.presiones aritm+ticas, $u+ operaciones se reali"an primero0 2na e#presin aritmtica en programacin tiene una sinta#is de la !orma' * 2 ,1-2 @ay que observar que esta e#presin es totalmente di!erente a esta otra .* 2 ,1/-2, por lo que es importante codi!icar las e#presiones aritmticas correctamente. .ara realiar esto se debern conocer las reglas de evaluacin de los operadores, que se estudian a continuacin. #eglas de &'aluacin <odas las sube#presiones entre parentesis se eval$n primero. "as sube#presiones entre parentesis anidados se eval$an de adentro hacia a!uera, es decir, que el parentesis mas interno se eval$a primero. Prioridad de $peraciones( (entro de una misma e#presin o sube#presin, los operadores se eval$an en el siguiente orden' ; - = <ultiplicacin % di(isin Di(-mod Di(isin % <odulo de enteros 2-1 .uma % Resta "os operadores en una misma e#presin o sube#presin con igual nivel de prioridad se eval$n de iquierda a derecha &scritura de )rmulas "as !rmulas matematicas se deben escribir en !ormato lineal. +sto obliga al uso !recuente de parentesis que indiquen el orden de evaluacin correcto de las operaciones. .or ejemplo, si deseamos codi!icar la !rmula de :ieta, tendramos que escribirla as' 0amos a escri'ir el dato solo del valor positivo .)',raiz.'1')41a1c//-.21a/ !onde a,',c son numeros reales. -peraciones de Entrada y 1alida 2,3-4 de (atos "os datos se pueden almacenar en memoria de tres !ormas di!erentes' asociados con constantes, asignados a una variable con una sentencia de asignacin o una sentencia de lectura. Siendo el $ltimo el mas indicado si se desea manipular di!erentes datos cada ve que se ejecuta el programa. &dems la lectura de datos permite asignar valores desde dispositivos hasta archivos e#ternos en memoria, esto se denomina operacin de entrada o lectura. &lgunos ejemplos de dispositivos de entrada y salida, son' teclado,monitor,mouse,etc. "a operacin de entrada en pseudocdigo se representa de la siguiente manera' leer(lista de variables) & medida que se realian calculos en el programa, se necesitan visualiar los resultados. +st se conoce como operacin de escritura o salida. +sta operacin se representa en pseudocdigo de la siguiente manera' escribir(lista de variables,"Mensaje") +n la instruccin de salida se pueden incluir adems mensajes de te#to y variables. 4on lo que hemos visto hasta aqu podemos ya realiar un peque)o ejemplo, el clsico ?@ola Mundo?, en pseudocdigo. 2lgoritmo 3"emplo escri'ir.45ola 6undo4/ Fin +sto imprimir en pantalla la !rase F@ola MundoF. Programacin Interacti'a +n la programacin interactiva el usuario del programa puede interactuar con el programa e introducir datos mientras se ejecuta el programa. &l objeto de !acilitar esta entrada de datos, la computadora debe indicar al usuario el momento en que debe introducir los datos. .ara ello se deben visualiar mensajes interactivos con indicaciones al usuario. &*emplo( "uma de dos n+meros ingresados por el usuario 2lgoritmo Suma 0aria'les numero1,numero2,total escri'ir.7Introduce el primer n8mero97/ leer.numero1/ escri'ir.7Introduce el segundo n8mero97/ leer.numero2/ escri'ir.73l total es9 7,numero1 , numero2/ :in +sto debe visualiar en pantalla lo siguiente' Introduce el primer n$mero' 8 !ntro presionado por el usuario Introduce el segundo n$mero " !ntro presionado por el usuario +l total es' GH Captulo 5 Las estructuras de control de un lenguaje de programacin se refieren a el orden en $ue las instrucciones de un algoritmo se ejecutarn. El orden de ejecucin de las sentencias o instrucciones determinn el flujo de control. +stas estructuras de control son por consiguiente !undamentales en los lenguajes de programacin y en los dise)os de algoritmos especialmente los pseudocdigos. "as tres estructuras de control bsico son' secuencia seleccin repeticin "a programacin estructurada hace los programas mas !aciles de escribir, veri!icar, leer y mantener, $tilia un n$mero limitado de estructuras de control que minimian la complejidad de los problemas. +n mayo de AGGI, EJhm y Kacopin demostrarn que un programa propio puede ser escrito $tiliando solamente tres tipos de estructuras de control' secuenciales, selectivas y repetitivas. 2n programa se de!ine como propio si cumple lo siguiente' .osee un solo punto de entrada y salida o !in para control del programa. +#isten caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las partes del programa. <odas las instrucciones son ejecutadas y no e#isten laos o bucles in!initos. +n sntesis la programacin estructurada signi!ica' +l programa completo tiene un dise)o modular "os mdulos se dise)an con metodologa descendente 8mtodo top-do0n9 4ada mdulo se codi!ica $tiliando las L estructuras de control bsicas' secuenciales,selectivas,repetitivas. +structuracin y modularidad son complementarios mas no iguales Estos son los temas a tratar: E/presiones &gicas $peradores Relacionales $rden de e(aluacin $peradores &gicos Estructuras de Control o Estructura de Control .electi(a o .i anidados o Estructura .egBn sea Estructuras Repetiti(as CDucles o &oopsE o .entencia Mientras o .entencia Repetir..hasta o .entencia para E.presiones Lgicas #ntes de entrar de lleno a el estudio de las estructuras de control anali"aremos primero lo $ue son las e.presiones logicas y como las utili"aremos en las estructuras de control. &,presiones %gicas +n los programas con !recuencia debemos en!rentarnos con situaciones en las que se deben proporcionar instrucciones alternativas que pueden o no ejecutarse, dependiendo de los datos de entrada, re!lejandose el cumplimiento o no de una deteminada condicin. .or ejemplo, supongamos que queremos dise)ar un programa para calcular el salario semanal de un empleado que trabaja por horas, la empresa paga una tasa de A.M la tasa normal por todas las horas trabajadas mayores a NH. +l algoritmo sera' leer.tasa/ leer.5oras;tra'a"adas/ si 5oras < 4= condici+n entonces.se cumple la condici+n/ paga () tasa 1 4= , 1.5 1 tasa 1.horas ) 4=/ sino .no se cumple la condici+n/ paga ( tasa 1 horas #in;si Si te das cuenta la solucin del problema requiere el uso de estructuras de control selectivas' si2if4, entonces2t/en4, sino2else4. .ara realiar el algoritmo anterior se necesita realiar la pregunta' Son las horas trabajadas mayores a NH7. +sto se realia mediante la evaluacin de e#presiones lgicas, comparando dos valores y $tiliando un operador de relacin. 2na e#presin lgica es una e#presin que puede ser verdadera o !alsa. $peradores de #elacin Se $tilian para e#presar condiciones y describen una relacin entre C variables. +l conjunto de operaciones relacionales se muestran en la siguiente tabla. $peradores .igni#cado 0 <enor *ue ? <a%or *ue @ gual a ?@ <a%or o igual *ue 0@ <enor o igual *ue 0? Distinto o diAerente a +stos operadores se $tilian en condiciones cuyo !ormato tiene la siguiente !orma. (ariable operador relacional (ariable contante operador relacional constante. +l resultado de una e#presin lgica es un valor de tipo lgico' verdadero o !also. 4uando se aplican a elementos de tipo caracter se veri!ican en orden al!abetico, tomando en cuenta el orden del cdigo &S4II. (e la siguiente manera' = ( 1 ( 2 ... ( > a ( ' ( c ... ( ? 2 ( B ( @ ... ( A $rden de &'aluacin &l incluir estos operadores con los operadores aritmticos, obtenemos este nuevo orden de evaluacin' Prioridad $perador 1 4ontenido de parentesis 8 9 2 >, ;, div, mod ! O, - 8 P, D, Q, DP, QP, distinto a )ota6 usare el smbolo 78 para especificar $ue el valor entre un operador debe ser distinto o diferente a el otro operador. * 4 Vamos a un ejemplo: Si num1, num2, son varia'les enteras con valores asignados 3 y , respectivamente, entonces9 .2,31num1/ (< ,.num2)1/ 2,31num1 B 11 ,.5/ B 11 #also !ariables %gicas "a e#presin lgica mas simple es una variable o constante lgica que puede establecerse a valores verdadero 8true9 o !also 8!alse9. -peradores Lgicos "as e#presiones lgicas pueden combinarse para !ormar e#presiones mas complejas $tiliando los operadores lgicos and, or y not. +stos se $tilian con constantes lgicas. Foperando1G operador operando2 +l operandoA seg$n el tipo de operador puede no e#istir. "a operacin and combina dos condiciones simples y produce un resultado verdadero solo si los dos operandos son verdaderos. "a operacin or es verdadera si uno de los dos operandos es verdadero. "a operacin not act$a sobre una sola condicin simple u operando y simplemente niega 8o invierte9 su valor. +sto se describe mas !cilmente usando unas tablas denominadas Ftablas de verdadF. 4uando la e#presin lgica contiene varios tipos de operadores, es preciso seguir un nuevo orden de precedencia o prioridad para obtener el valor !inal de la e#presin. Prioridad $perador 1 Ce/pE- not 2 ;- =- di(- mod- and ! 2- 1- or 8 0- 0@- @- 0 ?- ?@ Estructuras de Control !or lo regular en un programa los enunciados son ejecutados uno despu+s del otro, en el ord+n en $ue aparecen escritos. Esto se conoce como ejecucin secuencial. 1in embargo, e.isten enunciados $ue le permiten al programador especificar $ue el enunciado siguiente a ejecutar pueda ser otro diferente al $ue sigue en secuencia. Esto se conoce como transferencia de control. <odos los programas pueden ser escritos en trminos de solo tres estructuras de control, a saber, la estructura de secuencia, la estructura de seleccin y la estructura de repeticin o bucle. %a estructura de seleccin "i--entonces .i/0 (ado que las e#presiones lgicas toman el valor verdadero y !also, se necesita una sentencia de control para la toma de decisiones, cuando se desea ejecutar una accin si una e#presin es verdadera o !alsa. .ara ello $tiliaremos la sentencia de seleccin i! 8si9, el enunciado en pseudocdigo es el siguiente' si Ce/p. lgica simple o compuestaE acciones a e+ecutar #n6si 4uando la e#presin lgica contenida por los parentesis es verdadera, se ejecutan las instrucciones dentro de la estructura de seleccin, cuando es !alsa, el programa ignora la estructura y se sigue ejecutando la instruccin siguiente a la estructura de control. %a estructura de "eleccin si1sino .i/1else0 "a estructura de seleccin Si ejecuta una accin indicada solo cuando la condicin es verdadera, de lo contrario la accin es pasada por alto. "a estructura de seleccin si;sino 8en algunos te#tos de programacin puede aparecer como si;deBloBcontrario9 permite que el programador especi!ique la ejecucin de una accin distinta cuando la condicin es !alsa. .or ejemplo, el enunciado en seudocdigo' Si .nota <B =/ entonces escribir .42pro'ado4/ sino (de lo contrario) escribir .4Co 2pro'ado4/ #in;si Imprime ?&probado?, si la cali!icacin del alumno es mayor o igual a IH, e imprime ?,o aprobado? si la cali!icacin es menor que IH. +n cualquiera de los casos, despus de haber impreso alguno de los mensajes, el programa ejecutar el enunciado siguiente al si. "entencias "electi'as Anidadas (entro de las sentencias que !iguran dentro de una sentencia i!, pueden colocarse tambin otras sentencias selectivas. (e esta manera' 1upongamos $ue deseamos imprimir en pantalla la nota de un alumno, clasificandolo en 9aprobado9, 9no aprobado9, y 9deficiente9. El algoritmo $uedara de esta manera. si 8nota QP IH9 entonces escribir 8?aprobado?9 sino si 8nota D IH9 and 8nota QP LH9 entonces escribir 8?no aprobado?9 sino si 8nota D LH9 entonces escribir 8?de!iciente?9 !inBsi !inBsi !inBsi. +s muy importante que se $tilie un buen sangrado en cada sentencia selectiva, para que sea mas legible el cdigo, y adems que se comente el cdigo, para que no te pierdas si llevas escritas varias lineas, y tambin por si alguna otra persona, desea actualiar tu cdigo. La 1entencia de 1eleccin 1egn 1ea 2Case4 +sta sentencia se $tilia para elegir entre di!erentes alternativas. +sta se compone de varias sentencias sentencias simples, cuando se ejecuta, una y solo una de las sentencias simples se selecciona y ejecuta. "a sinta#is es la siguiente' seg$n sea 8selector9 hacer casoA, casoC,..' sentenciaA .... ' ..... casoAn, casoCn,.' sentencian sino sentencia opcional !inBseg$n +l valor de selector debe ser un tipo ordinal, y los valores constantes deben tener el mismo tipo que el selector. Se pueden $tiliar sentencias i! anidadas, pero la sentencia seg$n sea es mas legible. :amos a realiar en seudocdigo el ejemplo anterior, pero esta ve $tiliando la sentencia seg$n-sea. segun sea 8nota9 hacer AHH..IH' escribir 8?aprobado?9 MG..LH' escribir 8?reprobado?9 CG..H' escribir 8?de!iciente?9 Si te das cuenta, he omitido la clausula sino del algoritmo, esta es opcional y se puede omitir. Estructuras de Control epetitivas Las computadoras estn especialmente dise%adas para ejecutar tareas repetidamente. Las estructuras de control repetitivas son a$uellas en las $ue una sentencia o grupos de sentencias se repiten muc/as veces. 2na estructura de control que permite la repeticin de una serie determinada de sentencias se denomina bucle 8lao o ciclo9. +l cuerpo del bucle contiene las sentencias que se repiten. "a accin o acciones que se repiten en un bucle se denomina el cuerpo del bucle, y cada repeticin del cuerpo del bucle se denomina iteracin. "entencia 2ientras--3acer .43ile0 "a estructura repetitiva mientras es aquella en la que el n$mero de iteraciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condicin. .or esta ran a estos bucles se les denomina bucles condicionales. Da sinta*is es la siguiente9 6ientras .condicion/ hacer sentencias #in;mientras 4uando la sentencia mientras se ejecuta, el primer paso es la evaluacin de la e#presin lgica. Si se eval$a a !also, ninguna accin se realia y el programa prosigue en la siguiente sentencia despus del bucle. Si la e#presin lgica se eval$a a verdadera, entonces se ejecuta las sentencias contenidas dentro del cuerpo del bucle y se eval$a de nuevo la e#presin. +ste proceso se repite mientras que la e#presin lgica sea verdadera. (espus de cada iteracin, la e#presin lgica se eval$a y se veri!ica de nuevo, y si es verdadera, el bucle se repite de nuevoR si cambia de verdadera a !alsa, la sentencia mientras !inalia y el programa prosigue en la siguiente sentencia del programa. @alcular la suma de una lista de n8meros enteros ingresados por el usuario. 2lgoritmo Sumar 0aria'les contador, num, sum, C9 enteros Inicio 3scri'ir .43ste programa suma numeros4/ 3scri'ir .4@uantos numeros desea sumar4/ Deer .C/ 3scri'ir .4Ingrese los numeros94/ contador ()) = suma ()) = 6ientras .contador ( num/ hacer Deer .num/ suma ()) suma , num contador ()) contador , 1 #in;mientras 3scri'ir .4Da suma de los4,C,4numeros es4,suma/ :in. &l implementar este cdigo en un lenguaje de programacin, por ejemplo' .ascal, este sera el resultado, en pantalla, al ejecutarlo. +ste programa suma numeros 4untos numeros desea sumar # <eclee los numeros enteros' 8 $ % "a suma de los L numeros es AS %a "entencia #epetir--3asta 2na variante de la sentencia mientras, es la sentencia repetir. 2na de las caractersticas de la sentencia mientras es que la condicin lgica se eval$a al principio de cada iteracin. +n particular, si la condicin es !alsa cuando la sentencia comiena, entonces el bucle no se ejecuta nunca. "a sentencia repetir..hasta especi!ica un bucle condicional que se repite hasta que la condicin se hace verdadera. (espus de cada iteracin el cuerpo del bucle eval$a la condicin. Si la condicin es verdadera, el bucle se termina y se sale de el, ejecutndose la siguiente sentencia. Si la condicin es !alsa el bucle se repite. 3l seudoc+digo es el siguiente9 repetir sentencias hasta .e*presi+n l+gica/ Veamos un ejemplo 0olvamos a reali?ar el e"emplo anterior, donde se desea o'tener la suma de tres numeros ingresados por el usuario. %ara acortar, solo colocarE la parte donde se e#ectua la suma 3scri'ir .4@uFntos numeros desea ingresar4/ leer .Total;num/ contador ()) = suma ()) = repetir leer .num/ suma ()) suma , numero contador ()) contador , 1 hasta .contador B Total;num/ "entencia Para .)or0 +n numerosas ocasiones se desea un bucle que se ejecute un n$mero deseado de veces, y cuyo n$mero de iteraciones se conoca por anticipado. .ara este tipo de aplicaciones se $tilia la sentencia para. "a sentencia para requiere que conocamos por anticipado el n$mero de veces que se ejecutan las sentencias del interior del bucle. 3l seudoc+digo es el siguiente9 !esde cont ()) valor inicial hasta valor #inal hacer sentencias #in;desde &l ejecutarse la sentencia para 8o desde9 la primera ve, el valor inicial se asigna a cont, que se denomina variable de control, y a continuacin se ejecuta la sentencia del interior del bucle. &l llegar al !inal del bucle se veri!ica si el valor !inal es mayor que el valor inicialR en caso negativo se incrementa el valor de la variable de control en uno y se vuelven a ejecutar todas las sentencias del interior del bucle, hasta que la variable de control sea mayor que el valor !inal, en cuyo momento se termina el bucle. Veamos un ejemplo prctico de para !esde i ()) 1 hasta 1= hacer escri'ir .i/ #in;desde +n pantalla, este sera el resultado A C L N M I T S G AH eglas A. "as variables de control, valor inicial y valor !inal deben ser todas del mismo tipo, pero el tipo real no esta permitido. "os valores inicial y !inal pueden ser tanto e#presiones como constantes. C. +s ilegal intentar modi!icar el valor de la variable de control, valor inicial y el valor !inal dentro del bucle. &l igual que en las sentencias de seleccin, las sentencias repetitivas se pueden anidar. Captulo : La !rogramacin ;odular 2na estrategia muy utiliada para la resolucin de problemas complejos con la computadora, es como lo he venido comentando, la divisin del problema en otros problemas mas peque)os o subproblemas. +stos subproblemas se implementan mediante mdulos o subprogramas. "os subprogramas son una herramienta importante para el desarrollo de algoritmos y programas de modo que normalmente un proyecto de programacin esta compuesto generalmente de un programa principal y un conjunto de subprogramas con las llamadas a los mismos dentro del programa principal. "os subprogramas se clasi!ican en' procedimientos y funciones. +stos son los temas a desarrollar en el captulo' El Diseo Descendente: .ubprogramas El Diseo <odular "ransAerencia de nAormacin a=desde subprogramas Parametros 5alor % Parametros 5ariable 5ariables &ocales % 5ariables Hlobales Ambito de una 5ariable Procedimientos % Funciones El (ise%o (escendente6 1ubprogramas <no de los m+todos fundamentales para resolver un problema es dividirlo en problemas mas pe$ue%os, llamados subproblemas, en referencias sucesivas. +stos problemas a su ve pueden ser divididos repetidamente en problemas mas peque)os hasta que los problemas mas peque)os puedan ser solucionados. +sta tcnica de dividir el problema principal en subproblemas se denomina !recuentemente divide y vencers. +l mtodo de dise)o se denomina dise)o descendente, debido a que se comiena en la parte superior con un problema general y se dise)an soluciones especi!icas a sus subproblemas. +l problema principal se resuelve con el programa principal 8tambin llamado conductor del programa9, y los subproblemas 8mdulos9 mediante subprogramas' procedimientos y funciones. 2n subprograma realia una tarea concreta que se describe con una serie de instrucciones. Veamos un ejemplo: Deer el radio de un crculo y calcular e imprimir su super#icie y longitud. Anlisis 3speci#icaciones de 3ntrada Gadio9 Geal 3speci#icaciones de Salida Super#icie9 Geal Dongitud9 Geal Algoritmo 1. Deer el valor del radio 2. @alcular la Super#icie 3. @alcular la Dongitud 4. 0isuali?ar los valores de la super#icie y la longitud Refinamiento del Algoritmo 1. Deer el valor del radio 2. @alcular la super#icie 1. pi () 3.1415>2 .constante pi/ 2. S () pi 1 Gadio 1 Gadio 3. @alcular la longitud 1. pi () 3.1415>2 2. D () 2 1 pi 1 Gadio 4. 0isuali?ar los valores de la super#icie y la longitud El (ise%o ;odular Los subproblemas o mdulos se dise%an con subprogramas, $ue a su ve" se clasifican en procedimientos y funciones. "os procedimientos y las !unciones son unidades de programas dise)adas para ejecutar una tarea espec!ica. .or ejemplo, los procedimientos prede!inidos, *ead"n y Urite"n de .ascal, estan dise)ados para realiar operaciones de entrada y salida. +l proceso de descomposicin de un problema en mdulos se conoce como modulacin y a la programacin relativa a ellos programacin modular. "os procedimientos y !unciones son similares, aunque presentan notables di!erencias entre ellos' A. "as !unciones normalmente, devuelven un solo valor a la unidad de programa 8programa principal u otro subprograma9 que los re!erencia o llama. "os procedimientos pueden devolver cero, uno o varios valores. +n el caso de no devolver ning$n valor, realian alguna tarea tal como alguna operacin de entrada;salida. C. & un nombre de procedimiento no se puede asignar un valor, y por consiguiente ning$n tipo esta asociado con un nombre de procedimiento. L. 2na !uncin se re!erencia $tiliando su nombre en una instruccin 8de asignacin o e#presin matematica9, mientras que un procedimiento se re!erencia por una llamada o invocacin al mismo. 'ransferencia de ,nformacin a3desde ;dulos Los !armetros "os mdulos o subprogramas sirven para ejecutar tareas concretas, pero no $tilian ning$n tipo de dato del resto del programa. Sin embargo, una de las caractersticas importantes y di!erenciadora de los subprogramas es la posibilidad de comunicacin entre el programa principal y los subprogramas 8o entre los subprogramas9. +sta comunicacin se realia a traves de una lista de parmetros 2n parmetro es un mtodo para pasar in!ormacin 8valores a variables9 del programa principal a un mdulo o viceversa. &si pues, los mdulos se clasi!ican en' Mdulos sin parmetros 8no e#iste comunicacin entre el programa principal y los mdulos o entre mdulos9. Mdulos con parmetros 8e#iste comunicacin entre el programa principal y los mdulos, y entre ellos9. 2n parmetro es prcticamente, una variable cuyo valor debe ser o bien proporcionado por el programa principal al mdulo o ser devuelto desde el mdulo hasta el programa principal. .or consiguiente hay dos tipos de parmetros' entrada y salida. "os parmetros de entrada son aquellos cuyos valores deben ser proporcionados por el programa principal, y los de salida son aquellos cuyos valores se calcularn en el subprograma o mdulo y se deben devolver al programa principal para su proceso posterior. "as sentencias llamadas a subprogramas constan de dos partes' un nombre de subprograma y una lista de parmetros llamados actuales. nombre&ubprograma(pa",pa',...) +n la declaracin de un subprograma, cuando se incluyen parmetros, estos se denominan parmetros !ormales o !icticios. +llos sirven para contener los valores de parmetros actuales cuando se llama al subprograma. (rocedimiento o funcion nombresubprograma(pf",pf',...) "os parmetros actuales en la llamada al subprograma debe coincidir en n$mero, orden y tipo con los parmetros !icticios de la declaracin del subprograma. +s decir, debe e#istir una correspondencia entre parametros actuales y !icticios. !arametros =alor y !arametros =ariable E.isten dos tipos de parametros, como se indico anteriormente, $ue nos ayudan a transferir3recibir informacin de otros subprogramas, o del programa principal, a saber6 parametros de entrada .por 'alor0 5 parametros de salida o de entrada1salida .'ariable0- !arametros =alor Son parametros unidireccionales que se utilian para proporcionar in!ormacin a un subprograma, pero no pueden devolver valores, al programa llamador. Se les llama parametros de entrada, ya que en la llamada al subprograma el valor del parmetro actual se pasa a la variable que representa a la variable actual. +ste valor puede ser modi!icado dentro del subprograma pero el valor modi!icado no es devuelto al programa o subprograma llamador. !arametros =ariable Se utilian tanto para recibir como para transmitir valores entre el subprograma y el programa llamador. +ste puede actuar como parmetro de salida o de entrada;salida. )ota6 +n la notacin de pseudocdigo representar a estos parametros anteponiendo la palabra var antes del identi!icador R 9. Este algoritmo ilustra la diferencia entre parametros valor parametros variable! la correspondencia entre ellos" 2lgoritmo 3"emplo;%arametros 0aria'les 2, B, @9 enteros procedimiento imprimir .!,3,:9 enteros/ inicio escri'ir .42 B4, !, 4B B4, 3, 4@ B4, :/ #in;imprimir procedimiento pasar .!,39 enteroH var :9 entero/ inicio escri'ir .43ntrada al procedimiento pasar94/ imprimir .!,3,:/ : () ! 1 : escri'ir .4Salida del procedimiento pasar94/ imprimir .!,3,:/ #in;pasar inicio 2 () 2 B () 3 @ () 4 escri'ir .42ntes de llamar al procedimiento pasar4/ imprimir .2,B,@/ pasar .2,B,@/ escri'ir .4!espues del retorno del procedimiento pasar4/ imprimir .2,B,@/ fin "a salida del programa en pantalla sera la siguiente' &ntes de llamar al procedimiento pasar & P C, E P L, 4 P N +ntrada al procedimiento pasar & P C, E P L, 4 P N Salida del procedimiento pasar & P C, E P L, 4 P I (espues del retorno del procedimiento pasar & P C, E P L, 4 P I =ariables Locales y =ariables >lobales Las variables utili"adas en un programa con subprogramas pueden ser de dos tipos6 locales 5 globales. !ariables %ocales 2na variable local es una variable que esta declarada dentro de un subprograma y se dice que es local al subprograma. 2na variable local solo esta disponible durante el !uncionamiento del subprograma, al terminar su !uncin el subprograma y regresar al programa llamador, se pierde el valor que se encontraba guardado en la variable local. !ariables 6lobales "as variables declaradas en el programa principal se denominan variables globales. &l contrario que las variables locales cuyos valores se pueden utiliar solo dentro del subprograma en que !ueron declaradas, las variables globales se pueden utiliar en todo el programa principal y en todos los subprogramas, donde se haga re!erencia al identi!icador de esta variable. #mbito de un ,dentificador "a mayora de los programas tienen una estructura tipo rbol, el programa principal es la ra y de este penden muchas ramas 8procedimientos y !unciones9. "os subprogramas en los que un identi!icador puede ser utiliado se conocen como mbito o alcance del identi!icador, dicho de otro modo, es en esta seccin donde el identi!icador es vlido. eglas de #mbito A. +l mbito de un identi!icador es el dominio en que esta declarado. .or consiguiente un identi!icador declarado en un bloque . puede ser usado en el subprograma . y en todos los subprogramas llamados en el subprograma .. C. Si un identi!icador j declarado en el procedimiento . se redeclara en alg$n subprograma interno 6 invocado en ., entonces el subprograma 6 y todas sus invocaciones a otros subprogramas se e#cluyen del mbito de j declarado en .. !rocedimientos y &unciones Los procedimientos y funciones son la base principal en la programacin modular, estudiaremos a$ui su funcionamiento y su sinta.is, aun$ue debo recordarles $ue es solamente pseudocodigo. 6 4 Procedimientos 2n procedimiento es un subprograma que realia una tarea especi!ica. .uede recibir cero o mas valores del programa que llama y devolver cero o mas valores a dicho programa. 2n procedimiento esta compuesto de un grupo de sentencias a las que se asigna un nombre 8identi!icador9 y constituye una unidad de programa. "a tarea determinada al procedimiento se ejecuta siempre que se encuentra el nombre del procedimiento. "a declaracin indica las instrucciones a ejecutar. Su sinta#is es' procedimiento nombreproc 8lista de par9 declaraciones locales inicio cuerpo del procedimiento 8instrucciones9 !in. 2n procedimiento es llamado en un programa o dentro de otro procedimiento directamente por su nombre en cualquiera de las dos !ormas' nombreproc nombreproc (lista par. actuales) )unciones 2na !uncin es un subprograma que recibe como argumentos o parametros, datos de tipos numerico o no numerico, y devulve un $nico resultado. +sta caracterstica le di!erencia escencialmente de un procedimiento. Su !ormato es el siguiente' !uncion nombre!uncion 8pA,pC,...9 ' tipo a devolver declaraciones locales inicio cuerpo de la !uncin nombre!uncion D- valor a devolver !in 2na !uncin es llamada por medio de su nombre, en una sentencia de asignacin o en una sentencia de salida. Se puede llamar a una !uncin en cualquiera de las siguientes !ormas' nombrefuncion o nombrefuncion(par) id)ar *+ nombrefuncion.