Está en la página 1de 25

Captulo 2.Diseo de Algoritmos 2..1 Definicin, anlisis y diseo de algoritmos.

Las etapas de diseo de un algoritmo son:

2..1.1 Definicin Se especifica cual es el propsito del algoritmo. Esta etapa es de las ms importantes. Si se 1 esta mal hecha las etapas subsecuentes aunque estn bien estarn mal. Se debe de definir claramente el problema a resolver y lo que se pretende lograr con su solucin. 2..1.2 Anlisis Se analiza el problema y sus caractersticas. Se determina las entradas y salidas del problema. Se investiga si ya se conoce alguna o varias soluciones al problema. Si se conocen varias, se determina cual es la ms conveniente al problema que estamos tratando. Si no se conoce ninguna o no nos satisface las soluciones existentes se propone una nueva. Aqu es donde entra la creatividad de cada persona. 2..1.3 Diseo En esta etapa se plasma la solucin del problema. Para esto se emplea una herramienta de diseo. Las ms usuales son el diagrama de flujo y el pseudocdigo. En este curso solo emplearemos la notacin de pseudocdigo. A continuacin veremos una de las metodologas ms usuales de diseo de algoritmos. 2..1.4 Programacin Estructurada Qu es la programacin estructurada ?. Es el conjunto de tcnicas que permiten disear un programa ms fcil de: escribir, leer, verificar, depurar y mantener. Se basa en los siguientes puntos:

2..2 Estructuras de Control Las estructuras de control se refiere al conjunto de instrucciones que permiten dirigir el flujo de un programa, es decir, en que orden se van a ejecutar las instrucciones y cuantas veces se van a repetir. Su numero debe ser limitado para simplificar la programacin, mientras mas pequeo pero suficiente sea la cantidad que se tenga de estructuras de control, programar ser mas fcil que si tenemos un conjunto grande de instrucciones. 2..3 Diseo Descendente El diseo descendente se refiere al hecho de que un problema lo analizamos por niveles de lo ms general a lo ms particular. Cada nivel tiene una complejidad menor. Lo vamos descomponiendo en sus partes por medio de capas. Cada capa es mas simple que la anterior. 2..4 Descomposicin Modular

A su vez la descomposicin modular se refiere a que un problema lo descomponemos en otros mas pequeos o mdulos, los cules sean ms fciles de resolver. Esta descomposicin se realiza en base al diseo descendente. Cada nivel de diseo se realiza en base de mdulos de complejidad decreciente. 2..4.1 Estructuras de control Los tipos de estructuras de control son:

Las secuenciales implican que las instrucciones de un programa se realizan en orden una a la vez, es decir, una cosa a la vez y una tras otra. Esto puede representarse por: Inicio <Accin 1> <Accin 2> <Accin 3>

<Accin n> Fin Esto es necesario porque el procesador de una computadora solo 2 puede hacer una cosa a la vez. Adems que simplifica el anlisis. Las estructuras de control selectivas sirven para decidir a donde dirigir el flujo de un programa entre uno o mas caminos de accin. Estas pueden ser de 3 tipos:

La seleccin simple sirve para decidir entre un camino de accin, es decir, hacer o no hacer algo en base a una condicin. Esquemticamente se puede representar por: Si (Condicin) entonces <Accin> Fin_Si Si la condicin es cierta se realiza la <Accin> y se continua en la siguiente instruccin del Si. Si la condicin es falsa no se realiza la <Accin> y se continua en la siguiente instruccin del Si. La seleccin doble se emplea cuando tenemos 2 caminos de accin. Si una condicin es cierta se hace una accin. Si es falsa se realiza otra. Despus se continua con la siguiente instruccin del Si. Si (Condicin) entonces <Accin 1> Sino <Accin 2> Fin_Si La seleccin mltiple se emplea cuando tenemos ms de 2 caminos de accin. Si (Condicin 1) entonces <Accin 1>

Sino Si (Condicin 2) entonces <Accin 2> Sino Si (Condicin 3) entonces <Accin 3>

Sino Si (Condicin n) entonces <Accin n> Sino <Accin x> Fin_Si Se prueba la condicin 1 si es cierta se realiza la <Accin 1>. Si es falsa se pregunta por la condicin 2. Si es cierta se realiza la <Accin 2> . Si es falsa se pregunta por la condicin 3. Si es cierta se realiza la <Accin 3>. Si es falsa se pregunta sucesivamente por las restantes. Si alguna es cierta se realiza y si es falsa se pregunta por las dems. Si todas son falsa se realiza la <Accin x>. Si ms de una es cierta se realiza la primera que se encuentre. El Sino es opcional. Si no se incluye y todas las condiciones son falsas no se realiza nada. Se tiene otra estructura de control para la seleccin mltiple. Esta se emplea cuando se implementa un men. Al realizar un programa es frecuente que se muestre al usuario las opciones que tiene para ejecutar en un determinado programa. El tiene que seleccionar entre una serie de opciones. Estas a su vez estn numeradas consecutivamente o en su defecto identificadas con una letra. En cualquier caso las condiciones que se tiene que probar para ver que opcin se va a ejecutarse es sobre un conjunto finito de valores. En estas circunstancias se puede usar la instruccin Segn. Segn (expresin) caso Val 1: <Accin 1> caso Val 2: <Accin 2> caso Val 3: <Accin 3>

caso Val n: <Accin n>

de otro modo: <Accin x> Fin_Segn La expresin debe de regresar un conjunto finito de valores, por ejemplo los nmeros del 1 al 10 o las letras de la A a la Z. Se verifica el valor regresado por la expresin con cada uno de los valores indicados en los casos. A la primera coincidencia se realiza esa <Accin>. Si coincide con ms de uno se realiza la primera en hallarse. Si no se encuentra el valor se realiza lo que esta en de otro modo, la <Accin

x>. Anlogamente al caso del Si mltiple el de otro modo es opcional. Si no se incluye y no halla ninguna coincidencia del valor regresado por la expresin. no se hace nada. Las estructuras de control repetitivas, tambin llamadas ciclos, sirven para repetir una serie de acciones hasta que se cumpla alguna condicin. Pueden ser de 3 tipos:

Se pueden esquematizar de la siguiente manera: Mientras (condicin) hacer <Acciones> Fin_Mientras Mientras la condicin sea cierta se realiza el conjunto de acciones. Cuando sea falsa el ciclo termina. Repite <Acciones> Hasta_que (condicin) Primero se realiza el conjunto de acciones y despus se pregunta por la condicin. Si la condicin es cierta el ciclo termina. Si es falsa se repiten las acciones hasta que la condicin sea cierta. Desde ndice = Vi hasta Vf Inc hacer <Acciones> Fin_Desde Se inicializa la variable ndice con el valor Vi , se verifica si es mayor al valor Vf. Si es as el ciclo termina. Si no se realizan las acciones y se incrementa el ndice en el valor Inc. Posteriormente se compara el valor del ndice contra el valor Vf. Si es mayor el ciclo termina. Si no se incrementa el ndice en le valor Inc y se repiten los pasos anteriores hasta que el ndice sobrepase el valor Vf. Podemos observar que en el caso del ciclo desde es posible calcular cuantas veces se va ejecutar, ya que se conoce los valores de Vi, Vf e Inc. El ciclo Repite se ejecuta por lo menos una vez. El ciclo mientras es posible que no se ejecute. El diseo descendente va muy aunado con la descomposicin modular. Todo esto se resume con la Programacin Modular. 2..4.2 Programacin Modular: Tcnica de diseo que permite resolver un problema mediante su descomposicin en problemas ms pequeos o mdulos, los cuales se pueden analizar, disear, depurar, afinar y programar independientemente uno del otro. Se basa en la organizacin jerrquica de mdulos con un modulo principal ,o raz. Un programa modular consta de un programa principal y subprogramas o mdulos. El programa principal consta de instrucciones fundamentales como son las estructuras de control y llamadas a los subprogramas. Los subprogramas constan de un conjunto de instrucciones que se ejecutan de una sola vez y se referencian mediante un nombre por el cual son llamados desde distintos puntos del programas. Tericamente tienen un solo punto de entrada y un solo punto de salida. Tambin pueden llamar a otros mdulos. Por ejemplo, podemos considerar el programa que implemente el trabajo de una agencia matrimonial. Este programa debe manejar una serie de datos de como es una persona y de como desea a su pareja. El programa debe de comparar la informacin que tenga de otras

personas y reportar la ms compatible con lo que desea. Lo anterior puede resumir en el siguiente organigrama.

Fig.1 Organigrama del programa de agencia matrimonial. El programa se ha dividido en 3 mdulos. El modulo de datos se encarga de manejar la informacin necesaria de los clientes para alimentrsela al programa. El modulo de Comparacin se encarga de hacer las comparaciones para hallar las parejas ms compatibles entre si. El modulo de reporte nos da la lista de las parejas y su grado de compatibilidad. Estos mdulos son independientes uno del otro en el sentido de que la manera en que trabajen no debe de afectar la manera en que trabajen los dems. La Forma de manejar los datos no influye en la forma de realizar las comparaciones. La forma de hacer las comparaciones no debe de influir en la manera de realizar el reporte. El modulo de datos a su vez se puede dividir en otros 3: Altas, bajas y cambios. El modulo de altas es el que alimenta la informacin al programa (cuando alguien se inscribe). El modulo de bajas se encarga de sacar del programa a los que no quieren ya estar (por que ya se casaron o por que no les gusto con quien les toco). El modulo de cambios es para modificar la informacin del cliente (ya sea por que no le gusten ya las rubias sino las morenas o por que se halla operado). Si es necesario se pueden hacer mas divisiones, de tal forma que el programa sea fcil de realizar. La jerarqua de los mdulos se establece en base a quien puede llamar a quien. Esto tambin define los niveles de complejidad de los mdulos mientras mas abajo este un modulo ms simple es y viceversa. Los mdulos al mismo nivel tienen el mismo grado de complejidad. Un modulo no puede llamar a otro del mismo nivel o de un nivel ms alto, 3 solo puede llamar a mdulos de niveles inferiores. El hecho de que los mdulos constan de un conjunto de instrucciones que se ejecutan de una vez, implica que cuando se llama a un modulo el que lo llamo no continua ejecutndose hasta que el modulo llamado termine de ejecutarse. Por ejemplo. Cuando el modulo principal llama a ejecucin al modulo de Datos, deja una seal de donde se quedo y busca el cdigo de Datos. Cuando lo encuentra se ejecuta el cdigo y hasta que no termine el programa principal no puede continuar. Cuando termina la ejecucin en el programa principal sigue en la instruccin posterior a la llamada al modulo de datos. Si bien la programacin modular debe de simplificar la elaboracin de un programa, como toda solucin en ingeniera mete nuevos problemas. La dificultad que introduce en la necesidad de comunicar los resultados de un modulo a otro. Los datos del mdulo de datos se requieren para el modulo de comparacin. Los resultados del modulo de comparacin se requieren para el modulo de reportes.

La manera en la que se resuelve esto a nivel terico es mediante el paso de parmetros. Este puede ser de 2 tipos:

2..4.2.1 Paso de Parmetros Paso de parmetros por valor. Es solo para parmetros de entrada. El valor de los parmetros con los que se llama al modulo no se modifica al terminar la llamada. Paso de parmetros por referencia. Es tanto para parmetros de entrada como de salida. El valor de los parmetros con los que se llama al modulo si se puede modificar al terminar la llamada. Por ejemplo:

Fig. 2 Ejemplo de paso de parmetros. Si al llamar al modulo de datos la variable X tiene un valor de 1, si el paso de parmetros es por valor al terminar la llamada X sigue valiendo 1. Esto es por que al realizar la llamada se enva el valor de la variable y se almacena en una variable distinta. el modulo trabaja con esta copia y por esa razn no se afecta a la variable con la que se llamo al modulo. Si el paso de parmetros se realiza por referencia, al terminar la llamada X podra valer 2 o cualquier otro valor, inclusive 1. En este paso de parmetros se trabaja directamente con la 4 variable con la que se llama al modulo. Por eso es susceptible de modificarse. De los 2 pasos de parmetros, obviamente es mas general el de referencia. El paso de parmetros que emplea un lenguaje de programacin determinado varia con cada lenguaje. Por ejemplo lenguaje FORTRAN solo tiene paso de parmetros por referencia. PASCAL 5 implementa ambos. Curiosamente lenguaje C solo tiene paso de parmetros por valor!. Lenguaje BASIC no tiene paso de parmetros. 2..4.2.2 Tipos de Mdulos Los tipos de mdulos con los que se cuenta en programacin modular son:

Las caractersticas del modulo principal son:

el.

El subprograma o modulo funcin es aquel que solo regresa un valor y requiere 0, 1 o varios parmetros. Es anlogo a una funcin matemtica. Solo regresan un valor y requieren varios valores. Por ejemplo:

La primera funcin regresa un solo valor y requiere un solo parmetro. La segunda regresa un solo valor y requiere 2 parmetros. La tercera regresa un solo valor y no requiere ningn parmetro. Una funcin regresa su valor por medio de su nombre. Una funcin puede esquematizarse de la siguiente manera: Funcin Nombre(tipo1 p1,tipo2 p2,...,tipo n pn) Tipo Declaracin de variables Inicio cdigo regresa (expresin) Fin_Funcin Nombre es el nombre de la funcin. Entre parntesis se incluye la lista de los parmetros, indicando su tipo y su nombre. Tipo es el tipo de valor que regresa la funcin. En declaracin de variables se declaran las variables que se requieren para hacer los clculos. Cdigo son todas las instrucciones que se necesite realizar para el calculo de la funcin. La instruccin regresa indica el valor que va a regresar la funcin. Este puede ser el resultado de una expresin , como puede ser un a simple variable, constante o una expresin aritmtica. Esta 6 instruccin a forciori debe de ir por lo menos una vez. Para invocarla se hace igual que para una funcin de Librera es decir: . Se escribe el nombre de la funcin y entre parntesis separados por comas se escriben los parmetros con los que se llama la modulo. El valor que retorna la funcin se almacena en su nombre. Este valor a su vez se puede asignar a otra variable como se muestra o se puede emplear en una expresin aritmtica. Por ejemplo: o La funcin sqrt(x) es una funcin que evala la raz cuadrada. Procedimiento es un subprograma que regresa 0, 1, o varios valores y requiere 0, 1, o varios parmetros. Esto puede representarse: Procedimiento Nombre(tipo1 p1,tipo2 p2,...,tipo n pn) Declaracin de variables Inicio cdigo Fin_Procedimiento Nombre es el nombre del procedimiento. Entre parntesis esta la lista de parmetros que 7 requiere. Esta puede ser opcional. En declaracin de variables se declaran las variables que se requieren para hacer los clculos. Cdigo son todas las instrucciones que se necesite realizar para los clculos del procedimiento. Los valores que regresa el procedimiento tiene que hacerse mediante el paso de parmetros por referencia. Para llamar al procedimiento se puede denotar por: llama_a Nombre(p1,p2,...,pn). En ambos casos las variables que se emplean para definir el modulo se denominan parmetros formales, porque se emplean para definir formalmente el modulo. Estos no pueden cambiar, son los mismos a lo largo de todo el programa. Los parmetros con los que se llama al modulo

se llaman parmetros reales. Esto es por que estos parmetros pueden cambiar y son con los que realmente se llama al modulo. Las variables con las que se define al modulo, los parmetros formales, se dice que son variables locales porque solo tiene sentido en le modulo donde estn definidas. Las variable globales son aquellas que tiene sentido en todo el programa. 2..5 Constantes y Variables Constante: Es un valor que no cambia durante la ejecucin de un algoritmo. Variable: Es un valor susceptible de modificarse en la ejecucin de un algoritmo. 2..5.1 Usos comunes de las variables Existen 3 usos comunes de las variables en un algoritmo:

Los acumuladores son variables que almacenan resultados parciales de un proceso. Ejemplo: Desde indice=1 hasta 10 hacer Fin_Desde La variables sum almacena las sumas parciales. Los contadores son variables que cuentan el nmero de veces que se realiza un proceso. En el ejemplo anterior ndice es un contador. Los 8 contadores deben de ser enteros. Los centinelas son variables que determinan cuando se cumple alguna condicin. Ejemplo:

Repite

Hasta_que La variable ndice monitorea cuando se alcanza un total de 10 iteraciones. 2..5.2 Ejemplos de algoritmos sencillos en pseudocdigo. 1. Disear un diagrama de flujo que escriba los nmeros de 1 a 1000

2. Calcular la suma de los nmeros de 1 a 1000. S=1+2+3+4+... + 999+1000 La suma se realiza con un totalizador o acumulador S que ir realizando las sucesivas sumas parciales 1,1+2,1+2+3,1+2+3+4,... etc. Para ello se inicializa la variable del sumador S a cero y el contador I representara los nmeros sucesivos 1 a 1000.

3. Calculo de la media de 50 nmeros e impresin del resultado. Anlisis : Media = (N1+N2+...N50)/50 Se utilizar un contador I que cuente los nmeros (50);cada nmero (N) se leer desde el dispositivo de entrada. Tabla de variables S (suma) real I (contador de nmeros) entero M ( media) real Num(nmeros) real

4. Dados 10 nmeros enteros, visualizar la suma de los nmeros pares de la lista Cuantos nmeros pares existen y cul es la media aritmtica de los nmeros impares?

5. Se desea calcular independientemente la suma de los nmeros pares e impares comprendidos entre 1 y 200

Se utilizar en este algoritmo la tcnica del interruptor o switch(SW). Tabla de variables PAR,IMPAR :enteros N :entera SW :entera 6. Disear un algoritmo para resolver una ecuacin de segundo grado Algoritmo La ecuacin de segundo grado es Ax +Bx+C=0 y las soluciones o races de la ecuacin son: Para que la ecuacin de segundo grado tenga solucin es preciso que el discriminante sea mayor o igual a cero. El discriminante de una ecuacin de segundo grado es D=B 4AC Por consiguiente si : D=0 entonces x1= -B/2A x2= -B/2A D<0 x1 y x2 no tienen solucin En consecuencia, el algoritmo que resolver el problema es el siguiente:
2 2

1. Inicio 2. Introducir coeficientes A,B y C 3. Clculo del discriminante 4. Comprobar el valor de D guales x1=x2= -B/2A x1 y x2 5. Fin del algoritmo Pseudocdigo inicio leer(A,B,C) D B2 - 4*A*C si D<0 entonces escribir ( mensaje de error ) sino si D=0 entonces escribir('x1=x2=' -B/(2*A)) sino escribir (-B+raizcuadrada(D))/(2*A)) escribir (-B-raizcuadrada(D))/(2*A)) fin_si fin_si fin 7. Los empleados de una fbrica trabajan en dos turnos, diurno y nocturno. Se desea calcular el jornal diario de acuerdo con los siguientes puntos: 1. La tarifa de las horas diurnas es de 500 pesos 2. La tarifa de las horas nocturnas es de 800 pesos 3. Caso de ser domingo, la tarifa se incrementara en 200 pesos el turno diurno y 300 pesetas el turno nocturno. Anlisis El procedimiento a seguir es: 1. Leer nombre del turno, horas trabajadas y da de la semana. 2. Si es el nocturno aplicar la formula : JORNAL=800*HT 3. Si el turno es diurno aplicar la formula: JORNAL =500*HT 4. Si el da es domingo : nocturno JORNAL =(800+300)*HT Pseudocdigo algoritmo Jornal inicio leer(HT, Da, Turno) si Da <> `Domingo` entonces si Turno =`diurno` entonces jornal <- 500*HT

sino jornal <- 800*HT fin _si sino si Turno =`diurno` entonces jornal <- 700*HT sino jornal <- 1100*HT fin_si fin_si escribir (jornal) fin 8. Leer tres nmeros del teclado y deducir si se han introducido en orden creciente Var N1,N2,N3: enteros algoritmo creciente inicio escribir (introducir tres nmeros`) leer (N1,N2,N3) si N1 <=N2 y N2<=N3 entonces escribir (Orden creciente) sino escribir (No estn en orden creciente) fin_si fin 9. Disear el algoritmo para imprimir los nmeros impares menores o iguales que n. Los nmeros impares son 1,3,5,7,...n El pseudocdigo es: inicio leer(n) desde i <-- 1 hasta n incremento 2 hacer escribir (i ) fin_desde fin 10. Leer sucesivamente nmeros del teclado, hasta que aparezca un nmero comprendido entre 1 y 5 algoritmo Rango inicio repetir escribir(nmero comprendido entre 1 y 5`) leer (nmero) hasta que numero >= 1 y numero <= 5 escribir (nmero encontrado) fin 11. Calcular el valor mximo de una serie de 100 nmeros

Para resolver este problema necesitaremos un contador que cuente de 1 a 100, para contabilizar los sucesivos nmeros. El algoritmo que calcule el valor mximo ser repetido y partiremos considerando que el primer nmero ledo es el valor mximo, por lo cual se realizar una primera asignacin del nmero 1 a la variable mximo. leer (numero ) n <-- 1 mximo <-- numero leer un nuevo nmero compararlo con el valor mximo si es inferior implica que el valor mximo es el antiguo si es superior implica que el valor mximo es el recientemente ledo, por lo que ste se convertir en mximo mediante una asignacin repetir las acciones anteriores hasta que n=100 Variables n :entero mximo, numero :real leer(numero) n<--1 mximo<-- numero repetir n <--n+1 leer(numero) si numero >mximo entonces mximo <-- numero hasta_que n=100 escribir (`numero mayor o mximo ` mximo) 12. Obtener un algoritmo que permita calcular la tabla de multiplicar mediante bucles anidados desde. variables i, j, producto: entero desde i <-- 1 hasta 10 hacer escribir (`tabla del`, i) desde j <-- 1 hasta 10 hacer producto <-- i*j escribir(i,`por`,j,`=`, i*j producto) fin_desde fin_desde 13. Se desea disear un algoritmo que escriba los nombres de los das de la semana en funcin del valor de una variable DIA introducida por teclado. Los das de la semana son 7 por consiguiente el rango de valores de DIA ser 1..7, y en caso de que DIA tome un valor fuera de este rango se deber producir un mensaje de error advirtiendo la situacin anmala. inicio leer DIA segun_sea DIA hacer 1. escribir (`LUNES`) 2. escribir (`MARTES`) 3. escribir(`MIERCOLES`)

4. escribir (`JUEVES`) 5. escribir(`VIERNES`) 6. escribir (`SABADO`) 7. escribir (`DOMINGO`) otros escribir( ERROR) Fin_Segn fin 14. Se desea un algoritmo que realice la operacin de suma o resta de dos nmeros ledos del teclado en funcin de la respuesta S/N a un mensaje de peticin de datos. La tabla de variables es la siguiente : A,B :reales CON :caracteres (cadena) Pseudocdigo algoritmo Suma_resta inicio escribir (`desea suma(S), resta(R)`) leer CON si CON=`S` entonces S <-- A+B escribir (`Suma=`,S) sino R<-- A-B escribir (`Resta=`,R) fin_si fin 15. Deducir el nmero de das de un mes en funcin del nmero de orden dentro del calendario (1= enero,2=febrero,etc) y teniendo en cuenta si el ao es bisiesto o no. Anlisis Los das que tienen los diferentes das del ao son: 1. Enero:31 2. Febrero:28 0 29 3. Marzo :31 4. Abril:30 5. Mayo:31 6. Junio: 30 7. Julio: 31 8. Agosto:31 9. Septiembre:30 10. Octubre:31 11. Noviembre:30 12. Diciembre:31 la divisin de AO/4 es cero. El problema se soluciona con una estructura de seleccin segun_sea(case) Pseudocdigo Algoritmo Bisiesto inicio segun_sea mes hacer

1,3,5,7,8,10,12:<-- 31 4,6,9,11:Dia <-- 30 2: si Ao mod 4=0 entonces Da <-- 29 sino Da<-- 28 fin_si sino escribir (`rango del mes 1-12) Fin_Segn fin 16. Clculo de la suma de los cuadrados de los 100 primeros nmeros naturales. Anlisis 2 2 2 2 S=1 + 2 +3 +...100 Algoritmo Tabla de variables I contador :entero S sumador :real(o entero largo) C cuadrados :real(o entero largo) Pseudocdigo algoritmo Suma_c inicio I <-- 0 S <-- 0 mientras I<100 I <-- I+1 C <-- I*I S <-- S+C fin_mientras escribir (`Suma=`,S) fin 17. Calcular el nmero de elementos negativos, cero y positivos de un vector dado de 60 elementos Pseudocdigo algoritmo contar Var P,N,C :enteros V :array [1..60] de real inicio N <-- 0 P <-- 0 C <-- 0 desde i <-- 1 hasta 60 hacer leer V(i) segun_sea V(i) hacer >0 :P <-- P+1 <0 :N <-- N+1 =0 :C <-- C+1 Fin_Segn fin_desde

escribir (P,N,C) fin 18. Se tiene una lista de N nombres de alumnos. Escribir un algoritmo que solicite el nombre de un alumno en la lista(array) si est en la lista. Tabla de variables LISTA(I) Matriz de nombres: tipo de cadena NOMBRE Cadena i,n Enteros Pseudocdigo algoritmo Bsqueda lineal1 inicio leer(NOMBRE) desde I <-- 1 hasta N hacer

si LISTA(I) = NOMBRE entonces escribir (`Nombre encontrado`) fin_si fin_desde fin 19. Se desea eliminar los blancos de una frase dada terminada en un punto. Se supone que es posible leer los caracteres de la frase de uno en uno. Anlisis Para poder efectuar la lectura de la frase, se almacena sta en un array de caracteres(F) de modo que F(i) contiene el carcter i-simo de la frase dada. Construiremos una nueva frase sin blancos en otro array. Algoritmo Los pasos a dar para la realizacin del algoritmo son: 1. Inicializar contador de letras de la nueva frase G 2. Leer el primer carcter 3. Repetir Si el primer carcter no es en blanco, entonces escribir en el lugar siguiente del array B; leer el carcter siguiente de la frase dada. Hasta que el ltimo carcter se encuentre. 4. Escribir la nueva frase ya sin blancos Tabla de variables F Array de caracteres de la frase dada G Array de caracteres de la nueva frase I Contador del array J Contador del array G Pseudocdigo algoritmo Blanco inicio I <-- 1 J <-- 0

leer (F(I)) repetir si F(I) <> ` ` entonces J <-- J+1 G (I) <-- F(I) fin_si I <-- I+1 leer(F(I)) hasta_que F(I) = ` . escritura de la nueva frase G desde I <-- 1 hasta J hacer escribir (G(I)) fin_desde fin 20. Se desea un algoritmo que proporcione la palabra inversa o simtrica de una dada( por ejemplo, REMITROM es la simtrica de MORTIMER). Anlisis La palabra leda desde el dispositivo de entrada se almacena en un array de caracteres denominado PALABRA, de modo que el carcter i-simo se almacena en la posicin i-sima del array. Aadimos un carcter fin de la palabra -por ejemplo, '*' -, que no ser considerado un carcter perteneciente a la palabra pero que denotar el final de la lectura. El mtodo que se emplear ,consistir en copiar los caracteres de la palabra dada - es decir , los elementos del array PALABRA -en un nuevo array de caracteres SIMETRICA, carcter a carcter comenzando por el ltimo elemento del array. El ltimo carcter de la palabra dada ser el primero de la nueva palabra, el penltimo ser el segundo, y as sucesivamente. Los pasos a dar en el algoritmo son: 1. Lectura de la palabra dada y clculo de su longitud 2. Repetir desde I=1 a L (longitud palabra dada) Llevar el carcter (L-i+1)-simo de la palabra dada al lugar I de la palabra (array) SIMETRICA 3. Escribir la palabra que representa SIMETRICA Tabla de variables I,L :Enteros PALABRA :Array tipo cadena SIMETRICA :Array tipo cadena Pseudocdigo algoritmo Simtrico inicio *Lectura de la palabra, para calcular longitud * L <-- 1 repetir leer(PALABRA(L)) L <-- L +1

hasta_que PALABRA (L) = '* ' L <-- L - 1 desde I <-- 1 hasta L hacer SIMETRICA (I) <-- PALABRA(L - I+1) fin_desde * Lectura de la nueva palabra -array simtrico* desde I=1 hasta L hacer escribir (SIMETRICA(I)) fin_desde fin 21. Realizar un algoritmo que escriba los N primeros nmeros de la serie de Fibonacci. NOTA: La serie de Fibonacci es 1,2,3,5,8,13....y se genera de acuerdo a la ley siguiente: Fibonacci (1)=1 Fibonacci(2)=2 Fibonacci(3)=Fibonacci(2)+Fibonacci(1) Fibonacci(N)=Fibonacci(N-1) +Fibonacci(N-2) para N>1 Anlisis Se necesitar una estructura repetitiva que genere cada elemento a partir de los dos anteriores ,por lo cual y dado que la serie se genera de modo matemtico cuando N>1, se comenzar el ndice del bucle en 2 y hasta llegar a N . Pseudocdigo algoritmo Fibonacci inicio leer(numero N) Fibonacci(1) <-- 1 Fibonacci(2) <-- 2 escribir (Fibonacci (1), Fibonacci(2)) I <-- 3 mientras I < N hacer Fibonacci(I) <-- Fibonacci (I-1) +Fibonacci (I-2) escribir (Fibonacci(I) ) I <-- I+1 fin_mientras escribir('fin de la serie' ) fin 22. Un avin dispone de 180 plazas, de las cuales 60 son de 'no fumador' y numeradas de 1 a 60, y 120 plazas de fumador numeradas de 61 a 180. Disear un algoritmo que permita hacer la reserva de plazas del avin y se detenga media hora antes de la salida del avin, en cuyo momento se abrir la lista de espera. Anlisis Se utiliza una tabla AVION de 180 elementos que representa los 180 asientos del avin. Los 60 primeros elementos son las plazas 'no fumador`, las 120 siguientes son plazas 'fumador'.

Los elementos de la tabla slo pueden tomar dos valores , uno significa 'asiento libre' y el otro significa 'asiento reservado' . Para ello se utilizar una variable de tipo lgico o bien un interruptor (variable SW que toma dos valores 0 y 1). La tabla AVION se inicializa toda ella con el valor 'falso` "0" que significa plaza disponible. Lgicamente al poner a la venta los pasajes estn libres los 180 pasajes. Tabla de variables AVION Lista de plazas( tipo lgico):array[1...200] de lgico I Plazas no fumadores ya reservadas (entero) J Plazas fumadores ya reservadas (entero) REP Respuesta el men de opciones (tipo cadena) Pseudocdigo algoritmo Reserva inicio * inicializar tabla AVION* desde N <-- hasta 180 hacer AVION (N) <-- FALSO fin_desde I<-- 0 J<-- 60 repetir escribir ('Menu de plazas ') escribir (' F-Fumador NF-No Fumador A- Anulacin de reserva') leer (REP) segun_sea REP hacer REP= ' NF ' : si I< 60 entonces i <-- I+1 AVION (I ) <-- VERDADERO escribir ( I ) sino escribir (' No existen plazas libres no fumador') REP = 'F ' : si J>= 60 y J<180 entonces J <-- J+1 AVION (J) <-- VERDADERO escribir (J) sino escribir (' No existen plazas fumadores') hasta_que I=60 y J=180 0 REP='ANUL' desde N <--1 hasta 180 hacer si AVION (N) = VERDADERO entonces escribir ('La plaza N esta reservada') sino

escribir('La plaza N esta libre') fin_si fin_desde fin 23. Se dispone de una lista (vector ) de N elementos. Se desea disear un algoritmo que permita insertar el valor x en el lugar k-simo de la mencionada lista. Se analizan dos mtodos para la resolucin de este problema. Primer mtodo Anlisis Sea la lista o vector L L(1) L(2) L(3) L(4)....L(K)...L(N) Si se desea insertar el valor X en el lugar k-simo, se producir un desplazamiento de los valores de L(K) L(N) crendose una nueva lista con N+1 elementos. Para poder escribir X en la posicin de memoria L(K), ser preciso guardar el actual contenido de L(K) en una posicin auxiliar de memoria P; a su vez , para guardar el valor del elemento L(K) ser preciso llevar el valor de P a L(K+1) , guardando previamente el valor de L(K+1) en otra posicin auxiliar Q; y as sucesivamente. Los pasos a dar son: 1. Lectura del vector L 2. Lectura del nmero de elementos del vector N 3. Lectura de X 4. Lectura de K 5. Guardar el valor de L(K) en la variable P 6. Situar X en la posicin L(K) 7. Repetir las siguientes acciones desde I=1 a N-K variable Q o de la variable P en L(k+1) 8. Poner el valor de p en la posicin L(N+1) 9. Escribir el valor L Pseudocdigo algoritmo Insertar 1 var X,P,Q :real N,I,K :entero array L: dimensin (N) de m real inicio leer(X,P,Q,K) P<-- L(K) L(K) <-- X desde I <-- 1 hasta N-K hacer Q <-- L(K+1) L(K+1) <-- P

P <--Q fin_desde L(N+1) <-- P **escritura del vector** escribir (array L) fin Segundo Mtodo Pseudocdigo algoritmo insertar 2 var N.I,K:entero X,P;Q: real array L: dimensin (N) de real inicio leer(X;P;Q;K) desde I<-- N hasta K decremento -1 hacer L(I+1) <-- X ** escribir el vector L** escribir (L) fin 24. Una empresa tiene 10 almacenes y necesita crear un algoritmo que lea las ventas mensuales de los 10 almacenes. Calcule la media de ventas y obtenga un listado de los almacenes cuyas ventas mensuales son superiores a la media. Anlisis El mtodo sita las ventas correspondientes a cada almacn en una matriz Ventas y a partir de esa operacin realizar las restantes que se piden en el programa. Los pasos a dar son: 1. Lectura de la Matriz Ventas. 2. Clculo de la media de ventas, Media 3. Deducir si Media es mayor que cada una de las ventas mensuales( cada uno de los diez elementos de la matriz ), en cuyo caso se escribir el nmero del almacn y sus ventas. 4. Fin Pseudocdigo algoritmo Ventas inicio dimensionar la Matriz Ventas con 10 elementos desde I <-- 1 hasta 10 hacer leer (Ventas(I)) Suma <-- Suma + Ventas(I) fin_desde Media <-- Suma /10 desde I<-- 1 hasta 10 hacer si Ventas(I) >= Media entonces escribir ('Almacen' ,I , 'ventas' Ventas(I))

fin_si fin_desde fin 25. Se tiene una tabla T de dos dimensiones. Calcular la suma de sus elementos . Supongamos las dimensiones de T, M y N, y que se compone de nmeros reales Tabla de variables I Contador de filas J Contador de columnas M Nmero de filas de la tabla T N Nmero de columnas de la tabla T T Tabla S Suma I,J,M,N Enteros T,S Reales Pseudocdigo algoritmo inicio leer(M,N) dimensionar T(M,N) **Lectura tabla T** desde I<-- 1 hasta M hacer desde J <-- 1 hasta N hacer leer(T(I,J)) fin_desde fin_desde escribir(' La suma de los elementos de la tabla =',S) fin 2..6 Indice 2.Captulo 2.Diseo de Algoritmos 2 2.1.Definicin, anlisis y diseo de algoritmos. 2 2.1.1. Definicin 2 2.1.2. Anlisis 2 2.1.3. Diseo 2 2.1.4. Programacin Estructurada 2 2.2. Estructuras de Control 2 2.3. Diseo Descendente 3 2.4. Descomposicin Modular 3 2.4.1.Estructuras de control 3

2.4.2.Programacin Modular: 7 2.4.2.1.Paso de Parmetros 8 2.4.2.2.Tipos de Mdulos 9 2.5. Constantes y Variables 11 2.5.1. Usos comunes de las variables 11 2.5.2.Ejemplos de algoritmos sencillos en pseudocdigo. 11 2.6.Indice 32 1 Por qu ?. 2En la actualidad existen computadoras que soportan procesamiento en paralelo, esto es, se pueden realizar varias cosas a la vez. Esto requiere hardware especial con varios procesadores interconectados. Hasta el momento solo se estudia a nivel de maestra, en nuestro Pas. 3Existe una excepcin, que es cuando un modulo se llama asimismo, lo que se conoce como recursividad. Esto lo veremos ms detalladamente en el tema de recursividad en lenguaje C. 4Lo cual no es necesario que se realice. 5 Como se implementa en C el paso de parmetros por referencia lo veremos en la unidad de apuntadores mas adelante. 6 Por qu ?. 7 Por qu ?. 8 Por qu ?

También podría gustarte