Está en la página 1de 38

Diseo de Algoritmos

DISEO DE ALGORITMOS (ESQUEMAS)

Metodologa de la programacin

79

Tema 3

3.1 Conceptos Fundamentales


El recurso fundamental utilizado por un programa es la memoria. Es en la memoria donde un programa almacena sus datos e instrucciones. Los datos se almacenan en localizaciones en la memoria denominadas variables. Cada variable puede almacenar un solo tipo de dato (entero, real, carcter,booleano, etc) y requiere de un identificador para poder tener acceso a su contenido. En esta parte del curso veremos este y otros aspectos fundamentales.

3.2 Datos
Un dato es una expresin general que describe los objetos con los cuales opera una computadora. Se los representa :

Identificador Dato Identificador

valor

valor Smbolo de asignacin

3.3 Tipos De Datos


Las cosas se definen en la computadora mediante datos, los algoritmos que vamos a disear van operar sobre esos datos. A nivel de la mquina los datos se representan como una serie de bits (dgitos 1 0). Los tipos de datos que vamos a manejar son: numricos y carcter (tambin llamados alfanumricos), existen adems, los datos de tipo lgicos que solo pueden tener uno de dos valores : verdadero o falso. Los datos numricos pueden ser de varias clases: enteros, enteros largos, de doble precisin, de simple precisin, de coma flotante, reales; cuya definicin depende del lenguaje de programacin utilizado. Los datos de tipo carcter o alfanumricos estn compuestos por el conjunto finito y ordenado de caracteres que la computadora reconoce: caracteres alfabticos : A,B,C,.......Z ; a,b,c,.......z caracteres numricos : 0,1,2, ......9 (que no son nmeros) caracteres especiales : +, /, *, ?,%,$, #, !, <, >,,,{},~,etc.

80

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos Una cadena o string es una sucesin de caracteres que se encuentran delimitados por comillas ( " " ). La longitud de la cadena es la cantidad de caracteres que la forma, incluyendo los espacios que son un carcter ms. As: "Asuncin, Paraguay" es una cadena de longitud 18 "1 de Junio de 1.971" es una cadena de longitud 19 (el 1 y el 1.971 no son nmeros) "123456" es una cadena de longitud 6, no es el nmero 123.456 sobre "123456" no se puede realizar ninguna operacin como sumar, restar, etc. Los datos lgicos Es el conjunto formado por los valores cierto y falso Valores verdaderos: True, 1 Valores Falsos: False,0 Dato

Numricos

No Numricos

Enteros

Reales

Cadenas

Lgicos

Caracteres

Simple Precisin

Doble Precisin

3.4 Constantes
Son objetos cuyo valor permanece invariable a lo largo de la ejecucin de un programa, Una constante es la denominacin de un valor concreto inalterable, de tal forma que se utiliza su nombre cada vez que se necesita referenciarlo. Existen diferentes tipos de constantes: Constantes numricas enteras. Es el rango de enteros compuesta por los signos(+,-) seguido de una serie de dgitos (0..9) A 45

Constantes numricas Reales. Compuestas por los signos(+,-)seguido de una serie de dgitos (0..9) y seguido de un punto (.) seguido de una serie de dgitos (0..9)

Metodologa de la programacin

81

Tema 3 Z 45.6

Constantes no numricas Carcter. Cualquier carcter del lenguaje utilizado encerrado entre comillas. C P

Constante no numricas cadenas. Cualquier serie de caracteres del lenguaje utilizado encerrado entre comillas. S hola

Constante no numricas lgicas. Valores lgicos Falso, verdades. V falso

3.5 Variables
Cuando representamos datos, numricos o alfanumricos, debemos darles un nombre. Una variable es un nombre que representa el valor de un dato. En esencia, una variable es una zona o posicin de memoria en la computadora donde se almacena informacin. En un pseudocodigo y tambin en un programa se pueden crear tantas variables como querramos. As tenemos: A = 50; Variable tipo numrica A cuyo valor es 50. Ciudad = "Asuncin"; Variable alfanumrica o de tipo carcter Ciudad, cuyo valor es Asuncin. X = C + B; Variable numrica X cuyo valor es la suma de los valores de las variables numricas C y B. Es una variable calculada Tomar en cuenta que las operaciones que se pueden realizar con dos o ms variables exigen que stas sean del mismo tipo. No podemos "sumar", por ejemplo una variable alfanumrica a otra numrica y viceversa como por ejemplo:

FechaNueva="1 de Junio de 1.971" + 5 Esto no se puede hacer !! Para dar nombres a las variables hay que seguir ciertas reglas: Pueden tener hasta 32 caracteres Debe empezar obligatoriamente con una letra (a-z o A-Z) No pueden contener espacios en blanco

82

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos El resto de los dgitos pueden ser nmeros Se pueden incluir algunos caracteres especiales como el guin. Ejemplos de nombres vlidos de variables FechaNueva C1 totalGuaranies CONTADOR-5 H123 cantidad_de_Alumnos

Ejemplos de nombres de variables NO vlidos Fecha nueva 1contador 24ABC primer-valor N almacen.pedido Algunos lenguajes de programacin exigen la declaracin de las variables que se van a utilizar en todo el programa; es decir, que al comenzar el programa se debe decir que nombre tiene, de que tipo es (numrica o alfanumrica) y un valor inicial. Como aqu no estamos tratando con ningn lenguaje, la declaracin de las variables puede omitirse. Las variables tambin pueden inicializarse; darles un valor inicial. Por defecto, todas las variables para las que no especifiquemos un valor inicial, valen cero si son de tipo numrica y nulo (nulo no es cero ni espacio en blanco; es nulo) si son de tipo carcter.

3.6 Expresiones
Una expresin es una combinacin de operadores y operandos. Los operandos podrn ser constantes, variables u otras expresiones y los operadores de cadenas, aritmticos, relacionales o lgicos. Las variables se pueden procesar utilizando expresiones apropiadas para su tipo. Las expresiones son de 4 clases:

Relacionales Aritmticos Alfanumricos Lgicos

Metodologa de la programacin

83

Tema 3 Las expresiones relacionales se utilizan para formar expresiones que al ser evaluadas producen un valor de tipo lgico: verdadero o falso. Ellos son: Signo > < = <= >= <> Ejemplos: Ejemplo 25 <= 25 25 <> 25 25 <> 4 50 <= 100 500 >= 1 1=6 Resultado Verdadero Falso Verdadero Verdadero Verdadero Falso Operador Mayor que Menor que Igual a Menor o igual que Mayor o igual que Distinto

Cuando se comparan caracteres alfanumricos se hace uno a uno, comenzando por la izquierda hacia la derecha. Si las variables son de diferente longitud, pero exactamente iguales, se considera que la de menor longitud es menor. Los datos alfanumricos son iguales si y solo si tienen la misma longitud y los mismos componentes. Las letras minsculas son mayores que las maysculas y cualquier carcter numrico es menor que cualquier letra mayscula o minscula; As: carcter numrico < maysculas < minsculas. Ejemplos: Comparacin "A" < "B" "AAAA" > "AAA" "B" > "AAAA" "C" < "c" "2" < "12" Resultado Verdadero Verdadero Verdadero Verdadero Falso

84

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos Estas comparaciones se realizan utilizando el valor ASCII de cada carcter Para tratar los nmeros se utilizan los operadores aritmticos: Signo + * / ^ DIV MOD Significado Suma Resta Multiplicacin Divisin Potenciacin Divisin entera Resto de la divisin entera

El nico operador alfanumrico se utiliza para unir o concatenar datos de este tipo: Signo + Ejemplos: Expresin "Pseudo" + "cdigo" "3" + "4567" "Hola " + "que tal ?" Resultado "Pseudocdigo" "34567" "Hola que tal ?" Significado Concatenacin

Los operadores lgicos combinan sus operandos de acuerdo con las reglas del lgebra de Boole para producir un nuevo valor que se convierte en el valor de la expresin, puede ser verdadero o falso. Signo OR AND NOT Ejemplos: Expresin Verdad AND Falso NOT Falso Verdad OR Falso Resultado Falso Verdad Verdad Significado Suma lgica (O) Producto lgico (Y) Negacin (NO)

Metodologa de la programacin

85

Tema 3

Por ejemplo, la expresin: (12 + 5) OR (7 + 3) = 10 es verdadera (se cumple una y verdad OR Falso es Verdad). La expresin (12 * 5) AND (3 + 2 ) = 60 es falsa (verdad AND falso = Falso).

Cmo se evalan los operadores? La prioridad de los operadores es: Parntesis Signo Potencias Productos y Divisiones Sumas y restas Concatenacin Relacionales Lgicos negacin, conjuncin, disyuncin

3.7 Evaluacin De Expresiones


Tomando en cuenta la jerarqua de operadores se puede realizar las evaluaciones de tres formas preorden inorden la que estudiaremos postorden Evaluacin en inorden, en esta se toma en cuenta la posicin que ocupan los operadores ms la siguiente sintaxis Operando1 operador operando2

( 33 + 3 * 7 ) / 5 33 + 12 45 9 /5

16 * 6 3 * 2 96 - 6 90

86

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos (( x * 2 > y 3) or ( x > y 1 )) and ( y < 5 )

>

>

<

or and

3.8 Operaciones con expresiones


La operacin de dar valor a una variable se llama asignacin. La asignacin vamos a representarla con el smbolo ; una flecha apuntando a la izquierda. No utilizaremos en signo = ya que el operador de asignacin vara de acuerdo con el lenguaje de programacin utilizado. El formato general de una asignacin es: nombre de la variable expresin

La flecha se sustituye en los lenguajes de programacin por = (C++); : = (pascal). Pero para evitar ambigedades en el pseudocodigo utilizaremos la flecha para la asignacin y el smbolo = para indicar igualdad. He aqu algunos ejemplos: A 100 ; significa que a la variable A se le ha asignado el valor 100, ahora A vale 100. suma 5+10; asigna el valor 15 a la variable suma a travs de una asignacin aritmtica. x z + v ; asigna el valor de la suma de las variables z y v a la variable x. El resultado depende de los valores que se asignen a x y a z Toda asignacin es destructiva. Esto quiere decir que el valor que tuviera antes la variable se pierde y se reemplaza por el nuevo valor que asignamos, as cuando se ejecuta esta secuencia: B B B 25 100 77

el valor final que toma B ser 77 pues los valores 25 y 100 han sido destruidos.

Metodologa de la programacin

87

Tema 3

Cuando una variable aparece a ambos lados del smbolo de asignacin como: C C+1

conviene incializarlas al comenzar el programa con cero, aunque no es obligatorio por ahora (en algunos lenguajes de programacin s es necesario). Recordemos que no se pueden asignar valores a una variable de un tipo diferente al suyo. Pongamos atencin a este ejemplo de asignaciones: A 3 B 4 C A+2*B B C-A

En las dos primeras acciones, A toma el valor 3 y B el valor 4. C A+2*B

La expresin tomar el valor 3 + 2 * 4 = 3 + 8 = 11; C vale entonces 11. B CA

C vale 11, A vale 3, por lo tanto B valdr 11 - 3 = 8 Como toda asignacin es destructiva, el valor anterior de B se pierde y pasa a valer ahora 8. Otro ejemplo: J 33 J J+5 J J*3

Que valor tiene J al final ? Veamos.

Primero se asigna 33 a la variable J, J vale entonces 33; luego: J J+5

Esto es: Sumar 5 al valor de J y asignarlo a la variable J. J vale 33. J J vale ahora 38. El valor anterior que era 33 se destruy. Seguimos: J J*3 33 + 5 ; J 38

Esto es: Multiplicar 3 al valor de J y asignarlo a la variable J. 88 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos

J El valor final de J es 114.

38 * 3 ;

114

3.10 Estructuras Algoritmicas


Las estructuras de operacin de programas son un grupo de formas de trabajo, que permiten, mediante la manipulacin de variables, realizar ciertos procesos especficos que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:

3.10.1 Estructuras Secuenciales


Asignacin Entrada Salida

3.10.2 Estructuras Algoritmicas Condicionales


Condicionales Simples Condicionales dobles Mltiples

3.10.3 Estructuras Algoritmicas repetivivas


Hacer para Hacer mientras Repetir hasta

3.11 Estructuras Secuenciales


Tipo de Instruccin Comienzo de proceso Fin de proceso Entrada (Lectura) Salida (Escritura) Asignacin Pseudocdigo inicio fin leer imprimir o escribir <--

Metodologa de la programacin

89

Tema 3 La estructura secuencial es aquella en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. Una estructura secuencial se representa de la siguiente forma: Inicio Accion1 Accion2 . AccionN Fin Asignacin La asignacin 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: Simples Consiste en pasar un valor constate a una variable (a=15) Contador Consiste en usarla como un verificador del numero de veces que se realiza un proceso (a=a+1) Acumulador Consiste en usarla como un sumador en un proceso (a=a+b)

De trabajo Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a=c+b*2/4). Lectura La lectura consiste en recibir desde un dispositivo de entrada (p.ej. el teclado) un valor. Esta operacin se representa en un pseudocodigo como sigue: Leer a, b Donde a y b son las variables que recibirn los valores

90

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos Escritura Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Este proceso se representa en un pseudocodigo como sigue: Escribe El resultado es:, R Donde El resultado es: es un mensaje que se desea aparezca y R es una variable que contiene un valor.

3.11.1 Ejemplo de problemas secuenciales


Un alumno desea saber cual ser su calificacin final en la materia de Algoritmos. Dicha calificacin se compone de los siguientes porcentajes: 55% del promedio de sus tres calificaciones parciales. 30% de la calificacin del examen final. 15% de la calificacin de un trabajo final. Inicio Leer c1, c2, c3, ef, tf prom = (c1 + c2 + c3)/3 ppar = prom * 0.55 pef = ef * 0.30 ptf = tf * 0.15 cf = ppar + pef + ptf Imprimir cf Fin

3.12 Estructuras Algoritmicas Condicionales


La estructura de seleccin, se ejecuta condicionalmente, es decir, si una cierta condicin es verdadera se ejecuta un bloque de instrucciones, si es falsa se ejecuta un bloque diferente de instrucciones. Por ejemplo, si en el cine proyectan "El regreso del Jedi", entonces hay que formar fila para comprar los billetes e ingresar al cine, si no, decidimos otra actividad como ir a bailar. Si utilizamos una seleccin es para indicar que segn el resultado cierto o falso de una expresin vamos a tomar una decisin de realizar determinadas acciones especificadas; seleccionamos las acciones a realizar. La instruccin que permite tomar una decisin, basada en una condicin es Si...Entonces. Al evaluar la condicin, Si...entonces puede devolver solo dos resultados posibles: Verdadero o Falso; es decir, Si o No.

Metodologa de la programacin

91

Tema 3

El formato de la estructura de seleccin es: Condicional simple Si condicin entonces Instruccin 1 instruccin 2 ......... instruccin n Fin_si

Condicional doble Si condicin entonces Instruccin 1 instruccin 2 ......... instruccin n si - no instruccin a instruccin b ......... instruccin x fin - si Observa como el sangrado permite identificar fcilmente que grupo de instrucciones se ejecutan en cada caso. Por ejemplo, Cuando realizamos una llamada telefnica: Si {seal de ocupado} entonces Colgar el telfono si - no Iniciar la conversacin fin - si En este caso, la condicin es {seal de ocupado}, que puede ser verdadera o falsa. Si es verdadera, entonces debemos colgar el telfono y si no, podemos relizar la conversacin.

Ejemplo: Si A = 5 entonces imprimir"A es 5" 92 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos si - no imprimir "A no es igual a 5" fin - si

Condicional multiple Segn_sea expresin hacer E1 : S1,S2,...Sn E2 : S1,S2,...Sn E3 : S1,S2,...Sn ..... EN : S1,S2,...Sn En_otro_caso EN : S1,S2,...Sn Fin_segn_sea

3.13 Estructuras Algoritmicas Repetivivas


La estructura repetitiva se utiliza cuando se quiere que un conjunto de instrucciones se ejecuten un cierto nmero finito de veces. Llamamos bucle o ciclo a todo proceso que se repite un cierto nmero de veces dentro de un pseudocodigo o un programa. Existen tres tipos de estructuras repetitivas; la primera es aquella en donde se tiene perfectamente establecido el nmero de veces que un grupo de acciones se van a ejecutar (20, 5, 2 veces), y la segunda en la que el nmero de repeticiones es desconocido y se har hasta que se cumpla o no cierta condicin. Un ejemplo de la primera sera imprimir los datos de los alumnos de una clase (se conoce cuantos alumnos hay) y un ejemplo de la segunda puede ser el mostrar un mensaje de error cada vez que el usuario pulse una determinada tecla (no sabemos cuantas veces pulsar esa tecla). Las acciones que forman parte del cuerpo del bucle son ejecutadas de forma repetitiva mediante la ocurrencia o no de una condicin.

3.13.1 Estructura Desde o Para


Cuando conocemos de antemano el nmero de veces en que se desea ejecutar una accin o grupo de acciones, se utiliza la estructura repetititiva Desde o Para. Esta estructura ejecuta las acciones del cuerpo del bucle un nmero especificado de veces, y de modo automtico controla el nmero de iteraciones o pasos. La sintaxis es: Metodologa de la programacin 93

Tema 3

Desde variable= Vi hasta Vf [incremento] accin o acciones fin-desde Donde: variable: variable ndice Vi: valor inicial de la variable indice Vf: valor final de la variable indice [incremento]: el nmero que se incrementa (o decrementa) a la variable indice en cada iteracin del bucle, si se omite es 1.

Ejemplo: Imprimir todos los nmeros del 1 al 100. Inicio Desde I = 1 hasta 100 imprimir I Fin I es la variable ndice con un valor inicial de 1, se incrementa uno en cada paso hasta 100. Podemos notar que la estructura desde comienza con un valor incial de la variable indice y las acciones se ejecutan hasta que el valor inicial sea MAYOR que el que el Valor final. La variable indice se incremente en uno (en el ejemplo) y si este nuevo valor del indice no es mayor que el valor final, se ejecuta de nuevo la accin imprimir. En este caso se visualizar los nmeros 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ....97, 98, 99, 100 El incremento o paso de contador es siempre 1 si no es especifica lo contrario. Otro Ejemplo: Imprimir todos los nmeros pares desde 2 hasta el 300 Desde I= 2 hasta 300 incremento 2 imprimir I fin-desde Donde: La variable indice comienza en 2, se imprime 2 y en el siguiente paso se incrementa (suma) 2 a la variable indice que pasa a valer 4; se imprime el 4 y como 4 es menor que 300 (valor final) , se pasa a una nueva iteracin incrementando nuevamente en 2 el indice, que ahora vale 6; y as sucesivamente... 94 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos

Aqui se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296, 298, 300 Si deseamos mostrar los impares el algortimo es el siguiente: Desde I= 1 hasta 300 incremento 2 imprimir fin-desde La variable indice toma estos valores: Indice o Paso (veces que se ejecuta el Valor de ciclo) I 1 1 2 3 3 5 4 7 5 9 6 11 .... .... 150 299 Vemos los valores: 1, 3, 5, 7, 9, 11, 13, .... , 299 El ciclo termina mostrando 299 puesto que en el siguiente paso, La variable I valdra 301 y es mayor al lmite establecido de 300. I pasa a valer realmente 301 en el ltimo paso, solo que la instruccin de imprimir no se ejecuta porque el limite de 300 se supera. Si dieramos la instruccin de imprimir el valor de I, inmediatamente despues del fin-desde, veamos 301. Ejemplo 3: Imprimir los valores comprendidos entre el 460 y 500 en orden inverso. Debemos mostrar: 500, 499, 498, 497, ..... 462, 461, 460. En este caso haremos un decremento a la variable indice (no un incremento como en los ejemplos anteriores). Tenemos que comenzar nuestra variable indice en 500 y decrementar una unidad hasta alcanzar el 460, as: Desde I= 500 hasta 460 incremento -1 imprimir fin-desde Indice o Paso (veces que se ejecuta el Valor de ciclo) I 1 500

Metodologa de la programacin

95

Tema 3 2 499 3 498 4 497 5 496 .... .... 39 462 40 461 41 460 Como salida tenemos, entonces: 500, 499, 498, 497, 496, 495, 494, .... 464, 463, 462, 461, 460. El segundo tipo de estructura repetitiva se diferencia de la primera en que no se conoce el nmero de repeticiones o iteraciones en que se va a ejecutar una instruccin o un bloque de instrucciones. Estas estructuras son bsicamente dos: Estructura mientras....fin-mientras y la estructura repetir.... hasta.Estas dos se diferencian en que la verificacin de la condicin para repetir el ciclo se hace al inicio con mientras y al final con repetir Tambien existen esteucturas repetitivas que son combinaciones de estas dos que mencionamos, pero aqui no las estudiaremos.

3.13.2 Estructura Mientras


Como su nombre lo indica, esta estructura repite el cuerpo del bucle mientras se cumpla una determinada condicin. Su sintaxis es: mientras {condicin} accin 1 accin 2 accin 3 ..... accin n fin mientras instruccin X Lo primero que el computador hace es examinar la condicin, lo que puede dar como resultado dos posibilidades: La condicin se cumple: Se ejecutan accin 1, accin 2, accin 3, ..., accin n. Las estar repitiendo hasta que la condicin no se cumpla, entonces se sale del ciclo y se siguen ejecutando la o las instrucciones que vienen a continuacin y estn fuera del bucle; instruccin X.

96

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos La condicin no se cumple: No entrar en el ciclo. Se ejecutan las instrucciones que vienen despus del bucle, instruccin X, por ejemplo.

De esto se deduce que el cuerpo del bucle de una estructura mientras puede repetirse cero o ms veces, veces que son determinadas por el cumplimiento o no de la condicin. Ejemplo mientras contrasea < > "josua" imprimir"La contrasea es incorrecta !" fin-mientras imprimir "Ha ingresado la contrasea correcta" Veremos ms ejemplos de esta estructura en la seccin ejercicios. Al analizarlos coprenderemos mejor como funciona.-

3.13.3 Estructura Repetir


La estructura repetir cumple la misma funcin que la estructura mientras. La diferencia est en que la estructura mientras comprueba la condicin al inicio y repetir lo hace al final; por eso la estructura repetir se ejecuta por lo menos una vez.. La sintaxis es: repetir instruccin 1 instruccin 2 instruccin 3 ...... hasta {condicin} instruccin X Repetir es opuesta a la estructura mientras. Repetir se ejecuta hasta que se cumpla una condicin que se comprueba al final del bucle. Esta implica que las instrucciones que forman el cuerpo del bucle se ejecutan por lo menos una vez. Con la estructura mientras el bucle puede ejecutarse 0 o ms veces. Lo que la computadora hace al ejecutar la estructura repetir es: Se ejecutan: instruccin 1, instruccin 2, instruccin 3, ...... Se evala la condicin. Si esta es FALSA se vuelve a repetir el ciclo y se ejecutan instruccin 1, instruccin 2, instruccin 3, ...... Si la condicin es VERDADERA se sale del ciclo y se ejcuta instruccin X.

Recordemos una vez ms las diferencias entre las estructuras mientras y repetir

Metodologa de la programacin

97

Tema 3 MIENTRAS REPETIR Comprobacin de la condicin al final, Comprobacin de la condicin al inicio, antes de despus de haber ingresado una vez al entrar al bucle bucle Las instrucciones del cuerpo del bucle se ejecutan Las instrucciones del cuerpo del bucle se en forma repetitiva si la condicin es verdadera ejecutan si la condicin es falsa Las acciones del bucle se pueden ejecutar 0 o ms Las acciones del bucle se ejecutan por lo veces mneos una vez Ejemplo repetir imprimir "La contrasea es incorrecta !" hasta contrasea = "josua"

Ms ejemplos en la seccin Ejercicios. En resumen, hemos visto dos tipos de estructuras repetivas, el primer tipo en la que conocemos el nmero de veces que se repetir el bucle o ciclo (Desde ....fin-desde; y el segundo tipo en el cual no conocemos el numero de veces en se repite el ciclo ya que est determinado por el cumplimiento o no de una condicin (mientras ..... fin-mientras y repetir....hasta). Toda estructura Desde....fin-desde tiene una estructura mientras....fin-mientras o repetir.....hasta equivalente. Pero las estructuras mientras... o hacer ... no tienen NINGN desde.....fin-desde equivalente.

3.14 Tcnicas Para La Formulacin De Algoritmos


Para representar una algoritmo se debe utilizar algn mtodo que permita independizar dicho algoritmo del lenguaje de programacin elegido. Ello permitir que un algoritmo pueda ser codificado inmediatamente en cualquier lenguaje. Las herramientas utilizadas comnmente para disear algoritmos son: 98 Pseudocodigo Diagrama de Flujo. Diagramas Nassi/Shneiderman-S (Chapin) Mtodo Warnier Mtodo Jackson Mtodo Bertini Mtodo Tabourier Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos

3.14.1 Pseudocodigo
Mezcla de lenguaje de programacin y espaol (o ingles o cualquier otro idioma) que se emplea, dentro de la programacin estructurada, para realizar el diseo de un programa. En esencial, el pseudocodigo se puede definir como un lenguaje de especificaciones de algoritmos. Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucin a un problema determinado. El pseudocodigo utiliza palabras que indican el proceso a realizar. El inicio de un algoritmo en pseudocodigo comienza con la palabra Inicio y termina con la palabra fin. Las lneas que estn entre llaves ({ }) se denomina comentario. Un ejemplo aclaratorio es el siguiente. Calcular el rea de un cuadrado. Inicio Leer (lado) A lado * lado Imprimir( A) Fin Acciones simples Las acciones simples, tambin denominadas instrucciones primitivas, son aquellas que el procesador ejecuta de forma inmediata.

Asignacin expresin Variable

Almacena en una variable el resultado de evaluar una

expresin

Entrada Toma un dato del dispositivo de entrada Leer (Variable)

Salida Devuelve un dato al dispositivo de salida Imprimir (variable)

Sentencias de control Tambin se llaman sentencias estructuradas y controlan el flujo de ejecucin de otras instrucciones.

Metodologa de la programacin

99

Tema 3

Secuencia. Se ejecutan instrucciones de I1,I2,...,In en el mismo orden en el que aparece I1,I2,...,I3

Alternativa. En esta instruccin la condicin es booleana Si Fin_si Si condicin entonces I1,I2,...,In Sino J1, J2,..,Jn condicin I1,I2,...,In entonces

Fin_si Opcin V1 V2 V3 ... VN Otro Fin_opcin Expresin de Hacer I1,I2,...,In Hacer J1,J2,...,In Hacer K1,K2,...,Kn Hacer L1,L2,...,Ln Hacer M1,M2,...,Mn

Repeticin o bucles. En un bucle hay una o varias acciones que se han de repetir y una condicin que determina el nmero de veces que se repiten las instrucciones. Mientras Mientras condicin hacer I1,I2,...,In Fin_mientras Repetir Repetir I1,I2,...,In Hasta condicin Para Para Variable de Valinc a ValFin hacer I1,I2,...,In Fin_para

100

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos

3.14.2 Diagrama De Flujo


Un diagrama de flujo es la representacin grfica de un algoritmo. Tambin se puede decir que es la representacin detallada en forma grfica de como deben realizarse los pasos en la computadora para producir resultados. Esta representacin grfica se da cuando varios smbolos (que indican diferentes procesos en la computadora), se relacionan entre si mediante lneas que indican el orden en que se deben ejecutar los procesos.

Caractersticas

Toda representacin grfica, de cualquier tipo sea, debe cumplir las siguientes cualidades. Sencillez. Un mtodo grfico de diseo de algoritmo debe permitir la construccin de estos de manera fcil y sencilla Claridad. Cuando un algoritmo es representado por un mtodo grfico necesita ser interpretado por otra persona distinta de la que lo dise, debe estar lo suficientemente claro para su un fcil reconocimiento de todos los elementos. Normalizacin. Tanto los diseadores de programas como los usuarios que necesitan la documentacin de estos deben utilizar las mismas normas de documentacin. Flexibilidad. Todo mtodo grfico de representacin debe permitir, sin grandes dificultades, posteriores modificaciones de algunas partes de un algoritmo y la insercin de alguna nueva.

Descripcin de los bloques utilizados Los smbolos utilizados han sido normalizados por el instituto norteamericano de normalizacin (ANSI). Terminal. Indica el inicio y el final de nuestro diagrama de flujo.

Indica la entrada y salida de datos.

Metodologa de la programacin

101

Tema 3 Indican la entrada de datos

Indican salida de Datos

Smbolo de proceso y nos indica la asignacin de un valor en la memoria y/o la ejecucin de una operacin aritmtica.

Smbolo de decisin indica la realizacin de una comparacin de valores.

No

si

Subrprogramas

Conector dentro de pagina. Representa la continuidad del diagrama dentro de la misma pagina.

Conector de pagina. Representa la continuidad del diagrama en otra pagina.

Lneas de flujo o direccin. Indican la secuencia en que se realizan las operaciones.

Smbolo de decisin , con opciones mltiples

102

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos comentarios

Ciclo repetitivo para

Ciclo repetitivo Mientras

NO

SI

Ciclo repetitivo Repetir

No

si

3.15 Problemas Resueltos


Para la solucin de los diferentes problemas emplearemos pseudocodigo. a) Problemas Secuenciales 1) Suponga que un individuo desea invertir su capital en un banco y desea saber cuanto dinero ganara despus de un mes si el banco paga a razn de 2% mensual. Inicio Leer cap_inv gan = cap_inv * 0.02 Imprimir gan Fin

Metodologa de la programacin

103

Tema 3

2) Un vendedor recibe un sueldo base mas un 10% extra por comisin de sus ventas, el vendedor desea saber cuanto dinero obtendr por concepto de comisiones por las tres ventas que realiza en el mes y el total que recibir en el mes tomando en cuenta su sueldo base y comisiones. Inicio Leer sb, v1, v2, v3 tot_vta = v1 + v2 + v3 com = tot_vta * 0.10 tpag = sb + com Imprimir tpag, com Fin 3) Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuanto deber pagar finalmente por su compra. Inicio Leer tc d = tc * 0.15 tp = tc - d Imprimir tp Fin 4) Un alumno desea saber cual ser su calificacin final en la materia de Algoritmos. Dicha calificacin se compone de los siguientes porcentajes: 55% del promedio de sus tres calificaciones parciales. 30% de la calificacin del examen final. 15% de la calificacin de un trabajo final. Inicio Leer c1, c2, c3, ef, tf prom = (c1 + c2 + c3)/3 ppar = prom * 0.55 pef = ef * 0.30 ptf = tf * 0.15 cf = ppar + pef + ptf Imprimir cf Fin

5) Un maestro desea saber que porcentaje de hombres y que porcentaje de mujeres hay en un grupo de estudiantes. Inicio Leer nh, nm ta = nh + nm ph = nh * 100 / ta pm = nm * 100 / ta Imprimir ph, pm Fin 104 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos

6) Realizar un algoritmo que calcule la edad de una persona. Inicio Leer fnac, fact edad = fact - fnac Imprimir edad Fin. b)Problemas Condicionales i)Problemas Selectivos Simples 1) Un hombre desea saber cuanto dinero se genera por concepto de intereses sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los intereses siempre y cuando estos excedan a $7000, y en ese caso desea saber cuanto dinero tendr finalmente en su cuenta. Inicio Leer p_int, cap int = cap * p_int si int > 7000 entonces capf = cap + int fin-si Imprimir capf fin 2) Determinar si un alumno aprueba a reprueba un curso, sabiendo que aprobara si su promedio de tres calificaciones es mayor o igual a 70; reprueba en caso contrario. Inicio Leer calif1, calif2, calif3 prom = (calif1 + calif2 + calif3)/3 Si prom >= 70 entonces Imprimir alumno aprobado si no Imprimir alumno reprobado Fin-si Fin 3) En un almacn se hace un 20% de descuento a los clientes cuya compra supere los $1000 Cual ser la cantidad que pagara una persona por su compra? Inicio Leer compra Si compra > 1000 entonces desc = compra * 0.20 si no desc = 0 fin-si

Metodologa de la programacin

105

Tema 3 tot_pag = compra - desc imprimir tot_pag fin. 4) Un obrero necesita calcular su salario semanal, el cual se obtiene de la sig. manera: Si trabaja 40 horas o menos se le paga $16 por hora Si trabaja mas de 40 horas se le paga $16 por cada una de las primeras 40 horas y $20 por cada hora extra. Inicio Leer ht Si ht > 40 entonces he = ht - 40 ss = he * 20 + 40 * 16 si no ss = ht * 16 Fin-si Imprimir ss Fin 5) Un hombre desea saber cuanto dinero se genera por concepto de intereses sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los intereses siempre y cuando estos excedan a $7000, y en ese caso desea saber cuanto dinero tendr finalmente en su cuenta. Inicio Leer p_int, cap int = cap * p_int si int > 7000 entonces capf = cap + int fin-si Imprimir capf fin 6) Que lea dos nmeros y los imprima en forma ascendente Inicio Leer num1, num2 Si num1 < num2 entonces Imprimir num1, num2 si no Imprimir num2, num1 fin-si fin 7) Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuantas caloras consume su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido realizar son nicamente dormir o estar sentado en reposo.

106

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos Los datos que tiene son que estando dormido consume 1.08 caloras por minuto y estando sentado en reposo consume 1.66 caloras por minuto. Inicio Leer act$, tiemp Si act$ = dormido entonces cg = 1.08 * tiemp si no cg = 1.66 * tiemp fin-si Imprimir cg Fin 8) Hacer un algoritmo que imprima el nombre de un articulo, clave, precio original y su precio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el descuento es del 10% y si la clave es 02 el descuento en del 20% (solo existen dos claves). Inicio Leer nomb, cve, prec_orig Si cve = 01 entonces prec_desc = prec_orig - prec_orig * 0.10 si no prec_desc = prec_orig - prec_orig * 0.20 fin-si Imprimir nomb, cve, prec_orig, prec_desc fin 9) Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si se compran tres camisas o mas se aplica un descuento del 20% sobre el total de la compra y si son menos de tres camisas un descuento del 10% Inicio Leer num_camisas, prec tot_comp = num_camisas * prec Si num_camisas > = 3 entonces tot_pag = tot_comp - tot_comp * 0.20 si no tot_pag = tot_comp - tot_comp * 0.10 fin-si Imprimir tot_pag fin 10) Una empresa quiere hacer una compra de varias piezas de la misma clase a una fabrica de refacciones. La empresa, dependiendo del monto total de la compra, decidir que hacer para pagar al fabricante. Si el monto total de la compra excede de $500 000 la empresa tendr la capacidad de invertir de su propio dinero un 55% del monto de la compra, pedir prestado al banco un 30% y el resto lo pagara solicitando un crdito al fabricante.

Metodologa de la programacin

107

Tema 3 Si el monto total de la compra no excede de $500 000 la empresa tendr capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagara solicitando crdito al fabricante. El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crdito. Inicio Leer costopza, numpza totcomp = costopza * numpza Si totcomp > 500 000 entonces cantinv = totcomp * 0.55 prstamo = totcomp * 0.30 crdito = totcomp * 0.15 si no cantinv = totcomp * 0.70 crdito = totcomp * 0.30 prstamo = 0 fin-si int = crdito * 0.20 Imprimir cantinv, prstamo, crdito, int Fin ii) Problemas Selectivos Compuestos 1) Leer 2 nmeros; si son iguales que los multiplique, si el primero es mayor que el segundo que los reste y si no que los sume. Inicio Leer num1, num2 si num1 = num2 entonces resul = num1 * num2 si no si num1 > num2 entonces resul = num1 - num2 si no resul = num1 + num2 fin-si fin-si fin 2) Leer tres nmeros diferentes e imprimir el numero mayor de los tres. Inicio Leer num1, num2, num3 Si (num1 > num2) and (num1 > num3) entonces mayor = num1 si no Si (num2 > num1) and (num2 > num3) entonces

108

Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos mayor = num2 si no mayor = num3 fin-si fin-si Imprimir mayor fin 3) Determinar la cantidad de dinero que recibir un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que estas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se pagan las horas normales y el resto al triple. Inicio Leer ht, pph Si ht < = 40 entonces tp = ht * pph si no he = ht - 40 Si he < = 8 entonces pe = he * pph * 2 si no pd = 8 * pph * 2 pt = (he - 8) * pph * 3 pe = pd + pt fin-si tp = 40 * pph + pe fin-si Imprimir tp fin 4) Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si este se le asigna como un porcentaje de su salario mensual que depende de su antigedad en la empresa de acuerdo con la sig. tabla: Tiempo Utilidad Menos de 1 ao 5 % del salario 1 ao o mas y menos de 2 aos 7% del salario 2 aos o mas y menos de 5 aos 10% del salario 5 aos o mas y menos de 10 aos 15% del salario 10 aos o mas 20% del salario Inicio Leer sm, antig Si antig < 1 entonces util = sm * 0.05 si no Si (antig > = 1) and (antig < 2) entonces Metodologa de la programacin 109

Tema 3 util = sm * 0.07 si no Si (antig > = 2) and (antig < 5) entonces util = sm * 0.10 si no Si (antig > = 5) and (antig < 10) entonces util = sm * 0.15 si no util = sm * 0.20 fin-si fin-si fin-si fin-si Imprimir util fin 5) En una tienda de descuento se efecta una promocin en la cual se hace un descuento sobre el valor de la compra total segn el color de la bolita que el cliente saque al pagar en caja. Si la bolita es de color blanco no se le har descuento alguno, si es verde se le har un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que el cliente deber pagar por su compra. se sabe que solo hay bolitas de los colores mencionados. Inicio leer tc, b$ si b$ = blanca entonces d=0 si no si b$ = verde entonces d=tc*0.10 si no si b$ = amarilla entonces d=tc*0.25 si no si b$ = azul entonces d=tc*0.50 si no d=tc fin-si fin-si fin-si fin-si fin

6) El IMSS requiere clasificar a las personas que se jubilaran en el ao de 1997. Existen tres tipos de jubilaciones: por edad, por antigedad joven y por antigedad adulta. Las personas adscritas a la jubilacin por edad deben tener 60 aos o mas y una antigedad en 110 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos su empleo de menos de 25 aos. Las personas adscritas a la jubilacin por antigedad joven deben tener menos de 60 aos y una antigedad en su empleo de 25 aos o mas. Las personas adscritas a la jubilacin por antigedad adulta deben tener 60 aos o mas y una antigedad en su empleo de 25 aos o mas. Determinar en que tipo de jubilacin, quedara adscrita una persona. Inicio leer edad,ant si edad >= 60 and ant < 25 entonces imprimir la jubilacin es por edad si no si edad >= 60 and ant > 25 entonces imprimir la jubilacin es por edad adulta si no si edad < 60 and ant > 25 entonces imprimir la jubilacin es por antigedad joven si no imprimir no tiene por que jubilarse fin-si fin-si fin-si fin

c) Problemas Repetitivos i) Problemas ( Hacer para ) 1) Calcular el promedio de un alumno que tiene 7 calificaciones en la materia de Diseo Estructurado de Algoritmos Inicio Sum=0 Leer Nom Hacer para c = 1 a 7 Leer calif Sum = sum + calif Fin-para prom = sum /7 Imprimir prom Fin. 2) Leer 10 nmeros y obtener su cubo y su cuarta. Inicio Hacer para n = 1 a 10 Leer num cubo = num * num * num cuarta = cubo * num

Metodologa de la programacin

111

Tema 3 Imprimir cubo, cuarta Fin-para Fin.

3) Leer 10 nmeros e imprimir solamente los nmeros positivos Inicio Hacer para n = 1 a 10 Leer num Si num > 0 entonces Imprimir num fin-si Fin-para Fin. 4) Leer 20 nmeros e imprimir cuantos son positivos, cuantos negativos y cuantos neutros. Inicio cn = 0 cp = 0 cneg = 0 Hacer para x = 1 a 20 Leer num Sin num = 0 entonces cn = cn + 1 si no Si num > 0 entonces cp = cp + 1 si no cneg = cneg + 1 Fin-si Fin-si Fin-para Imprimir cn, cp, cneg Fin. 5) Leer 15 nmeros negativos y convertirlos a positivos e imprimir dichos nmeros. Inicio Hacer para x = 1 a 15 Leer num pos = num * -1 Imprimir num, pos Fin-para Fin. 6) Suponga que se tiene un conjunto de calificaciones de un grupo de 40 alumnos. Realizar un algoritmo para calcular la calificacin media y la calificacin mas baja de todo el grupo. 112 Dpl. Ing. Carlos Balderrama Vsquez

Diseo de Algoritmos Inicio sum = 0 baja = 9999 Hacer para a = 1 a 40 Leer calif sum = sum + calif Si calif < baja entonces baja = calif fin-si Fin-para media = sum / 2 Imprimir media, baja fin 7) Calcular e imprimir la tabla de multiplicar de un numero cualquiera. Imprimir el multiplicando, el multiplicador y el producto. Inicio Leer num Hacer para X = 1 a 10 resul = num * x Imprimir num, * , X, = , resul Fin-para fin. 8) Simular el comportamiento de un reloj digital, imprimiendo la hora, minutos y segundos de un da desde las 0:00:00 horas hasta las 23:59:59 horas Inicio Hacer para h = 1 a 23 Hacer para m = 1 a 59 Hacer para s = 1 a 59 Imprimir h, m, s Fin-para Fin-para Fin-para fin. ii) Problemas ( Mientras ) 1) Dada la siguiente serie matemtica: a1=0 a2=0 an=an-1 + (2*an-2) para n>=3 Determinar cual es el valor y el rango del primer trmino cuyo valor sea mayor o igual a 2000. Algoritmo serie Var Metodologa de la programacin 113

Tema 3 A1, a2, an, cont: entero Inicio A1 1 A2 0 An a1 + (2*a2) N 3 Mientras an < 2000 A2 a1 A1 an An a1 + (2*a2) Cont cont + 1 Fin mientras Escribir El rango es cont y el resultado esan fin
2) Calcular la suma de los divisores de cada nmero introducido por teclado. Terminaremos cuando el nmero sea negativo o 0.

Algoritmo divisores Var Numero, i, suma :entero Inicio Escribir Introduce un nmero, y para acabar uno negativo Leer nmero Mientras numero > 0 Suma 0 Desde i=1 hasta numero /2 Si numero mod i =0 Entonces suma suma + i Fin si Fin desde Suma suma + numero Escribir La suma de los divisores del nmero es suma Leer numero Fin mientras Fin

iii) Problemas ( Repetir ) 1) Dada la siguiente frmula:

X =

((a b)
i =1 n 1 i =2

3) + n

(2 + a * (i 1))
Dpl. Ing. Carlos Balderrama Vsquez

114

Diseo de Algoritmos

Averiguar el valor de x pidiendo al usuario los valores de n, a, b. Algoritmo ecuacion Var N, a, b, primer, segn, i, j: entero X: real Inicio Primer 0 Segn 1 Repetir Escribir Introduce el valor de n, a, b Leer n, a, b Hasta n>=0 Desde i=1 hasta n Primer (((a-b)^i 3)+n)+primer Fin desde Desde j=2 hasta n-1 Segn ((2*a*(i-1))*segn) Fin desde X primer / segn Escribir x Fin 2) Dada una fecha en formato dia/mes/ao determinar el nmero de das y el nombre del mes de dicha fecha, y sacar por pantalla la fecha convertida a formato de dia de mes de ao. Algoritmo fecha Var Dia, mes, ao, n_dias: entero N_mes: cadena Inicio Repetir Escribir Introduce la fecha en formato dia mes ao Leer dia, mes, ao Segn sea mes 1,01: n_mes enero n_dias 31 2,02: n_mes febrero si ao mod 4=0 entonces n_dias 29 entonces n_dias 28 3,03: n_mes marzo n_dias 31

Metodologa de la programacin

115

Tema 3 4,04: n_mes abril n_dias 30 5,05: n_mes mayo n_dias 31 6,06: n_mes junio n_dias 30 7,07: n_mes julio n_dias 31 8,08: n_mes agosto n_dias 31 9,09: n_mes septiembre n_dias 30 10: n_mes octubre n_dias 31 11: n_mes noviembre n_dias 30 12: n_mes diciembre n_dias 31 fin segn sea hasta (dia <=n_dias) y ((mes >=1)y(mes <=12)) y (ao >=0) escribir El mes de n_mestiene n_dias dias escribir La fecha es: n_dias de n_mes de ao fin 3) Se coloca un cpital C, a un interes I, durante M aos y se desea saber en cuanto se habr convertido ese capital en m aos, sabiendo que es acumulativo. Algoritmo interes Var I, j, m: entero C, temporal: real Inicio repetir Escribir Introduce el capital, el interes y el tiempo Leer c, i, m Hasta (c>0) y ((i<=0)y(i<=100)) y (m >=0) Desde j=1 hasta m C c * (1+I/100) Fin desde Escribir Tienes c pts Fin

116

Dpl. Ing. Carlos Balderrama Vsquez

También podría gustarte