You are on page 1of 111

Principios de Programacin

Unidad I Introduccin a la programacin

1.1. Definicin del problema 1. Definicin del problema Requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle. Fases de la programacin: 1.- ANALISIS: Cuando se tiene y piensa la idea o problema a ejecutar. 2.- DISEO: Se plantea un algoritmo con los pasos a dibujar o realizarse. 3.- IMPLEMENTACION: Los pasos de algoritmo se transforma en un cdigo pascal y se plasman en el programa 4.- PRUEBAS: Se corre el programa y se registra su efectividad. 5.- DEPURACION: despus de haber corrido el programa se hacen las correcciones necesarias. 6.- RETROALIMENTACION Y LIBERACION: Despus de haber corregido los errores se regresa al paso 4 en caso de haber existido. Introduccin a la Programacin Este libro est hecho para personas que no tienen nociones sobre programacin, para orientarlas en el tema y encaminarlas a los conceptos bsicos de la programacin y al desarrollo de programas utilizando algunos lenguajes de programacin. Programacin Se llama Programacin a la implementacin de un algoritmo en un determinado lenguaje de programacin, para realizar un programa. Algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Programa (Software en ingls) es una secuencia de instrucciones que una computadora puede interpretar y ejecutar. El proceso de creacin de software es materia de la ingeniera del software, una de las ramas propias de la Ingeniera Informtica. Segn Niklaus Wirth un programa est formado por algoritmos y estructura de datos. Se han propuesto diversas tcnicas de programacin, cuyo objetivo es mejorar tanto el proceso de creacin de software como su mantenimiento. Entre ellas se pueden mencionar las programaciones lineales, estructurada, modular y orientada a objetos.

Lenguajes de Programacin Lenguaje de programacin es el idioma utilizado para controlar el comportamiento de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Hay muchos lenguajes de programacin, pero para programar no es necesario conocer todos los lenguajes, es igual que cuando hablamos, podemos comunicarnos en espaol aunque no sepamos alemn. Aunque la palabra debera ser idioma ya que lenguaje realmente abarca todos los idiomas pero en computacin equivocadamente se usa el trmino lenguaje cuando el trmino correcto es idiomas de programacin. En la actualidad los lenguajes de programacin estn escritos para ser compresibles por el ser humano, a este cdigo se le llama cdigo fuente, pero no es comprendido por la mquina ya que esta solo maneja el lenguaje binario. La compilacin es el proceso de traducir un programa en cdigo fuente a programa en cdigo objeto (que usa el lenguaje binario), el programa encargado de compilar se llama compilador. La mayoria de software de programacin trae su propio compilador. Tipos de lenguajes de programacin Los lenguajes de programacin se clasifican en varios tipos, los hay por nivel, y por la forma como se ejecutan. Por nivel: Hay lenguajes de programacin de alto nivel y lenguajes de bajo nivel. Los lenguajes de alto nivel permiten que con pocas palabras se logre hacer lo mismo que se logra con un lenguaje de bajo nivel. Ejemplos de lenguajes de alto nivel: C++, Python, Java Ejemplos de lenguaje de bajo nivel: assembler Por la forma como se ejecutan Hay lenguajes compilados e interpretados. Los lenguajes compilados necesitan de un programa especial que lea el cdigo fuente y cree un archivo binario ejecutable para una plataforma especfica. Ejm: C++, Pascal. Los lenguajes interpretados necesitan de un programa que traduzca en directo el cdigo fuente escrito a instrucciones de la plataforma en la que se ejecutan. Ejm: Python, Visual Basic Script. Los primeros son ms rpidos, mientras que los segundos son ms lentos, esto debido a que al compilar un programa las ordenes son ms entendibles para la computadora, mientras que al interpretarlo la mquina primero debe leer el cdigo y convertir al paso las instrucciones a instrucciones de mquina entendibles para ella. Entorno de Desarrollo Integrado Entorno de Desarrollo Integrado (en ingls Integrated Development Environment 'IDE'): Es un programa compuesto por un conjunto de herramientas para un programador. Estos IDE son programas que sirven para programar, ya sea en un lenguaje de programacin o en varios lenguajes. Los IDE que permiten crear programas en muchos lenguajes de programacin permiten usar un solo programa para trabajar en varios lenguajes de programacin, es decir no limitan al programador.

1.2. Anlisis de los Datos 2. Anlisis del problema El propsito del anlisis de un problema es ayudar al programador para llegar a una cierta comprensin de la naturaleza del problema. El problema debe estar bien definido si se desea llegar a una solucin satisfactoria. Para poder definir con precisin el problema se requiere que las especificaciones de entrada, proceso y salida sean descritas con detalles. Entrada, son todos los datos que hay que ingresar para la resolucin del problema. Proceso, son los diferentes procedimientos en los cuales usare los datos proporcionados por el usuario en el paso anterior para resolver el problema. Salida, la resolucin del problema. Una buena definicin del problema, junto con una descripcin detallada de las especificaciones de entrada y salida, son los requisitos ms importantes para llegar a una solucin eficaz. El anlisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se solicita . la segunda lectura deber servir para responder a las preguntas: Qu informacin debe proporcionar la resolucin del problema? Qu datos se necesitan para resolver el problema?

La respuesta a la primera pregunta indicara los resultados deseados o las salidas del problema. La respuesta a la segunda pregunta indicara que datos proporcionan o las entradas del problema. En esta fase debemos aprender a analizar la documentacin de la empresa, investigar, observar todo lo que rodea el problema. 1.3. Diseo de la solucin 3. Diseo de la solucin Una computadora no tiene la capacidad para solucionar ms que cuanto se le proporcionan los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la maquina constituyen, como ya sabemos el algoritmo. La informacin proporcionada al algoritmo constituye su entrada y la informacin producida por el algoritmo constituye su salida. Los problemas complejos se pueden resolver ms eficazmente con la computadora cuando se rompen en sub problemas que sean ms fciles de solucionar que el original. La descomposicin del problema original en sub problemas ms simples y a continuacin dividir estos sub problemas en otros ms simples que puedan ser implementados para su solucin en la computadora de denomina diseo descendente (top - down design ).

Es preciso representar el algoritmo mediante una determinada herramienta de programacin: diagramas de flujo, pseudocdigo o diagramas N - S. 1.4. Codificacin 4. Codificacin Es el algoritmo traspasado a la computadora a travs de un lenguaje de programacin, debe ser escrito de acuerdo a las reglas gramaticales o sintaxis del mismo. Generamos un algoritmo el cual se denomina cdigo, y al pasarlo a un lenguaje de programacin se le llama cdigo fuente 1 .5. Prueba y Depuracin 5. Compilacin y ejecucin Compilacin, el lenguaje de programacin seleccionado revisa que ya no halla errores en el cdigo fuente. Ejecucin, ejecutar el programa despus del ser compilado. 6. Verificacin y pruebas Revisar que el programa de los resultados que el usuario quiere, hay que revisar si hay algn error el cual puede ser de tipo lgico, de semntica o ejecucin. 7. Depuracin Corregir los errores encontrados en la etapa anterior, si hubiese algn error se tiene que regresar hasta la etapa que sea necesaria para que la solucin sea la que el usuario requiere. 1.6. Documentacin 8. Documentacin Son todos los comentarios, referencias desde que se dio el problema hasta que se encontr la solucin. a) documentacin interna, es el encabezado, descripcin, declaracin del problema, son todos los comentarios que puedan llegar a servir dentro del cdigo fuente. b) documentacin externa, son los manuales que se hacen para una mejor ejecucin del programa, ah se explicara cmo usar el programa. 1.7. Mantenimiento 9. Capacitacin Una vez que tenemos lo manuales viene la capacitacin de usuarios, como no a todos les interesa los mismo porque hay diferentes tipos de usuarios, se tienen que dividir de acuerdo a sus conveniencias.

10. Implantacin o implementacin del sistema Hay diferentes formas de implementar el sistema: Depende del tamao del sistema Si existiera un sistema se tiene que poner el nuevo y quitar el que ya estaba. Trabajar primero con el sistema viejo(si existe), y despus empezar a trabajar con el nuevo. Sistemas implantados por regiones. Trabajar con el sistema viejo (si existe) y con el sistema nuevo simultneamente despus quitar el sistema viejo. Ir quitando el sistema viejo(si existe) poco a poco e ir implantando el sistema nuevo.

11. Mantenimiento El mantenimiento preventivo es que hagamos lo posible por no caer en errores, la actualizacin si el usuario tiene la necesidad de quitar o poner algo; tngase en cuenta que cuando surge mantenimiento tenemos que volver a hacer todos los pasos anteriores revisando que todas la condiciones sean favorables alrededor del sistema.

UNIDAD II

ALGORITMOS

2.1. Definicin y caractersticas de los algoritmos. Definicin formal En general, no existe ningn consenso definitivo en cuanto a la definicin formal de algoritmo. Muchos autores los sealan como listas de instrucciones para resolver un problema abstracto, es decir, que un nmero finito de pasos convierten los datos de un problema (entrada) en una 1 2 3 4 5 6 solucin (salida). Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versin modificada de la 7 criba de Eratstenes que nunca termine de calcular nmeros primos no deja de ser un algoritmo. A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando 8 9 modelos matemticos como mquinas de Turing entre otros. Sin embargo, estos modelos estn sujetos a un tipo particular de datos como son nmeros, smbolos o grficas mientras que, en 3 1 general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte comn en todas las definiciones se puede resumir en las siguientes tres propiedades 7 siempre y cuando no consideremos algoritmos paralelos: Tiempo secuencial. Un algoritmo funciona en tiempo discretizado paso a paso, definiendo as una secuencia de estados "computacionales" por cada entrada vlida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementacin (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. Exploracin acotada. La transicin de un estado al siguiente queda completamente determinada por una descripcin fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de trminos del estado actual. En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigedad y sin hacer referencia a una computadora en particular, y adems tiene un lmite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definicin abarca tanto a algoritmos prcticos como aquellos que solo funcionan en teora, por ejemplo el mtodo de Newton y la eliminacin de Gauss-Jordan funcionan, al menos en principio, con nmeros de precisin infinita; sin embargo no es posible programar la precisin 10 infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda funcin calculable se puede programar en una mquina de Turing (o equivalentemente, 10 en un lenguaje de programacin suficientemente general): Aritmetizabilidad. Solamente operaciones innegablemente calculables estn disponibles en el paso inicial. 2.2. Reglas para la construccin de Algoritmos. Medios de expresin de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo y diagramas de flujo evita

Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo y diagramas de flujo evita muchas ambigedades del lenguaje natural. Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programacin especfico. La descripcin de un algoritmo usualmente se hace en tres niveles: 1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que encuentran la solucin. 3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin especfico o algn objeto capaz de llevar a cabo instrucciones. Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un anlisis de complejidad o ambos. Sistemas formales La teora de autmatas y la teora de funciones recursivas proveen modelos matemticos que formalizan el concepto de algoritmo. Los modelos ms comunes son la mquina de Turing, mquina de registro y funciones -recursivas. Estos modelos son tan precisos como un lenguaje mquina, careciendo de expresiones coloquiales o ambigedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementacin. Implementacin Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito elctrico o un aparato mecnico y elctrico. Algunos algoritmos inclusive se disean especialmente para implementarse usando lpiz y papel. El algoritmo de multiplicacin tradicional, el algoritmo de Euclides, la criba de Eratstenes y muchas formas de resolver la raz cuadrada son slo algunos ejemplos. Variables Son elementos que toman valores especficos de un tipo de datos concreto. La declaracin de una variable puede realizase comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables: 1. Mediante una sentencia de asignacin. 2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read'). Ejemplo: ... i:=1; read(n); while i < n do begin (* cuerpo del bucle *)

i := i + 1 end; ... Estructuras secuenciales La estructura secuencial es aquella en la que una accin sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. La asignacin de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona ser reconocida con el nombre de la variable que recibe el valor. La asignacin se puede clasificar de la siguiente forma: 1. Simples: Consiste en pasar un valor constante a una variable (a 15) 2. Contador: Consiste en usarla como un verificador del nmero de veces que se realiza un proceso (a a + 1) 3. Acumulador: Consiste en usarla como un sumador en un proceso (a a + b) 4. De trabajo: Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a c + b*2/4). Un ejemplo de estructura secuencial, como obtener la rea de un tringulo: Inicio ... float b, h, a; printf("Diga la base"); scanf("%f", &b); printf("Diga la altura"); scanf("%f", &h); a = (b*h)/2; printf("El rea del tringulo es %f", a) ... Fin Algoritmos como funciones Artculo principal: Teora de la computabilidad

Esquemtica de un algoritmo solucionando un problema de ciclo hamiltoniano. Un algoritmo se puede concebir como una funcin que transforma los datos de un problema (entrada) en los datos de una solucin (salida). Ms an, los datos se pueden representar a su vez 1 9 11 como secuencias de bits, y en general, de smbolos cualesquiera. Como cada secuencia de bits representa a un nmero natural (vase Sistema binario), entonces los algoritmos son en esencia funciones de los nmeros naturales en los nmeros naturales que s se pueden calcular. Es decir que todo algoritmo calcula una funcin codificacin de un problema o de una solucin. donde cada nmero natural es la

En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ningn valor de salida, y podemos

decir que la funcin queda indefinida para ese valor de entrada. Por esta razn se considera que los algoritmos son funciones parciales, es decir, no necesariamente definidas en todo su dominio de definicin. Cuando una funcin puede ser calculada por medios algortmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha funcin es computable. No todas las funciones entre secuencias datos son computables. El problema de la parada es un ejemplo. 2.3. Tipos de algoritmos. Tipos de algoritmos segn su funcin Algoritmo de ordenamiento Algoritmo de bsqueda

Tcnicas de diseo de algoritmos Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos la solucin no es ptima. Algoritmos paralelos: permiten la divisin de un problema en subproblemas de forma que se puedan ejecutar de forma simultnea en varios procesadores. Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn en funcin de valores pseudoaleatorios. Algoritmos determinsticos: el comportamiento del algoritmo es lineal: cada paso del algoritmo tiene nicamente un paso sucesor y otro antecesor. Algoritmos no determinsticos: el comportamiento del algoritmo tiene forma de rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos inmediatamente posteriores, adems todas las ramas se ejecutan simultneamente. Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada uno de ellos para despus unirlas, logrando as la solucin al problema completo. Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas basndose en un conocimiento anterior (a veces llamado experiencia) de los mismos. Programacin dinmica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial. Ramificacin y acotacin: se basa en la construccin de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones. Vuelta atrs (backtracking): se construye el espacio de soluciones del problema en un rbol que se examina completamente, almacenando las soluciones menos costosas.

2.4. Ejercicios con algoritmos. Ejemplo de algoritmo El problema consiste en encontrar el mximo de un conjunto de nmeros. Para un ejemplo ms complejo vase Algoritmo de Euclides.

Descripcin de alto nivel Dado un conjunto finito C de nmeros, se tiene el problema de encontrar el nmero ms grande. Sin prdida de generalidad se puede asumir que dicho conjunto no es vaco y que sus elementos estn numerados como . Es decir, dado un conjunto todo elemento x que pertenece al conjunto C. se pide encontrar m tal que para

Para encontrar el elemento mximo, se asume que el primer elemento (c0) es el mximo; luego, se recorre el conjunto y se compara cada valor con el valor del mximo nmero encontrado hasta ese momento. En el caso que un elemento sea mayor que el mximo, se asigna su valor al mximo. Cuando se termina de recorrer la lista, el mximo nmero que se ha encontrado es el mximo de todo el conjunto. Descripcin formal El algoritmo puede ser escrito de una manera ms formal en el siguiente pseudocdigo:

Algoritmo Encontrar el mximo de un conjunto funcin max(C) //C es un conjunto no vaco de nmeros// n | C | // | C | es el nmero de elementos de C// m c0 para i 1 hasta n hacer si ci > m entonces m ci devolver m

Sobre la notacin: "" representa una asignacin: m x significa que la variable m toma el valor de x; "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el mximo de C).

Implementacin En lenguaje C++: int max(int c[], int n) {

int i, m = c[0]; for (i = 1; i < n; i++) if (c[i] > m) m = c[i]; return m; EJERCICIOS 1.1 X(X-1) 1. 2. 3. 4. 5. 6. 7. Inicio Var; x, y :Enteros X=0, Z=0 Dame X Z=X-1 S Z <> 0 entonces vea 5 sino X = X * Z Fin

1.2 (x) + (x+1)..... x = 100 1. 2. 3. 4. 5. 6. Inicio Var; x : Enteros x=1 x=x+1 S x <= 100 vea a 6 si no ve a 4 Fin

1.3 (x + 2) + (x+4) + (x+6) ..... la suma >= 200 1. 2. 3. 4. 5. 6. 7. 8. 1.4 X Inicio Var; x, z, Suma :Enteros x = 0, z = 0, suma=0 Dame X z=z+2 Suma= Suma + (x + z) Si Suma es >= 200 vea a 8 sino vea a 5 Fin
x-y

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1.5

Inicio Var; X,Y,Z : Enteros X=0, Y=0, Z=0 Dame X Dame Y Si Y > X entonces vea 5 sino vea 7 Z=X W = (x - y) - 1 Si W= 0 entonces vea 10 sino vea 11 Z=1 Z=Z*X Si w <> 0 entonces vea 7 sino vea 10 Fin

Ao Bisiesto

1. 2. 3. 4. 5. 6. 7. 8. 1.6

Inicio a, z : Entero Dame A z = a mod 4 Si z = 0 entonces vea 6 si no vea 7 Imprime el ao es bisiesto vea 8 Imprime el ao no es bisiesto vea 8 Fin

Nmero Mayor, Medio y menor 1. 2. 3. 4. 5. 6. 7. 8. 9. Inicio a, b : Reales Dame a Dame b S a > b entonces vea 7 S no entonces vea 8 Imprime "a" es mayor que b vea 9 Imprime "b" es mayor que a vea 9 Fin

1.7

Distinguir si es o no es nmero primo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Inicio a,n,b : Entero Dame a S (n > 100) o (n < 1) entonces vea 3 S (n = 1) o (n =2) entonces vea 11 a=1 a=a+1 b = n mod a Si (b = 0) entonces vea 7, sino vea 10 N es primo vea 12 N no es primo ve a 12 Fin

1.8

x!/1 + x!/3 + x!/2 + x!/5 + x!/4 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Inicio Var Fac, x,z, y :entero w:Real Dame X fac = x z=x z=z-1 fac = fac * z S z <> 1 entonces vea 6 X = -2 x = x + 3 vea 11 x = x - 1 S x= 1 entonces w=w + (fac/x) x = x + 2 fin si si no vea 13 S x <= 20 entonces vea 14 w = w + ( fac / x ) y = x mod 2 Si y = 0 entonces vea 17 Fin

UNIDAD III

DIAGRAMAS DE FLUJO LINEALES

3.1. Tipos de operadores OPERADORES RELACIONALES: > = Mayor que (Q) < = Menor que (Q) " = Mayor o igual (Q) " = Menor o igual (Q) < > = Diferente desigual = Igual OPERADORES LGICOS: AND= NOT= OR= OPERADORES ARITMETICOS: + = Suma - = Resta * = Multiplicacin / = Divisin ^ = Exponente o potencia Ejemplos: TASG = TASG + ASD NETO = TASG - TDED ISLR = SDO * 2% PROM = TNOTAS / N ALUMNOS 1.- Diagrama de Flujo que calcule el 13,5% de cualquier nmero; lo muestre por impresora. - Identificacin de variables y anlisis de proceso. N= 0

C= 13,5% R= N * 13,5% R= N*C 1.- Algoritmo y Diagrama de Flujo para calcular la masa de un objeto que se mueve con una fuerza y una aceleracin, donde: F= m.a, Imprimir el resultado con su respectivo mensaje. - Identificacin de variables y anlisis de proceso. F= m * a m= f / a 1.- Algoritmo y Diagrama de Flujo para calcular el rea de un crculo donde: a= * r2 - Identificacin de variables y anlisis de proceso. a= 0 r= 0 = 3,14 A.- Algoritmo que describe el proceso de verificar el Por qu?, de tu solvencia de examen dice: No puede presentar. 1.- Inicio. 2.- Leer solvencia. 3.- Verificar la causa del problema. 4.- Si el problema es falta de pago. 5.- Cancelo la mensualidad. 6.- Entonces, puedo presentar. 7.- Si el problema es falta de nota 8.- Entonces, no puedo presentar 9.- Error en el Departamento de Control de Estudios. 10.- Soluciono el problema. 11.- Entonces, puedo presentar. 12.- Fin. B.- Algoritmo que ayude a verificar porqu el torniquete del Metro de Caracas, me impide salir.

1.- Inicio 2.- Si el torniquete est DAADO. 3.- Entonces, voy a otro torniquete, puedo salir. 4.- Si el importe del ticket es menor. 5.- Entonces, pago la diferencia. 6.- Si el ticket est deteriorado. 7.- Entonces, me dirijo al Operador, puedo salir. 8.- Fin. c.- Algoritmo que descarte Por qu , el CPU del computador que se te asign en el Laboratorio no enciende. 1.- Inicio 2.- Verifico la causa del problema. 3.- Si el problema es falta de energa elctrica. 4.- Entonces, no puedo utilizar el computador, fin. 5.- Si el problema es porque no est enchufado. 6.- Enchufo el cable soluciono el problema. 7.- Si el problema es de carcter tcnico. 8.- Entonces no puedo utilizar el computador, fin. 9.- Si el problema es que el computador est Daado. 10.- Entonces, utilizo otro computador. 11.- Fin. 3.1.1. Aritmticos Operadores aritmticos Sinopsis Los operadores aritmticos se usan para realizar clculos de aritmtica de nmeros reales y de aritmtica de punteros. C++ dispone de los siguientes: + Dos posibilidades: Suma binaria ; ms unitario .

++ -* / %

Incremento unitario (dos clases) Dos posibilidades: Resta binaria menos unitario . Decremento unitario (dos clases ) Multiplicacin (este smbolo tiene tambin otros usos ) Divisin Resto o mdulo . Nota: la aritmtica de nmeros reales es la clsica de la escuela primaria. La de punteros es una aritmtica un tanto especial y rudimentaria .

Observaciones Los operadores aritmticos pertenecen a dos grupos: unos aceptan operandos de tipo numrico; otros aceptan operandos de tipo puntero-a-tipoX [3]. Adems son de dos tipos; unarios (que aceptan un solo operando) y binarios (que aceptan dos). La clasificacin es la siguiente: Operadores aritmticos unarios: + ++ -Ms unitario. Incremento unitario (dos clases) menos unitario. Decremento unitario (dos clases)

Operadores aritmticos binarios: + * / % Suma binaria. Resta binaria. Multiplicacin Divisin. Resto o mdulo.

Estos ltimos pueden combinarse con el de asignacin = para dar origen a operadores compuestos son los siguientes: += -= *= /= %= Asigna suma Asigna diferencia (resta) Asigna producto Asigna divisin Asigna resto (mdulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos smbolos + y -. Es un caso de sobrecarga incluida en el propio lenguaje . Como en el resto de los casos de

sobrecarga, el compilador deduce por el contexto de que versin del operador se trata. Como veremos inmediatamente, en C++ es perfectamente vlida una expresin del tipo: int x = *ptr+-*++ptr; En el ejemplo siguiente se muestran los casos posibles: int ai[] = {2, 3}; int* ptr = ai; int r1 = +ai[0]; // L.3: ms unitario sobre tipo numrico int r2 = -ai[1] // L.3: menos unitario sobre tipo numrico int r3 = ai[0] + ai[1]; // L.4: 2 + 3 suma binaria (de enteros) int r4 = ai[1] ai[0] // L.5: 3 2 resta binaria (de enteros) int r5 = ai[0] + -ai[1]; // L.6: 2 +(-3) suma binaria seguida de menos unitario int r6 = *ptr + -*++ptr; // L.7: Suma binaria (de enteros) a + (-b)

En L.7 coexisten tres operadores aritmticos no homogneos (de izquierda a derecha): + Suma binaria entre valores numricos tipo int . Los valores *ptr y -*++ptr Negacin unitaria de un valor numrico tipo int ; el valor *(++ptr)

++ Preincremento de un puntero-a-int . Equivale a suma binaria de puntero y entero: ++ptr == ptr = ptr + 1 Nota: aunque vlida, la sentencia de L.7 es un ejemplo de expresin peligrosa y desaconsejada. En se ha presentado una explicacin del sorpresivo resultado ( 0 ) que se obtiene para L.6. Suma y resta binaria En el primer caso: suma y resta binaria, caben dos posibilidades sintcticas: a- expresin-suma + expresin-de-multiplicacin b- expresin-suma - expresin-de-multiplicacin Operador Suma binaria Las posibilidades para los operandos en la expresin A + B son los siguientes: 1. A y B son tipos aritmticos, enteros o fraccionarios. En este caso ambos operandos estn sujetos a las posibles conversiones aritmticas estndar y el resultado es la suma aritmtica de ambos. Ejemplo: int int z = x + y; x // z == 30 = 10, y = 20;

2. A es un entero y B es un puntero a objeto. Ejemplo:

int arr[5] = int* ptr = int x = *(2 + ptr); // x == 3

{1, &arr[0];

2, //

3, Seala

4, a

5}; 1

3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de puntero. Ejemplo: int z = *(ptr + 3); Operador Resta binaria. Las posibilidades para los operandos en la expresin A - B son los siguientes: 1. A y B son de tipo aritmtico, entero o fraccionario; las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente. El resultado es la resta aritmtica de ambos operandos. Ejemplo: int int z = x - y; x // z == -10 = 10, y = 20; // x == 4

2. A y B son punteros a objetos de tipos compatibles. Ejemplo: int arr[5] = int* pt1 = int* pt2 = int x = pt2 - pt1; // x == 4 {1, &arr[0]; &arr[4]; 2, // // 3, Seala Seala 4, a a 5}; 1 5

3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de punteros Ejemplo: int arr[5] = int* ptr = int x = *(ptr - 2); // x == 3 Operadores Unitarios Cuando los operadores + y - se utilizan como operadores unitarios, las posibilidades sintcticas son: + - <expresin-cast> <expresin-cast> {1, &arr[4]; 2, // 3, seala 4, a 5}; 5

En ambos casos <expresin-cast> debe ser de tipo numrico. Los resultados son respectivamente: Valor del operando expresin-cast despus de cualquier promocin interna que sea necesaria. Valor negativo del operando expresin-cast despus de cualquier promocin interna que se necesite.

Nota: recuerde que cuando + y - se utilizan como operadores unitarios, tienen mayor precedencia que cuando se utilizan como suma y resta binarias ( Ejemplo int x = int r1 = int r2 = + int r3 = int r4 = + (x - y); // r4 == 4 7, (y (y (x x); y); x); y // // // = r1 r2 r3 == == == 3; 4 -4 -4 4.9.0a).

Operadores multiplicacin y divisin Los operadores binarios * (multiplicacin) y / (divisin) realizan sus operaciones aritmticas correspondientes con todos los tipos numricos (enteros y fraccionarios). Sintaxis Expresin-de-multiplicacin * expresin-cast Expresin-de-multiplicacin / expresin-cast Operador mdulo El operador binario % (operador de mdulo) devuelve el resto de la divisin de dos enteros, no puede ser utilizado con nmeros fraccionarios float o double [2]. Sintaxis expresin-de-multiplicacin % expresin-cast Ejemplo int resto = cout << "El resto de 6/4 es " << resto << endl; Salida: El resto de 6/4 es 2 Operadores incremento y decremento Los operadores unitarios ++ (incremento) y -- (decremento), suman y restan respectivamente una unidad al valor de la expresin. Existen dos variedades "Pre" y "Post" para cada uno de ellos. Las posibilidades sintcticas son: postfix-expression ++ ++ expresin-unitaria (postincremento) (preincremento) (6 % 4);

postfix-expression -- expresin-unitaria

-(predecremento)

(postdecremento)

En los ejemplos que siguen suponemos que originariamente n == 5. El post incremento aade uno a la expresin despus de que se ha evaluado: x = n++ ; // -> x == 5 y n == 6

El pre incremento aade uno antes de que sea evaluada la expresin. x = ++n ; // -> x == 6 y n == 6

El postdecremento resta uno del valor de la expresin despus de que sea evaluada. x = n-- ; // -> x == 5 y n == 4

El predecremento resta uno antes de la evaluacin de la expresin. x = --n ; // -> x == 4 y n == 4

En ambos casos, el operando debe ser una variable, no una expresin. Por ejemplo: (x+y)++ es ilegal. 7.1 Para evidenciar la diferencia entre preincremento y postincremento, observe las salidas que se obtienen con este pequeo programa segn se van ejecutando las diversas lneas. Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que, en todos los casos, el argumento recibido por printf es un puntero-a-carcter (char*). Tambin deben recordarse las reglas de mbito de los argumentos pasados a funciones. char * s = "Hola mundo"; printf("Letra: \"%c\"\n", *s); printf("Letra: \"%c\"\n", *s+1); // Letra "H" // Letra "I"

printf("Letra: \"%c\"\n", *(s+1)); // Letra "o" printf("Letra: \"%c\"\n", *s++); printf("Letra: \"%c\"\n", *s); printf("Letra: \"%c\"\n", *++s); printf("Letra: \"%c\"\n", *s); // Letra "H" // Letra "o" // Letra "l" // Letra "l

3.1.2. Relacinales Operadores relacionales Sinopsis Los operadores relacionales, tambin denominados operadores binarios lgicos y de comparacin, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relacin (en realidad se trata respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado booleano Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero). C++ dispone de los siguientes: < > <= >= == != Menor que Mayor que Menor o igual que Mayor o igual que Igual que (identidad) Desigual que (desigualdad)

Sintaxis expresin-relacional expresin-relacional expresin-relacional expresin-relacional expresin-de-igualdad expresin-de-igualdad Comentario

< shift-expresion > shift-expresion <= shift-expresion >= shift-expresion == expresin-relacional != expresin-relacional

Como puede verse, todos ellos son operadores binarios (utilizan dos operandos), de los cuales, dos de ellos son de igualdad: == y !=, y sirven para verificar la igualdad o desigualdad entre valores aritmticos o punteros. Estos dos operadores pueden comparar ciertos tipos de punteros, mientras que el resto de los operadores relacionales no pueden utilizarse con ellos. Observe que los operadores == y != tienen una menor precedencia que el resto de los operadores relacionales < y >, <= y >=. El operador de desigualdad != tiene otra forma estndar de designacin mediante la palabra clave not_eq Cualquiera que sea el tipo de los operandos, por definicin, un operador relacional, produce un bool (true o false) como resultado, aunque en determinadas circunstancias puede producirse una conversin automtica de tipo a valores int (1 si la expresin es cierta y 0 si es falsa).

Ejemplo de comprobacin: #include <iostream.h> int main() { float f = 12.1, g = 12.2; cout << "Tipo: " << typeid(f < g).name() << endl; } Salida Tipo: bool Condiciones En las expresiones relacionales E1 <operador> E2, los operandos deben cumplir alguna de las condiciones siguientes: 1. E1 y E2 son tipos aritmticos. 2. E1 y E2 son punteros a versiones cualificadas o no cualificadas de tipos compatibles. 3. Uno de ellos es un puntero a un objeto, mientras que el otro es un puntero a una versin cualificada o no cualificada de void. 4. Uno de los dos es un puntero, mientras que el otro es un puntero nulo constante.

Cuando se trata de tipos definidos por el usuario (que no cumplen las condiciones anteriores) estos operadores pueden ser sobrecargados de forma que puedan ser utilizados con dichos tipos. Precauciones!! Con el operador de igualdad Las expresiones relacionales de igualdad son frecuentsimas en la programacin. En multitud de ocasiones se comparan dos expresiones y se toma una decisin en funcin del resultado cierto / falso obtenido. Por ejemplo, la condicin de la sentencia de iteracin while puede ser una expresin relacional de igualdad: int x = 1; y = 2; ... while (x == y ) { cout << "Son iguales..." << endl; ... } Es muy frecuente que, tanto el principiante, como el programador acostumbrado a otros lenguajes, donde el operador de asignacin y el de igualdad son distintos a los utilizados en C++ (por ejemplo := y =), confundan el operador de igualdad == con el de asignacin =. Es este caso, el cdigo anterior sera escrito errneamente:

while (x = y ) { cout << "Son iguales..." << endl; ... } El resultado es que el bucle se ejecuta mientras sea y != 0, ya que la expresin asigna y a x, y el resultado es cierto mientras que x sea distinto de cero. Algunos compiladores son suficientemente "inteligentes" como para advertir del posible error, pero otros aceptan que se pretende una asignacin. Por ejemplo, en el caso anterior, el compilador Borland C++ 5.5 produce una advertencia: Possibly incorrect assignment in function.... En cambio Visual C++ 6.0 de MS acepta la propuesta sin rechistar. 3.1.3. Lgicos Operadores lgicos Sinopsis Los operadores lgicos producen un resultado booleano, y sus operandos son tambin valores lgicos o asimilables a ellos (los valores numricos son asimilados a cierto o falso segn su valor sea cero o distinto de cero). Por contra, recuerde que las operaciones entre bits producen valores arbitrarios. Los operadores lgicos son tres; dos de ellos son binarios, el ltimo (negacin) es unario. Tienen una doble posibilidad de representacin en el Estndar C++ actual: la representacin tradicional que se indica a continuacin, y la natural introducida recientemente que se detalla ms adelante . Y lgico && AND O lgico || OR Negacin lgica ! NOT

Las expresiones conectadas con los operadores && y || se evalan de izquierda a derecha, y la evaluacin se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una lgica que se basa en este propiedad). Operador Y lgico Tambin denominado por su nombre en ingls (generalmente en maysculas) AND lgico. Devuelve un valor lgico true si ambos operandos son ciertos. En caso contrario el resultado es false. Sintaxis expr-AND-logica && expresion-OR-inclusive

Comentario: La operatoria es como sigue: El primer operando (de la izquierda) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin, el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar. Si el resultado es false, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es cierto, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: la Norma informa que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubiesen creado. Ejemplo: int m[3] = {0,1,2}; int x = 0; if (m && x) cout << "Cierto."; else cout << "Falso."; Salida: Falso. El valor m, que es interpretado como un puntero al primer elemento de la matriz, es transformado a un bool. Como es distinto de cero (no es un puntero nulo) el resultado es cierto. A continuacin, el valor x es convertido tambin a bool. En este caso la conversin produce falso, con lo que este es el resultado del parntesis de la sentencia if. Ejemplo #include <iostream.h> bool alto = true, bajo = false, blanco = true, negro = false; int main (void) { if (alto && bajo) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (alto && blanco) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (bajo && negro) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida:

Uno falso Dos cierto Tres falso Operador O lgico Este operador binario devuelve true si alguno de los operandos es cierto. En caso contrario devuelve false. Sintaxis expr-OR-logica || expresion-AND-logica Comentario Este operador sigue un funcionamiento anlogo al anterior. El primer operando (izquierdo) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar ( 3.2.1b). Si el resultado es true, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es false, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: el Estndar establece que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubieran creado. Ejemplo #include bool alto int if if if } Salida Uno Dos Tres falso cierto cierto (alto else (alto else (bajo else || || || <iostream.h> = false; { } endl; endl; } endl; endl; } endl;

true,

bajo

false,

blanco

true,

negro

main bajo) { cout cout << blanco) { cout cout << negro) { cout cout <<

<< "Uno << "Dos << "Tres

(void) "Uno cierto" falso" "Dos cierto" falso" "Tres cierto" falso"

<< << << << << <<

endl;

Operador NO lgico: Este operador es denominado tambin negacin lgica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el cdigo). Sintaxis ! expresion-cast Comentario El operando expresion-cast (que puede ser una expresin que se evala a un resultado es convertido a tipo bool, con lo que solo puede ser uno de los valores cierto/falso. A continuacin el operador cambia su valor: Si es cierto es convertido a falso y viceversa. Resulta por tanto, que el resultado de este operador es siempre un tipo bool, aunque al existir una conversin estndar por la que un cero es convertido a false, y cualquier valor distinto de cero a true , coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0. En otras palabras: este operador devuelve cierto (true) si la expresin se evala a distinto de cero, en caso contrario devuelve falso (false). Ejemplo #include <iostream.h> bool alto = true, bajo = false; int main (void) { if (alto) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (!alto) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (!bajo) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida: Uno cierto Dos falso Tres cierto

Si E es una expresin, !E es equivalente a (0 == E). Como consecuencia, las expresiones que siguen son equivalentes dos a dos: if (! valid); if (valid == 0); ... if (valid);

if (valid != 0); Representacin explcita Los operadores lgicos entre valores lgicos &&, ||, !; la relacin de desigualdad !=; algunos de los operadores lgicos entre bits (&, |, ^, ~) y sus expresiones compuestas (&=, |=, ^=), tienen una representacin realmente difcil de leer, con la desventaja adicional que sus smbolos no siempre estn fcilmente accesibles en ordenadores con teclados distintos del estndar USA. Para resolver este problema, el Estndar C++ ha introducido nuevas formas para su representacin; las denominamos formas explcitas o naturales, en razn de que se parecen ms a las palabras correspondientes del lenguaje natural. Las nuevas formas constituyen palabras-clave, y la tabla de equivalencias es la siguiente: Palabra Smbolo Descripcin clave and or not && || ! Operador Y lgico Operador O lgico Operador negacin lgica Operador AND entre bits Operador OR exclusivo entre bits Operador OR inclusivo entre bits Operador complemento a uno de bits Asignacin compuesta (AND entre bits) Asignacin entre bits) compuesta (XOR

bitand & xor bitor compl ^ | ~

and_eq

&=

xor_eq

^=

or_eq

|=

Asignacin compuesta (OR entre bits) Operador desigualdad relacional de

not_eq

!=

Nota: ni el compilador Borland C++ 5.5 ni MS VC++ 6.0 soportan esta caracterstica del estndar, aunque el de Microsoft anuncia en su documentacin que pueden utilizarse "defines". Por ejemplo: #define bitand &

#define bitor | #define and_eq &= #define or_eq |= #define not_eq != Por su parte, el compilador GNU gcc dispone de la opcin de compilacin -fno-operator-names, que permite que las palabras-clave and, bitand, bitor, compl, not, y or, no sean tratadas como sinnimos de los operadores correspondientes. 3.2. Conceptos QUE SON LOS DIAGRAMAS DE FLUJO Concepto de Diagrama de Flujo Los diagramas de flujo (o flujo gramas) son diagramas que emplean smbolos grficos para representar los pasos o etapas de un proceso. Tambin permiten describir la secuencia de los distintos pasos o etapas y su interaccin. Las personas que no estn directamente involucradas en los procesos de realizacin del producto o servicio, tienen imgenes idealizadas de los mismos, que pocas veces coinciden con la realidad. La creacin del diagrama de flujo es una actividad que agrega valor, pues el proceso que representa est ahora disponible para ser analizado, no slo por quienes lo llevan a cabo, sino tambin por todas las partes interesadas que aportarn nuevas ideas para cambiarlo y mejorarlo. Ventajas de los Diagramas de Flujo * Favorecen la comprensin del proceso a travs de mostrarlo como un dibujo. El cerebro humano reconoce fcilmente los dibujos. Un buen diagrama de flujo reemplaza varias pginas de texto. * Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos redundantes, los flujos de los re procesos, los conflictos de autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisin. * Muestran las inter fases cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el anlisis de las mismas. * Son una excelente herramienta para capacitar a los nuevos empleados y tambin a los que desarrollan la tarea, cuando se realizan mejoras en el proceso. Qu Smbolos se Emplean en los Diagramas de Flujo? Los smbolos tienen significados especficos y se conectan por medio de flechas que indican el flujo entre los distintos pasos o etapas. Los smbolos ms comunes son:

Desarrollo del Diagrama de Flujo Las siguientes son acciones previas a la realizacin del diagrama de flujo: * Identificar a los participantes de la reunin donde se desarrollar el diagrama de flujo. Deben estar presentes el dueo o responsable del proceso, los dueos o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras partes interesadas. * Definir que se espera obtener del diagrama de flujo. * Identificar quin lo emplear y cmo. * Establecer el nivel de detalle requerido. * Determinar los lmites del proceso a describir. Los pasos a seguir para construir el diagrama de flujo son: * Establecer el alcance del proceso a describir. De esta manera quedar fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente. * Identificar y listar las principales actividades/subprocesos que estn incluidos en el proceso a describir y su orden cronolgico.

* Si el nivel de destalle definido incluye actividades menores, listarlas tambin. * Identificar y listar los puntos de decisin. * Construir el diagrama respetando la secuencia cronolgica y asignando los correspondientes smbolos. * Asignar un ttulo al diagrama y verificar que est completo y describa con exactitud el proceso elegido.

Ejemplo: Reparacin de la PC MACRO Cuando se desarrolla el diagrama de flujo es importante considerar el tipo y cantidad de informacin requerida por el usuario del mismo. Probablemente la direccin de la empresa no est interesada en los detalles y le sea suficiente una descripcin genrica del proceso. Este es el caso del ejemplo anterior, un diagrama de flujo a nivel macro. En cambio, si el objetivo del diagrama es la capacitacin de nuevos empleados o la bsqueda de oportunidades de mejora, ser necesario disponer de una descripcin detallada del proceso y hablamos de un diagrama de flujo a nivel micro, como muestra el ejemplo siguiente. Entre ambos niveles, el macro y el micro, se ubican los diagramas con una cantidad media de detalles.

MICRO Conclusiones Los diagramas de flujo son una herramienta valiosa para la mejora de los procesos, permiten detectar las actividades que agregan valor y aqullas que son redundantes o innecesarias. Tambin son de gran utilidad durante el desarrollo de la documentacin de los Sistemas de Gestin, pues proveen una descripcin de los procesos y un detalle de las operaciones mucho ms amigable que los procedimientos e instructivos basados en texto. Contribuyen a resolver uno de los principales problemas, que es la resistencia del personal a emplear los documentos como referentes para el desempeo de las tareas. Una copia ampliada del diagrama de flujo al alcance de los operadores del proceso facilita la consulta y promueve la creatividad. Es conveniente emplear programas especficos para la confeccin de los diagramas de flujo. En general, estos programas son de manejo sencillo y facilitan notablemente la tarea.3.2.1. Expresiones Expresin regular Una expresin regular, a menudo llamada tambin patrn, es una expresin que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Hndel y Haendel se describe mediante el patrn "H(a||ae)ndel". La mayora de las formalizaciones proporcionan los siguientes constructores: una expresin regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. Especficamente, las expresiones regulares se construyen utilizando los operadores unin, concatenacin y clausura de Kleene. Adems cada expresin regular tiene un autmata finito asociado. Alternacin Una barra vertical separa las alternativas. Por ejemplo, "marrn|castao" casa con marrn o castao. Cuantificacin Un cuantificador tras un carcter especifica la frecuencia con la que ste puede ocurrir. Los cuantificadores ms comunes son +, ? y *: + El signo ms indica que el carcter al que sigue debe aparecer al menos una vez. Por ejemplo, "ho+la" describe el conjunto infinito hola, hoola, hooola, hoooola, etctera. ? El signo de interrogacin indica que el carcter al que sigue puede aparecer como mucho una vez. Por ejemplo, "ob?scuro" casa con oscuro y obscuro. *

El asterisco indica que el carcter que lo precede puede aparecer cero, una, o ms veces. Por ejemplo, "0*42" casa con 42, 042, 0042, 00042, etctera. Agrupacin Los parntesis pueden usarse para definir el mbito y precedencia de los dems operadores. Por ejemplo, "(p|m)adre" es lo mismo que "padre|madre", y "(des)?amor" casa con amor y con desamor. Los constructores pueden combinarse libremente dentro de la misma expresin, por lo que "H(ae?|)ndel" equivale a "H(a|ae|)ndel". La sintaxis precisa de las expresiones regulares cambia segn las herramientas y aplicaciones consideradas, y se describe con ms detalle a continuacin. Su utilidad ms obvia es la de describir un conjunto de cadenas, lo que resulta de utilidad en editores de texto y aplicaciones para buscar y manipular textos. Muchos lenguajes de programacin admiten el uso de expresiones regulares con este fin. Por ejemplo, Perl tiene un potente motor de expresiones regulares directamente incluido en su sintaxis. Las herramientas proporcionadas por las distribuciones de Unix (incluyendo el editor sed y el filtro grep) fueron las primeras en popularizar el concepto de expresin regular. Aplicaciones Numerosos editores de texto y otras utilidades utilizan expresiones regulares para buscar y reemplazar patrones en un texto y reemplazar. Las expresiones regulares en programacin Nota: Para el entendimiento completo de esta seccin es necesario poseer conocimientos generales acerca de lenguajes de programacin o programacin en general. En el rea de la programacin las expresiones regulares son un mtodo por medio del cual se pueden realizar bsquedas dentro de cadenas de caracteres. Sin importar si la bsqueda requerida es de dos caracteres en una cadena de 10 o si es necesario encontrar todas las apariciones de un patrn definido de caracteres en un archivo de millones de caracteres, las expresiones regulares proporcionan una solucin para el problema. Adicionalmente, un uso derivado de la bsqueda de patrones es la validacin de un formato especfico en una cadena de caracteres dada, como por ejemplo fechas o identificadores. Para poder utilizar las expresiones regulares al programar es necesario tener acceso a un motor de bsqueda con la capacidad de utilizarlas. Es posible clasificar los motores disponibles en dos tipos: Motores para el programador y Motores para el usuario final. Motores para el usuario final: son programas que permiten realizar bsquedas sobre el contenido de un archivo o sobre un texto extrado y colocado en el programa. Estn diseados para permitir al usuario realizar bsquedas avanzadas usando este mecanismo, sin embargo es necesario aprender a redactar expresiones regulares adecuadas para poder utilizarlos eficientemente. stos son algunos de los programas disponibles: grep: programa de los sistemas operativos Unix/Linux PowerGrep: versin de grep para los sistemas operativos Windows

RegexBuddy: ayuda a crear las expresiones regulares en forma interactiva y luego le permite al usuario usarlas y guardarlas. EditPad Pro: permite realizar bsquedas con expresiones regulares sobre archivos y las muestra por medio de cdigo de colores para facilitar su lectura y comprensin.

Motores para el programador: permiten automatizar el proceso de bsqueda de modo que sea posible utilizarlo muchas veces para un propsito especfico. Estas son algunas de las herramientas de programacin disponibles que ofrecen motores de bsqueda con soporte a expresiones regulares: Java: existen varias bibliotecas hechas para java que permiten el uso de RegEx, y Sun planea dar soporte a estas desde el SDK JavaScript: a partir de la versin 1.2 (ie4+, ns4+) JavaScript tiene soporte integrado para expresiones regulares. Perl: es el lenguaje que hizo crecer a las expresiones regulares en el mbito de la programacin hasta llegar a lo que son hoy en da. PCRE: biblioteca de ExReg para C, C++ y otros lenguajes que puedan utilizar bibliotecas dll (Visual Basic 6 por ejemplo). PHP: tiene dos tipos diferentes de expresiones regulares disponibles para el programador, aunque la variante POSIX (ereg) va a ser desechada en PHP 6. Python: lenguaje de "scripting" popular con soporte a Expresiones Regulares. .Net Framework: provee un conjunto de clases mediante las cuales es posible utilizar expresiones regulares para hacer bsquedas, reemplazar cadenas y validar patrones.

Nota: de las herramientas mencionadas con anterioridad se utilizan el EditPad Pro y el .Net Framework para dar ejemplos, aunque es posible utilizar las expresiones regulares con cualquier combinacin de las herramientas mencionadas. Aunque en general las Expresiones Regulares utilizan un lenguaje comn en todas las herramientas, las explicaciones prcticas acerca de la utilizacin de las herramientas y los ejemplos de cdigo deben ser interpretados de forma diferente. Tambin es necesario hacer notar que existen algunos detalles de sintaxis de las expresiones regulares que son propietarios del .Net Framework que se utilizan en forma diferente en las dems herramientas de programacin. Cuando estos casos se den se har notar en forma explcita para que el lector pueda buscar informacin respecto a estos detalles en fuentes adicionales. En el futuro se incluirn adicionalmente ejemplos de otras herramientas y lenguajes de programacin. Expresiones regulares como motor de bsqueda Las expresiones regulares permiten encontrar porciones especficas de texto dentro de una cadena ms grande de caracteres. As, si es necesario encontrar el texto "lote" en la expresin "el ocelote salto al lote contiguo" cualquier motor de bsqueda sera capaz de efectuar esta labor. Sin embargo, la mayora de los motores de bsqueda encontraran tambin el fragmento "lote" de la palabra "ocelote", lo cual podra no ser el resultado esperado. Algunos motores de bsqueda permiten adicionalmente especificar que se desea encontrar solamente palabras completas, solucionando este problema. Las expresiones regulares permiten especificar todas estas opciones adicionales y muchas otras sin necesidad de configurar opciones adicionales, sino utilizando el mismo texto de bsqueda como un lenguaje que permite enviarle al motor de bsqueda exactamente lo que deseamos encontrar en todos los casos, sin necesidad de activar opciones adicionales al realizar la bsqueda. Expresiones regulares como lenguaje Para especificar opciones dentro del texto a buscar se utiliza un lenguaje o convencin mediante el cual se le transmite al motor de bsqueda el resultado que se desea obtener. Este lenguaje le da

un significado especial a una serie de caracteres. Por lo tanto cuando el motor de bsqueda de expresiones regulares encuentre estos caracteres no los buscar en el texto en forma literal, sino que buscar lo que los caracteres significan. A estos caracteres se les llama algunas veces "metacaracteres". A continuacin se listan los principales meta-caracteres y su funcin y como los interpreta el motor de expresiones regulares. Descripcin de las expresiones regulares El Punto "." El punto es interpretado por el motor de bsqueda como cualquier carcter excepto los caracteres que representan un salto de lnea, a menos que se le especifique esto al motor de Expresiones Regulares. Por lo tanto si esta opcin se deshabilita en el motor de bsqueda que se utilice, el punto le dir al motor que encuentre cualquier carcter incluyendo los saltos de lnea. En la herramienta EditPad Pro esto se hace por medio de la opcin "punto corresponde a nueva lnea" en las opciones de bsqueda. En .Net Framework se utiliza la opcin RegexOptions. Singleline al efectuar la bsqueda o crear la expresin regular. El punto se utiliza de la siguiente forma: Si se le dice al motor de RegEx que busque "g.t" en la cadena "el gato de piedra en la gtica puerta de getisboro goot" el motor de bsqueda encontrar "gat", "gt" y por ltimo "get". Ntese que el motor de bsqueda no encuentra "goot"; esto es porque el punto representa un solo carcter y nicamente uno. Si es necesario que el motor encuentra tambin la expresin "goot", ser necesario utilizar repeticiones, las cuales se explican ms adelante. Aunque el punto es muy til para encontrar caracteres que no conocemos, es necesario recordar que corresponde a cualquier carcter y que muchas veces esto no es lo que se requiere. Es muy diferente buscar cualquier carcter que buscar cualquier carcter alfanumrico o cualquier dgito o cualquier no-dgito o cualquier no-alfanumrico. Se debe tomar esto en cuenta antes de utilizar el punto y obtener resultados no deseados. La barra inversa o contra barra "\" Se utiliza para "marcar" el siguiente carcter de la expresin de bsqueda de forma que este adquiera un significado especial o deje de tenerlo. O sea, la barra inversa no se utiliza nunca por s sola, sino en combinacin con otros caracteres. Al utilizarlo por ejemplo en combinacin con el punto "\." este deja de tener su significado normal y se comporta como un carcter literal. De la misma forma, cuando se coloca la barra inversa seguida de cualquiera de los caracteres especiales que discutiremos a continuacin, estos dejan de tener su significado especial y se convierten en caracteres de bsqueda literal. Como ya se mencion con anterioridad, la barra inversa tambin puede darle significado especial a caracteres que no lo tienen. A continuacin hay una lista de algunas de estas combinaciones: \t Representa un tabulador. \r Representa el "retorno de carro" o "regreso al inicio" o sea el lugar en que la lnea vuelve a iniciar. \n Representa la "nueva lnea" el carcter por medio del cual una lnea da inicio. Es necesario recordar que en Windows es necesaria una combinacin de \r\n para comenzar una nueva lnea, mientras que en Unix solamente se usa \n y en Mac_OS clsico se usa solamente \r. \a Representa una "campana" o "beep" que se produce al imprimir este carcter.

Notas:

\e Representa la tecla "Esc" o "Escape" \f Representa un salto de pgina \v Representa un tabulador vertical \x Se utiliza para representar caracteres ASCII o ANSI si conoce su cdigo. De esta forma, si se busca el smbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando "\xA9". \u Se utiliza para representar caracteres Unicode si se conoce su cdigo. "\u00A2" representa el smbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo. \d Representa un dgito del 0 al 9. \w Representa cualquier carcter alfanumrico. \s Representa un espacio en blanco. \D Representa cualquier carcter que no sea un dgito del 0 al 9. \W Representa cualquier carcter no alfanumrico. \S Representa cualquier carcter que no sea un espacio en blanco. \A Representa el inicio de la cadena. No un carcter sino una posicin. \Z Representa el final de la cadena. No un carcter sino una posicin. \b Marca el inicio y el final de una palabra. \B Marca la posicin entre dos caracteres alfanumricos o dos no-alfanumricos.

Utilidades como Charmap.exe de Windows o gucharmap de GNOME permiten encontrar los cdigos ASCII/ANSI/UNICODE para utilizarlos en Expresiones Regulares. Algunos lenguajes, como Java, asignan su propio significado a la barra invertida, por lo que deber repetirse para que sea considerada una expresin regular (ej. String expresion="\\d.\\d" para indicar el patrn \d.\d).

Los corchetes "[ ]" La funcin de los corchetes en el lenguaje de las expresiones regulares es representar "clases de caracteres", o sea, agrupar caracteres en grupos o clases. Son tiles cuando es necesario buscar uno de un grupo de caracteres. Dentro de los corchetes es posible utilizar el guin "-" para especificar rangos de caracteres. Adicionalmente, los metacaracteres pierden su significado y se convierten en literales cuando se encuentran dentro de los corchetes. Por ejemplo, como vimos en la entrega anterior "\d" nos es til para buscar cualquier carcter que represente un dgito. Sin embargo esta denominacin no incluye el punto "." que divide la parte decimal de un nmero. Para buscar cualquier carcter que representa un dgito o un punto podemos utilizar la expresin regular "[\d.]". Como se hizo notar anteriormente, dentro de los corchetes, el punto representa un carcter literal y no un metacarcter, por lo que no es necesario antecederlo con la barra inversa. El nico carcter que es necesario anteceder con la barra inversa dentro de los corchetes es la propia barra inversa. La expresin regular "[\dA-Fa-f]" nos permite encontrar dgitos hexadecimales. Los corchetes nos permiten tambin encontrar palabras an si estn escritas de forma errnea, por ejemplo, la expresin regular "expresi[o]n" permite encontrar en un texto la palabra "expresin" aunque se haya escrito con o sin tilde. Es necesario aclarar que sin importar cuantos caracteres se introduzcan dentro del grupo por medio de los corchetes, el grupo slo le dice al motor de bsqueda que encuentre un solo carcter a la vez, es decir, que "expresi[o]n" no encontrar "expresioon" o "expresion". La barra "|" Sirve para indicar una de varias opciones. Por ejemplo, la expresin regular "a|e" encontrar cualquier "a" o "e" dentro del texto. La expresin regular "este|oeste|norte|sur" permitir encontrar

cualquiera de los nombres de los puntos cardinales. La barra se utiliza comnmente en conjunto con otros caracteres especiales. El signo de dlar "$" Representa el final de la cadena de caracteres o el final de la lnea, si se utiliza el modo multi-lnea. No representa un carcter en especial sino una posicin. Si se utiliza la expresin regular "\.$" el motor encontrar todos los lugares donde un punto finalice la lnea, lo que es til para avanzar entre prrafos. El acento circunflejo "^" Este carcter tiene una doble funcionalidad, que difiere cuando se utiliza individualmente y cuando se utiliza en conjunto con otros caracteres especiales. En primer lugar su funcionalidad como carcter individual: el carcter "^" representa el inicio de la cadena (de la misma forma que el signo de dlar "$" representa el final de la cadena). Por tanto, si se utiliza la expresin regular "^[a-z]" el motor encontrar todos los prrafos que den inicio con una letra minscula. Cuando se utiliza en conjunto con los corchetes de la siguiente forma "[^\w ]" permite encontrar cualquier carcter que NO se encuentre dentro del grupo indicado. La expresin indicada permite encontrar, por ejemplo, cualquier carcter que no sea alfanumrico o un espacio, es decir, busca todos los smbolos de puntuacin y dems caracteres especiales. La utilizacin en conjunto de los caracteres especiales "^" y "$" permite realizar validaciones en forma sencilla. Por ejemplo "^\d$" permite asegurar que la cadena a verificar representa un nico dgito, "^\d\d/\d\d/\d\d\d\d$" permite validar una fecha en formato corto, aunque no permite verificar si es una fecha vlida, ya que 99/99/9999 tambin sera vlido en este formato; la validacin completa de una fecha tambin es posible mediante expresiones regulares, como se ejemplifica ms adelante. Los parntesis "()" De forma similar que los corchetes, los parntesis sirven para agrupar caracteres, sin embargo existen varias diferencias fundamentales entre los grupos establecidos por medio de corchetes y los grupos establecidos por parntesis: Los caracteres especiales conservan su significado dentro de los parntesis. Los grupos establecidos con parntesis establecen una "etiqueta" o "punto de referencia" para el motor de bsqueda que puede ser utilizada posteriormente como se denota ms adelante. Utilizados en conjunto con la barra "|" permite hacer bsquedas opcionales. Por ejemplo la expresin regular "al (este|oeste|norte|sur) de" permite buscar textos que den indicaciones por medio de puntos cardinales, mientras que la expresin regular "este|oeste|norte|sur" encontrara "este" en la palabra "esteban", no pudiendo cumplir con este propsito. Utilizado en conjunto con otros caracteres especiales que se detallan posteriormente, ofrece funcionalidad adicional.

El signo de interrogacin "?" El signo de pregunta tiene varias funciones dentro del lenguaje de las expresiones regulares. La primera de ellas es especificar que una parte de la bsqueda es opcional. Por ejemplo, la expresin regular "ob?scuridad" permite encontrar tanto "oscuridad" como "obscuridad". En conjunto con los parentesis redondos permite especificar que un conjunto mayor de caracteres es opcional; por ejemplo "Nov(\.|iembre|ember)?" permite encontrar tanto "Nov" como "Nov.",

"Noviembre" y "November". Como se mencion anteriormente los parntesis nos permiten establecer un "punto de referencia" para el motor de bsqueda, sin embargo, algunas veces, no se desea utilizarlos con este propsito, como en el ejemplo anterior "Nov(\.|iembre|ember)?". En este caso el establecimiento de este punto de referencia (que se detalla ms adelante) representa una inversin intil de recursos por parte del motor de bsqueda. Para evitar se puede utilizar el signo de pregunta de la siguiente forma: "Nov(?:\.|iembre|ember)?". Aunque el resultado obtenido ser el mismo, el motor de bsqueda no realizar una inversin intil de recursos en este grupo, sino que lo ignorar. Cuando no sea necesario reutilizar el grupo, es aconsejable utilizar este formato. De forma similar, es posible utilizar el signo de pregunta con otro significado: Los parntesis definen grupos "annimos", sin embargo el signo de pregunta en conjunto con los parntesis triangulares "<>" permite "nombrar" estos grupos de la siguiente forma: "^(?<Da>\d\d)/(?<Mes>\d\d)/(?<Ao>\d\d\d\d)$"; Con lo cual se le especifica al motor de bsqueda que los primeros dos dgitos encontrados llevarn la etiqueta "Da", los segundos la etiqueta "Mes" y los ltimos cuatro dgitos llevarn la etiqueta "Ao". Nota: a pesar de la complejidad y flexibilidad dada por los caracteres especiales estudiados hasta ahora, en su mayora nos permiten encontrar solamente un carcter a la vez, o un grupo de caracteres a la vez. Los metacaracteres enumerados en adelante permiten establecer repeticiones. Las llaves "{}" Comnmente las llaves son caracteres literales cuando se utilizan por separado en una expresin regular. Para que adquieran su funcin de metacaracteres es necesario que encierren uno o varios nmeros separados por coma y que estn colocados a la derecha de otra expresin regular de la siguiente forma: "\d{2}" Esta expresin le dice al motor de bsqueda que encuentre dos dgitos contiguos. Utilizando esta frmula podramos convertir el ejemplo "^\d\d/\d\d/\d\d\d\d$" que serva para validar un formato de fecha en "^\d{2}/\d{2}/\d{4}$" para una mayor claridad en la lectura de la expresin. Nota: aunque esta forma de encontrar elementos repetidos es muy til, algunas veces no se conoce con claridad cuantas veces se repite lo que se busca o su grado de repeticin es variable. En estos casos los siguientes metacaracteres son tiles. El asterisco "*" El asterisco sirve para encontrar algo que se encuentra repetido 0 o ms veces. Por ejemplo, utilizando la expresin "[a-zA-Z]\d*" ser posible encontrar tanto "H" como "H1", "H01", "H100" y "H1000", es decir, una letra seguida de un nmero indefinido de dgitos. Es necesario tener cuidado con el comportamiento del asterisco, ya que este por defecto trata de encontrar la mayor cantidad posible de caracteres que correspondan con el patrn que se busca. De esta forma si se utiliza "\(.*\)" para encontrar cualquier cadena que se encuentre entre parntesis y se lo aplica sobre el texto "Ver (Fig. 1) y (Fig. 2)" se esperara que el motor de bsqueda encuentre los textos "(Fig. 1)" y "(Fig. 2)", sin embargo, debido a esta caracterstica, en su lugar encontrar el texto "(Fig. 1) y (Fig. 2)". Esto sucede porque el asterisco le dice al motor de bsqueda que llene todos los espacios posibles entre dos parntesis. Para obtener el resultado deseado se debe utilizar el asterisco en conjunto con el signo de pregunta de la siguiente forma: "\(.*?\)" Esto es equivalente a decirle al motor de bsqueda que "Encuentre un parntesis de apertura y luego encuentre cualquier carcter repetido hasta que encuentre un parntesis de cierre". El signo de suma "+" Se utiliza para encontrar una cadena que se encuentre repetida 1 o ms veces. A diferencia del asterisco, la expresin "[a-zA-Z]\d+" encontrar "H1" pero no encontrar "H". Tambin es posible

utilizar este metacarcter en conjunto con el signo de pregunta para limitar hasta donde se efecta la repeticin. Grupos annimos Los grupos annimos se establecen cada vez que se encierra una expresin regular en parntesis, por lo que la expresin "<([a-zA-Z]\w*?)>" define un grupo annimo que tendr como resultado que el motor de bsqueda almacenar una referencia al texto que corresponda a la expresin encerrada entre los parntesis. La forma ms inmediata de utilizar los grupos que se definen es dentro de la misma expresin regular, lo cual se realiza utilizando la barra inversa "\" seguida del nmero del grupo al que se desea hacer referencia de la siguiente forma: "<([a-zA-Z]\w*?)>.*?</\1>" Esta expresin regular encontrar tanto la cadena "Esta" como la cadena "prueba" en el texto "Esta es una prueba" a pesar de que la expresin no contiene los literales "font" y "B". Otra forma de utilizar los grupos es en el lenguaje de programacin que se est utilizando. Cada lenguaje tiene una forma distinta de acceder a los grupos. Los ejemplos enumerados a continuacin utilizan las clases del .Net Framework, usando la sintxis de C# (la cual puede fcilmente adaptarse a VB .Net o cualquier otro lenguaje del Framework o incluso Java o JavaScript). Para utilizar el motor de bsqueda del .Net Framework es necesario en primer lugar hacer referencia al espacio de nombres System.Text.RegularExpressions. Luego es necesario declarar una instancia de la clase Regex de la siguiente forma: Regex _TagParser = new Regex("<([a-zA-Z]\w*?)>"); Luego asumiendo que el texto que se desea examinar con la expresin regular se encuentra en la variable "sText" podemos recorrer todas las instancias encontradas de la siguiente forma: foreach(Match CurrentMatch in _TagParser.Matches(sText)){ // ----- Cdigo extra aqu ----} Luego se puede utilizar la propiedad Groups de la clase Match para traer el resultado de la bsqueda: foreach(Match CurrentMatch in _TagParser.Matches(sText)){ String sTagName = CurrentMatch. Groups[1].Value; } Grupos nominales Los grupos nominales son aquellos a los que se les asigna un nombre, dentro de la expresin regular para poder utilizarlos posteriormente. Esto se hace de forma diferente en los distintos motores de bsqueda, a continuacin se explica como hacerlo en el motor del .Net Framework. Utilizando el ejemplo anterior es posible convertir "<([a-zA-Z]\w*?)>" en "<(?<TagName>[a-zAZ]\w*?)>" Para encontrar etiquetas HTML. Ntese el signo de pregunta y el texto "TagName" encerrado entre parentesis triangulares, seguido de este. Para utilizar este ejemplo en el .Net Framework es posible utilizar el siguiente cdigo:

Regex _TagParser = new Regex("<(?<TagName>[a-zA-Z]\w*?)>"); foreach(Match CurrentMatch in _TagParser.Matches(sText)){ String sTagName = CurrentMatch. Groups["TagName"]. Value; } Es posible definir tantos grupos como sea necesario, de esta forma se puede definir algo como: "<(?<TagName>[a-zA-Z]\w*?) ?(?<Attributes>.*?)>" para encontrar no solo el nombre del tag HTML sino tambin sus atributos de la siguiente forma: Regex _TagParser = new Regex("<(?<TagName>[a-zA-Z]\w*?) ?(?<Attributes>.*?)>"); foreach(Match CurrentMatch in _TagParser.Matches(sText)){ String sTagName = CurrentMatch. Groups["TagName"]. Value; String sAttributes = CurrentMatch. Groups["Attributes"]. Value; } Pero es posible ir mucho ms all de la siguiente forma: "<?(?<TagName>[a-zA-Z][\w\r\n]*?) \r\n]*?)'?"? ?)>" ?(?:(?<Attribute>[\w-\r\n]*?)='?"?(?<Value>[\w-:;,\./=

Esta expresin permite encontrar el nombre de la etiqueta, el nombre del atributo y su valor. Sin embargo, una etiqueta HTML puede tener ms de un atributo. Este puede resolverse utilizando repeticiones de la siguiente forma: "<?(?<TagName>[a-zA-Z][\w\r\n]*?) \r\n]*?)'?"? ?)*?>" ?(?:(?<Attribute>[\w-\r\n]*?)='?"?(?<Value>[\w-:;,\./=

Y en el cdigo puede utilizarse de la siguiente forma: Regex _TagParser = new Regex("<?(?<TagName>[a-zA-Z][\w\r\n]*?)? (?:(?<Attribute>[\w-\r\n]*?)='?"? (?<Value>[\w-:;,\./= \r\n]*?)'?"? ?)*?>"); foreach(Match CurrentMatch in _TagParser.Matches(sText)){ String sTagName = CurrentMatch. Groups["TagName"]. Value; foreach Expresiones lgicas

De la evaluacin de una expresin lgica siempre se obtiene un valor de tipo lgico (verdadero o falso). En las expresiones lgicas se pueden utilizar dos tipos de operadores: Relacionales Lgicos Un operador relacional se utiliza para comparar los valores de dos expresiones. stas deben ser del mismo tipo (aritmticas, lgicas, de carcter o de cadena). Ejemplo 1: Algunos ejemplos son:

22 > 13 (comparacin de dos expresiones aritmticas) 22.5 < 3.44 (comparacin de dos expresiones aritmticas) verdadero = falso (comparacin de dos expresiones lgicas) 'c' > 'f' (comparacin de dos expresiones de carcter) "coche" = "Coche" (comparacin de dos expresiones de cadena) Proporcionan los valores: verdadero (22 es mayor que 13) falso (22.5 no es menor que 3.44) falso (verdadero no es igual que falso) falso ('c' no es mayor que 'f') falso ("coche" no es igual que "Coche") Las comparaciones entre los valores de tipo numrico son obvias. En cuanto a los valores de tipo lgico (verdadero y falso) se considera que falso es menor que verdadero. En lo que respecta a los valores de tipo carcter, su orden viene dado por el ASCII extendido utilizado por el ordenador para representarlos. Y en el caso de los valores de tipo cadena, tambin se tiene en cuenta dicho cdigo. Los operadores relacionales son:

Figura. Clasificacin de los operadores relacionales en pseudocdigo.

Para escribir una expresin relacional (lgica) se utiliza la sintaxis:

<expresin_1> <operador_de_relacin> <expresin_2>

Siendo <expresin_1> y <expresin_2> del mismo tipo (aritmtica, lgica, de carcter o de cadena). Por otra parte, un operador lgico acta, exclusivamente, sobre valores de expresiones lgicas. Los operadores lgicos son:

Figura. Clasificacin de los operadores lgicos en pseudocdigo.

El operador conjuncin (y) y el operador disyuncin (o) siempre actan sobre dos operandos, mientras que, el operador negacin (no) slo acta sobre un operando, o dicho de otra forma, es un operador monario. El modo en que actan los operadores lgicos se resume en las llamadas tablas de verdad, definidas por el matemtico George Boole. La tabla de verdad del operador conjuncin (y) es:

Figura. Tabla de verdad del operador conjuncin (y). Se supone que <expresin_1> y <expresin_2> son expresiones lgicas. De la tabla de verdad se deduce que <expresin_1> y <expresin_2> se evala a verdadero slo en el caso de que tanto <expresin_1> como <expresin_2> se evalen tambin como verdaderas, en cualquier otro caso

el resultado ser falso. Dicho de otro modo, si al menos una de las dos expresiones es falsa, el resultado ser falso. Ejemplo 2: Algunos ejemplos son: 9>3y8>6 9>3y8>9 9 = 3 y 8 >= 6 9 = 3 y 8 >= 9 Las expresiones anteriores se evalan a: verdadero (9 > 3 es verdadero y 8 > 6 es verdadero) falso (9 > 3 es verdadero y 8 > 9 es falso) falso (9 = 3 es falso y 8 >= 6 es verdadero) falso (9 = 3 es falso y 8 >= 9 es falso) La tabla de verdad del operador disyuncin (o) es:

Figura. Tabla de verdad del operador disyuncin (o). De la tabla de verdad se deduce que si al menos una de las dos expresiones es verdadera, el resultado ser verdadero. La tabla de verdad del operador negacin (no) es:

Figura. Tabla de verdad del operador negacin (no). El valor de no <expresin> es el contrario al valor obtenido de <expresin>.

Ejemplo 3: De las expresiones no ( 9 > 3 ) no ( 8 > 9 ) los resultados de evaluarlas son: falso (9 > 3 es verdadero) verdadero (8 > 9 es falso) 3.2.2. Contadores Introduccin. En la actualidad, los sistemas digitales son muy utilizados y variados para diferentes tipos de aplicaciones las cuales en su mayora son aplicadas en la industria y en mayor parte de los equipos electrnicos. Es por esto que es necesario saber a grandes rasgos las aplicaciones, y cmo funcionan los diferentes tipos de sistemas digitales, as nosotros poder desarrollar la capacidad de aplicar y de poder trabajar con ellos sin ningn tipo de dificultad. Es por esto que a continuacin le presentamos el siguiente trabajo, destinado a comprender de mejor manera las distintas funciones y aplicaciones de los contadores. 1. Contadores asncronos de rizos. Este tipo de contadores donde cada salida del flip-flop sirve como seal de entrada CLK para el siguiente flip-flop, estos contadores no cambian de estado todos juntos por lo que se dice que no estn en sincrona, solo el primer flip flop responde a los pulsos del reloj ,luego para que al segundo flip-flop responda debe esperar que el primer flip-flop cambie de estado, y para que el tercer flip-flop se complemente debe esperar que el segundo flip-flop cambie de estado, y as sucesivamente con los dems flip-flop. Por lo tanto existe un leve retraso entre las respuestas de cada flip-flop, en los ff modernos este retraso es relativamente corto va del orden de los 10-40nsg. . En el diagrama lgico se muestra un contador asncrono binario ascendente de tres bits diseado a partir de flip-flop J-K en configuracin toggle con disparo por borde de subida. Debido a que posee tres flip-flop, su ciclo bsico se compone de ocho estados que van desde cero (000) hasta siete (111) en forma secuencial y repetitiva. Tambin podemos observar la tabla de verdad del circuito donde Q2 es el trmino ms significativo. Q2 0 0 0 0 Q1 0 0 1 1 Q0 0 1 0 1 N de pulsos del reloj 0 1 2 3

1 1 1 1

0 0 1 1

0 1 0 1

4 5 6 7

Asumiendo el estado inicial de la salida en 000, al llegar el primer pulso de reloj Q0 cambia de estado dicho cambio es detectado por el siguiente flip-flop (J2-K2) el cual considera que este cambio como su seal de reloj que lo hace cambiar de estado.

En el diagrama lgico se muestra un contador asncrono binario ascendente de tres bits diseado a partir de flip-flop J-K en configuracin toggle con disparo por borde de subida. Debido a que posee tres flip-flops, su ciclo bsico se compone de ocho estados que van desde cero (000) hasta siete (111) en forma secuencial y repetitiva. Asumiendo el estado inicial de la salida en 000, al llegar el primer pulso de reloj Q0 cambia de estado dicho cambio es detectado por el siguiente flip-flop (J2-K2) el cual considera que este cambio como su seal de reloj que lo hace cambiar de estado. 2. Numero MOD. El contador de la figura anterior, tiene 8 estados diferentes del 000 al 111 por tanto se trata de un contador de rizos MOD 8, recordamos que el numero MOD siempre es igual al numero de estados por los cuales pasa el contador en cada ciclo completo antes que se recicle hacia su estado inicial. El numero MOD lo podemos aumentar, simplemente aumentando el numero de flip-flop al contador. Es decir el numero MOD es igual a 2N donde N es el numero de flip-flop conectados en la configuracin anterior. 3. Divisin de frecuencia. En la figura podemos ver que en el contador bsico cada flip-flop da una forma de onda de salida que es exactamente la mitad de la frecuencia de la onda de su entrada CLK. Supongamos que los pulsos de la seal del reloj es de 8Hz, as podemos ver que en la salida del primer flip-flop es de 4 Hz, la del segundo flip-flop es de 2Hz y l ultimo flip-flop 1 Hz.

4. Contadores con numero MOD <2N

El contador bsico puede ser modificado para producir nmeros MOD menores que 2N permitiendo que el contador omita estados que normalmente son partes de la secuencia de conteo. Unos delos mtodos para lograr esto se encuentra en la figura, donde se muestra un contador de rizos de 3 BIT, descartando la compuerta nand por un momento, podemos observar que el contador es un contador binario MOD 8 que contara en secuencia de 000 111. Sin embargo la presencia de la compuerta nand alterara esta secuencia como sigue: -flop mientras que las salidas de nand sean altas, no tendr efecto sobre el contador. Sin embargo cuando pase abajo borrara todos los flip-flop, de manera que el contador pase de inmediato al estado 000. -flip Q1 y Q0, de manera que la salida nand pasara bajo siempre que Q1=Q0= 1 esta condicin ocurrir cuando el contador pase por el estado 101 al 110. El estado bajo en la salida nand inmediatamente borrara el contador al estado 000. una vez que se hallan borrado los flip-flop, la salida de nand retornaran a alto por que la condicin Q1=Q0= 1 ya no existe.

Q0 0 0 0 0 1 1 1

Q1 0 0 1 1 0 0 1

Q2 0 1 0 1 0 1 0

El estado 110 es un estado temporal que se necesita para limpiar el contador. Aunque el contador pasa por estado 110 solo permanece hay unos cuanto nanosegundos, antes de reciclarse al 000, de este modo podemos decir esencialmente que este contador cuenta de 000 (0) 101 (5) y se recicla a 000. En esencia, omite los estados 110 y 111 de manera que solamente pasa por 6 estados diferentes as se trata de un contador MOD 6.

5. Variacin del numero MOD. El contador en la figura anterior es un MOD 6 debido a la eleccin de entradas en la compuerta nand. Se puede obtener cualquier numero MOD que se desee cambiando estas entradas. Por

ejemplo si se emplea una compuerta nand e tres entradas, el contador funcionaria normalmente hasta llegar al 111, en este punto regresara de inmediato al estado 000. ignorando la excursin temporal al estado 111 pasara de 000 hasta 110, y luego regresara a 000, produciendo un contador MOD 7.

6. Contadores de dcadas o contadores BCD. El contador MOD 10 se conoce tambin como contador de dcadas. De echo un contador de dcadas es cualquier contador que tenga 10 estados diferentes independientemente de la secuencia. Estos tambin se denominan contadores BCD para reiterar lo dicho cualquier contador MOD 10 es un contador de dcadas y cualquier contador de dcadas que cuenta en binario de 0000 a 1001 es un contador BCD. Los contadores de dcada especialmente los de tipo BCD, se utilizan ampliamente en aplicaciones donde los pulsos o sucesos van a ser contados y los resultados exhibidos en algn tipo de dispositivo de visualizacin numrica decimal. Un contador de dcadas a menudo se utiliza tambin para dividir una frecuencia de pulsos exactamente entre 10. 7. Contadores Asncronos en CI. Existen varios contadores asncronos en CI, tanto TTL como CMOS. Uno de ello es el TTL 74293. la figura muestra el diagrama lgico para el 74293. note los siguientes puntos: -flop J-K con salidas Q0 Q1 Q2 Q3, donde Q0 corresponde al LSB y Q3 MSB. La distribucin de los flip-flops es tal que el LSB se encuentra en el extremo izquierdo para satisfacer la convencin de que las seales de entrada al circuito aparezcan a la izquierda. -flops tiene una entrada CP ( pulso de reloj) que es solo otro nombre para la entrada CLK, se puede tener acceso externo a las entradas de reloj para Q0 Y Q!, marcadas como CP0 Y CP1. la barras de inversin sobre estas entradas indican que se activan por un TPN. -flops tiene una entrada asncrona borrar (CD). Estas se encuentran conectadas entre s a la salida de una compuerta nand de dos entradas MR1 y MR2, donde MR denota reiniciacin maestra. Ambas entradas MR deben estar altas para borrar el contador y ponerlo en 0000. -flops Q1,Q2,Q3, ya estn conectados como un contador de rizos de tres BIT, el flip-flops Q0 no est conectado internamente a nada. Esto permite que el usuario opte por conectar Q0 a Q1 para formar un contador de 4 BIT o usar Q0 en forma separada si as lo desea.

8. Smbolo IEEE/ANSI para el contador 74293. El smbolo contiene 3 bloques distintos. El bloque de la parte superior es el bloque comn de control. La anotacin CTR define este circuito integrado como un contador. Para el contador 74293, las entradas MR1 y MR2 son comunes para a todos los flip-flops del contador estas entradas MR1 y MR2 se muestran como entradas activas en alto combinadas internamente utilizando la operacin la que est indicada por la notacin & esto indica que MR1 y MR2 deben encontrarse al mismo tiempo en estado activo, para reestablecer el contador. La notacin CT = 0 indica que la accin de las entradas MR es hacer que la cuenta de salida sea igual a cero. El bloque de en medio esta marcado con la etiqueta DIV 2 para sealar que este es un contador MOD 2 el cual claro esta es un solo flip-flops DIV 2 significa que el contador dividir la frecuencia de reloj entre dos. El bloque de la parte inferior esta marcado con la etiqueta DIV 8 para sealar que este es un contador MOD 8. la anotacin mas sobre cada entrada de reloj indica que la TPN del reloj ara que el valor de conteo se incremente en uno en otras palabras el contador cuenta en forma ascendente cada vez que se presenta una TPN. La notacin menos se emplea para el contador descendente.

9. Contador asncrono CMOS. En la familia CMOS existen varios contadores asncronos. La mayora son equivalentes a las versiones TTL. Sin embargo existen varios contadores asncronos de CI que no tiene contraparte en la familia TTL, uno de ellos es 74HC4024. este CI es un contador de 7BIT con una entrada maestra de reestablecimiento asncrono. Los 7 flip-flops estn conectados internamente como un contador de rizos MOD 128. La entrada MR es activa en alto y puede emplearse para reiniciar todos los flip-flops hacia el estado cero.

10. Contador asncrono descendente. Es relativamente simple construir contadores asncronos descendentes os cuales contaran hacia abajo desde una cuenta mxima hasta cero. ahora examinaremos la secuencia de conteo para un contador de tres BIT C (7) (6) (5) (4) (3) (2) (1) (0) 1 1 1 1 0 0 0 0 B 1 1 0 0 1 1 0 0 A 1 0 1 0 1 0 1 0

A, B y C representan los estados de salidas del flip-flops cuando el contador recorre su secuencia puede observarse que el flip-flop A es LSB cambia de estado en cada etapa de la secuencia, como hace en el contador ascendente. El flip-flops B cambia de estado cada vez que A pasa de bajo a alto; C cambia de estado cada vez que B pasa de bajo a alto, de este modo en un contado descendente cada flip-flops, excepto el primero debe complementarse cuando el flip-flops anterior pase de bajo a alto. Los contadores descendentes no se utilizan tanto como los ascendentes. Su aplicacin principal es en situaciones donde debe saberse cuando a ocurrido un numero deseado de pulsos de entrada. En estas situaciones el contador descendente se prefija al nmero deseado y luego se le permite contar hacia abajo cuando se aplican los pulsos. Cuando el contador llega al estado cero es detectado por una compuerta lgica cuya salida indica que ha ocurrido el numero prefijado de pulsos. 11. Contadores sncronos paralelos. El problema que se encuentra en los contadores de rizo es ocasionado por los retrasos acumulados en la propagacin de los flip-flops dicho de otra manera no todos los flip-flops cambian en sincrona con los pulsos de entrada. Estas limitaciones pueden superarse con el uso de contadores sncronos o paralelos, en el que todos los flip flops se disparan en forma simultanea (en paralelo) por medio de los pulsos de reloj. Ya que los pulsos de entrada se aplican a todos los flipflops debe utilizase algn medio para controlar cuando un flip-flops se dispare o permanezca inalterado por un pulso de reloj. Esto se logra utilizando la entradas J y K que en la siguiente figura para un contador MOD 16 de 4 BIT.

12. Contador sncronos descendentes y ascendentes. Los contadores ascendentes / descendente (up/down) tambin llamados contadores bidireccionales; son capaces de avanzar en cualquier sentido a lo largo de una secuencia definida y puede invertir su conteo en cualquier punto de su secuencia. En el diagrama lgico se muestra un contador ascendente / descendente sncrono binario de tres bits diseado a partir de flip-flops J-K en configuracin toggle con disparo por borde de subida. Debido a que posee tres flip-flops, su ciclo bsico se compone de ocho estados que van desde cero (000) hasta siete (111) en forma secuencial y repetitiva.

13. Contadores con pre bestablecimiento. Muchos contadores sncronos(paralelo) que estn disponibles en CI estn diseados para ser pre fijables; en otras palabras se pueden prefija r a cualquier valor inicial de conteo, ya sea en forma asncrona (independientemente de la seal de reloj) o sncrona ( durante la transicin activa de la seal de reloj) esta operacin de prefijado tambin se conoce como carga del contador.

14. Pre establecimiento sncrono. Muchos contadores sncronos paralelos de CI emplean el pre establecimiento sncrono con lo que el contador es prefijado durante la misma transicin activa de la seal de reloj que se emplea para el conteo. El nivel lgico aplicado en la entrada determina si transicin activa del reloj ser la que pre establesca el contador o si esta ser contada, como sucede durante el modo normal de operacin. 15. Decodificacin de un contador. Los contadores digitales se utilizan frecuentemente en aplicaciones donde deben determinarse o exhibirse de alguna manera el conteo representado por los estados de los flip-flops uno de los medios ms simples para exhibir el contenido de un contador consiste en conectar la salida de cada flip-flops a un diodo emisor de luz (LED). De esta manera, los estados de los flip-flops estn representados por los led en forma visible ( encendido = 1, apagado = 0) y el conteo se puede determinar mentalmente al decodificador los estados binarios de los LED . Por ejemplo, suponga que este mtodo se ocupa para un contador BCD y los estados de las lmparas son apagado- encendido -encendido-apagado, respectivamente.esto representara l numero binario 0110, que decodificaramos mentalmente como el 6 decimal. Otras combinaciones de estados de los LED representaran los posibles conteos. El mtodo de LED indicador no es conveniente cuando aumenta el tamao ( numero de BIT) del contador, porque es muy difcil decodificar mentalmente los resultados. Por esto es conveniente desarrollar un medio que decodifique electrnicamente el contenido del contador y mostrar los resultados de inmediato y que no requiera operaciones mentales 16. Descodificacin activa en ALTO Un contador MOD-X tiene x diferentes estados, cada uno es modelo en particular de ceros y unos almacenados en los flip-flops del contador. Este sistema es un circuito lgico que genera x diferentes salidas, las cuales detectan ciertos estados del contador. Las salidas del decodificador pueden disearse para introducir un nivel alto o uno bajo cuando ocurra la deteccin. Un decodificador activo alto genera salidas altas para indicar deteccin. En la figura que veremos a continuacin muestra la lgica completa de descodificacin activa para un contador MOD-8. este cuenta de 8 compuertas and de 3 entradas, las cuales producen salidas altas para un estado en particular del contador. Por ejemplo, la compuerta and 0 tiene como entradas las salidas del flip-flops C, B y A. As su salida ser baja en todos los tiempos, excepto cuando A =B=C=0, es decir en el conteo 000. anlogamente, la compuerta and 5 tiene como entradas las salidas del flip-flops C,B y A, donde su salida pasara a alto solo cuando C = 1, B = 0 y A = 1; es decir, en el conteo de 101 ( 5 decimal ) . el resto de las compuertas and se comportan de la misma forma para los otros posibles conteos. En cualquier instante, solamente una compuerta de la salida and es alta, la que se decodifica para la cuenta en particular est presente en el contador. Las formas de onda de la figura lo muestran claramente. Las 8 salidas de and se pueden utilizar para controlar 8 indicadores LED por separado, lo que representa los nmeros decimales del 0 al 7. solo la lmpara estar indicando el conteo adecuado

17. Descodificacin activa en bajo Si se emplean compuertas nand en lugar de and, las salidas detectoras producirn una seal alta, la que pasa abajo solo cuando ocurre l numero que se decodifica. Se utilizan ambos tipos de decodificadores, dependiendo del tipo de circuitos que sean conducidos por las salidas detectoras 18. Descodificacin del contador BCD. Este tiene 10 estados y se pueden decodificar usando las tcnicas anteriores. Estos decodificadores ofrecen 10 salidas que corresponden a los dgitos del 0 al 9 representados por los estados de los flip-flops del contador. Las 10 salidas se pueden usar para controlar 10 indicadores elctricos LED y tener una exhibicin visual. Con mayor frecuencia en vez de utilizar 10 lmparas por separado, se utiliza un solo dispositivo para ver los nmeros del 0 al 9, este se denomina tubo nixie, contiene 10 filamentos muy delgados que son la forma de cada uno de los nmeros. El decodificador BCD controla que filamento esta encendido. Una clase ms nueva de dispositivo decimales de exhibicin visual contiene 7 pequeos segmentos hechos de un material (por lo general dispositivo de cristal liquido o LED ) que emite luz o reflejan la del medio ambiente. Las salidas del BCD controlan que segmentos estn encendidos para producir un patrn que represente uno de los dgitos decimales. 20. Decodificaciones de salidas falsas. Los retrasos entre las transiciones de los flip-flops pueden as mismo ocasionar problemas cuando se decodifica un contador de rizos. El problema se presenta en la forma de transiciones falsas( glitches) o espigas en las salidas de algunas de las compuertas de decodificacin. Esto se ilustra en la siguiente figura para un contador de rizos MOD 4. Las formas de ondas presentes en las salidas de cada flip-flops y compuertas de decodificacin se muestran en la figura. Note el retraso de propagacin que ocurre en las formas de onda de reloj y la salida A y entre las formas de onda A y B. Las transiciones falsas que ocurren en las formas de onda de decodificacin X0 y X2 son ocasionadas por el retraso entre las formas de onda A y B. X0 es la salida de la decodificacin de la compuerta and para l conteo normal 00. La condicin 00 tambin ocurre momentneamente cuando el contador pasa del conteo 01 al 10 como lo demuestra la forma de onda. Esto se debe a que B no cambia de estado sino hasta que A pasa a bajo. Este estado momentneo 00 solo dura algunos nano segundos pero puede ser

detectado por la compuerta de decodificacin si la respuesta de la compuerta es lo suficientemente rpida, por ello la espiga en la salida X0. Una situacin anloga produce una transicin falsa en la salida X2. X2 es la decodificacin para la condicin 10 y ocurre momentneamente en el instante en que el contador pasa de 11 a 00 en respuesta al cuarto pulso de reloj, como se muestra en la forma de onda. Una ves ms esto se debe al retraso de la respuesta del flip-flops B depuse de que A a pasado a bajo.

21. Des habilitacin estroboscpica. Esta tcnica emplea una seal llamada seal estroboscpica para mantener deshabilitadas las compuertas and de decodificacin (salidas en cero), hasta que todos los flip-flops hallan alcanzado un estado estable en respuesta a la transicin negativa del reloj, esto se ilustra en la figura donde la seal estroboscpica se conecta como entrada a cada una de las compuertas de descodificacin. Las formas de onda correspondiente muestran que la seal estroboscpica pasa a bajo cuando el pulso del reloj pasa a alto. Durante el tiempo en que la seal estroboscpica esta en bajo, las compuertas de decodificacin se conservan en bajo. La seal estroboscpica se mantiene en bajo. La seal estroboscpica se va a alto para habilitar las compuertas de decodificacin algn tiempo despus de que el pulso de reloj se fue a bajo. El mtodo estroboscpico no se emplea si un contador solamente se utiliza con fines de exhibicin visual, ya que las espigas en la decodificacin son demasiado angostas para afectar la exhibicin

22. Conexin en cascada de contadores BCD Los contadores BCD se utilizan siempre que se vayan a contar pulsos y los resultados se exhiban en forma decimal. Un solo contador BCD puede contar de 0 a 9 y luego regresa a 0.

Para contar nmeros decimales mayores, podemos conectar los BCD en forma de cascada como lo ilustrar la figura esta configuracin opera como sigue:

0000.

que han ocurrido 9 pulsos los contadores BCD de centenas y decenas siguen todava en cero y el contador de unidades esta en nueve( 1001 binario). De este modo la exhibicin decimal se lee 0009. o que las salidas que las salidas del flip-flops D vaya de 1 a 0, esta transicin de 1 a 0 acta como la entrada de reloj para el contador de las decenas y ocasiona que avanc un conteo. As despus de 10 pulsos de entrada, la lectura decimal es 010. Cuando ocurren otros pulsos adicionales, el contador avanza un conteo por pulso y cada vez que el contador de unidades se recicla a 0 el contador de las decenas avanza 1 conteo. De este modo despus de que han ocurrido 99 pulsos de entrada, el contador de las decenas esta en 9, al igual que el de las unidades. As la lectura decimales 099. ocasiona que el contador de las decenas se recicle a 0. as las salidas del flip-flops D del contador de las decenas realiza una transicin de 1 a 0 que acta como entrada de reloj para el contador de las centenas y ocasiona que avanc un conteo as despus de 100 pulsos la lectura decimal es 100. contina hasta 999 pulsos. En el pulso 1000 todos los contadores se reciclan a 0.

23. Diseo de contadores sncronos. Existen varios mtodos para disear contadores que sigan secuencias arbitrarias, ahora presentaremos los detalles de un mtodo que utiliza flip-flops J K conectados en configuracin de contador sncrono la tcnica es uno de los numerosos procedimientos de diseo que forma parte de una rea del diseo de circuitos digitales que se llama diseo de circuitos secuenciales. Idea bsica: -flops son disparado al mismo tiempo antes de cada pulso de reloj, las entradas J y K de cada flip-flops del contador deben tener el nivel correcto para asegurar que cada flip flop cambie Asia el estado correcto. El proceso de disear un contador sncrono se convierte en uno en que se disea los circuitos lgicos que decodifican los diferentes estados del contador, para proporcionar los niveles lgicos en cada entrada J y K. Las entradas de estos circuitos decodificadores provienen de las salidas de uno o varios flip-flops.

- K. La columna del extremo izquierdo de la tabla enumera las posibles transiciones en la salida de un flip-flops. La segunda y tercera columna contiene el estado presente, simbolizado como Q ( N ) y el siguiente estado simbolizado como Q ( N+1), para cada transicin las ltimas dos columnas contienen los niveles J y K requeridos para producir cada transicin a continuacin examinamos cada caso. -flops es cero y debe permanecer en cero cuando se aplica una entrada de reloj, de esta manera de entender como funciona un flip-flops J- K, esto sucede cuando J=K=0 ( condicin de no cambio), o cuando J=0 y K = 1 (condicin de borrado). De este modo J tiene que ser 0, pero K puede tener cualquier nivel. La tabla indica esto con un 0 en la columna correspondiente a J y una x en la columna para K. Recuerde que x representa una condicin no importa.

J=1 y K= 0 (condicin de establecimiento) o cuando J =K = 1 (condicin de cambio de estado). De este modo J tiene que ser 1, pero para que esta transicin ocurra K puede tener cualquier nivel.

y K = 1 o J=K=1. De este modo K tiene que ser 1 pero J puede estar en cualquiera de estos niveles. 1=>1, el estado presente es 1 y permanecer en 1. esto ocurre cuando J=K=0 o J=1 y K = 0 as, K debe ser cero mientras J puede estar en cualquiera de estos niveles. Estado presente Q(N) 0 0 1 1 Estado siguiente J Q(N+1) 0 1 0 1 0 1 X x X X 1 0 K

Transicin salida 0=>0 0=>1 1=>0 1=>1

en

la

24. Contadores con registro de corrimiento Contador de anillo: El contador de corrimiento ms simple es un registro de corrimiento circulante conectado de modo que el ultimo flip-flops desplace su valor al primer flip-flops. Esta configuracin se muestra en la figura utilizando flip-flops de tipo D (tambin se puede usar flipflops de tipo J K). Estos se conectan d tal forma que la informacin se corra de izquierda a derecha, y de regreso de Q0 a Q3. En mucho casos solo hay un 1 en el registro y se hace que circule alrededor del registro en tanto se apliquen los pulsos del reloj. Por esta razn se le denomina contador de anillo. Las formas de onda la tabla de secuencia y el diagrama de estados muestran los diferentes estados del flip-flops a medida que se aplica los pulsos, suponiendo que el estado inicial es Q3 =1 y Q2 = Q1 =Q0 = 0. despus del primer pulso, el 1 a pasado de Q3 a Q2 de manera que el contador esta en el estado 0100. el segundo pulso produce el estado 0010, y el tercero produce el estado 0001. el cuarto pulso del reloj el estado 1 de Q0 se transfiere a Q3 lo que produce el estado 1000, que es desde luego el estado inicial. Los pulsos subsiguientes ocasionan que se repita la secuencia.

Este contador funciona como un contador MOD 4 por que tiene 4 estados distintos antes de que se repita la secuencia. Note que cada forma de onda de salida del flip-flops tiene una frecuencia igual a un cuarto de la frecuencia de reloj. Un contador de anillo necesitara ms flip-flops que un contador binario para el mismo numero MOD, por ejemplo un contador de anillo MOD 8 requiere de 8 flip-flops en tanto que un contador binario MOD 8 solo necesita 3. A pesar de que es menos eficaz en el uso del flip-flops un contador de anillos sigue siendo til debido a que puede ser decodificado sin tiene que emplear compuertas de decodificacin. La seal de decodificacin para cada estado se obtiene en la salida de sus flip-flops correspondientes. Nota : los diagramas corresponden a un contador MOD 3.

25. Contador Johnson. Aparte de los contadores binarios que pasan por todos sus posibles estados y de los de secuencia truncada, en los cuales el nmero mximo de posibles estados es 2n, donde n corresponde al nmero de flip-flops, existen contadores que tengan un nmero de estados determinado por la regla 2n, donde n es el nmero de flip-flops. Adems estos contadores poseen una realimentacin de la salida complementaria de la ltima etapa independiente del nmero de etapas del contador, a la entrada del primer flip-flop, dando como resultado una secuencia caracterstica. En el diagrama lgico se muestra un contador de Johnson ascendente de tres bits diseado a partir de flip-flops Data con disparo por borde de subida. Debido a que posee tres flip-flops, su nmero mximo de estados es 6, con un ciclo bsico que va desde cero (000) luego el contador se

llenar de 1s de izquierda a derecha y luego se llenara de nuevo de 0s en forma repetitiva como se puede observar en el diagrama de tiempos.

. .

Conclusin. Con el desarrollo de este trabajo se trato de explicar lo ms simplemente posible todas las aplicaciones de los contadores, donde se puede saber cmo son los nmeros MOD donde se designa la cantidad de flip-flops que se deben utilizar. Tambin la forma de onda se disminuye a la mitad de la frecuencia de entrada en cada salida del flip-flop. Otra forma es disminuir la cantidad de numero 2N mediante compuertas nand. Los contadores de dcadas que son todos aquellos que tiene 10 estados. Los contadores descendentes que son capaces de medir desde un nmero mximo a un mnimo. Los flip flops paralelos que tienen la capacidad de contar en forma simultnea. Los ascendentes y descendentes tienen la capacidad de contar en ambos sentidos. Los contadores con pre establecimiento a estos se les puede fijar cualquier valor inicial de conteo. La conexin en cascada BCD es la conexin en forma que la informacin que se utiliza para el segundo flip-flops es sacada del primer, y del tercero del segundo y as

sucesivamente. Esto se hace por que los BCD solo cuentan de 0 a 9, y para valores mayores se conectan en cascada. Los distintos tipos de contadores como los de anillo y Jonson.

Electrnica Contadores, acumuladores, conmutadores Asociadas a los bucles se encuentran a menudo algunas variables auxiliares. Como siempre se utilizan de la misma manera, las llamamos con un nombre propio (contador, acumulador, etc.), pero hay que dejar claro que no son ms que variables comunes, aunque se usan de un modo especial. Contadores Un contador es una variable (casi siempre de tipo entero) cuyo valor se incrementa o decrementa en cada repeticin de un bucle. Es habitual llamar a esta variable cont (de contador) o i (de ndice). El contador suele usarse de este modo: Primero se inicializa antes de que comience el bucle. Es decir, se le da un valor inicial. Por ejemplo: cont = 5 Segundo, se modifica dentro del cuerpo del bucle. Lo ms habitual es que se incremente su valor en una unidad. Por ejemplo: cont = cont + 1 Esto quiere decir que el valor de la variable cont se incrementa en una unidad y es asignado de nuevo a la variable contador. Es decir, si cont vala 5 antes de esta instruccin, cont valdr 6 despus. Otra forma tpica del contador es: cont = cont 1 En este caso, la variable se decrementa en una unidad; si cont vala 5 antes de la instruccin, tendremos que cont valdr 4 despus de su ejecucin. El incremento o decremento no tiene por qu ser de una unidad. La cantidad que haya que incrementar o decrementar vendr dada por la naturaleza del problema. Tercero, se utiliza en la condicin de salida del bucle. Normalmente, se compara con el valor mximo (o mnimo) que debe alcanzar el contador para dejar de repetir las instrucciones del bucle. Ejemplo: Escribir un algoritmo que escriba la tabla de multiplicar hasta el 100 de un nmero N introducido por el usuario algoritmo tabla_multiplicar

variables cont es entero N es entero inicio leer (N) cont = 1 mientras (cont <= 100) hacer inicio escribir (N * cont) cont = cont + 1 fin fin El uso de contadores es casi obligado en bucles mientras y repetir que deben ejecutarse un determinado nmero de veces. Recuerde que siempre hay que asignar al contador un valor inicial para la primera ejecucin del bucle (cont = 1 en nuestro ejemplo) e ir incrementndolo (o decrementndolo, segn el algoritmo) en cada repeticin con una instruccin del tipo cont = cont + 1 en el cuerpo del bucle. De lo contrario habremos escrito un bucle infinito. Por ltimo, hay que prestar atencin a la condicin de salida, que debe estar asociada al valor del contador en la ltima repeticin del bucle (en nuestro caso, 100). Mucho cuidado con el operador relacional (<, >, <=, >=, etc) que usemos, porque el bucle se puede ejecutar ms o menos veces de lo previsto Es un valor que se incrementa o decrementa, segn sea el caso, un contador en trminos constante es un valor fijo que se va a ir contando, es decir cumpliendo una funcin cuantitativa. Es un campo en memoria, el cual sirve (como su nombre lo indica) para contar, ste incrementa en el valor de 1 y nos muestra el nmero de veces que el proceso ha detectado una ocurrencia determinada y siempre deberemos expresarlo en forma cuantitativa. C= 0 Ejemplo: C= C + 1 C= Variable contador C + 1= Se incrementa cuantitativamente. PR= Promedio de Notas. TNOT= Total Notas C= Cantidad de alumnos. C= 100 hasta C= 0 (Decrementa) 1 2= Nmero de veces que se incrementa Nmero o decrementa el contador. Incremento Decremento C=0 C=100

3.2.3. Acumuladores

ACUMULADOR: Es un campo de memoria, un valor que se incrementa en forma no definida esto por la suma de otro valor a dicho campo. Es un campo en memoria, pero que su incremento no es de 1, sino que viene alterndose por la suma de un valor a dicho campo. Ejemplo= TSDO= 0 TSDO= TSDO + SDO 0 + 14000 14000 + 20000 34000 + 2000 36000 Todos los totales implica Acumulador, posiblemente se puede utilizar sumatoria 3.3. Definicin y clasificacin de diagramas Diagrama de flujo

Diagrama de flujo que expresa un algoritmo para calcular la raz cuadrada de un nmero x Los diagramas de flujo son descripciones grficas de algoritmos; usan smbolos conectados con flechas para indicar la secuencia de instrucciones y estn regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeos, ya que abarcan mucho espacio y su construccin es laboriosa. Por su facilidad de lectura son usados como introduccin a los algoritmos, descripcin de un lenguaje y descripcin de procesos a personas ajenas a la computacin. Pseudocdigo El pseudocdigo (falso lenguaje, el prefijo pseudo significa falso) es una descripcin de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintcticas propias de lenguajes de programacin, como asignaciones, ciclos y condicionales, aunque no est regido por ningn estndar. Es utilizado para describir algoritmos en libros y publicaciones cientficas, y como producto intermedio durante el desarrollo de un algoritmo, como los |diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocdigo requieren menos espacio para representar instrucciones complejas. El pseudocdigo est pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementacin. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programacin concretos. Sin embargo, el pseudocdigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programacin especfico, y es a la vez suficientemente estructurado para que su implementacin se pueda hacer directamente a partir de l. As el pseudodocdigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programacin. Busque fuentes ms precisas para tener mayor comprensin del tema. EJERCICIOSDiagrama de flujo

Diagrama de flujo sencillo con los pasos a seguir si una lmpara no funciona. Un diagrama de flujo es una representacin grfica de un algoritmo o proceso. Se utiliza en disciplinas como la programacin, la economa, los procesos industriales y la psicologa cognitiva. Estos diagramas utilizan smbolos con significados bien definidos que representan los pasos del algoritmo, y representan el flujo de ejecucin mediante flechas que conectan los puntos de inicio y de trmino. Caractersticas Un diagrama de flujo siempre tiene un nico punto de inicio y un nico punto de trmino. Adems, todo camino de ejecucin debe permitir llegar desde el inicio hasta el trmino. Las siguientes son acciones previas a la realizacin del diagrama de flujo: Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el dueo o responsable del proceso, los dueos o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras partes interesadas. Definir qu se espera obtener del diagrama de flujo. Identificar quin lo emplear y cmo. Establecer el nivel de detalle requerido. Determinar los lmites del proceso a describir.

Los pasos a seguir para construir el diagrama de flujo son: Establecer el alcance del proceso a describir. De esta manera quedar fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente. Identificar y listar las principales actividades/subprocesos que estn incluidos en el proceso a describir y su orden cronolgico. Si el nivel de detalle definido incluye actividades menores, listarlas tambin. Identificar y listar los puntos de decisin.

Construir el diagrama respetando la secuencia cronolgica y asignando los correspondientes smbolos. Asignar un ttulo al diagrama y verificar que est completo y describa con exactitud el proceso elegido.

Ventajas de los diagramas de flujo Favorecen la comprensin del proceso a travs de mostrarlo como un dibujo. El cerebro humano reconoce fcilmente los dibujos. Un buen diagrama de flujo reemplaza varias pginas de texto. Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos redundantes, los flujos de los re-procesos , los conflictos de autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisin. Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el anlisis de las mismas. Son una excelente herramienta para capacitar a los nuevos empleados y tambin a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.

Tipos de diagramas de flujo Formato vertical: En l el flujo o la secuencia de las operaciones, va de arriba hacia abajo. Es una lista ordenada de las operaciones de un proceso con toda la informacin que se considere necesaria, segn su propsito. Formato horizontal: En l, el flujo o la secuencia de las operaciones, va de izquierda a derecha. Formato panormico: El proceso entero est representado en una sola carta y puede apreciarse de una sola mirada mucho ms rpido que leyendo el texto, lo que facilita su comprensin, aun para personas no familiarizadas. Registra no solo en lnea vertical, sino tambin horizontal, distintas acciones simultneas y la participacin de ms de un puesto o departamento que el formato vertical no registra. Formato Arquitectnico: Describe el itinerario de ruta de una forma o persona sobre el plano arquitectnico del rea de trabajo. El primero de los flujogramas es eminentemente descriptivo, mientras que los utilizados son fundamentalmente representativos. Importancia de los Diagramas de Flujo: Es importante ya que ayuda a designar cualquier representacin grfica de un procedimiento o parte de ese, como su nombre lo indica representa el flujo de informacin de un proceso. Tipos de Diagramas: Diagrama de Programa: Representa grficamente un mtodo propuesto para la solucin de un problema determinado. Diagrama de Sistema: Representa la integracin; interaccin lgicas de los elementos dentro de un sistema propuesto. Diagrama de Procedimiento: Representa grficamente una operacin o flujo de datos dentro de un sistema.

3.4. Simbologa Smbolos utilizados

Para poder hacer comprensibles los diagramas a todas las personas, los smbolos se someten a una normalizacin; es decir, se hicieron smbolos casi universales, ya que, en un principio cada usuario podra tener sus propios smbolos para representar sus procesos en forma de Diagrama de flujo. Esto trajo como consecuencia que slo aquel que conoca sus smbolos, los poda interpretar. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente. En teora, no es necesario usar un tipo especial de smbolos para crear un diagrama de flujo, pero existen algunos ampliamente utilizados por lo que es adecuado conocerlos y utilizarlos, ampliando as las posibilidades de crear un diagrama ms claro y comprensible para crear un proceso lgico y con opciones mltiples adecuadas. Se utilizan los smbolos indicados a continuacin, estandarizados segn la norma ISO 5807: Flecha. Indica el sentido y trayectoria del proceso de informacin o tarea. Rectngulo. Se usa para representar un evento o proceso determinado. ste es controlado dentro del diagrama de flujo en que se encuentra. Es el smbolo ms comnmente utilizado. Se usa para representar un evento que ocurre de forma automtica y del cual generalmente se sigue una secuencia determinada. Rectngulo redondeado: Se usa para representar un evento que ocurre de forma automtica del cul generalmente se sigue una secuencia determinada. Rombo. Se utiliza para representar una condicin. Normalmente el flujo de informacin entra por arriba y sale por un lado si la condicin se cumple o sale por el lado opuesto si la condicin no se cumple. El rombo adems especifica que hay una bifurcacin. Crculo. Representa un punto de conexin entre procesos. Se utiliza cuando es necesario dividir un diagrama de flujo en varias partes, por ejemplo por razones de espacio o simplicidad. Una referencia debe darse dentro para distinguirlo de otros. La mayora de las veces se utilizan nmeros en los mismos.

DOCUMENTO DATOS ALMACENADOS CONECTOR TERMINADOR Existen adems un sin fin de formas especiales para denotar las entradas, las salidas, los almacenamientos, etctera. De acuerdo al estndar ISO, los smbolos e incluso las flechas deben tener ciertas caractersticas para permanecer dentro de sus lineamientos y ser considerados sintcticamente correctos. En el caso del crculo de conexin, se debe procurar usarlo slo cuando se conecta con un proceso contenido dentro de la misma hoja. Existen tambin conectores de pgina, que asemejan a una "rectngulo oblicuo" y se utilizan para unir actividades que se encuentran en otra hoja. Caractersticas que debe cumplir un diagrama de flujo En los diagramas de flujo se presuponen los siguientes aspectos: Existe siempre un camino que permite llegar a una solucin (finalizacin del algoritmo). Existe un nico inicio del proceso.

Existe un nico punto de fin para el proceso de flujo (salvo del rombo que indica una comparacin con dos caminos posibles).

Recomendaciones A su vez, es importante que al construir diagramas de flujo, se observen las siguientes recomendaciones: Evitar sumideros infinitos, burbujas que tienen entradas pero no salidas. Evitar las burbujas de generacin espontnea, que tienen salidas sin tener entradas, porque son sumamente sospechosas y generalmente incorrectas. Tener cuidado con los flujos y procesos no etiquetados. Esto suele ser un indicio de falta de esmero, pero puede esconder un error an ms grave: a veces el analista no etiqueta un flujo o un proceso porque simplemente no se le ocurre algn nombre razonable.

Simbologa y significado valo: Inicio y trmino (Abre y/o cierra el diagrama). Rectngulo: Actividad (Representa la ejecucin de una o ms actividades o procedimientos). Rombo: Decisin (Formula una pregunta o cuestin). Crculo: Conector (Representa el enlace de actividades con otra dentro de un procedimiento). Triangulo boca abajo: Archivo definitivo (Guarda un documento en forma permanente). Triangulo boca arriba: Archivo temporal (Proporciona un tiempo para el almacenamiento del documento).

3.5. Estructuras de control 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 (If-Then-Else y SelectCase) Ejecutar un grupo de sentencias mientras exista una condicin (Do-While) Ejecutar un grupo de sentencias hasta que exista una condicin (Do-Until) Ejecutar un grupo de sentencias un nmero determinado de veces (For-Next) 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. Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados. Tipos de estructura de control Algunas estructuras de control en el lenguaje Java Antecedentes El trmino "estructuras de control", viene del campo de la ciencia computacional. Cuando se presentan implementaciones de Java para las estructuras de control, nos referimos a ellas con la terminologa de la Especificacin del lenguaje Java, que se refiera a ella como instrucciones. Ejecucin secuencial Pero por lo general las instrucciones se ejecutan una despus de la otra, en el orden en que estn escritas, es decir, en secuencia. Este proceso se conoce como ejecucin secuencial. Transferencia de control En Java, como en otros lenguajes de programacin por excelencia como C y/o C++, el programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que tener en cuenta que la instruccin goto es una palabra reservada pero no se utiliza ni se recomienda. Un programa bien estructurado no necesita de esta instruccin. Si sabes programar no utilizaras goto. Estructura de control: seleccin if simple Se trata de una estructura de control que permite redirigir un curso de accin segn la evaluacin de una condicin simple, sea falsa o verdadera. Por ejemplo: Escribir un programa en Java que compare dos nmeros e indique si cul es mayor, menor, mayor y/o igual, menor y/o igual, o si son iguales: String strComparacion = "";... if( numero1 == numero2 ) strComparacion += numero1 + " == " + numero2; if( numero1 > numero2 ) strComparacion += numero1 + " > " + numero2; if( numero1 < numero2 ) strComparacion += numero1 + " < " + numero2; if( numero1 >= numero2 ) strComparacion += numero1 + " >= " + numero2; if( numero1 <= numero2 ) strComparacion += numero1 + " <= " + numero2; System.out.println(strComparacion);... If-Then-Else Si la condicin es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2.

IF (Condicin) THEN (Bloque de sentencias 1) ELSE (Bloque de sentencias 2) END IF Select-Case Se evala la expresin, dando como resultado un nmero. Luego, se recorren los "Case" dentro de la estructura buscando que el nmero coincida con uno de los valores. Es necesario que coincidan todos sus valores. Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case. Si no se encuentra ninguna coincidencia con ningn valor, se ejecuta el bloque de sentencias de la seccin "Case Else".

SELECT (Expresin) CASE Valor1 (Bloque de sentencias 1) CASE Valor2 (Bloque de sentencias 2) CASE Valor n (Bloque de sentencias n) CASE ELSE (Bloque de sentencias "Else") END SELECT Do-While Mientras la condicin sea verdadera, se ejecutarn las sentencias del bloque. DO WHILE (Condicin) (Bloque de sentencias) LOOP que tambin puede expresarse: WHILE (Condicin) (Bloque de sentencias) WEND Do-Until Se ejecuta el bloque de sentencias, hasta que la condicin sea verdadera DO (Bloque de sentencias) LOOP UNTIL (Condicin) For-Next Primero, se evalan las expresiones 1 y 2, dando como resultado dos nmeros.

La variable del bucle recorrer los valores desde el nmero dado por la expresin 1 hasta el nmero dado por la expresin 2. El bloque de sentencias se ejecutar en cada uno de los valores que tome la variable del bucle.

FOR (Variable) = (Expresin1) TO (Expresin2) STEP (Salto) (Bloque de sentencias) NEXT Estructuras anidadas Las estructuras de control bsicas pueden anidarse, es decir pueden ponerse una dentro de otra. [editar] Estructura For-Next dentro de una estructura If-Then-Else IF A > B THEN FOR X = 1 TO 5 (Bloque de sentencias 1) NEXT ELSE (Bloque de instrucciones 2) END IF Estructura If-Then-Else dentro de estructura For-Next FOR x = 10 TO 20 STEP 2 IF A == C THEN (Bloque de instrucciones) ELSE (Bloque de instrucciones) END IF NEXT Estructura For-Next que est dentro de estructura Do-While DO WHILE A > 0 FOR X = 1 TO 10 (Bloque de instrucciones) NEXT A=A-1 LOOP Estructura Do-While que est dentro de estructura For-Next FOR X = 1 TO 10 DO WHILE X < A (Bloque de instrucciones) LOOP NEXT Estructura If-Then dentro de estructura For-Next dentro de estructura Do-While DO WHILE A > 0 FOR X = 1 TO 10 IF A = C THEN (Bloque de instrucciones1) ELSE (Bloque de instrucciones2) END IF NEXT

A=A-1 LOOP Acciones 3.5.1. Secuenciales Estructura Secuencial. Se caracteriza porque una accin se ejecuta detrs de otra. El flujo del programa coincide con el orden fsico en el que se han ido poniendo las instrucciones. Dentro de este tipo podemos encontrar operaciones de inicio/fin, inicializacin de variables, operaciones de asignacin, clculo, solarizacin, etc. Este tipo de estructura se basa en las 5 fases de que consta todo algoritmo o programa: Definicin de variables (Declaracin) Inicializacin de variables. Lectura de datos Clculo Salida Ejemplo 1. Se desea encontrar la longitud y el rea de un crculo de radio 5. Solucin. El objetivo del ejercicio es encontrar la longitud y el rea de un crculo con un radio conocido y de valor 5. Las salidas sern entonces la longitud y el rea. (Fase 5 del algoritmo) Sabemos que la longitud de un crculo viene dada por la frmula 2 * pi * radio y que el rea viene dada por pi * radio al cuadrado. (Fase 4 del algoritmo) Si definimos las variables como: (fase 1 del algoritmo) L = Longitud A = rea R = radio pi = 3.1416 hagamos el algoritmo:

Inicio Pi 3.1416 (definicin de un valor constante) R 5 (radio constante ya que es conocido su valor) A pi * R ^ (asignacin del valor del rea) L 2 * pi * R (asignacin del valor de la longitud) Escribir (A, L) (salida del algoritmo)

Fin Representacin en Diagrama de Flujo para el ejemplo:

Representacin en Diagrama Nassi Schneiderman: Los problemas secuenciales en diagramas N-S se representan solamente por cajas con lneas horizontales

Maestra Infantojuvenil Maestra en Psicologa Clnica Infantojuvenil. Tambin e-learning. www.isep.es/master-psicologiaEnlaces patrocinados En este ejercicio no existen datos de entrada ya que para calcular el rea y la longitud necesitamos nicamente el radio y el valor de Pi los cuales ya son dados en el problema Modificar el problema anterior para que sea capaz de calcular el rea y la longitud de un crculo de cualquier radio requerido. Solucin. El problema es el mismo con la variante de que ahora ya existe un dato de entrada, puesto que el radio puede ser cualquiera y ser necesario que el usuario sea quien lo introduzca de teclado. Usando la misma definicin de variables tenemos:

Algoritmo: Inicio Pi 3.1416 (fase de inicializacin) Leer (R) (fase de lectura) Area pi * R ^ (fase de clculos) L 2 * pi * R Escribir ( A, L ) (fase de salida) Fin Note que la instruccin de asignacin fue cambiada por la instruccin leer. En el flujograma debern cambiarse tambin los smbolos que los representan:

Ejemplo 3. Leer el sueldo de tres empleados y aplicarles un aumento del 10, 12 y 15% respectivamente. Desplegar el resultado. Salidas: Sueldos finales Entradas: Salarios de los empleados Datos adicionales: aumentos del 10, 12 y 15% Clculos: Sueldo final = sueldo inicial + aumento Aumento = sueldo inicial * porcentaje/100 Definicin de variables: Sf1, Sf2, Sf3 = los sueldos finales S1, S2, S3 = salarios de los empleados

Aum1, aum2, aum3 = aumentos ALGORITMO Inicio Leer (S1,S2,S3) Aum1 S1 * 0.10 Aum2 S2 * 0.12 Aum3 S3 * 0.15 Sf1 S1 + Aum1 Sf2 S2 + Aum2 Sf3 S3 + Aum3 Escribir (SF1,SF2,SF3) Fin FLUJOGRAMA

3.5.2. Selectivas ESTRUCTURA DE CONTROL SELECTIVA Existen tres tipos de estructuras de control selectivas, estas se basan en una condicin o en una opcin para decidir la parte del programa por el que pasar. a) Simple b) Doble o compuesta c) Mltiple Selectiva simple.- evala una condicin, si esta es verdadera ejecuta la accin o acciones especificadas, si es falsa no realiza ninguna accin.

Nota: Si existe sola una instruccin o sentencia dentro de la condicin no es necesario marcarlos con inicio y fin, en caso contrario si, como se muestra en el diagrama anterior. Selectiva doble o compuesta.- evala una condicin, si esta es verdadera ejecuta la accin o acciones especificadas, si es falsa ejecuta otra accin o acciones.

Nota: Si existe sola una instruccin o sentencia dentro de la condicin no es necesario marcarlos con inicio y fin como en este caso que la condicin fue falsa, en caso contrario si, en este ejemplo cuando la condicin fue verdadera. Ejemplo: Imprimir si un nmero es positivo o negativo

Nota: las variables no se especifican en el diagrama de flujo, pero si en el pseudocdigo .

Selectivas Las estructuras selectivas se utilizan para tomar decisiones (por eso tambin se llaman estructuras de decisin o alternativas). El mecanismo de accin evala una condicin, y, a continuacin, en funcin del resultado, se lleva a cabo una opcin u otra. Es importante asentar esta idea: el programa est diseado para evaluar una condicin, y actuar en consecuencia, segn que la condicin sea verdadera o falsa. Seleccin Simple Si ... entonces ... Se evala una condicin y si esta resulta verdadera entonces se ejecuta una o varias instrucciones. La sintaxis bsica es: SI (condicin) entonces Instrucciones FINSI Es importante cerrar el SI (FINSI), ya que, si no se cumple la condicin, el programa continua en la instruccin que sigue a FINSI. Ejemplo 3.1. Se desea calcular la raz cuadrada de un nmero, de forma que tras leer el numero introducido por el usuario, es necesario validarlo, -esto es, verificar que cumple las hiptesis-. En nuestro caso, hay que verificar que el nmero sea no negativo. INICIO LEER (numero) SI (numero 0) entonces 7 Raz = p Numero FINSI ESCRIBIR (raz) FIN En Octave/Matlab la instruccin que corresponde a las alternativas simples es IF (condicin) ... END. En el caso de Octava tambin es vlida la instruccin.IF (condicin) ... ENDIF. Seleccin Doble. Si... entonces ... sino .... Lo mas frecuente es encontrar situaciones donde si una condicin se cumple se ejecuta un Grupo de instrucciones, pero si no se cumple, deben ejecutarse otras. La instruccinSi ... Entonces... Sino... facilita este tipo de programacin. La estructura que le corresponde es: SI (condicin) entonces Instrucciones 1 SINO Instrucciones 2 FINSI

Con esta estructura puede mejorarse el algoritmo del ejemplo anterior, sealando error si el usuario ingresa valores negativos. Ejemplo 3.2. Se desea calcular la raz cuadrada de un nmero... INICIO LEER ( numero ) SI (numero 0) entonces Raz = p Numero SINO ESCRIBIR (Error. Debe ingresar valores positivos!) FINSI ESCRIBIR (raz) FIN El comando de alternativas dobles para Octave/Matlab IF (condicin) ... ELSE ... END.. En el caso de Octava tambin es vlida la instruccin.IF (condicin) ... ELSE ... ENDIF. Seleccin Mltiple Tambin hay programas que nos llevan a considerar alternativas con varias opciones posibles. Hay dos formas de escribir esto en pseudocdigo. La primera de ellas modifica la estructura de Seleccin doble: SI (condicion1) entonces Instrucciones 1 SI (condicion2) entonces Instrucciones 2 ... SI (condicin k) entonces Instrucciones k FINSI La instruccin IF (condicion1) Instrucciones 1 ELSEIF (condicion2)

Instrucciones 2 ... ELSEIF (condicin K) Instrucciones k END.'' Corresponde a selecciones mltiples en Octave/Matlab. Nuevamente, el ambiente Octave podemos intercambiar END por ENDIF. La segunda: OPCION es particularmente til cuando se elabora un men. La OPCION toma distintos valores y segn la respuesta del usuario ejecuta las acciones bajo dicha opcin. LEER (opcin) OPCION (Valor 1): Instrucciones 1 (Valor 2): Instrucciones 2: (Valor k): Instrucciones k flas acciones que toque en otro caso Instrucciones k + 1 FINOPCION La opcinen otro caso no es ms que una alternativa en caso que el usuario seleccione alguna opcin no contemplada entre las que se ofrece. Ejemplo 3.3. El usuario ingresa dos valores y se desea elaborar un men cuyas opciones sean calcular multiplicacin, divisin de ambos nmeros y salir del programa. Asuma que el segundo nmero siempre es distinto de cero. Inicio ESCRIBIR (Ingrese dos nmeros: ) LEER (x; y) ESCRIBIR (Men de opciones.) ESCRIBIR (1. Multiplicacin.) ESCRIBIR (2. Divisin.) ESCRIBIR (3. Salir del programa.) LEER (opcin) OPCION 1: mult = x y ESCRIBIR (mult) 2: div = x=y

ESCRIBIR (div) 3: SALIR En otro caso: ESCRIBIR (Debe escoger una opcin entre 1 y 3) FIN OPCION En Octave/Matlab la instruccin que corresponde a OPCION es SWITCH (expresin) Case (valor 1) Instrucciones 1 Case (valor2) Instrucciones 2: otherwise Instrucciones end La implementacin del ejemplo anterior sera: % Inicio x=input('Por favor ingrese un numero'); y=input('Ingrese un numero distinto de cero'); disp('Menu de opciones'); disp(1. Multiplicacin); disp(2. Divisin); disp(3. Salir del programa.); opcion=input(Seleccione una opcin'); SWITCH (opcin) Case 1: mult = x y; disp (mult) Case 2: div = x=y disp (div) Case 3: Break; otherwise disp('Seleccione una opcion entre 1 y 3') end 3.5.2.1. IF, IF...ELSE Estructura de control selectivo: IF simple. Sentencia IF Toma una decisin referente a la accin a ejecutar en un programa entre dos alternativas basndose en el resultado (verdadero o falso) en una expresin. Sintaxis: if (condicin) Instruccin ejecutada cuando la condicin es "verdadera"; else Instruccin ejecutada cuando la condicin es "falsa";

Cuando en un programa que se est ejecutando se encuentra la instruccin if, la condicin ser evaluada para determinar su valor numrico, el cual ser interpretado como verdadero o falso. Si la condicin produce cualquier valor numrico positivo o negativo que no sea cero, ser considerada como condicin "verdadera" y se ejecutar la instruccin que sigue al if. Si la condicin produce un valor numrico de cero, ser considerada "falsa" y se ejecutar la instruccin que sigue al else La parte del else es opcional y se puede omitir. Los operadores relacionales o lgicos sern utilizados para operndos con nmeros enteros, flotantes, dobles o caracter en la instruccin if. Ejemplos: edad > 40 3<4 da != 5 largo <= 50 marcador == terminar 2.0 > 3.3 temp > 98.6 num_id ==682 hora > 40

edad > 40 && edad < 20 // si edad es mayor a 40 Y edad es menor que 20 numero > 2 && numero <= 9 // si numero es mayor a 2 Y numero es menor o igual que 9 numero > 5 || numero <= 15 // si numero es mayor a 5 O numero es menor o igual que 15 numero > 8 || numero <= 12 // si numero es mayor a 8 O numero es menor o igual que 12 Ejemplos invlidos: largo =< 50 // operador fuera de orden 2.0 >>3 // operador invalido marcador = = terminar // no se permiten espacios intermedios Sintaxis a utilizar dentro de un programa: #include<iostream.h> #include<dos.h> #include<conio.h> int main ( ) { textbackground(3) ; // sirve para asignar color al fondo de pantalla clrscr() ; textcolor(2) ; // sirve para asignar color al texto clrscr() ; int num; cout<<"Dame un numero al azar no mayor a 30" << endl; cin>>num; if ( num > 30 ) cout<<"Nmero invalido";

if ( num > 1 ) && (num < 30) cout<<"Bien acertaste el rango"; getch(); return 0; } Elabora el siguiente programa el cual pidas lo siguiente: Cdigo de barras del artculo Cantidad de artculos Si la cantidad de artculos es cuatro nicamente se te cobraran tres. Costo del artculo Posteriormente calcula el total a pagar, el cual depender de la cantidad de artculos a pagar y el costo de los mismos. Si el total a pagar es mayor de 300 pesos despliega un mensaje en pantalla de: por cada 100 pesos de compra se te obsequiarn 10 pesos de vales. En pantalla como resultado deber aparecer lo siguiente: Cdigo de barras del artculo Cantidad de artculos Cantidad a pagar Costo de articulo Total a pagar Vales obtenidos Prctica de IF simple: Elabora el siguiente programa, en l cual pidas al usuario: Da de nacimiento Mes de nacimiento Ao de nacimiento Edad (Si la edad del usuario es mayor a 18 aos, entonces muestra el mensaje: "Podrs formar parte del equipo de (algn deporte)". Adems pide: Grado escolar que cursa Grupo Promedio hasta el ultimo semestre. (Si el promedio es menor a 8 u 80, favor de mostrar un mensaje de: "Sentimos mucho pero no podrs formar parte por tu bajo promedio".) Horario que prefiere de entrenamiento 1598 8 6 30 180 0

Estructura de control selectiva IF compuestos. Al igual que if simple, if compuestos tambin toma una decisin referente a la accin a ejecutar en un programa entre dos alternativas basndose en el resultado (verdadero o falso) en una expresin. Sintaxis: if (condicin) (condicin) operando Instruccin ejecutada condicin es V; else Instruccin ejecutada condicin es F; cuando la cuando la

Los operadores relacionales y lgicos sern utilizados con nmeros enteros, flotantes, doubles o caracter en la instruccin if. Ejemplos:

If (A > 5 && A < 20) // Si A es mayor a 5 Y A es menor que 2 If (B > 10 && B <= 9) // si B es mayor a 10 Y B es menor o igual que 3 If (C > 24 || C <= 12) // si C es mayor a 24 O C es menor o igual que 12 If (D > 78 || C <= 45) // si D es mayor a 78 O D es menor o igual que 45 Elabora el siguiente programa: Pide el nmero de auto Pide el nmero de millas recorridas (Si las millas recorridas son mayores a 80 que es l limite, indicar un mensaje "Esta arriba del limite de velocidad".) Pide los kilmetros recorridos del auto (Si los kilmetros recorridos son mayores a 200 y menores a 350 entonces indicar "Hace falta mantenimiento al auto".) Pide los kilmetros que recorre un auto con un litro de gasolina. De 10 a 16. Si el auto recorre mximo 16 kilmetros por litro y mnimo 14 kilmetros por litro, entonces desplegar un mensaje "Consume poca gasolina" . Y calcular cuntos litros de gasolina consume un auto que recorre 100 kilmetros. Si el auto recorre mximo 13 kilmetros por litro, y mnimo 10 kilmetros por litro, entonces desplegar un mensaje "Consume algo de gasolina".

Prctica de if compuesta Elabora un programa para el equipo de Basket Ball, el cual requiere saber por medio de sistema cantos puntos anota cada uno de sus jugadores y otros puntos:

Pide de nmero de jugador Pide cuntos tiros anot el jugador Pide cuntos tiros fall el jugador (Si fall al menos un tiro y anot al menos un tiro, calcular cuntos tiros en total tuvo el jugador, anotados o no anotados.) Pide cuntos puntos anot el jugador Si los puntos anotados son ms de 6 y menos de 3 entonces indicar "Anot pocos puntos". Si los puntos anotados son ms de 15 y menos de 7 entonces indicar "Anot puntos aceptables". Y adems calcular cuntos puntos de tres en promedio pudo haber anotado". Si los puntos anotados son ms de 22 y menos de 16 entonces indicar "Felicidades por sus anotaciones". Y adems calcular cuntos puntos de tres en promedio pudo haber anotado". Estructura de control IF anidados Puede contener instrucciones sencillas o computas. Pueden estar incluidas una o ms instrucciones If - else. Al incluir una o ms instrucciones de if en una instruccin de if existente se crean las instrucciones anidadas If. Ejemplo: al sustituir la instruccin if unidimensional en If ( distancia > 500 ) cout<<"oprima"; Por instruccin1 en la siguiente instruccin if. If ( horas < 9 ) Instruccin1; else cout<< "suelte"; Resulta en la siguiente instruccin anidada if If ( horas < 9 ) { if ( distancia > 500 ) cout<<"oprima"; } else cout<< "suelte"; Las llaves que encierran el if unidimensional interno son esenciales porque sin ellas C++ asocia un else a la instruccin if ms cercana que no tenga complemento. Sin las llaves, la instruccin anterior equivale a

If ( horas >9 ) if ( distancia > 500 ) cout<<"oprima"; else cout<< "suelte"; Aqu el else completa a la instruccin if anterior, lo cual distorsiona el significado de la instruccin if - else original. #include<iostream.h> int main ( ) { char codigo; cout << "Introduzca un cdigo especificado: "; cin >> codigo; if (codigo == 'S' ) cout << "El componente tiene calificacin de exploracin espacial . "; else if (codigo == 'M' ) cout << "El componente tiene calificacin de militar . "; else if (codigo == 'C' ) cout << "El componente tiene calificacin de comercial . "; else if (codigo == 'T' ) cout << "El componente tiene calificacin de juguete . "; else cout << "Se insert un cdigo invalido. "; cout << end1; getch(); return 0; } Elabora un pequeo programa en el cual pidas: Cdigo del producto. Ao de elaboracin de un producto. Mes de caducidad. Ao de caducidad. Si el producto tiene cdigo aceptable mximo de 150 y mnimo de 80 y su ao de elaboracin es igual a 2001 y adems el mes de caducidad es menor al mes 9 (septiembre) y tambin el ao de caducidad es igual al 2003. entonces ese producto ser aceptable, indicando con mensaje: "el sistema le asignar un lugar en el almacn". Posteriormente debers calcular cuantos aos tiene aun de vigencia el producto y mostrar en pantalla.

De lo contrario el mensaje indicar: "El sistema no puede asignar un lugar en el almacn debido a sus caractersticas dadas". Prctica de if anidados Elabora un pequeo programa para clasificar los productos del almacn de un supermercado que entran da a da. Debers pedir la clasificacin del producto y: Si la clasificacin Indicar que es de: dada es: F V S L B D C N P M E H J Frutas Verduras Salchichonera Lcteos Bebs Damas Caballeros Nios Perfumera Medicamento farmacutico Electrnicos Hogar Juguetera

De no coincidir con ninguna de las clasificaciones antes mencionadas indicar: "Producto invlido". Adems: Si el producto tiene clasificacin "S" indicar "Tendr un 15 porciento de descuento todos los fines de semana". Si el producto tiene clasificacin "F", "V", indicar "Tendr un 20 porciento de descuento todos los martes". 3.5.2.2. SWITCH Estructura de control selectiva Switch Permite ejecutar una de varias acciones, en funcin del valor de una expresin. Sintaxis Switch ( expresin entera ){ case constante 1: Ejemplo: supongamos que en la variable char nota; se guarda un caracter que representa una nota segn el sistema de letras en ingls. El ejemplo representa la

sentencia 1 break; case break; case break; defauld: sentencia defecto break; } por constante 2: sentencia 2 constante n: sentencia n

conversin de notas. Switch ( nota ) { case 'A' printf (" Sobresaliente"); break; case 'B' printf ("notable") break; case break; case break; defauld: break; } 'D' printf ("aprobado") 'C' printf ("Suspenso") printf ("Nota no valida")

Elabora un programa que al introducir el mes y ao, automticamente indique cuntos das tiene el mes que se introdujo. Debers validar que no acepte meses menores que uno ni mayores de 12 al desplegar el resultado o antes t decides. Ejemplo: Mes: Ao: 2003 Automticamente: El mes 5 del ao 2003 tiene 31 das. Elabora un pequeo programa en el cual pidas: Dos nmeros. Posteriormente elige un nmero si es: 1 Para sumar los nmeros introducidos 2 Para multiplicar los nmeros introducidos 3 Para dividir los nmeros introducidos 4 Para restar los nmeros introducidos Nota: Utiliza switch para las opciones 1, 2, 3 y 4. 5

Una vez elegido el numero mostrar el resultado de la operacin elaborada. Disea un programa en el cual puedas utilizar el switch, If, textcolor, textbackground, gotoxy etc. etc. y desarrolles un buen programa. 3.5.3. Repetitivas ESTRUCTURAS REPETITIVAS. Son aquellas que crean un bucle (repeticin continua de un conjunto de instrucciones) en la ejecucin de un programa respecto de un grupo de sentencias en funcin de una condicin. Las tres sentencias repetitivas de Turbo Pascal son: SENTENCIA WHILE SENTENCIA REPEAT-UNTIL SENTENCIA FOR CUNDO SE USA CADA UNO

3.5.3.1. FOR Estructura de control repetitiva o ciclo For For Ciclo el cual permite ejecutar una sentencia simple o compuesta repetidamente un numero de veces conocido, la sentencia adecuada FOR. Sintaxis for ( inicializacin; variacin ) { sentencias } Ejemplo: int i; for ( i = 1; i <= 10; i++ ) { printf ("hola"); } int i; for ( i = 10; i >= 1; i --) { printf ("hola"); } condicin;

Prueba los siguientes ejercicios agregando lo necesario. #include<iostream.h> #include<conio.h> #include<dos.h> int main ()

{ int i; for ( i = 0; i <= 100; i = i + 2 ) { getch count<<i; (); } return 0; } #include<iostream.h> #include<conio.h> #include<dos.h> int main () { int cuenta; for ( cuenta = 2; cuenta <= 20; cuenta = cuenta + 2) cout << cuenta << " ";

getch (); return 0; } Escribe un pequeo programa en el cual pidas: Cdigo del artculo Clave del artculo Cantidad de productos Costo del artculo Validando que solamente puedas introducir 4 artculos. Adems calcula el costo a pagar tomando en cuenta cantidad, costo y muestra en pantalla el resultado. Nota: utiliza For. El programa generado en biblioteca compile y corra el mismo. DESDE (for)

El bucle for permite repetir un conjunto de instrucciones un nmero determinado de veces, con la peculiaridad que la instruccin incrementa (o decremento), automticamente y de uno en uno, la variable que se utiliza como contador. La sintaxis bsica es: DESDE < valor inicio > : < valor final > HACER Instrucciones FINDESDE o DESDE < valor inicio > : < decremento > : < valor final > HACER Instrucciones FINDESDE El incremento es opcional. Si no se coloca, el bucle aumenta de uno en uno -de forma automticael valor del contador. Si se desea decremento la variable es necesario colocar el valor del decremento (1). Retomando el ejemplo 3.4: INICIO LEER(N) SUMA 0 DESDE I = 1 : N SUMA SUMA + I; FINDESDE FIN Observaciones: El contador siempre se inicializa -automticamente- en el valor inicial indicado en la estructura. El comando de Octave/Matlab para esta estructura es: for contador = inicio : espaciado : fin Instrucciones end El programa en Octave/Matlab para el ejemplo es: %Inicio N=input('Por favor, ingrese un valor para N: '); Suma=0; for i=1:N Suma = suma + i;

end3 IMPORTANTE: Las estructuras no utilizan ; al final de la lnea!!! 3.5.3.2. WHILE Estructura de control repetitiva WHILE While Evalan una expresin al inicio y ejecuta la sentencia un nmero de veces requerido. Sintaxis: while ( expresin ) Sentencia Ejemplo: #include<iostream.h> #include<conio.h> #include<dos.h> int main () { int i; i=1; while ( i <= 10) { cout <<" hola"; i = i + 1; // Es los mismo que i ++; getch (); Puesto que los dos son contadores } return 0; } Practica de While Elabora un pequeo programa en el cual a partir de una letra dada, que deber ser igual a: x y Z

Pedir el: registro y grado escolar de 12 alumnos , para el equipo de Foot ball rpido. Nota: utiliza While. Ejercicios con ciclo While Elabora un programa en el cual pidas el login y pasword de una persona, dicho login deber ser 123 y pasword debern ser 456.

Una vez dentro del sistema podr capturar 10 cdigos de artculos con su precio y fecha de caducidad. Nota: utiliza While. MIENTRAS (while) En este tipo de estructura, el cuerpo del bucle se repite MIENTRAS se cumple una determinada condicin. La sintaxis bsica es: MIENTRAS (condicin - expresin lgica) hacer Instrucciones FINMIENTRAS Ejemplo 3.4. Dado un nmero entero N calcular la suma de todos los nmeros entre 1 y N.. INICIO LEER(N) I 1; SUMA 0 MIENTRAS (I N) SUMA SUMA + I; I I + 1; FINMIENTRAS FIN Frecuentemente se utiliza el bucle while para validar los datos de entrada de un programa. Veamos el siguiente: Ejemplo 3.5. Solicitar al usuario un valor positivo y validarlo. INICIO LEER(x) Contador 0; MIENTRAS (x < 0) hacer LEER(x) Cont Cont + 1 FINMIENTRAS FIN

En los ejemplos las la variable I y Cont son contadores y la variable SUMA es un acumulador. Qu cree Ud. qu pasar si se omitiera la lnea I I + 1 en del cuerpo del bucle? Observaciones: Ya que primero se comprueba la condicin y luego se ejecuta el cuerpo del bucle, esta construccin implica que el cuerpo del bucle puede realizarse 0, 1 o ms veces. La estructura correspondiente en Octave/Matlab es: while (condicin) Instrucciones end La implementacin de ambos ejemplos queda como sigue: Ejemplo 3.4 %Inicio x=input('Por favor, ingrese el valor de x: '); Cont=0; Suma=0; while (x<0) disp('Es necesario que el valor de x sea positivo.'); x=input('Por favor, ingrese el valor de x: '); Cont = Cont+1; end Ejemplo 3.5 %Inicio N=input('Por favor, ingrese un valor para N: '); i=1; Suma=0; while (i<=N) Suma = suma + i; i = i+1; end

3.5.3.3. DO.. .WHILE Estructura de control repetitiva Do While Do While Acompaada del while sirve para repetir la ejecucin de sentencias en funcin de una condicin al menos una vez. Sintaxis: do { sentencias } while (condicin); Ejemplo 1: #include<iostream.h> #include<conio.h> #include<dos.h> main () { int i; i = 1; do { cout << " hola"; i = i + 1; while ( i <= 10); } getch (); return 0; } Ejemplo 2: #include<iostream.h> #include<conio.h> #include<dos.h> main () { int id_num; do { { cout << " \n introduzca un nmero

de identificacin: "; cin >> id_num; } while ( id_num < 1000 | | id_num > 1999 ); getch (); return 0; } Ejemplo 3: #include<iostream.h> #include<conio.h> #include<dos.h> main () { int id_num; do { { cout <<"\n introduzca un nmero de identificacin: "; cin >>id_num; if (id_num < 1000 || id_num > 1999) { cout<<"Un nmero invlido acaba de introducirse \"; cout<<"Verifique el nmero de identificacin y vuelva a introducir \n "; } else break; //salir cuando un nmero vlido sea introducido. } while ( 1 ); // esta expresin siempre es verdadera. getch (); return 0; } Prctica de Do While Elabora un pequeo programa en el cual se desplieguen los nmero del 10 al 1 de la siguiente forma:

10 9 8 7 6 5 4 3 2 1 por medio de un ciclo Nota: utiliza Do While Elabora un programa en el cual a partir de una letra, la cual ser nicamente A de aprobado pedir del alumno: Registro Grado Promedio Y solamente podr introducir 15 alumnos ya que los grupos sern de 15. Nota: Utiliza Do While

Estructura de control repetitiva ciclos anidados Ciclos anidados En muchas ocasiones es conveniente utilizar un ciclo contenido dentro de otro. Estos ciclos se llaman ciclos anidados. Ejemplo:

Salida ser i es ahora 1 j=1j=2j=3j=4 i es ahora 2 j=1j=2j=3j=4 i es ahora 3 j=1j=2j=3j=4 i es ahora 4 j=1j=2j=3j=4 i es ahora 5

j=1j=2j=3j=4

Prctica de utilizacin de ciclos anidados Elabora el siguiente programa utilizando ciclos anidados, colores etc. El banco "Serfin" necesita un pequeo sistema para sus empleados de reas confidenciales, cuya clave ser ( del 1 al 30 ), dichos empleados en la actualidad son 30 y nicamente ellos tendrn acceso al sistema al finalizar el da, una vez que el empleado entre dar 5 estatus del efectivo al terminar el da. Posteriormente se calcular un promedio de efectivo de cada empleado.

3.6. Elaboracin de diagramas

3.7. Pseudocdigo

Pseudocdigo
Es un lenguaje de especificacin de algoritmos muy parecido a la mayora de los actuales lenguajes de programacin, lo que facilita su traduccin al lenguaje en s. El pseudocdigo utilizar unas pocas palabras clave o palabras especiales que indican la evolucin del algoritmo. El pseudocdigo tiene algunas ventajas sobre otras tcnicas de diseo de algoritmos: La modificacin es muy sencilla si nos equivocamos en la lgica del programa Es independiente del lenguaje de programacin que se utilice: un algoritmo escrito en pseudocdigo es fcilmente traducible a muchos lenguajes de programacin. 3.8. Prueba de escritorio 3.5 PRUEBAS DE ESCRITORIO La prueba de escritorio es una herramienta til para entender que hace un determinado algoritmo, o para verificar que un algoritmo cumple con la especificacin sin necesidad de ejecutarlo. Bsicamente, una prueba de escritorio es una ejecucin a mano del algoritmo, por lo tanto se debe llevar registro de los valores que va tomando cada una de las variables involucradas en el mismo. A continuacin se muestra un ejemplo de prueba de escritorio del siguiente algoritmo: suma :entero entrada :entero menor :entero leer entrada menor = entrada suma = 0 mientras (entrada != 0) haga si (entrada < menor) entonces menor =entrada fin_si suma = suma + entrada leer entrada fin_mientras escribir valor Menor: escribir menor escribir Suma: escribir suma

INSTRUCCIN

entrada menor suma Pantalla

leer entrada

10

menor = entrada

10

suma :=0

suma :=suma + entrada

10

leer entrada

menor = entrada

suma :=suma + entrada

17

leer entrada

suma :=suma + entrada

26

leer entrada

Escribir valor menor:

Valor Menor

Escribir menor

Escribir Suma:

Suma:tr>

Escribir suma

26

UNIDAD IV DISEO MODULAR

4.1. Funciones A continuacin, puedes ver un listado de opiniones sobre funciones del diseo modular y opinar sobre este tema. Aqu podrs encontrar opiniones relacionadas con funciones del diseo modular y descubrirs qu opina la gente de funciones del diseo modular. Adems de dar tu opinin de este tema, tambin puedes opinar sobre otros trminos relacionados como diseo modular programacin, programacin modular, modular, programacin y programacin. Aqu podrs dejar tus comentarios y opiniones sobre este y otros temas. En la siguiente imagen puedes ver una grfica donde se muestra la evolucin de las bsquedas de funciones del diseo modular y tambin la cantidad de noticias y artculos relacionados que han aparecido en los ltimos aos. Esta grfica tambin te proporciona una muestra del inters que ha despertado este tema en la gente a lo largo del tiempo y refleja su popularidad. Uno de los mtodos ms conocidos para resolver un problema es dividirlo en problemas ms pequeos, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras ms sencillas y a partir de ellas llegamos a la solucin. Esta tcnica se usa mucho en programacin ya que programar no es ms que resolver problemas, y se le suele llamar diseo descendente, metodologa del divide y vencers o programacin top-down. Es evidente que si esta metodologa nos lleva a tratar con subproblemas, entonces tambin tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar mdulos, de ah viene el nombre de programacin modular. En Pascal disponemos de dos tipos de mdulos: los procedimientos y las funciones. Veamos un ejemplo de cmo emplear el diseo descendente para resolver un problema. Supongamos que un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas, cambiar notas, ver las notas segn distintas calificaciones, etc. A continuacin tines un esquema que representa una de las posibles divisiones del problema en mdulos.

Las funciones predefinidas Este tema trata de la programacin modular, y como ya hemos dicho, Pascal nos ofrece dos tipos de mdulos. Uno ya lo hemos comentado, los procedimientos, y el otro, es el que vamos a tratar ahora, las funciones. La divisin a ms alto nivel que se suele hacer con las funciones, es la que las divide segn quien sea el autor de las mismas. As tenemos funciones predifinidas o estndar, y funciones de usuario. Las de usuario las trataremos ms adelante. Ahora nos centraremos en las predefinidas. Las funciones predefinidas, tambin llamadas estndar, son las que el propio lenguaje Pascal pone a disposicin del programador. Por ejemplo, si necesitas calcular el valor absoluto de un nmero, no es necesario que construyas la funcin, pues ya se dispone de una que lo hace. Dependiendo del tipo de compilador de Pascal que uses, dispondrs de ms o menos funciones estndar, pero siempre tendrs un grupo bsico que comparten todos. A continuacin se citan unas cuantas funciones de las bsicas: sin(x:real) sqr(x:real) abs(x:real) int(x:real) pred(x:tipo ordinal) seno de x cuadrado de x valor absoluto de x parte entera de x predecesor de x cos(x:real) sqrt(x:real) ln(x:real) frac(x:real) succ(x:tipo ordinal) coseno de x raz cuadrada de x logaritmo neperiano de x parte decimal de x sucesor de x

pi (*no args.*) valor de la constante pi odd(x:integer) si x es o no impar

Funciones definidas por el usuario Las funciones de usuario son, como su nombre indica, las que el propio usuario declara, de igual manera que declara procedimientos. Las funciones nacen con el propsito de ser subprogramas que siempre tienen que devolver algn valor. Las dos principales diferencias entre procedimientos y funciones son: Las funciones siempre devuelven un valor al programa que las invoc. Para llamar a un procedimiento se escribe su nombre en el cuerpo del programa, y si los necesita, se incluyen los parmetros entre parntesis. Para invocar una funcin es necesario hacerlo en una expresin.

Veamos el esqueleto bsico que comparten las funciones: function nombre [(p1,p2,...)] : tipo; const lista_ctes;

type lista_tipos; var lista_vars; (*declaracion de subprogramas*) begin (* cuerpo de la funcin *) nombre := valor_devuelto end;

Comentemos la sintaxis de una funcin que aparece en el cuadro anterior: La lista de parmetros (p1,p2,...) est encerrada entre corchetes porque es opcional como en los procedimientos. tipo es el tipo del dato que devolver la funcin. As podemos dividir las funciones en lgicas (boolean), enteras (integer), reales (real) y de carcter (char) Y al final del cuerpo de la funcin es obligatorio asignarle un valor del tipo devuelto al nombre de la funcin, porque como ya hemos dicho una funcin siempre devuelve un valor.

Ahora es el momento de que vayas a un divertido ejemplo sobre las funciones disponible en este tema. Aunque ms que ejemplo, se le podra llamar juego, ya que en l tienes la posibilidad de construir varias funciones pudiendo comprobar si son o no correctas. 4.1.1. Sin parmetros

Clasificacin de las operaciones Las operaciones de una clase de datos deben clasificarse durante su especificacin en tres categoras: Creadoras de objetos. Son funciones que sirven para crear objetos nuevos de la clase, ya sean objetos inicializados con un mnimo de informacin o el resultado de clculos ms complejos. Las llamadas a estas funciones es uno de los casos particulares donde permitimos la asignacin entre objetos. Supongamos que hemos especificado la operacin de copia de estudiantes como funcin. Nosotros la hemos traducido a C++ como una redefinicin del operador de asignacin: Estudiante operator=(const Estudiante& original); /* cierto */ /* el resultado es una copia del estudiante original */ y la debemos invocar as para hacer que est2 sea una copia de est1, que se supone ya creado Estudiante est2; est2=est1; En C++ se puede definir un tipo particular de operaciones creadoras, denominadas tambin constructoras. Se trata de funciones con el mismo nombre que la clase, que devuelven un objeto nuevo de la misma. Notad que como el nombre del mtodo coincide con el tipo del resultado, su

cabecera slo lo menciona una vez. Pueden definirse varias versiones con distintas listas de parmetros. En caso de no definirse ninguna operacin de este tipo, C++ proporciona una por defecto, sin parmetros, que crea un objeto sin informacin. Por ejemplo, la declaracin Estudiante est; en realidad est realizando una llamada a la creadora Estudiante () y produce un estudiante sin datos. Si quisiramos crear un estudiante inicializado con un DNI, declararamos una operacin con esta cabecera Estudiante (int dni) /* dni>=0; si no, se produce una excepcin */ /* Devuelve un estudiante con DNI=dni y sin nota */ La usaramos para obtener un estudiante con DNI igual a n y sin nota mediante la llamada Estudiante est (n); Nota que esta operacin es una posible traduccin a C++ de crear_estudiante. _ Modificadoras. Transforman el objeto que las invoca, si es necesario con informacin aportada por otros parmetros. Conceptualmente no deberan poder modificar otros objetos aunque, por supuesto, C++ permite hacerlo mediante el paso de parmetros por referencia. Normalmente sern acciones. Ejemplo: la operacin aadir nota se traducira void anadir nota (doubl nota) /* "nota" ha de estar entre 0 y 10; si no, se produce una excepcin, el parmetro implcito no debe tener nota */ /* el parmetro implcito conserva su DNI y su nota es "nota" */ En ocasiones, una operacin creadora se puede definir de manera equivalente como modificadora, siempre que antes de invocar sta se obtenga un objeto nuevo mediante la creadora por defecto. Por ejemplo, hemos especificado la operacin crear_estudiante, como una accin, de forma que no es necesaria la segunda versin de la constructora anterior. void crear_estudiante(int dni) /* dni>=0; si no, se produce una excepcin */ /* el parmetro implcito es un estudiante con DNI=dni y sin nota */ Con ella se puede crear un estudiante con un DNI igual a n y sin nota as Estudiante est; est.crear_estudiante(n) Como elemento metodolgico, intentaremos siempre que sea posible realizar estas dos instrucciones de manera consecutiva.

Consultoras. Proporcionan informacin sobre el objeto que las invoca, quiz con ayuda de otros parmetros. Generalmente son funciones, salvo si devuelven varios resultados, en cuyo caso podran convertirse en acciones con varios parmetros de salida. Ejemplo: la operacin consultar_nota double consultar_nota() const /* Provoca una excepcin si el estudiante no tiene nota */ /* Devuelve la nota del parmetro implcito */ Para obtener la nota de un estudiante est y guardarla en una variable x escribimos double x = est.consultar_nota(); Para terminar, consideremos las operaciones de lectura y escritura a travs de los canales estndar. La operacin de lectura puede ser creadora o modificadora. Nosotros la hemos definido Como modificadora, ya que para hacerla creadora necesitaramos dotarla de un parmetro innecesario, cosa que no nos gusta. La operacin queda as void leer_estudiante() /* Se leen pares <int dni, double nota>. Si se lee una nota no valida (fuera del intervalo [0..10]), el estudiante resultante queda sin nota. */ La de escritura se define de manera similar void escribir_estudiante() const /* Si el estudiante no tiene nota escribe NP. */ Ejemplos de llamadas: Estudiante e; e.leer_estudiante(); e.escribir_estudiante(); Asignacin entre objetos Como ya hemos mencionado, la asignacin entre objetos es una operacin peligrosa por los efectos laterales que puede producir. Por ello, segn nuestra situacin aplicaremos una u otra poltica al respecto. Esencialmente, hay tres posibilidades: Si somos los implementadores de la clase que estamos usando, podemos saber si la asignacin es una operacin segura y, en caso de que no lo sea, introducir una operacin de copia o un operador de asignacin equivalente. Si no somos los implementadores de la clase que estamos usando, pero dicha clase ofrece una operacin de copia, la usaremos cuando exista el riesgo de aliasing. Si ofrece un operador explcito de asignacin, entonces podremos estar seguros de que su uso no producir aliasing.

Si no estamos en las situaciones anteriores, tendremos que suponer que la asignacin puede producir aliasing y tomar las medidas oportunas. En esta asignatura evitaremos esta posibilidad. De este modo, el significado real de una asignacin entre objetos se reduce a una de las dos siguientes posibilidades: Si se trata de la primera vez que se realiza la asignacin sobre un cierto objeto, tendremos la creacin del mismo. Si ya se han realizado asignaciones con anterioridad sobre dicho objeto, el resultado es la destruccin del mismo y la creacin de otro nuevo con el mismo nombre. Por ejemplo, si deseamos redondear la nota de los estudiantes de una secuencia mediante la funcin correspondiente, podemos emplear el mismo objeto de clase Estudiante para tratar a todos los estudiantes de la secuencia. La primera vez que se asigna la llamada a la funcin sobre el objeto estamos crendolo, las restantes veces se destruye el objeto antiguo y se crea uno nuevo. Por otra parte, emplearemos la poltica de que si un objeto se crea como resultado de una funcin, hay que declararlo lo ms cerca posible de la llamada, como en los ejemplos anteriores. 4. 1 .2. Con parmetro Los parmetros (argumentos) Como habrs observado, con los procedimientos nos llega un concepto nuevo, el de los parmetros. A los parmetros tambin se les conoce como argumentos y tienen la misin de comunicar al procedimiento con el programa que lo llama. Por ejemplo, si quieres hacer un subprograma que multimplique dos nmeros, lo ms cmodo es que al llamar al procedimiento le pases los valores que participarn en la operacin. Podra ser algo como: procedure producto (a,b : integer; var rdo : integer) ; (* resto del procedimiento *)

En el ejemplo anterior se observan las dos clases de argumentos que existen en Pascal: Los parmetros por valor Los parmetros por referencia

Los parmetros por valor tienen dicho nombre porque lo que recibe el subprograma no es ms que copias de los valores de los datos que el programa invocador le pasa. Por tanto si en el procedimiento modificamos alguno de estos valores, los datos originales permanecern inalterados. En el ejemplo, son a y b. En cambio, en los parmetros por referencia lo que se pasa al procedimiento son los datos en s. Y si ste los modifica, los cambios permanecern una vez que la ejecucin vuelva al mdulo que invoc al procedimiento. Se utilizan para obtener valores de los clculos que haga un subprograma, y en el anterior ejemplo es rdo. Cmo se especifica que un parmetro es por valor o por referencia? Pues es tan sencillo como anteponer la palabra reservada var cuando quieres que un argumento sea considerado como referencia. Esto se observa claramente con el parmetro rdo del ejemplo.

nota: si no tienes muy clara la diferencia entre parmetros por valor y por referencia, te aconsejo que vayas al ejemplo sobre procedimientos del que dispones en este tema, estoy seguro que te ayudar.

Bibliografa.

http://es.wikipedia.org/wiki/Programaci%C3%B3n http://es.wikipedia.org/wiki/Programa http://es.wikipedia.org/wiki/Compilar http://es.wikipedia.org/wiki/Ambiente_integrado_de_desarrollo http://es.wikipedia.org/wiki/Lenguaje_de_programacion

You might also like