Sie sind auf Seite 1von 47

UNIDAD I: INTRODUCCIN A LA PROGRAMACIN

1.1. Definicin del problema


El primer paso en la planeacin de un proyecto de programacin es preparar un enunciado breve del problema que se solucionar y de las restricciones que existen en su resolucin. El enunciado definitivo del problema debe de incluir una descripcin de la situacin actual y de las metas que debe lograr. La definicin del problema requiere de un entendimiento cabal del dominio del problema y del entorno de ste. Las tcnicas para obtener este conocimiento, por parte del planeador, son entrevistas con el cliente, observacin de las tareas problemticas, y desarrollo de las reales. El planeador debe ser muy hbil en las tcnicas de definicin del problema, ya que distintos representantes del cliente tendrn diferentes puntos de vista, y prejuicios que influirn en la percepcin del alcance del problema. Algunas veces los algoritmos se construyen para dar solucin a un sntoma, y no a la causa primaria del problema. Esto ocurre cuando el problema se entiende, pero no puede resolverse debido a circunstancias econmicas, polticas o sociales, cuando el cliente no es capaz de comunicar el problema real o cuando el planeador no entiende la explicacin del cliente sobre el problema.

2.2. Anlisis de los datos


Antes que nada debemos comprender el problema que se plantea. Es recomendable escribir un enunciado explicito y claro, que describa que es lo que vamos a resolver mediante el problema a desarrollar. Si algn aspecto es confuso, debemos aclararlo para estar seguros de que es lo que se nos pide. Los datos son los elementos bsicos de la informacin que vamos a utilizar en un programa Todos los datos deben contener: Nombre del dato. Ya que nosotros lo asignamos; se recomienda que sea significativo y que nos d una idea de cul es el dato al que nos referimos. Longitud. Tambin lo asignamos a nosotros segn las necesidades del programa.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

Tipo de valor. El tipo de valor que puede adquirir un dato puede variar ligeramente dependiendo del lenguaje de programacin pero en general pueden ser: Numricos (reales) 3.12.88.23 Numricos (enteros) 4,9,1000 Carcter (alfabticos) Pedro, alumno, nombre Carcter (alfanumrico) mex/usa, $500, 3z Fecha 21/03/05 Bolanos F, V VARIABLE Son aquellas literales especiales para depositar datos, se le llama variable por que los datos guardados pueden ser cambiados en cualquier momento. ASIGNACIN Consiste en determinar el valor de una variable, en otras palabras, la asignacin coloca un dato en el interior de la casilla etiquetada con el nombre de la variable CONSTANTE Son datos cuyo valor permanece fijo a lo largo de la ejecucin del problema

1.3. Diseo de la solucin


Consiste en el desarrollo de la solucin problema planteado en forma de algoritmo. Debe ser de una manera detallada y concisa, sin omitir ningn paso ya que de hacerlo el algoritmo simplemente no funcionara. Ejemplo. Que es lo que hace una persona para ir a trabajar. 1. Se despierta 2. Se levanta de la cama 3. Se mete a baar 4. Se seca 5. Se viste

Juan Jos Mndez Medina

juan_333_2@hotmail.com

6. Sale al garaje por el auto 7. Se sube al auto 8. Enciende el auto 9. Arranca el auto 10. Va al trabajo Si omitiramos cualquiera de estos pasos el hombre no podra ir a trabajar de igual manera pasara en el caso de que no hiciramos estos pasos ordenados.

1.5. Prueba y depuracin


Una vez que se ha obtenido el algoritmo, este es sometido a prueba a fin de determinar si resuelve o no el problema planteado en forma satisfactoria. Las pruebas que se le aplican son de diversa ndole y generalmente dependen del tipo de problema que se est resolviendo. Comnmente se inicia la prueba de un algoritmo introduciendo datos vlidos, invlidos e incongruentes y observando cmo reacciona en cada ocasin. El proceso de depuracin consiste en localizar los errores y corregirlos en caso de que estos existan. Si no existen errores, puede entenderse la depuracin como una etapa de refinamiento en la que se ajustan detalles para optimizar el desempeo del programa. Es una de las tareas muy importantes ya que estas mismas se hacen ciertas pruebas o corridas a mano de nuestro programa mismas que nos llevan a la depuracin que no es ms que las correcciones de ciertos errores que pueden ser Errores de ejecucin: no se comprenden las instrucciones. Errores de lgica: son los que no arrojan el resultado que deseamos son los ms difciles de detectar.

1.6. Documentacin
Documentar el cdigo de un programa es aadir suficiente informacin como para explicar lo que hace, punto por punto, de forma que no slo los ordenadores sepan qu hacer, sino que adems los humanos entiendan qu estn haciendo y por qu.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

Porque entre lo que tiene que hacer un programa y cmo lo hace hay una distancia impresionante: todas las horas que el programador ha dedicado a pergear una solucin y escribirla en el lenguaje que corresponda para que el ordenador la ejecute ciegamente.

Documentar un programa no es slo un acto de buen hacer del programador por aquello de dejar la obra rematada. Es adems una necesidad que slo se aprecia en su debida magnitud cuando hay errores que reparar o hay que extender el programa con nuevas capacidades o adaptarlo a un nuevo escenario. Hay dos reglas que no se deben olvidar nunca: todos los programas tienen errores y descubrirlos slo es cuestin de tiempo y de que el programa tenga xito y se utilice frecuentemente todos los programas sufren modificaciones a lo largo de su vida, al menos todos aquellos que tienen xito

Por una u otra razn, todo programa que tenga xito ser modificado en el futuro, bien por el programador original, bien por otro programador que le sustituya. Pensando en esta revisin de cdigo es por lo que es importante que el programa se entienda: para poder repararlo y modificarlo.

1.7. Mantenimiento
El mantenimiento se define como la modificacin del programa por medio de actualizaciones, que mejoran al programa, corrigiendo errores o bien actualizndolos para un mejor funcionamiento. Por ello la documentacin es sin duda muy importante para poder llevar a cabo el mantenimiento.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

UNIDAD II: ALGORITMOS


2.1 Definicin y caractersticas de los algoritmos
Los algoritmos se pueden definir como la secuencia lgica y detallada de pasos para solucionar un problema, por lo que su estudio es til para dar una solucin computable a los problemas que se presentan en las organizaciones. El campo de los algoritmos es amplio y dinmico. Los algoritmos intervienen directamente en la vida de las organizaciones solucionando problemas mediante el empleo de programas de computadora para su aplicacin en las distintas reas de la empresa, de ah, que sean objeto de estudio de la asignatura Anlisis, diseo e implantacin de algoritmos. CARACTERSTICAS 1. FINITUD. El algoritmo debe alcanzar la solucin correcta en un limite de tiempo (tener fin). 2. PRECISIN. Las instrucciones de un algoritmo deben ser claras, precisas y no presentarse a interpretaciones. 3. ENTRADAS Y SALIDAS CLARAMENTE DEFINIDAS. Las entradas se transformarn para obtener las salidas. Por ello un algoritmo debe mostrar con claridad cules sern los resultados y cuales los datos inciales. 4. EFECTIVIDAD. los pasos de un algoritmo deben conducir a la solucin del problema original. La palabra algoritmo viene de Al-Khowarizmi sobrenombre del clebre matemtico Mohamed Ben Musa. Hoy en da, el algoritmo es una forma ordenada de describir los pasos para resolver problemas. Es una forma abstracta de reducir un problema a un conjunto de pasos que le den solucin. Hay algoritmos muy sencillos y de gran creatividad, aunque tambin estn los que conllevan un alto grado de complejidad. Una aplicacin de los algoritmos lo tenemos en los autmatas, los cuales, basados en una condicin de una situacin dada, llevarn a cabo algunas acciones que ya se encuentran programadas en el autmata. Juan Jos Mndez Medina juan_333_2@hotmail.com 5

Como ejemplo tenemos el instructivo para armar un modelo de un avin a escala, si una persona sigue en forma estricta los pasos indicados en el instructivo, al final obtendr como resultado el avin a escala, lo mismo obtendra otra persona que se dedicara a armar el mismo modelo. Los pasos deben ser lo suficientemente detallados para que el procesador lo entienda, en el caso de nuestro ejemplo, el procesador es el cerebro de la persona que est armando el modelo, pero el ser humano tiende a obviar muchas cosas y es muy factible que el humano haga en forma automtica algunos de los pasos del instructivo, sin detenerse a pensar mucho en cmo llevarlos a cabo, pero para una computadora resultara imposible realizar la tarea, ya que la mquina requiere de instrucciones muy detallados para poder ejecutarlas. Ejemplificando lo anterior, considrese que a una persona se le pide intercambiar los nmeros 24 y 9, el sujeto, con cierta lgica, responder inmediatamente 9 y 24 Ahora veamos cmo lo hara el procesador de una computadora: se tendra que indicar de qu tipo son los datos que se van a utilizar, para este caso nmeros enteros; darle nombre a tres variables, digamos num1, num2 y aux, asignarle a la variable num1 el nmero 24, asignarle a num2 el 9 y posteriormente indicarle que a la variable aux se le asigne el valor contenido en la variable num1, a num1 se le asigne el valor contenido en la variable num2 y a esta ltima, se le asigne el valor de la variable aux para posteriormente imprimir los valores de las variables num1 y num2 que exhibirn los nmeros 9 y 24; como observaste, se requieren muchos ms pasos para indicarle a una computadora que realice la misma tarea que un ser humano, y muchas tareas todava la computadora no las puede realizar.

2.2. Reglas para la construccin de algoritmos


Finito. El algoritmo debe de tener, dentro de la secuencia de pasos para realizar la tarea, una situacin o condicin que lo detenga porque de lo contrario, se pueden dar ciclos infinitos que impidan llegar a un trmino. Preciso. Un algoritmo no debe dar lugar a criterios, por ejemplo, qu sucedera si dos personas en distintos lugares se les indicara que prepararan un pastel; suponemos que las personas saben cmo preparar un pastel, y siguiendo las indicaciones de la receta del pastel llegan a un paso en el que se indica que se agregue azcar al gusto, cada persona agregara la azcar de acuerdo a sus preferencias, pero entonces el resultado ya no sera el mismo, ya que los dos pasteles seran diferentes en sus caractersticas. Con este ejemplo concluimos que no se trata de un algoritmo puesto que existe una ambigedad en el paso descrito. Obtener el mismo resultado. Bajo cualquier circunstancia, si se siguen en forma estricta los pasos del algoritmo, siempre se debe llegar a un mismo resultado, Juan Jos Mndez Medina juan_333_2@hotmail.com 6

como por ejemplo: obtener el mximo comn divisor de dos nmeros enteros positivos, armar un modelo a escala, resolver una ecuacin, etctera. Si carece de cualquiera de estas caractersticas, entonces los pasos en cuestin no pueden considerarse como un algoritmo.

2.3 Tipos de algoritmos


Existen gran variedad de algoritmos, a continuacin se menciona algunos de los ms representativos. Algoritmos recursivos Las funciones recursivas son aquellas que hacen llamadas a s mismas en su definicin, simplificando los valores originales de entrada. Las funciones recursivas se pueden implementar cuando el problema que se desea resolver puede simplificarse en versiones ms pequeas del mismo problema, hasta llegar a casos simples de fcil resolucin. Los primeros pasos de una funcin recursiva corresponden a la clusula base, que es el caso conocido hasta donde la funcin descender para comenzar a regresar los resultados, hasta llegar a la funcin con el valor que la invoc. El funcionamiento de una funcin recursiva puede verse como: funcin(k) k funcin(k - 1) k funcin((k - 1) - 1) k funcin(((k - 1) - 1)- 1)

Introduccin a la induccin La recursin se define a partir de tres elementos; uno de stos es la clusula de induccin. A travs de la induccin matemtica se puede definir un mecanismo para encontrar todos los posibles elementos de un conjunto recursivo partiendo de un subconjunto conocido, o bien, para probar la validez de la definicin de una funcin recursiva a partir de un caso base. El mecanismo que la induccin define, parte del establecimiento de reglas que permiten generar nuevos elementos tomando como punto de partida una semilla (caso base).

Juan Jos Mndez Medina

juan_333_2@hotmail.com

Existen dos principios bsicos que sustentan la aplicacin de la induccin matemtica en la definicin de recursin: Primer principio. Si el paso base y el paso inductivo asociados a una funcin recursiva pueden ser probados, la funcin ser vlida para todos los casos que caigan dentro del dominio de la misma. Asimismo, establece que si un elemento arbitrario del dominio cumple con las propiedades definidas en las clusulas inductivas, su sucesor o predecesor, generado segn la clusula inductiva, tambin cumplir con dichas propiedades. Segundo principio. Se basa en afirmaciones de la forma x P(x). Esta forma de induccin no requiere del paso bsico, ya que asume que P(x) es vlido para todo elemento del dominio. Definicin de funciones recursivas Como se mencion anteriormente, la definicin recursiva consta de tres clusulas diferentes: bsica, inductiva y extrema. Bsica. Especifica la semilla del dominio a partir de la cual se generarn todos los elementos del contradominio (resultado de la funcin), utilizndolas reglas definidas en la clusula inductiva. Este conjunto de elementos se denomina caso base de la funcin que se est definiendo. Inductiva. Establece la manera en que los elementos del dominio puedenser combinados para generar los elementos del contradominio. Esta clusula afirma que, a partir de los elementos del dominio, se puede generar un contradominio con propiedades anlogas. Extrema. Afirma que a menos que el contradominio demuestre ser un valor vlido, aplicando las clusulas base e inductiva un nmero finito de veces, la funcin no ser vlida.

A continuacin se desarrolla un ejemplo de la definicin de las clusulas para una funcin recursiva que genera nmeros naturales: Paso bsico. Demostrar que P(n0) es vlido. Induccin. Demostrar que para cualquier entero k n0, si el valor generado por P(k) es vlido, el valor generado por P(k+1) tambin es vlido. A travs de la demostracin de estas clusulas, se puede certificar la validez de la funcin P(n0) para la generacin de nmeros naturales. Clculo de complejidad de una funcin recursiva Juan Jos Mndez Medina juan_333_2@hotmail.com 8

Generalmente las funciones recursivas, por su funcionamiento de llamadas a s mismas, requieren mucha mayor cantidad de recursos (memoria y tiempo de procesador) que los algoritmos iterativos. Un mtodo para el clculo de la complejidad de una funcin recursiva consiste en calcular la complejidad individual de la funcin y despus elevar esta funcin a n, donde n es el nmero estimado de veces que la funcin deber llamarse a s misma antes de llegar al caso base. Algoritmos de bsqueda y ordenacin Al utilizar matrices o bases de datos las tareas que ms comnmente se utilizan son la ordenacin y/o la bsqueda de los datos para los cules existen diferentes mtodos ms o menos complejos segn lo rpido o lo eficaz que sean. Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia especfica de forma ascendente (de menor a mayor) o descendente (de mayor a menor). La seleccin de uno u otro mtodo depende de que se requiera hacer una cantidad considerable de bsquedas y es importante el factor tiempo. Los mtodos de ordenacin ms conocidos son: burbuja, seleccin, insercin, y rpido ordenamiento (quick sort). Vamos a analizar a cada uno de los mtodos de ordenacin mencionados: Burbuja El mtodo de ordenacin por burbuja es el ms sencillo pero el menos eficiente. Se basa en la comparacin de elementos adyacentes e intercambio de los mismos si estos no guardan el orden deseado; se van comparando de dos en dos los elementos del vector. El elemento menor sube por el vector como las burbujas en el agua y los elementos mayores van descendiendo por el vector. Los pasos a seguir para ordenar un vector por este mtodo son: 1. Asigna a n el tamao del vector (si el tamao del vector es igual a 10 elementos entonces n vale 10) 2. Colocarse en la primera posicin del vector. Si el nmero de posicin del vector es igual a n entonces FIN 3. Comparar el valor de la posicin actual con el valor de la siguiente posicin. Si el valor de la posicin actual es mayor que el valor de la siguiente posicin, entonces intercambiar los valores.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

4. Si el nmero de la posicin actual es igual a n -1 entonces restar 1 a n y regresar al paso 2, si no, avanzar a la siguiente posicin para que quede como posicin actual y regresar al paso 3 Vemoslo con un ejemplo: Si el vector est formado por cinco enteros positivos entonces n es igual a 5, procedemos como sigue: Procedimiento Para hasta haga lo siguiente: haga lo siguiente:

Si

Para hasta entonces:

Seleccin En este mtodo se hace la seleccin repetida del elemento menor de una lista de datos no ordenados, para colocarlo como el siguiente elemento de una lista de datos ordenados que crece. La totalidad de la lista de elementos no ordenados, debe estar disponible, para que nosotros podamos seleccionar el elemento con el valor mnimo en esa lista. Sin embargo, la lista ordenada, podr ser puesta en la salida, a medida que avancemos. Los mtodos de ordenacin por seleccin se basan en dos principios bsicos: Seleccionar el elemento ms pequeo del arreglo. Colocarlo en la posicin ms baja del arreglo. Por ejemplo: Consideremos el siguiente arreglo con n=10 elementos no ordenados: 14, 03, 22, 09, 10, 14, 02, 07, 25 y 06 El primer paso de seleccin identifica al 2 como valor mnimo, lo saca de dicha lista y lo agrega como primer elemento a una nueva lista ordenada: Elementos restantes no ordenados Lista ordenada 14, 03, 22, 09, 10, 14, 07, 25, 06 02 En el segundo paso identifica el 3 como el siguiente elemento mnimo y lo retira de la lista para incluirlo en la nueva lista ordenada: Juan Jos Mndez Medina juan_333_2@hotmail.com 10

Elementos restantes no ordenados Lista ordenada 14, 22, 09, 10, 14, 07, 25, 06 02, 03 Despus del sexto paso, se tiene la siguiente lista: Elementos restantes no ordenados Lista ordenada 14, 22, 14, 25 02, 03, 06, 07, 09,10 El nmero de pasadas o recorridos del arreglo es n-1, pues en la ltima pasada se colocan los dos ltimos elementos ms grandes en la parte superior del arreglo. Insercin Este mtodo consiste en insertar un elemento del vector en la parte izquierda del mismo, que ya se encuentra ordenada. Este proceso se repite desde el segundo hasta el n-simo elemento. Ejemplo: Supngase que se desea ordenar los siguientes nmeros del vector: 9, 3, 4, 7 y 2. Primera comparacin: Si (valor posicin 1 > valor posicin 2): 9 > 3? Verdadero, intercambiar. Quedando como 3, 9, 4, 7 y 2 Segunda comparacin: Si (valor posicin 2 > valor posicin 3): 9 > 4? Verdadero, intercambiar. Quedando como 3, 4, 9, 7 y 2 Si (valor posicin 1 > valor posicin 2): 3 > 4? Falso, no intercambiar. Tercera comparacin: Si (valor posicin 3 > valor posicin 4): 9 > 7? Verdadero, intercambiar. Quedando como 3, 4, 7, 9 y 2 Si (valor posicin 2 > valor posicin 3): 4 > 7? Falso, no intercambiar. Con esta circunstancia se interrumpen las comparaciones, puesto que ya no se realiza la comparacin de la posicin 2 con la posicin 1, porque ya estn ordenadas correctamente. La siguiente tabla muestra las diversas secuencias de la lista de nmeros conforme se van sucediendo las comparaciones y los intercambios: Comparacin 1 2 3 4 5 1. 3 9 4 7 2 2. 3 4 9 7 2 3. 3 4 7 9 2 4. 2 3 4 7 9 Juan Jos Mndez Medina juan_333_2@hotmail.com 11

Quick Sort El algoritmo de ordenacin rpida es fruto de la tcnica de solucin de algoritmos divide y vencers, la cual se basa en la recursin, esto es, dividir el problema en sub-problemas ms pequeos, solucionarlos cada uno por separado (aplicando la misma tcnica) y al final unir todas las soluciones. Este mtodo supone que se tiene M que es el arreglo a ordenar y N que es el nmero de elementos que se encuentran dentro del arreglo. El ordenamiento se hace a travs de un proceso iterativo. Para cada paso, se escoge un elemento "a" de alguna posicin especfica dentro del arreglo. Ese elemento "a" es el que se proceder a colocar en el lugar que le corresponda. Por conveniencia se seleccionar "a" como el primer elemento del arreglo. El elemento "a" se procede a comparar con el resto de los elementos del arreglo. Una vez que se termin de comparar "a" con todos los elementos, "a" ya se encuentra en su lugar y a la izquierda de "a" quedan todos los elementos menores a l y a su derecha todos los mayores. Como se describe a continuacin, se tiene como parmetros las posiciones del primero y ltimo elementos del arreglo en vez de la cantidad N de elementos. Consideremos a M como un arreglo de N componentes: Tcnica: Se selecciona arbitrariamente un elemento de M; sea "a" dicho elemento: a = M[1] Los elementos restantes se arreglan de tal forma que "a" quede en la posicin j, donde: 1. Los elementos en las posiciones M[j-1] deben ser menores o iguales que "a". 2. Los elementos en las posiciones M[j+1] deben ser mayores o iguales que "a". Se toma el sub-arreglo izquierdo (los menores de "a") y se realiza el mismo procedimiento. Se toma el sub-arreglo derecho (los mayores de "a") y se realiza el mismo procedimiento. Este proceso se realiza hasta que los sub-arreglos sean de un elemento (solucin). Al final los sub-arreglos conformarn el arreglo M el cual contendr elementos ordenados en forma ascendente. Shell

Juan Jos Mndez Medina

juan_333_2@hotmail.com

12

A diferencia del algoritmo de ordenacin por insercin, este algoritmo intercambia elementos distantes. La velocidad del algoritmo depender de una secuencia de valores (llamados incrementos) con los cuales trabaja utilizndolos como distancias entre elementos a intercambiar. Se considera la ordenacin de Shell como el algoritmo ms adecuado para ordenar muchas entradas de datos (decenas de millares de elementos) ya que su velocidad, si bien no es la mejor de todos los algoritmos, es aceptable en la prctica y su implementacin (cdigo) es relativamente sencilla. Mtodos de bsqueda Secuencial Este mtodo de bsqueda, tambin conocido como lineal, es el ms sencillo y consiste en buscar desde el principio de un arreglo desordenado, el elemento deseado y continuar con cada uno de los elementos del arreglo hasta hallarlo o hasta que ha llegado al final del arreglo y terminar. Binaria o dicotmica Para este tipo de bsqueda es necesario que el arreglo este ordenado. El mtodo consiste en dividir el arreglo por su elemento medio en dos sub-arreglos ms pequeos, y comparar el elemento con el del centro. Si coinciden, la bsqueda termina. Si el elemento es menor, se busca en el primer sub-arreglo, y si es mayor se busca en el segundo. Por ejemplo, para buscar el elemento 41 en el arreglo {23, 34, 41, 52, 67, 77, 84, 87, 93} se realizaran los siguientes pasos: 1. Se toma el elemento central y se divide el arreglo en dos: {23, 34, 41, 52}67-{77, 84, 87, 93} 2. Como el elemento buscado (41) es menor que el central (67), debe estar en el primer sub-arreglo: {23, 34, 41, 52} 3. Se vuelve a dividir el arreglo en dos: {23}-34-{41, 52} 4. Como el elemento buscado es mayor que el central, debe estar en el segundo sub-arreglo: {41, 52} 5. Se vuelve a dividir en dos: {}-41-{52} 6. Como el elemento buscado coincide con el central, lo hemos encontrado. Si el sub-arreglo a dividir est vaco {}, el elemento no se encuentra en el arreglo y la bsqueda termina. Tablas Hash

Juan Jos Mndez Medina

juan_333_2@hotmail.com

13

Una tabla hash es una estructura de datos que asocia claves con valores; su uso ms frecuente se centra en las operaciones de bsqueda ya que permite el acceso a los elementos almacenados en la tabla a partir de una clave generada. Las tablas hash se implementan sobre arreglos que almacenan grandes cantidades de informacin, sin embargo como utilizan posiciones pseudoaleatorias, el acceso a su contenido es bastante lento. Funcin hash La funcin hash realiza la transformacin de claves (enteros o cadenas de caracteres) a nmeros conocidos como hash, que contengan enteros en un rango [0..Q-1], donde Q es el nmero de registros que podemos manejar en memoria, los cuales se almacenan en la tabla hash. La funcin h(k) debe: Ser rpida y fcil de calcular y Minimizar las colisiones Hashing Multiplicativo Esta tcnica trabaja multiplicando la clave k por s misma o por una constante, usando despus alguna porcin de los bits del producto como una localizacin de la tabla hash. Tiene como inconvenientes el que las claves con muchos ceros se reflejarn en valores hash tambin con ceros, y el que el tamao de la tabla est restringido a ser una potencia de 2. Para evitar las restricciones anteriores se debe de calcular h(k) = entero [Q * Frac(C*k)] donde Q es el tamao de la tabla y 0 <= C <= 1. Hashing por Divisin En este caso la funcin se calcula simplemente como h(k) = modulo (k,Q) usando el 0 como el primer ndice de la tabla hash de tamao Q. Es importante elegir el valor de Q con cuidado. Por ejemplo si Q fuera par, todas las claves pares seran aplicadas a localizaciones pares, lo que constituira un sesgo muy fuerte. Una regla simple para elegir Q es tomarlo como un nmero primo.

2.4. Ejercicios con algoritmos


Algoritmo para saber si un alumno esta aprobado o reprobado

Juan Jos Mndez Medina

juan_333_2@hotmail.com

14

Inicio Dame calificacin Si calificacin < 6 Reprobado Si calificacin>= 6 Aprobado Fin Algoritmo para sumar 2 nmeros Inicio Escribe el primer nmero Escribe el segundo nmero Suma = primer nmero + segundo nmero FIN Algoritmo para restar 2 nmeros Inicio Escribe el primer nmero Escribe el segundo nmero Resta = primer nmero - segundo nmero FIN Algoritmo para multiplicar 2 nmeros Inicio Escribe el primer nmero Escribe el segundo nmero Producto = primer nmero * segundo nmero FIN Algoritmo para dividir 2 nmeros Inicio Escribe el primer nmero Escribe el segundo nmero Divisin = primer nmero / segundo nmero FIN Algoritmo para sacar el inters compuesto incio Juan Jos Mndez Medina juan_333_2@hotmail.com 15

variables montoOriginal tasaInteres numeroAnos montoAno inicializar variables montoOriginal = 10000 tasaInteres = 0.05 despliega "Aos" "Monto total" para numeroAnos = 0; numeroAnos < 10; numeroAnos = numerosAnos + 1 montoAno = montoOriginal * (1 + tasaInteres)^numeroAnos despliega montoAno fin para fin Los conductores estan preocupados por el kilometraje recorrido por sus automoviles. Un conductor ha dado seguimiento a varios tanques de gasolina registrando los kilometros recorridos y los litros utilizados en cada tanque. Desarrolle un programa en c++ que utilice una estructura while para introducir los kilometros y los litros utilizados inicio variables kilometros litros promedio totalTanque totalLitros totalKilos inicializa variables totaltanque = 0; totalLitros = 0; totalKilos = 0; ingresa los litros utilizados terminas con -1 ingresa los kilometros recorridos mientras (litros se diferente de -1) totalTanque = kilometros / litros totalLitros = totalLitros + litros totalKilos = totalKilos + kilometros despliega "Los kilometros / litros es igual" totalTanque ingresa los litros utilizados terminas con -1 fin mientras promedio = totalKilos / totalLitros despliega el promedio de litros utilizados fin Algoritmo que eleva x al y utilizando un ciclo while Juan Jos Mndez Medina juan_333_2@hotmail.com 16

inicio varaiables x , y, i, potencia inicializa variables i=1 potencia = 1 ingresa el valor de x ingresa el valor de y mientras (i <= y) potencia es igual a potencia * x i es igual a i + 1 fin mientras despliega ptencia fin Algoritmo para calcular el promedio una clase inicio variables total, contadorCalificaciones, promedio, calificacion total = 0 contadorCalificaciones = 0 ingresa la primera calificacion mientras (calificacion sea diferente de -1) ingresa calificacion total = total + total ContadorCalificaiones = ContadorCalificaciones + 1 fin mientras si (total > 0) promedio = total entre contadorCalificaciones imprime el promedio de clase es igual lee promedio si no imprime no ingresaste ninguna calificacion fin si fin Sumatoria mediante ciclo for sumar los numeros pares desde 2 hasta el 100 inicio declara las variables contador suma inicializa suma con 0 para (contador = 2; contador <= 100; contador es igual a contador mas 2) Juan Jos Mndez Medina juan_333_2@hotmail.com 17

suma es igual a suma + contador fin para despliega suma fin

Juan Jos Mndez Medina

juan_333_2@hotmail.com

18

UNIDAD III: DIAGRAMAS DE FLUJO LINEALES 3.1. Tipos de operadores


Los operadores son simbolos que indican como son maipulados los datos. Se pueden clasificar en los siguientes grupos: Aritmticos Lgicos Relacionales Unitarios Lgicos para manejo de bits Asignacin Operador ternario para expresiones condicionales y otros

3.1.1. Aritmticos
+ * / % Suma los operandos, pueden ser enteros o reales Resta los operandos, pueden ser enteros o reales Multiplicacin los operandos, pueden ser enteros o reales Divicion los operandos, pueden ser enteros oreales. Si ambos operandos son enteros el resultado es entero. En el resto de los casos el resultado es real Modulo o resto de una divisin entera. Los operandos tienen que ser enteros

3.1.2. Relacionales
> < >= <= Primer operando menor que el segundo Primer operando mayor que el segundo Primer operando menor 0 igual que el segundo Primer operando mayor o iguaal que el segundo juan_333_2@hotmail.com 19

Juan Jos Mndez Medina

== =

Primer operando igual que el segundo Primer operando distinto que el segundo

El resultado de cualquier evaluacin de este tipo, es un valor ``cierto'' (true) o ``falso'' (false). La mayora de lenguajes tienen algn tipo predefinido para representar estos valores (boolean, bool, etc); sin embargo en C, se utilizan valores enteros para representar esto.

Ejemplo Algoritmo para encontrar el mayor de tres nmeros inicio escribe el numero1 escribe el numero2 escribe el numero3 mayor = numero1 si mayor < numero 2 entonces mayor = numero2 si mayor < numero3 entonces mayor = numero3 fin

3.1.3. Lgicos
&& AND. Da como resultado el valor lgico uno si ambos operandos son distintos de cero si uno de ellos es cero el resultado es el valor lgico 0. Si el primer operando es 0 el segundo operando no es evaluado. OR. El resultado es 0 si ambos operandos son 0. Si uno de los operandos tiene un valor distinto de 0, el resultado es 1. Si el primer operando es distinto de 0 el segundo operando no es evaluado NOT. El resultado es 0 si el operando tiene un valor distinto de cero, y 1 en caso contrario

||

El resultado es tipo entero. Los operandos pueden ser enteros reales o punteros. Juan Jos Mndez Medina juan_333_2@hotmail.com 20

Inicio "introduzca el valor introduzca el valor despliega ("valor1 && valor2 es: (valor1 && valor2)); printf("valor1 || valor2 es: %d\n", (valor1 || valor2)); fin

3.2.1. Expresiones
Una expresin es una secuencia de operadores y operandos que especifican una operacin determinada. Tambin pueden definirse como una combinacin de operadores y operandos que dan lugar a un valor nico. Ejemplo: 9.0 / 5.0 * cent + 32 Esta expresin sirve para cambiar grados Centgrados a grados Fahrenheit. Expresin de Boole Una expresin de Boole da como resultado un valor lgico 0 1, los operandos que intervienen en una expresin de Boole pueden ser operadores lgicos y operadores de relacin. Ejemplo: p = x == y. El resultado de esta expresin es p = 0 q = (x < y) && (y < z). El resultado de q = 1

3.2.2. Contadores
Un contador es una variable que acumula las veces que se pasa por ella. Se suele denominar contador cuando el incremento de la variable es de 1 en 1, pero no tiene por qu ser as obligatoriamente. La sintaxis genrica sera: variable = variable + 1. Ejemplo: La repeticin controlada por un contador requiere lo siguiente: 1. El nombre de una variable de control (contador de ciclo). Juan Jos Mndez Medina juan_333_2@hotmail.com 21

2. Un valor inicial para la variable de control. 3. La condicin que evalua el valor final de la variable de control, (es decir si el ciclo debe continuar). 4. El incremento o decremento mediante el cual se modifica la variable de control cada vez que se repite el ciclo. Algoritmo de repeticin controlada por un contador 1 Iinicio 2 contador = 1 3 mientras contador <= 10 4 contador = contador + 1 5 fin mientras 6 fin La lnea cuatro incrementa el contador en 1 cada vez que se ejecuta el ciclo, la condicin de continuidad del ciclo es la lnea 3, determina si el valor de la variable de control es menor o igual a diez. El ciclo terminar cuando la variable de control se mayor a 10.

3.2.3 Acumuladores
Es una variable que tambin se suele usar en los bucles y que se incrementa o decrementa en cada iteracin del bucle, pero no en una cantidad constante. Ejemplo Inicio cont = 0 suma = 0 mientras cont diferente de 3 leer num suma = suma + num Cont = cont +1 fin mientras despliega suma fin En este ejemplo tenemos un contador y un acumulador. El acumulador es la variable suma es el acumulador ya que en cada repeticin del ciclo lee el valor de num y lo asigna a la variable suma, en la siguiente repeticin la varible suma tiene el valor del primer nmero ingresado. Entonces asigna el valor del segundo nmero y lo suma a la variable suma. Juan Jos Mndez Medina juan_333_2@hotmail.com 22

3.3 Definicin y clasificacin de diagramas


Diagrama de Flujo Conjunto de smbolos estndar en los cuales se encuentran escritos los pasos del algoritmo, dichos smbolos se encuentran unidos por medio de flechas, denominadas lneas de flujo, que indican la secuencia en que se deben de ejecutar.

3.4. Simbologa
Los smbolos ms frecuentemente empleados se describen en la tabla siguiente: Nombre Terminal Smbolo Funcin Representa el inicio y fin de un programa. Tambin puede representar una parada o interrupcin programada que sea necesaria realizar en un programa. Cualquier tipo de introduccin de datos en la memoria desde los perifricos o registro de informacin procesada en un perifrico. Cualquier tipo de operacin que pueda originar cambio de valor, formato o posicin de la informacin almacenada en memoria, operaciones aritmticas, de transformaciones, etc. Indica operaciones lgicas o de comparacin entre datos (normalmente dos) y en funcin del resultado de la misma determina (normalmente si y no) cual de los distintos caminos alternativos del programa se debe seguir. Sirve para enlazar dos partes cualesquiera de un diagrama a travs de un conector en la salida y otro conector en la entrada. Se refiere a la conexin en la misma pagina del diagrama

Entrada/Salida

Proceso

Decisin

Conector Misma Pgina

Juan Jos Mndez Medina

juan_333_2@hotmail.com

23

indicador de direccin o lnea de flujo Conector diferente pgina Impresora

Indica el sentido de la ejecucin de las operaciones

Conexin entre dos organigrama situado diferentes.

puntos del en paginas

Se utiliza en ocasiones en lugar del smbolo de salida. El dibujo representa un pedazo de hoja.

Entrada Teclado

Se utiliza en ocasiones en lugar del smbolo de entrada. Originalmente representa una tarjeta perforada. Se utiliza en ocasiones en lugar del smbolo de entrada.

Pantalla

Se utiliza en ocasiones en lugar del smbolo de salida.

Tabla 1. Smbolos Estndar para Diagramas de Flujo

3.5. Estructuras de control


En lenguajes de programacin, las estructuras de control permiten modificar el flujo de ejecucin de las instrucciones de un programa. Con las estructuras de control se puede: De acuerdo a una condicin, ejecutar un grupo u otro de sentencias (IfThen-Else y Select-Case) Ejecutar un grupo de sentencias mientras exista una condicin (DoWhile) Ejecutar un grupo de sentencias hasta que exista una condicin (DoUntil) juan_333_2@hotmail.com 24

Juan Jos Mndez Medina

Ejecutar un grupo de sentencias un nmero determinado de veces (ForNext) Etc

Todas las estructuras de control tienen un nico punto de entrada y un nico punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programacin se rija por los principios de la programacin estructurada. Los lenguajes de programacin modernos tienen estructuras de control similares. Bsicamente lo que vara entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.

3.5.1. Secuenciales
Es cuando una instruccin sigue a otra en secuencia, es decir, la salida de una instruccin es la entrada de la siguiente. FLUJOGRAMA: DIAGRAMAS NS: PSEUDOCDIGO: Leer num Num num*2 Escribir num

3.5.2. Selectivas
Selectiva La instruccin selectiva determina si una determinada instruccin se ejecuta o no, segn el cumplimiento de una condicin P.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

25

Diagrama de flujo que muestra el funcionamiento de la instruccin condicional La condicin P es una variable booleana o una funcin reducible a booleana (lgica, Verdadero/Falso). Si esta condicin es cierta se ejecuta Instrucciones1, si no es as, sta no se ejecuta. Selectiva doble (alternativa) La instruccin selectiva realiza una instruccin de dos posibles, segn el cumplimiento de una condicin P.

Diagrama de flujo que muestra el funcionamiento de la instruccin condicional

La condicin P es una variable booleana o una funcin reducible a booleana (lgica, Verdadero/Falso). Si esta condicin es cierta se ejecuta Instrucciones1, si no es as, entonces se ejecuta Instrucciones2. Selectiva mltiple Tambin es comn el uso de una seleccin mltiple que equivaldra a anidar varias funciones de seleccin.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

26

En este caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, si una de ellas se cumple las dems tienen que ser falsas necesariamente, hay un caso si no que ser cierto cuando las dems condiciones sean falsas. En esta estructura si Condicin1 es cierta, entonces se ejecuta slo Instrucciones1. En general, si Condicin es verdadera, entonces slo se ejecuta Instrucciones Selectiva mltiple-Casos Una construccin similar a la anterior (equivalente en algunos casos) es la que se muestra a continuacin. En este caso hay un Indicador es una variable o una funcin cuyo valor es comparado en cada caso con los valores "Valor", si en algn caso coinciden ambos valores, entonces se ejecutarn las Instrucciones correspondientes. La seccin en otro caso es anloga a la seccin si no del ejemplo anterior.

3.5.2.1. If, if.else


Los programas utilizan estructuras de seleccin para elegir entre cursos de accin alternativos. Por ejemplo suponga que la calificacin mnima aprobatoria es 60. La instruccin de pseudocdigo. if calificacin del estudiante es mayor o igual a 60 Imprime aprobado

Juan Jos Mndez Medina

juan_333_2@hotmail.com

27

La estructura de seleccin if realiza una accin indicada solamente cuando la condicin es verdadera: de lo contrario se evita dicha accin. En cambio la estructura de seleccin if/else permite al programador especificar una accin a realizar cuando la condicin es verdadera y otra cuando la condicin es falsa, por ejemplo la instruccin en pseudocdigo. if calificacin del estudiante es mayor o igual a 60 Imprime aprobado else Imprime reprobado

3.5.2.2. Switch
En ocasiones un algoritmo contendr serie de decisiones en las que evala una variable de manera separada para cada uno de los valores integrales constantes que puede asumir, y que llevan a cabo diferentes acciones. La estructura de seleccin mltiple switch se utiliza para este tipo de toma de decisiones. La estructura switch consiste en una serie de etiquetas case y un caso opcional default. Ejemplo en pseudocdigo. inicio int calificacion int aContador = 0 int bContador = 0 int cContador = 0 int dContador = 0 int fContador = 0 Juan Jos Mndez Medina juan_333_2@hotmail.com 28

while (calificacion != EOF) switch(calificacion) case 'A' case 'a' aContador = aContador + 1 break case 'B' case 'b' bContador = bContador + 1 break case 'C' case 'C' cContador = cContador + 1 break case 'D' case 'd' dContador = dContador + 1 break case 'F' case 'f' bContador = bContador + 1 break depliega Calificacion: aContador depliega Calificacion: bContador depliega Calificacion: cContador depliega Calificacion: dContador depliega Calificacion: fContador fin

3.5.3. Repetitivas
Una estructura de repeticin (tambin llamada estructura cclica o de ciclo) permite al programador especificar que un programa debe repetir una accin mientras alguna condicin permanezca verdadera.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

29

3.5.3.1. For
Esta estructura permite repetir la ejecucin de una accin o de un grupo de acciones un nmero determinado de veces; la sintxis es la siguiente: desde indice!inicio hasta fin [con paso valor] hacer accin fin desde do indice=inicio, fin, paso accin end do

El funcionamiento de la estructura es el siguiente: En primer lugar, se asigna a la variable indice el valor de inicio. El bucle se ejecuta mientras ndice no alcance el valor de fin. En cada iteracin el valor de ndice es incrementado segn el paso indicado y se ejecuta la accin o grupo de acciones encerrados en el bucle. En caso de que no se indique ningn paso el que se emplear sera +1.

A continuacin se muestran algunos ejemplos: desde n!1 hasta 10 hacer escribir n fin desde do n=1, 10 print *, n end do El bucle anterior imprime por pantalla los nmeros del 1 al 10. desde n!10 hasta 1 hacer escribir n fin desde do n=10, 1 print *, n end do Juan Jos Mndez Medina juan_333_2@hotmail.com 30

El bucle anterior no se ejecuta nunca puesto que no se puede alcanzar 1 comenzando en 10 y avanzando con paso +1; atencin! Un error frecuente es pensar que el bucle se ejecuta de forma infinita. desde n!10 hasta 1 con paso 2 hacer escribir n fin desde do n=10, 1, -2 print *, n end do Este bucle escribe los nmeros pares de 10 a 2 en orden inverso. Ejemplos en C++ Programa que calcula la suma de los enteros del 1 al 10 #include <iostream> using namespace std; int main() { int contador, suma; suma = 0; for (contador = 2; contador <= 100; contador += 2) { suma += contador; } cout <<"la suma es: " << suma << endl; return 0; } Programa que utiliza un arreglo bidimensional el cual rellena el arreglo mediante la estructura for #include <iostream> using std::cout; using std::endl; #include <cstdlib>

Juan Jos Mndez Medina

juan_333_2@hotmail.com

31

void despliegaArreglo(int [] [3]); int main() { int arreglo1[2][3] = { {1,2, 3}, {4, 5, 6} }; int arreglo2[2][3] = {1, 2, 3, 4, 5}; int arreglo3[2][3] = { {1,2}, {4} }; cout << "Los valores del arreglo1 por fila son:" << endl; despliegaArreglo(arreglo1); cout << "Los valores del arreglo2 por fila son:" << endl; despliegaArreglo(arreglo2); cout << "Los valores del arreglo3 por fila son:" << endl; despliegaArreglo(arreglo3); system("pause"); return 0; } void despliegaArreglo(int a[][3]) { for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << a[i][j] << ' '; } cout << endl; } }

3.5.3.2. While
La instruccin WHILE se usa para implementar una estructura de repeticin (bucle while) en la que la repeticin se controla mediante una expresin booleana y contina ejecutndose mientras esta expresin permanece cierta, finalizando cuando se hace falsa. La instruccin en pseudocdigo. while existan artculos en mi lista de compras compra el siguiente articulo y elimnalo de la lista fin while Juan Jos Mndez Medina juan_333_2@hotmail.com 32

Ejemplo en C++ Programa que calcula x a la y utiliza un ciclo while #include <iostream> using namespace std; int main() { int x, y, i, potencia; i = 1; potencia = 1; cout << "Ingresa el valor de x: "; cin >> x; cout << "Ingresa el valor de y: "; cin >> y; while (i <= y ) { potencia *= x; i++; } cout << "El resultado es : " << potencia << endl; return 0; } Programa que calcula el promedio de una clase en C++ #include <iostream> #include <iomanip> using namespace std; int main() // funcion principal { int total, conCali, cali; double promedio; cout <<"Ingresa calificacion (-1) para terminar : "; cin >> cali; total = 0; conCali = 0; while(cali != -1) { total += cali; Juan Jos Mndez Medina juan_333_2@hotmail.com 33

conCali++; cout << "ingresa calificacion (-1) para terminar: "; cin >> cali; } if (total > 0) { promedio = static_cast<double>(total) / conCali; cout << "El promedio del grupo es : " << setprecision(2) << fixed << promedio << endl; } else { cout << "No ingresaste calificaciones" << endl; } return 0; } Diagrama de flujo para duplicar el producto de la variable p hasta que sea mayor a mil

Juan Jos Mndez Medina

juan_333_2@hotmail.com

34

3.5.3.3 DoWhile
La estructura de repeticin do/while es similar a la estructura while. En la estructura while la evaluacin de continuidad ocurre al principio del ciclo, antes de que se ejecute el cuerpo de este. La estructura do/while evala la condicin de continuidad despus de que el cuerpo se ejecuta al menos una vez. Cuando un do/while termina la ejecucin termina con la instruccin que se encuentra despus de la clausula while. do { sentencias; } while ( expresinBooleana ); La sentencia do-while es el constructor de bucles menos utilizado en la programacin, pero tiene sus usos, cuando el bucle deba ser ejecutado por lo menos una vez. Por ejemplo, cuando se lee informacin de un archivo, se sabe que siempre se debe leer por lo menos un carcter:

int c; do { c = System.in.read( ); } while ( c != -1 ); // No se puede leer ms (Fin fichero)

3.6. Elaboracin de diagramas


Reglas de los diagramas de flujo Debe de indicar claramente dnde inicia y dnde termina el diagrama. Cualquier camino del diagrama debe de llevarte siempre a la terminal de fin. Organizar los smbolos de tal forma que siga visualmente el flujo de arriba hacia abajo y de izquierda a derecha. No usar lenguaje de programacin dentro de los smbolos.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

35

Centrar el diagrama en la pgina. Las lneas deben ser verticales u horizontales, nunca diagonales.

No cruzar las lneas de flujo empleando los conectores adecuados sin hacer uso excesivo de ellos.

No fraccionar el diagrama con el uso excesivo de conectores. Solo debe llegar una sola lnea de flujo a un smbolo. Pero pueden llegar muchas lneas de flujo a otras lneas.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

36

Las lneas de flujo deben de entrar a un smbolo pro la parte superior y/o izquierda y salir de l por la parte inferior y/o derecha. Evitar que el diagrama sobrepase una pgina; de no ser posible, enumerar y emplear los conectores correspondientes. Usar lgica positiva, es decir, realizar procesos cuando es verdadera la condicin y expresar las condiciones de manera clara (por ej., "no es a =/= de b" ==> "a=b"). Comentar al margen nicamente cuando sea necesario.

Diagrama de flujo Juan Jos Mndez Medina juan_333_2@hotmail.com 37

3.7. Pseudocdigo
Lenguaje de especificacin de algoritmo que utiliza para representar las acciones palabras reservadas en ingles, las cuales son similares a las de los lenguajes de programacin, tales como start, end, if-then-else, while-wend, repeat-until, etc. (o su equivalente en espaol) Este naci como un lenguaje similar al idioma ingles y era un medio de representar bsicamente las estructuras de control de programacin estructurada. El pseudocdigo no puede ser ejecutado por una computadora. Una ventaja del pseudocdigo es que puede ser traducido fcilmente a lenguajes de programacin como Pascal, C, COBOL, QuickBasic, etc. La escritura del pseudocdigo exige normalmente la indentacin (sangra en el margen izquierdo) o en su defecto, numeracin jerrquica. Ejemplo Algoritmo: Hacer un sndwich de mermelada con crema de cacahuate 1. Inicio 2. Tomar una rebanada de pan 3. Untar mermelada sobre una cara del pan 4. Tomar segunda rebanada de pan 5. Untar crema de cacahuate sobre una cara del segundo pan 6. Colocar las caras untadas de los panes juntas 7. Fin

3.8. Prueba de escritorio


Consiste en dar diferentes datos de entrada al diagrama y seguir la lgica del programa hasta tener un resultado verdico o si es necesario hacer ajustes al programa y volver a realizar la prueba. Prueba de escritorio para el algoritmo para multiplicar 2 nmeros Prueba 1: Inicio Escribe el primer nmero = 1 Escribe el segundo nmero = 2 Juan Jos Mndez Medina juan_333_2@hotmail.com 38

Producto = 1 * 2 Producto = 2 FIN Prueba 2: Inicio Escribe el primer nmero = 4 Escribe el segundo nmero = 2 Producto = 4 * 2 Producto = 8 FIN Prueba 3: Inicio Escribe el primer nmero = -5 Escribe el segundo nmero = 4 Producto = -5 * 4 Producto = 20 FIN Despus de realizar las pruebas convenientes nos podemos dar cuenta de que el algoritmo funciona de manera correcta. Por lo que pasarlo a un lenguaje de programacin no debe ser una tarea difcil

Juan Jos Mndez Medina

juan_333_2@hotmail.com

39

UNIDAD IV: DISEO MODULAR 4.1. Funciones


La mayora de los programas que resuelven problemas reales son ms grandes que todos los ejemplos que se han presentado hasta el momento. La experiencia nos ha demostrado que la mejor manera de desarrollar y mantener un programa grande es construirlo a partir de piezas o componentes ms pequeos, ms manejables que el programa original esta tcnica se llama divide y vencers. En programacin, una funcin es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra funcin o procedimiento. Una funcin puede llamarse mltiples veces e incluso llamarse a s misma (funcin recurrente). Las funciones pueden recibir datos desde afuera al ser llamadas a travs de los parmetros y deben entregar un resultado. Se diferencian de los procedimientos porque estos no devuelven un resultado. En general las funciones deben tener un nombre nico en el mbito para poder ser llamadas, un tipo de dato de resultado, una lista de parmetros de entrada y su cdigo. Las funciones permiten al programador dividir un programa en mdulos. Todas las variables definidas dentro de una funcin son variables locales: estas se conocen slo en la funcin en la que se definen. La mayora de las personas tienen una lista de parmetros que proporcionan los medios para comunicar informacin entre funciones. Los parmetros de una funcin son tambin variables locales de esa funcin. Existen diferentes motivos para funcionalizar un programa. El mtodo divide y vencers hace que el desarrollo de un programa sea ms manejable. Otro motivo es la reutilizacin de software, es decir utilizar funciones de software existentes como bloques de construccin para crear programas. Otro motivo es evitar la repeticin de cdigo en los programas. Empacar cdigo como una funcin permite la ejecucin de ste desde diferentes ubicaciones de un programa mediante una simple llamada a funcin.

Juan Jos Mndez Medina

juan_333_2@hotmail.com

40

4.1.1 Sin parmetros


Una funcin sin parmetros, tambin conocida como procedimiento es un subprograma que realiza una tarea especfica. Para invocarlo, es decir, para hacer que se ejecute, basta con escribir su nombre en el cuerpo de otro procedimiento o en el programa principal. Pero, hay que tener muy en cuenta que su declaracin debe hacerse antes de que sea llamado por otro mdulo. La diferencia principal entre las funciones con parmetros y las funciones sin parmetros es que las primeras no necesitan tomar ningn valor de alguna otra funcin para poder realizar su trabajo.

4.1.2. Con parmetros


Las funciones con parmetros toman un valor enviado por otra funcin para poder realizar su trabajo. Ejemplos: en C++ Simula el juego de casino craps #include <iostream> #include <cstdlib> #include <ctime> #include <cstdlib> using namespace std; int TiraDados(void); int main() { enum status {CONTINUA, PIERDE, GANA}; int suma, miPunto; status estadoJuego; srand(time(0)); suma = TiraDados(); switch(suma) { case 7: case 11: estadoJuego = GANA; break; case 2: case 6: case 12: Juan Jos Mndez Medina juan_333_2@hotmail.com 41

estadoJuego = PIERDE; break; default: estadoJuego = CONTINUA; miPunto = suma; cout << "Mi punto es: " << miPunto << endl; break; } while (estadoJuego == CONTINUA) { suma = TiraDados(); if (suma == miPunto) { estadoJuego = GANA; } else if(suma == 7) { estadoJuego = PIERDE; } } if (estadoJuego == GANA) cout << "El jugador gana" << endl; else cout << "El jugador pierde" << endl; system("PAUSE"); return 0; } int TiraDados(void) { int dado1, dado2, sumaTrabajo; dado1 = 1 + rand() % 6; dado2 = 1 + rand() % 6; sumaTrabajo = dado1 + dado2; cout << "El jugador tiro: " << dado1 << " + " << dado2 << " = " << sumaTrabajo << endl; return sumaTrabajo; }

Juan Jos Mndez Medina

juan_333_2@hotmail.com

42

Este cdigo utiliza la funcin tiradados() para tirar los dados en el casino se simula el tiro de dados con nmeros que se generan aleatoriamente. La funcin principal recibe el resultado para poder evaluar si el jugador gana o pierde. Programa en C++ que calcula el factorial de los primeros diez enteros meidnate la funcion factorial #include <iostream> #include <cstdlib> #include <iomanip> using namespace std; unsigned long Factorial(unsigned long); int main () { int num; for (int i = 1; i <= 15; i++) { num = Factorial(i); cout << setw(2) << i << "! = " << num << endl; } system("PAUSE"); return 0; } unsigned long Factorial(unsigned long a) { unsigned long fac = 1; while (a != 1) { fac *= a; a--; } return fac; } Programa en C++ que calcula el cuadrado de los primeros diez enteros utiliza la funcion cuadrado #include <iostream> using namespace std;

Juan Jos Mndez Medina

juan_333_2@hotmail.com

43

int cuadrado (int); int main() { int num; for (int i = 1; i <= 10; i++) { num = cuadrado(i); cout <<" " << num; } cout << endl; return 0; } int cuadrado(int x) { return x * x; }

Juan Jos Mndez Medina

juan_333_2@hotmail.com

44

BIBLIOGRAFIA
Hopcroft, John, Rajeev Motwani, y J. D. Ullman, Introduccin a la teora de autmatas, lenguajes y computacin, 2 edicin. Madrid, Pearson Addison Wesley, 2002, pp 584. Manzano Pealoza, Gilberto, Tutorial para la asignatura Anlisis, diseo e implantacin de algoritmos, 1 edicin, Fondo editorial FCA, Mxico, 2003. Sedgewick, Robert, Algoritmos en C++, Mxico, Pearson Education, 1995. Deitel & Deitel, C++ como programar, cuarta edicin, Prentice Hall, pp 1320 Deitel & Deitel, C# como programar, segunda edicin, Prentice Hall, pp 1410 Deitel & Deitel, JAVA como programar, septima edicin, Prentice Hall, pp 1530 Francisco Javier Ceballos, Enciclopedia del lenguaje C, primera edicin, Alfa Omega, pp 884 Francisco Javier Ceballos, JAVA 2 Curso de programacin, tercera edicin, Alfa Omega, pp 834

Juan Jos Mndez Medina

juan_333_2@hotmail.com

45

INDICE: UNIDAD I: INTRODUCCIN A LA PROGRAMACIN.....................................1 1.1. Definicin del problema........................................................................1 2.2. Anlisis de los datos.............................................................................1 1.3. Diseo de la solucin...........................................................................2 1.5. Prueba y depuracin.............................................................................3 1.6. Documentacin......................................................................................3 1.7. Mantenimiento.......................................................................................4 UNIDAD II: ALGORITMOS................................................................................5 2.1 Definicin y caractersticas de los algoritmos....................................5 2.2. Reglas para la construccin de algoritmos.......................................6 2.3 Tipos de algoritmos...............................................................................7 2.4. Ejercicios con algoritmos...................................................................14 UNIDAD III: DIAGRAMAS DE FLUJO LINEALES.....................................18 3.1. Tipos de operadores...........................................................................18 3.1.1. Aritmticos........................................................................................18 3.1.2. Relacionales......................................................................................18 3.1.3. Lgicos..............................................................................................19 3.2.1. Expresiones......................................................................................20 3.2.2. Contadores........................................................................................20 3.2.3 Acumuladores....................................................................................21 3.3 Definicin y clasificacin de diagramas............................................21 3.4. Simbologa...........................................................................................22 3.5. Estructuras de control........................................................................23 3.5.1. Secuenciales.....................................................................................24 3.5.2. Selectivas..........................................................................................24 3.5.2.1. If, if.else.......................................................................................26 3.5.2.2. Switch.............................................................................................27 3.5.3. Repetitivas........................................................................................28 3.5.3.1. For...................................................................................................28 Juan Jos Mndez Medina juan_333_2@hotmail.com 46

3.5.3.2. While...............................................................................................31 3.5.3.3 DoWhile........................................................................................33 3.6. Elaboracin de diagramas..................................................................34 3.7. Pseudocdigo......................................................................................36 3.8. Prueba de escritorio............................................................................37 UNIDAD IV: DISEO MODULAR................................................................39 4.1. Funciones.............................................................................................39 4.1.1 Sin parmetros..................................................................................40 4.1.2. Con parmetros................................................................................40 BIBLIOGRAFIA............................................................................................44

Juan Jos Mndez Medina

juan_333_2@hotmail.com

47

Das könnte Ihnen auch gefallen