Anda di halaman 1dari 52

UNIVERSIDAD PRIVADA DEL SUR DE MXICO

DISEO ESTRUCTURADO DE ALGORITMOS (Antologa)

Elaborado por:

L.I.A. y M.C.C. Pedro Alejo Escarela Rodrguez

Tuxtla Gutirrez, Chiapas. Enero de 2006.

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

UNIDAD I. ALGORITMOS
1.1. Breve historia

La palabra algoritmo proviene del nombre del matemtico Muhammad ibn Musa alJuarizmi, cuyo trabajo consisti en preservar y difundir el conocimiento de la antigua Grecia y de la India. Sus libros eran de fcil comprensin, de ah que su principal logro no fuera el de crear nuevos teoremas o corrientes de pensamiento, sino el de simplificar la matemtica a punto tal que pudieran ser comprendidas y aplicadas por un mayor nmero de personas. Cabe destacar cmo seal las virtudes del sistema decimal ind (en contra de los sistemas tradicionales rabes) y cmo explic que, mediante una especificacin clara y concisa de cmo calcular sistemticamente se podran definir algoritmos que fueran utilizados en dispositivos mecnicos en lugar de las manos (por ejemplo, bacos). Tambin estudi la manera de reducir las operaciones que formaban el clculo. Es por esto que an no siendo el creador del primer algoritmo, el concepto lleva aunque no su nombre, s su pseudnimo.

As, de la palabra algorismo, que originalmente haca referencia a las reglas del uso de la aritmtica utilizando dgitos rabes, se evolucion a la palabra latina, derivacin de al-Khwarizmi, algobarismus, que ms tarde mutara a algoritmo. La palabra ha cambiado de forma que en su definicin se incluye a todos los procedimientos finitos para resolver problemas.

Ya en el siglo XIX, se produjo el primer algoritmo escrito para una computadora. La autora fue Ada Byron, en cuyos escritos se detallaban la mquina analtica en 1842. Por ello es considerada por muchos como la primer programadora aunque, desde Charles Babage, nadie complet su mquina, por lo que el algoritmo nunca se implement.

La falta de rigor matemtico en la definicin de procedimiento bien definido para los algoritmos trajo algunas dificultades a los matemticos y lgicos del siglo XIX y comienzos del XX. Este problema fue en gran parte resuelto con la descripcin de la mquina de Turing, un modelo abstracto de computadora formulado por Alan Turing, y a demostracin de que cualquier mtodo anticipado por otros matemticos que pueda

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

encontrarse para describir procedimientos bien definidos puede ser emulado en una mquina de Turing (una afirmacin conocida como tesis de Church-Turing).

1.2.

Definicin de algoritmo
Casi inconscientemente, los humanos efectuamos cotidianamente una serie de

pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un problema.

Esta serie de pasos, procedimientos o acciones, comenzamos a aplicarlas muy temprano en la maana cuando, por ejemplo, decidimos tomar un bao. Posteriormente cuando pensamos en desayunar tambin seguimos una serie de pasos que nos permiten alcanzar un resultado especfico: tomar el desayuno. Continuamente seguimos una serie de pasos o conjunto de acciones que nos permiten alcanzar un resultado. Estamos en realidad aplicando un algoritmo para resolver un problema.

Muchas veces aplicamos el algoritmo de manera inadvertida, inconsciente o automticamente. Esto generalmente se produce cuando el problema que tenemos enfrente lo hemos resuelto con anterioridad un gran nmero de veces.

Supongamos que simplemente tenemos que sentarnos sobre una silla. Lo hemos hecho tantas veces que difcilmente nos ponemos a enumerar los pasos para alcanzar este objetivo. Lo hacemos de manera automtica.

A partir del caso de la vida cotidiana planteado nos proporciona una idea ms clara de lo que es un algoritmo: una secuencia lgica y ordenada de pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un problema.

Debido a que los lenguajes de programacin tienen su origen y fundamento en la matemtica de conjuntos, formalmente se define a un algoritmo como un conjunto finito y lgico de instrucciones que se ejecutan secuencial y ordenadamente para alcanzar un resultado o resolver un problema.

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

1.3.

Etapas de la solucin de un problema


Si bien es cierto que toda actividad del ser humano implica la ejecucin,

consciente o inconscientemente, de un algoritmo, existe tambin una gran cantidad de problemas que requieren de un anlisis profundo y de un pensamiento flexible y estructurado para su solucin. En este curso nos interesa abordar ese tipo de problemas. Invariablemente surgen ciertas preguntas:

Podemos ensear a resolver un problema? Podemos ensear a analizar el mismo? Podemos ensear a pensar?

Lgicamente las respuestas a estas interrogantes son difciles de obtener. No existen reglas especficas que nos permitan resolver un problema. Sin embargo, existen un conjunto de tcnicas y herramientas metodolgicas que permiten flexibilizar y estructurar el razonamiento utilizado en la solucin de un problema. Eso provocar finalmente la construccin de algoritmos eficientes.

En la figura 1.1 podemos observar las etapas que debemos seguir para la solucin de un problema.

PROBLEMA

ANALISIS PROFUNDO DEL PROBLEMA

CONSTRUCCIN DEL ALGORITMO

VERIFICACIN DEL ALGORITMO

Figura 1.1. Etapas de la solucin de un problema.

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

1.3.1. Anlisis profundo del problema


Esta es la fase ms importante (y difcil porque cada persona tiene una percepcin diferente, lo que se traduce en una interpretacin del problema que pueda no ser la correcta) en el proceso de solucin de un problema, ya que de ste anlisis depender que el algoritmo, una vez implementado, funcione correctamente y el resultado sea el esperado.

En primer lugar, debemos identificar con precisin el problema, es decir, conocer exactamente lo que debe hacer el algoritmo. Es necesario describir con detalle las especificaciones de entrada y salida, identificando todos los elementos necesarios, de manera que sea posible lograr una solucin eficaz; por lo que es conveniente hacerse las siguientes preguntas:

Qu entradas se requieren? (Tipo y cantidad). Cul es la salida deseada? (Tipo y cantidad). Qu mtodo produce la salida deseada?

Para comprender mejor lo descrito anteriormente, analizaremos el ejemplo siguiente: Ejemplo 1.1. Elaborar un algoritmo que permita obtener la suma de dos nmeros.

En este caso, el problema no nos indica cules son los dos nmeros a sumar, por lo que asumimos que stos pueden ser dos valores arbitrarios. En consecuencia, necesitamos dos variables para almacenar dichos nmeros, sean stas a y b. Entonces tendremos que a y b son los datos de entrada requeridos.

Posteriormente, el dato de salida deseado es el resultado de la suma de a y b, lo que significa que debemos almacenar ste en otra variable, sea sta x.

Finalmente, el mtodo que producir la salida deseada es una operacin aritmtica, que para este problema es una suma, cuya expresin quedar de la siguiente manera:

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

x=a+b

1.3.2. Construccin del algoritmo


Una vez concluida la fase de anlisis e identificacin de los elementos que necesitamos para resolver el problema, se procede a construir el algoritmo correspondiente, que consiste en describir y enumerar, en lenguaje natural, secuencial y lgicamente cada paso que se deber ejecutar hasta obtener el resultado esperado. A esta descripcin se le conoce tambin con el nombre de diseo conceptual del algoritmo.

Continuando con el ejemplo anterior, el diseo conceptual quedara de la siguiente manera:

1. Pedir o solicitar el valor para a. 2. Pedir o solicitar el valor para b. 3. Efectuar la operacin x = a + b. 4. Mostrar o imprimir el valor de x.

1.3.3. Verificacin del algoritmo


En esta fase se hace un seguimiento del algoritmo construido con datos que sean representativos del problema que se desea resolver, es decir, debemos asignar valores arbitrarios a cada una de las variables o elementos que nos sirven para almacenar los datos de entrada, para posteriormente, de forma manual, ejecutar cada paso de la secuencia descrita en la fase de construccin o de nuestro diseo conceptual.

Para el ejemplo anterior esta fase quedara de la siguiente manera:

1. a = 5 2. b = 6 3. x = 5 + 6 (se sustituyen las variables por sus valores asignados) 4. El resultado a mostrar o imprimir es 11

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Las caractersticas que los algoritmos deben reunir son las siguientes: Precisin: Determinismo: Los pasos a seguir en el algoritmo deben ser precisados claramente. El algoritmo, dado un conjunto de datos idnticos de entrada, siempre debe arrojar los mismos resultados. Finitud: El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de longitud finita.

Por otra parte, un algoritmo consta de tres secciones o mdulos principales. En la figura 1.2 podemos observar las secciones que constituyen un algoritmo.

ALGORITMO

DATOS DE ENTRADA

PROCESAMIENTO DE LOS DATOS

IMPRESIN DE RESULTADOS

Figura 1.2. Mdulos o secciones del algoritmo.

El mdulo 1 representa la operacin o accin que permite el ingreso de los datos del problema.

El mdulo 2 representa la operacin o conjunto de operaciones secuenciales, cuyo objetivo es obtener la solucin del problema.

El mdulo 3 representa una operacin o conjunto de operaciones que permiten comunicar al exterior el o los resultados alcanzados.

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

1.4.

Conceptos fundamentales
Antes de continuar, debemos hacer un parntesis para explicar algunos conceptos

que son fundamentales para la construccin de algoritmos. Primero analizaremos los tipos de datos, luego estudiaremos los conceptos de identificador, constantes y variables, ms adelante analizaremos las operaciones aritmticas y expresiones lgicas.

1.4.1. Tipos de datos


Los datos a procesar por una computadora pueden clasificarse en:

Simples Estructurados

La principal caracterstica de los datos simples es que ocupan slo una casilla de memoria (Figura 1.3a), por lo tanto, una variable simple hace referencia a un nico valor a la vez. dentro de este grupo de datos se encuentran: enteros, reales, caracteres, bolanos, enumerados y subrangos (los dos ltimos no existen en algunos lenguajes de programacin).

Los datos estructurados se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria (Figura 1.3b). Es decir, un dato estructurado tiene varios componentes. Cada uno de los componentes puede ser a su vez un dato simple o estructurado. Sin embargo, los componentes bsicos (los de nivel ms bajo) de cualquier tipo de dato estructurado son datos simples. Dentro de este grupo de datos se encuentran: arreglos, cadena de caracteres, registros y conjuntos.
identificador identificador

Figura 1.3. Datos simples y estructurados. a). Dato simple

b). Dato estructurado

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

A continuacin trataremos los datos simples: enteros, reales, caracteres y bolanos; y el dato estructurado: cadena de caracteres. Posteriormente, estudiaremos los datos estructurados arreglos y registros.

Datos numricos

Dentro de los tipos de datos numricos encontramos los enteros y los reales. Los enteros son nmeros que pueden estar precedidos del signo + o -, y que no tienen parte decimal. Por ejemplo:

128

1528

-714

8530

16235

-14780

Los reales son nmeros que pueden estar precedidos del signo + o -, y que tienen una parte decimal. Por ejemplo:

7.5

128.0

-37.865

129.7

16000.50

-15.0

Datos alfanumricos

Dentro de este tipo de datos encontramos los de tipo carcter (simple) y cadena de caracteres (estructurado). Son datos cuyo contenido pueden ser letras del abecedario (a, b, c, ..., z), dgitos (0, 1, 2, , 9) o smbolos especiales (#, $, ^, *, %, /, !, +, , etc.), y que van encerrados entre apstrofes o comillas dependiendo del lenguaje de programacin. Debemos remarcar que aunque este tipo de datos pueden contener nmeros, no pueden ser utilizados para realizar operaciones aritmticas.

Un dato de tipo carcter contiene un solo carcter. Por ejemplo:

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Un dato de tipo cadena de caracteres contiene un conjunto de caracteres. La longitud de una cadena depende de los lenguajes de programacin, aunque normalmente se acepta una longitud mxima de 255.

abcde

$9#7

escuela

IPSUM

61-8-72-00

Datos lgicos

Dentro de este tipo de datos encontramos los booleanos. Son datos que solo pueden tomar dos valores: verdadero (true) o falso (false).

1.4.2. Identificadores, constantes y variables


Identificadores

Los datos a procesar por una computadora, ya sean simples o estructurados, deben almacenarse en casillas o celdas de memoria para su posterior utilizacin. Estas casillas o celdas de memoria (constantes o variables) tienen un nombre que permite su identificacin.

Llamaremos identificador al nombre que se les da a las casillas de memoria. Un identificador se forma de acuerdo a ciertas reglas (las mismas pueden tener alguna variante dependiendo del lenguaje de programacin utilizado):

El primer carcter que forma un identificador debe ser una letra (a, b, c, , z). Los dems caracteres pueden ser letras (a, b, c, , z), dgitos (0, 1, 2, , 9) o el smbolo especial _. La longitud del identificador es de un mximo de 8 en la mayora de los lenguajes de programacin.

En la figura 1.4 podemos observar ejemplos de identificadores.

10

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

MEMORIA

SUMA

ACUM

AUX

NUM_1

X7

Figura 1.4. Casillas de memoria con los nombres de identificadores.

Constantes

Las constantes son datos que no cambian su valor durante la ejecucin de un programa. Para nombrar las constantes utilizamos los identificadores que mencionamos anteriormente. Existen tipos de constantes como tipos de datos, por lo tanto, puede haber constante enteras, reales, carcter, cadena de caracteres, booleanas, etc.

Observe que en la figura 1.5, la constante NUM es de tipo entero, NREAL y NUMREA son de tipo real, y RESU de tipo cadena de caracteres. Estas constantes no cambiarn su valor durante la ejecucin de un programa.

MEMORIA

NUM 5

RESU resultado

NREAL 7.25

NUMREA 8.69

Figura 1.5. Constantes representadas en la memoria.

11

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Variables

Las variables son objetos que pueden cambiar su valor durante la ejecucin de un programa. Para nombrar las variables utilizaremos los identificadores que hemos explicado con anterioridad. Al igual que las constantes, pueden existir tipos de variables como tipos de datos.

En la figura 1.6, la variable I es de tipo entero, tiene un valor inicial de cero y cambiar su valor durante la ejecucin del programa. Las variables SUEL y SUMA son de tipo real, estn inicializadas con el valor de cero, y al igual que la variable I, seguramente cambiarn su valor durante la ejecucin del programa.
MEMORIA

I 0

SUEL 0

SUMA 0

Figura 1.6. Variables representadas en memoria.

Es importante sealar que los nombres de las constantes y las variables deben ser representativos de la funcin que cumplen en el programa, esto se conoce como nemotecnia.

1.4.3. Operaciones aritmticas


Para poder realizar operaciones aritmticas necesitamos operadores que nos permitan efectuarlas entre operandos: nmeros, constantes o variables. El resultado de una operacin aritmtica ser un nmero. La tabla 1.1 muestra los operadores aritmticos que puede procesar una computadora.

12

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Tabla 1.1. Operadores aritmticos Operador ** ^ * / + mod % div Operacin Potencia Multiplicacin Divisin Suma Resta Mdulo (residuo) Divisin entera Ejemplo 4 ** 3 4 ^ 3 8.25 * 7 15 / 4 125.78 + 62.50 65.30 32.33 15 mod 2 15 % 2 17 div 3 Resultado 64 57.75 3.75 188.28 32.97 1 5

Es importante sealar que debido a que una computadora nicamente reconoce solamente los operadores aritmticos descritos en la tabla 1.1, sta nicamente procesa este tipo de operaciones. Por lo tanto, si se desea realizar operaciones ms complejas, tales como ecuaciones algebraicas, stas debern traducirse a su equivalente aritmtico. Por ejemplo, si se tiene la ecuacin:

x=m
para que sta pueda ser interpretada por una computadora como una expresin aritmtica vlida, deber expresarse de la siguiente forma:

x = m ** ( 1 / 2 )

x=m^(1/2)

aplicando las leyes algebraicas de exponenciacin y/o radicalizacin correspondientes.

Al evaluar expresiones que contienen operadores aritmticos debemos respetar la jerarqua en el orden de aplicacin. Es decir, si tenemos en una expresin ms de un operador, debemos aplicar primero el operador de mayor jerarqua, resolver esa operacin, y as sucesivamente. En la tabla 1.2 se presenta la jerarqua de los operadores.

13

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Tabla 1.2. Jerarqua de los operadores aritmticos Operador ** ^ *, /, mod %, div +, Jerarqua (mayor) Potencia Multiplicacin, divisin, mdulo, divisin entera Suma, resta Operacin

(menor)

Las reglas para resolver una operacin aritmtica son las siguientes:

1. Si una expresin contiene subexpresiones entre parntesis, stas se evalan primero; respetando claro est la jerarqua de los operadores aritmticos en esta subexpresin. Si las subexpresiones se encuentran anidadas por parntesis, primero se evalan las subexpresiones que se encuentran en el ltimo nivel de anidamiento. 2. Los operadores aritmticos se aplican teniendo en cuenta la jerarqua y de izquierda a derecha.

Ejemplo 1.2. A continuacin, en este ejemplo se presentan algunos casos y la forma de resolverlos.

Caso a).

7+5-6 1 12 - 6 2 6

Caso b).

9 + 7 * 8 36 / 5 1 9 + 56 36 / 5 2 9 + 56 7.2 3 65 7.2 4 57.8


14

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Caso c).

7 * 8 * ( 160 mod 3 ** 3 ) div 5 * 13 - 28 1 7 * 8 * ( 160 mod 27 ) div 5 * 13 - 28 2 7 * 8 * 25 div 5 * 13 - 28 3 56 * 25 div 5 * 13 - 28 4 1400 div 5 * 13 - 28 5 280 * 13 - 28 6 3640 - 28 7 3612

Caso d).

( ( 25 ** ( 1 / 2 ) ) ** 4 ) + ( 3 * 5 ( 9 ** ( 1 / 2 ) ) ) 1 ( ( 25 ** 0.5 ) ** 4 ) + ( 3 * 5 ( 9 ** ( 1 / 2 ) ) ) 2 ( 5 ** 4 ) + ( 3 * 5 ( 9 ** ( 1 / 2 ) ) ) 3 625 + ( 3 * 5 ( 9 ** ( 1 / 2 ) ) ) 4 625 + ( 3 * 5 ( 9 ** 0.5 ) ) 5 625 + ( 3 * 5 3 ) 6 625 + ( 15 3 ) 7 625 + 12 8 637


15

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

1.4.4. Expresiones lgicas


Las expresiones lgicas o booleanas, llamadas as en honor del matemtico George Boole, estn constituidas por nmeros, constantes o variables y operadores lgicos o relaciones. El valor que pueden tomar estas expresiones es el de verdadero o falso. Se utilizan frecuentemente en las estructuras selectivas (dependiendo del resultado de la evaluacin se toma por un determinado camino alternativo) y en las estructuras repetitivas (dependiendo del resultado de la evaluacin se contina con el ciclo o se interrumpe el mismo).

Operadores relacionales

Los operadores relacionales son operadores que permiten comparar dos operandos. Los operandos pueden ser nmeros, alfanumricos, constantes o variables. Las constantes o variables, a su vez, pueden ser de tipo entero, real, carcter o cadena de caracteres. El resultado de una expresin con operadores relacionales es verdadero o falso.

A continuacin en la tabla 1.3 se presentan los operadores relacionales, la operacin que pueden realizar, un ejemplo de su uso y el resultado de dicho ejemplo.

Tabla 1.3. Operadores relacionales Operador = <> < > <= >= Operacin Igual que Diferente a Menor que Mayor que Menor o igual que Mayor o igual que Ejemplo hola = lola a <> b 7 < 15 22 > 11 15 <= 22 35 >= 20 Resultado FALSO VERDADERO VERDADERO VERDADERO VERDADERO VERDADERO

16

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 1.3. En este ejemplo se presentan algunos casos de expresiones lgicas con operadores relacionales y la forma de resolver las mismas.

Caso a).

A=5 B = 16 ( A ** 2 ) > ( B * 2 ) 1 25 > ( B * 2 ) 2 25 > 32 3 FALSO

Caso b).

X=6 B = 7.8 ( X * 5 + B ** 3 / 4 ) <= ( X ** 3 div B ) 1 ( X * 5 + 474.552 / 4 ) <= ( X ** 3 div B ) 2 ( 30 + 474.552 / 4 ) <= ( X ** 3 div B ) 3 ( 30 + 118.638 ) <= ( X ** 3 div B ) 4 148.638 <= ( X ** 3 div B ) 5 148.638 <= ( 216 div B ) 6 148.638 <= 27.6923 7 FALSO

17

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Caso c).

( ( 1580 mod 6 * 2 ** 7 ) > ( 7 + 8 * 3 ** 4 ) ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 1 ( ( 1580 mod 6 * 128 ) > ( 7 + 8 * 3 ** 4 ) ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 2 ( ( 2 * 128 ) > ( 7 + 8 * 3 ** 4 ) ) > ( ( 15 *2 ) = ( 60 * 2 / 4 ) ) 3 ( 256 > ( 7 + 8 * 3 ** 4 ) ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 4 ( 256 > ( 7 + 8 * 81 ) ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 5 ( 256 > ( 7 + 684 ) ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 6 ( 256 > 655 ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 7 FALSO > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) 8 FALSO > ( 30 = ( 60 * 2 / 4 ) ) 9 FALSO > ( 30 = ( 120 / 4 ) ) 10 FALSO > ( 30 = 30 ) 11 FALSO > VERDADERO 12 FALSO

Nota:

Cuando se utilizan los operadores de relacin con operandos lgicos, falso es menor que verdadero.

Operadores lgicos

Los operadores lgicos son operadores que permiten formular condiciones complejas a partir de condiciones simples. Los operadores lgicos son de conjuncin

18

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

(AND), disyuncin (OR) y negacin (NOT). En la tabla 1.4 se presenta el operador lgico, la expresin lgica y significado de dicha expresin, teniendo en cuenta la jerarqua correspondiente.

Tabla 1.4. Operadores lgicos Operador Jerarqua Expresin lgica Significado No P NOT (mayor) AND OR (menor) P OR Q P AND Q NOT P No es cierto que P Es falso que P PyQ P sin embargo Q PoQ P o Q o ambas Mnimo P o Q

A continuacin, en la tabla 1.5 se presenta la tabla de verdad de los operadores lgicos.

Tabla 1.5. Tabla de verdad de los operadores lgicos P VERDADERO VERDADERO FALSO FALSO Q VERDADERO FALSO VERDADERO FALSO NOT P FALSO FALSO VERDADERO VERDADERO NOT Q FALSO VERDADERO FALSO VERDADERO P AND Q VERDADERO FALSO FALSO FALSO P OR Q VERDADERO VERDADERO VERDADERO FALSO

Por ltimo, en la tabla 1.6 se presenta la jerarqua correspondiente de todos los operadores (aritmticos, relacionales y lgicos).

19

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Tabla 1.6. Jerarqua de los operadores Operadores () ** o ^ *, /, div, mod =, <>, <, >, <=, >= NOT AND OR Jerarqua (mayor) (menor)

Nota:

El operador ( ) es un operador asociativo que tiene la prioridad ms alta en cualquier lenguaje de programacin. Por otra parte, debemos sealar que en ciertos lenguajes, las prioridades de los operadores se manejan en forma diferente.

Ejemplo 1.4. A continuacin en este ejemplo se presentan algunos casos y la forma de resolver los mismos.

Caso a).

NOT ( 15 >= 7 ** 2 ) OR ( 43 8 * 2 div 4 <> 3 * 2 div 2 ) 1 NOT ( 15 >= 49 ) OR ( 43 8 * 2 div 4 <> 3 * 2 div 2 ) 2 NOT FALSO OR ( 43 8 * 2 div 4 <> 3 * 2 div 2 ) 3 NOT FALSO OR ( 43 16 div 4 <> 3 * 2 div 2 ) 4 NOT FALSO OR ( 43 4 <> 3 * 2 div 2 ) 5 NOT FALSO OR ( 43 4 <> 6 div 2 ) 6 NOT FALSO OR ( 43 4 <> 3 ) 7 NOT FALSO OR ( 39 <> 3 ) 8 NOT FALSO OR VERDADERO 9 VERDADERO OR VERDADERO 10 VERDADERO

20

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Caso b).

( 15 >= 7 * 3 ** 2 AND 8 > 3 AND 15 > 6 ) OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 1 ( 15 >= 7 * 9 AND 8 > 3 AND 15 > 6 ) OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 2 ( 15 >= 63 AND 8 > 3 AND 15 > 6 ) OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 3 4 5 ( FALSO AND VERDADERO AND VERDADERO ) OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 6 ( FALSO AND VERDADERO ) OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 7 FALSO OR NOT ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) 8 FALSO OR NOT ( 7 * 3 < 5 + 12 * 2 div 9 ) 9 10 FALSO OR NOT ( 21 < 5 + 24 div 9 ) 11 FALSO OR NOT ( 21 < 5 + 2 ) 12 FALSO OR NOT ( 21 < 7 ) 13 FALSO OR NOT FALSO 14 FALSO OR VERDADERO 15 VERDADERO

21

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

1.5.

Construccin de diagramas de flujo


Hasta el momento se han estudiado algunos conceptos que permiten construir

algoritmos mediante el empleo de herramientas de representacin grfica de los mismos, tales como los diagramas de flujo. El inters principal es que el alumno comience a desarrollar habilidad y una capacidad de razonamiento estructurada y flexible que le permita, en la medida que practique, obtener la solucin a los problemas planteados durante el curso.
Inicio | Fin de estructura o algoritmo Entrada de datos por teclado Salida de datos por pantalla Salida de datos por impresora
E|S

Entrada | Salida de datos (distinto de teclado | monitor | impresora) Ejecutar (proceso) Ejecutar (subrutina) Toma de decisin | Condicin Archivo Conector Conector fuera de pgina

Figura 1.6. Simbologa utilizada en la representacin grfica de los algoritmos (diagramas de flujo).

A partir de este momento y durante el presente curso, se emplear la simbologa que se muestra en la figura 1.6; as tambin, para la mejor compresin de los temas expuestos, se utilizar el lenguaje C para ilustrar cada ejemplo. Es recomendable que el alumno se apoye en un libro de lenguaje C de nivel bsico para consulta de la sintaxis correspondiente; as como la resolucin de los problemas propuestos, contando tambin con el apoyo y la asesora del catedrtico.

22

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 1.5. Construya un algoritmo tal que dados los datos enteros A y B, escriba el resultado de la siguiente expresin:
( A + B )2 3

Datos de entrada: A, B Proceso: Resultado = ( A + B ) ** 2 / 3 Datos de salida: Resultado

Inicio A, B Resultado = ( A + B ) ** 2 / 3 Resultado Fin


Diagrama de flujo 1.1

/* Se establece la referencia a las libreras del lenguaje que contienen las instrucciones y funciones bsicas de entrada y salida de datos */ #include <stdio.h> #include <conio.h> #include <math.h> //math.h contiene las funciones para operaciones matemticas complejas void main() { int A, B; //Se declarn las variables A y B de tipo entero float Resultado; //Se declara la variable Resultado de tipo flotante (nmero con decimales) clrscr(); //Esta instruccin se utiliza para limpiar la pantalla printf( "Ingrese el valor de A: " ); //Se escribe en pantalla el texto entre comillas scanf( "%d", &A ); //Se efecta la peticin por teclado del valor para A printf( "Ingrese el valor de B: " ); scanf( "%d", &B ); //Se efecta la peticin por teclado del valor para B Resultado = pow( A + B, 2 ) / 3; //La funcin pow() se utiliza para la exponenciacin printf( "El resultado es: %.2f", Resultado ); getch(); //Se detiene la ejecucin del programa hasta que una tecla sea presionada }

Programa 1.1. Codificacin del algoritmo en lenguaje C.

23

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 1.6. Dada la matrcula y 5 calificaciones de un alumno obtenidas a lo largo del semestre, construya un algoritmo que imprima la matrcula del alumno y el promedio de sus calificaciones.

Datos de entrada: Mat, C1, C2, C3, C4, C5 Proceso: Prom = ( C1 + C2 + C3 + C4 + C5 ) / 5 Datos de salida: Mat, Prom

Inicio

Mat, C1, C2, C3, C4, C5

Prom = ( C1 + C2 + C3 + C4 + C5 ) / 5

Mat, Prom

Fin
Diagrama de flujo 1.2

#include <stdio.h> #include <conio.h> void main() { int Mat, C1, C2, C3, C4, C5; float Prom; clrscr(); printf( "Ingrese el nmero de matrcula: " ); scanf( "%d", &Mat ); printf( "Ingrese la calificacin para la materia 1: " ); scanf( "%d", &C1 ); printf( "Ingrese la calificacin para la materia 2: " ); scanf( "%d", &C2 ); printf( "Ingrese la calificacin para la materia 3: " ); scanf( "%d", &C3 ); printf( "Ingrese la calificacin para la materia 4: " ); scanf( "%d", &C4 ); printf( "Ingrese la calificacin para la materia 1: " ); scanf( "%d", &C5 ); Prom = ( C1 + C2 + C3 + C4 + C5 ) / 5; printf( "\nEl promedio del alumno con matrcula %d es: %.1f", Mat, Prom ); getch(); }

Programa 1.2. Codificacin del algoritmo del promedio en lenguaje C.

24

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

UNIDAD II. ESTRUCTURAS ALGORITMICAS SELECTIVAS


Las estructuras lgicas selectivas se encuentran en la solucin algortmica de casi todo tipo de problemas. Las utilizamos cuando en el desarrollo de la solucin de un problema debemos tomar una decisin, para establecer un proceso o sealar un camino alternativo a seguir.

Esta toma de decisin (expresada en un rombo) se basa en la evaluacin de una o ms condiciones que nos sealarn como alternativa o consecuencia, la rama a seguir.

Hay situaciones en las que la toma de decisiones se realiza en cascada. Es decir, se toma una decisin, se marca la rama correspondiente a seguir, se vuelve a tomar otra decisin y as sucesivamente. Por lo que para alcanzar la solucin de un problema o subproblema debemos aplicar prcticamente un rbol de decisin.

Las estructuras algortmicas selectivas que se utilizan para la toma de decisiones lgicas las podemos clasificar de la siguiente forma:

SI <condicin> ENTONCES SI <condicin> ENTONCES | DE LO CONTRARIO EN CASO QUE <valor a evaluar> MULTIPLE

(Simple) (Doble) (Mltiple)

Cabe sealar que cuando a las estructuras selectivas las aplicamos en cascada, podemos utilizar una combinacin de las estructuras sealadas anteriormente en la clasificacin.

2.1.

La estructura selectiva simple SI <condicin> ENTONCES


La estructura selectiva SI <condicin> ENTONCES permite el flujo del diagrama

siga por un camino si se cumple una condicin o conjunto de condiciones. Si al evaluar la condicin (o condiciones) el resultado es verdadero, entonces se ejecuta(n) cierta(s) operacin(es). Luego se contina con la secuencia normal del diagrama (figura 2.1).

25

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Condicin

Falsa NO

Verdadera SI Operacin

Figura 2.1. Estructura selectiva simple.

Ejemplo 2.1. Construya un algoritmo tal que dado como dato la calificacin de un alumno en un examen, escriba APROBADO en caso de que esa calificacin sea mayor que 5.

Datos de entrada: Calif Proceso: SI Calif > 5 ENTONCES Escribir( APROBADO )

Inicio

Calif

Calif > 5

NO

#include <stdio.h> #include <conio.h> void main() { float Calif; clrscr(); printf( "Ingrese la calificacin: " ); scanf( "%f", &Calif ); if( Calif > 5 ) printf( "APROBADO" ); getch(); }
Programa 2.1. Codificacin del programa en lenguaje C.

SI APROBADO

Fin

Diagrama de flujo 2.1

26

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 2.2. Dado como dato el sueldo de un trabajador, aplquele un aumento del 15% si su sueldo es inferior a $1000. Imprima en este caso el nuevo sueldo del trabajador. Desarrolle el algoritmo correspondiente.

Datos de entrada: Sueldo Proceso: NuevoSueldo = Sueldo SI Sueldo < 1000 ENTONCES NuevoSueldo = Sueldo * 1.15 Datos de salida: NuevoSueldo

Inicio

Sueldo

NuevoSueldo = Sueldo

Sueldo < 1000


V

#include <stdio.h> #include <conio.h> void main() { float Sueldo, NuevoSueldo; clrscr(); printf( "Ingrese el sueldo: " ); scanf( "%f", &Sueldo ); NuevoSueldo = Sueldo; if( Sueldo < 1000 ) NuevoSueldo = Sueldo * 1.15; printf( "El nuevo sueldo es de $ %.2f", NuevoSueldo ); getch(); }

NuevoSueldo = Sueldo * 1.15

NuevoSueldo

Fin
Diagrama de flujo 2.2

Programa 2.2. Codificacin del programa en lenguaje C.

2.2.

La estructura selectiva doble SI <Condicin> ENTONCES / SI NO


La estructura selectiva si <condicin> entonces / si no permite que el flujo del

diagrama se bifurque por dos ramas diferentes en el punto de la toma de decisin(es). Si al evaluar la condicin (o condiciones) el resultado es verdadero, entonces se sigue por un camino especfico y se ejecuta(n) cierta(s) operacin(es). Por otra parte, si el resultado es falso entonces se sigue por otro camino y se ejecuta(n) otra(s) operacin(es). En ambos casos, luego de ejecutarse la(s) operacin(es) indicada(s), se contina con la secuencia normal del diagrama (figura 2.2).

27

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Condicin

Falsa NO

Verdadera SI Operacin1 Operacin2

Figura 2.2. Estructura selectiva doble.

Ejemplo 2.3. Construya un algoritmo tal que dado como dato la calificacin de un alumno en un examen, escriba APROBADO si su calificacin es mayor que 5 y REPROBADO en caso contrario.

Datos de entrada: Calif Proceso: SI Calif > 5 ENTONCES Escribir( APROBADO ) SI NO Escribir( REPROBADO )

Inicio

Calif

Calif > 5 SI

NO

#include <stdio.h> #include <conio.h> void main() { float Calif; clrscr(); printf( "Ingrese la calificacin: " ); scanf( "%f", &Calif ); if( Calif > 5 ) printf( "APROBADO" ); else printf( "REPROBADO" ); getch(); }

APROBADO

REPROBADO

Fin
Diagrama de flujo 2.3

Programa 2.3. Codificacin del programa en lenguaje C.

28

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 2.4. Construya un algoritmo tal que dado como dato el sueldo de un trabajador, le aplique un aumento del 15% si su sueldo es inferior a $1000 y 12% en caso contrario. Imprima el nuevo sueldo del trabajador.

Datos de entrada: Sueldo Proceso: SI Sueldo < 1000 ENTONCES NuevoSueldo = Sueldo * 1.15 SI NO NuevoSueldo = Sueldo * 1.12 Datos de salida: NuevoSueldo

Inicio

Sueldo

Sueldo < 1000


V

NuevoSueldo = Sueldo * 1.15

NuevoSueldo = Sueldo * 1.12

NuevoSueldo

Fin

Diagrama de flujo 2.4

#include <stdio.h> #include <conio.h> void main() { float Sueldo, NuevoSueldo; clrscr(); printf( "Ingrese el sueldo: scanf( "%f", Sueldo ); if( Sueldo < 1000 ) NuevoSueldo = Sueldo * else NuevoSueldo = Sueldo * printf( "El nuevo sueldo es getch(); }

" );

1.15; 1.12; de $ %.2f", NuevoSueldo );

Programa 2.4. Codificacin del programa en lenguaje C.

29

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

2.3.

La estructura selectiva mltiple en caso que <selector>


La estructura selectiva en case que permite que el flujo del diagrama se bifurque

por varias ramas en el punto de la toma de decisin(es), esto en funcin del valor que tome el selector. As si el selector toma el valor 1 se ejecutar la accin 1, si toma el valor 2 se ejecutar la accin 2, si toma el valor N se realizar la accin N, y si toma un valor distinto de los valores comprendidos entre 1 y N, se continuar con el flujo normal del diagrama realizndose la accin N + 1 (figura 2.3).

Selector

Selector

Valor 1 Accin 1

Valor 2 Accin 2

Valor 3 Accin N

Valor 1 Accin 1

Valor 2 Accin 2

Valor 3 Accin N

Accin N + 1

Accin N + 1

Figura 2.3. Representacin de una estructura selectiva mltiple de dos formas diferentes.

Donde:

Selector es la variable o expresin a evaluarse, segn la cual se tomar una de las mltiples decisiones o alternativas. Accin 1 expresa la operacin o conjunto de operaciones que se van a realizar si el selector toma el valor 1. Accin 2 expresa la operacin o conjunto de operaciones que se van a realizar si el selector toma el valor 2. Accin N expresa la operacin o conjunto de operaciones que se van a realizar si el selector toma el valor N. Accin N + 1 expresa la operacin que se va a realizar cuando se contine el flujo normal del diagrama.

30

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 2.5. Construya un algoritmo tal que dado como datos dos variables de tipo entero, obtenga el resultado de la siguiente funcin:
100 * V 100 ** V 100 / V 0 Si Num = 1 Si Num = 2 Si Num = 3 Para cualquier otro valor de Num

Val =

Datos de entrada: Num, V Proceso: EN CASO QUE Num

Inicio

Num, V

Num

De otra forma

Val = 0

1: Val = 100 * V 2: Val = 100 ** V 3: Val = / V DE OTRA FORMA: Val = 0 Datos de salida: Val
#include <stdio.h> #include <conio.h> #include <math.h> void main() { int Num, V; float Val; clrscr(); printf( "Ingrese el valor de V: " ); scanf( "%d", &V ); printf( "Ingrese la opcin deseada: " ); scanf( "%d", &Num ); switch( Num ) { case 1: Val = 100 * V; break; case 2: Val = pow( 100, V ); break; case 3: Val = 100 / V; break; default: Val = 0; } printf( "El resultado es: %.2f", Val ); getch(); }
Val 1 Val = 100 * V 2 Val = 100 ** V 3 Val = 100 / V

Fin

Diagrama de flujo 2.5

Programa 2.5. Codificacin del programa en lenguaje C.

31

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 2.6. Construya un algoritmo tal que dado como datos la categora y el sueldo de un trabajador, calcule el aumento correspondiente considerando el criterio siguiente. Imprima la categora del trabajador y el nuevo sueldo.

Categora 1 2 3 4 Datos de entrada: Categ, Sueldo Proceso: NuevoSueldo = Sueldo EN CASO QUE Categ 1: NuevoSueldo = Sueldo * 1.15 2: NuevoSueldo = Sueldo * 1.12 3: NuevoSueldo = Sueldo * 1.08 4: NuevoSueldo = Sueldo * 1.07 Datos de salida: Categ, NuevoSueldo
#include <stdio.h> #include <conio.h> void main() { int Categ; float Sueldo, NuevoSueldo; clrscr(); printf( "Ingrese la categora: " ); scanf( "%d", &Categ ); printf( "Ingrese el sueldo : " ); scanf( "%f", &Sueldo ); NuevoSueldo = Sueldo; switch( Categ ) { case 1: NuevoSueldo = Sueldo * 1.15; break; case 2: NuevoSueldo = Sueldo * 1.12; break; case 3: NuevoSueldo = Sueldo * 1.08; break; case 4: NuevoSueldo = Sueldo * 1.07; } printf( "El nuevo sueldo es: %.2f", NuevoSueldo ); getch(); }

Aumento 15% 12% 18% 17%


Inicio

Categ, Sueldo

NuevoSueldo = Sueldo

Categ

1 NuevoSueldo = Sueldo * 1.15

2 NuevoSueldo = Sueldo * 1.12

3 NuevoSueldo = Sueldo * 1.08

4 NuevoSueldo = Sueldo * 1.07

Categ, NuevoSueldo

Fin

Diagrama de flujo 2.6

Programa 2.6. Codificacin del programa en lenguaje C.

32

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

2.4.

Estructuras selectivas en cascada (anidadas)


Encontramos numerosos casos en el desarrollo de la solucin de problemas en el

que luego de tomar una decisin y marcar el camino correspondiente a seguir, es necesario tomar otra decisin. Se seala, luego de evaluar las condiciones, la rama correspondiente a seguir, y nuevamente podemos tener que tomar otra decisin. El proceso puede repetirse numerosas veces. En este caso, para resolver el problema, estamos aplicando estructuras selectivas en cascada o anidadas (figura 2.4).

Condicin 1
SI

NO

Condicin 1
SI

NO

Condicin 2
SI

NO

Condicin 2
SI

NO

Condicin 3
SI

NO

Operacin 2.1

Operacin 2.2

Operacin 3.1

Operacin 3.2

Operacin 2.1

Operacin 2.2

Figura 2.4. Ejemplos de probables casos de estructuras selectivas anidadas.

En el proceso de solucin de un problema es posible que se presenten diversas combinaciones, dependiendo de la naturaleza del mismo; es decir, no existe un patrn definido.

33

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 2.7. Dados los datos A, B y C que representan nmeros enteros diferentes, construya un programa para escribir estos nmeros en forma descendente.

Datos de entrada: A, B, C Proceso: Leer( A ) Leer( B ) Leer( C ) SI A > B ENTONCES SI A > C ENTONCES SI B > C ENTONCES Escribir( A, B, C ) SI NO Escribir( A, C, B ) SI NO Escribir( C, A, B ) SI NO SI B > C ENTONCES SI A > C ENTONCES Escribir( B, A, C ) SI NO Escribir( B, C, A ) SI NO Escribir( C, B, A ) Datos de salida: A, B, C

34

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Inicio

A, B, C

B>C
SI

NO

C, A, B 4 3

C, B, A

A>B
SI

NO

1 A>C
SI NO

A>C
SI

NO

B, A, C

B, C, A

3 B>C
SI NO

A, B, C 3 Fin

A, C, B

Diagrama de flujo 2.7


#include <stdio.h> #include <conio.h> void main() { int A, B, C; clrscr(); printf( "Ingrese el valor de A: " ); scanf( "%d", &A ); printf( "Ingrese el valor de B: " ); scanf( "%d", &B ); printf( "Ingrese el valor de C: " ); scanf( "%d", &C ); clrscr(); if( A > B ) if( A > C ) if( B > C ) printf( "%d\n%d\n%d", A, B, C else printf( "%d\n%d\n%d", A, C, B else printf( "%d\n%d\n%d", C, A, B ); else if( B > C ) if( A > C ) printf( "%d\n%d\n%d", B, A, C else printf( "%d\n%d\n%d", B, C, A else printf( "%d\n%d\n%d", C, B, A ); getch(); }

); );

); );

Programa 2.7. Codificacin del programa en lenguaje C.

35

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

UNIDAD III. ESTRUCTURAS ALGORITMICAS REPETITIVAS


Es muy comn encontrar en la prctica algoritmos cuyas operaciones se deben ejecutar un nmero repetido de veces. Si bien las instrucciones son las mismas, los datos sobre los que se opera varan. El conjunto de instrucciones que se ejecuta repetidamente se llama ciclo o bucle.

Todo ciclo debe terminar de ejecutarse luego de un nmero finito de veces, por lo que es necesario en cada iteracin del mismo, evaluar las condiciones necesarias para decidir si se debe seguir ejecutando o si debe detenerse. En todo ciclo, siempre debe existir una condicin de parada o fin de ciclo (figura 3.1).

3.1. Tipos de estructuras repetitivas


En algunos algoritmos podemos establecer a priori que el ciclo se repetir un nmero definido de veces. Es decir, el nmero de repeticiones no depender de las proposiciones dentro del ciclo. Llamaremos para a la estructura algortmica repetitiva que se ejecuta un nmero definido de veces.

Por otra parte, en algunos algoritmos no podemos establecer a priori el nmero de veces que ha de ejecutarse el ciclo, sino que este nmero depender de las proposiciones dentro del mismo, es decir, se ejecutar mientras la condicin evaluada sea verdadera. Existen dos variantes de este tipo de ciclo: mientras y hacer mientras. La diferencia entre ambas consiste en que en el primer caso, si la condicin evaluada es falsa desde el inicio, no se ejecuta ninguna de las instrucciones; en el segundo caso, las instrucciones dentro del ciclo se ejecutarn al menos una vez.

36

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

inicio lmite incremento SI proceso condicin NO

proceso

Estructura repetitiva para

Estructura repetitiva mientras


proceso

condicin SI

NO

Estructura repetitiva hacer mientras

Figura 3.1. Representacin grfica de las tres variantes de estructuras cclicas repetitivas.

3.2. Contadores y acumuladores


Generalmente, cuando se utilizan estructuras algortmicas repetitivas no se puede prescindir del uso de unas variables, que por la funcin que desempean dentro de un ciclo son conocidas como contadores y acumuladores.

Un contador es una variable de tipo numrica entera que incrementa o decrementa su valor en cantidades constantes, y se expresa de la manera siguiente:

x=x+k x=xk

(incremento) (decremento)

37

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

donde: x variable contador k cualquier valor numrico entero constante por ejemplo:

x=0 x=x+1 y = 20 y=y3

Un acumulador es una variable que incrementa o decrementa su valor en valores variables, y se expresa de la manera siguiente:

x=x+n x=x*n x=xn x=x/n

(incremento) (incremento) (decremento) (decremento)

donde: x variable acumulador n cualquier valor por ejemplo:

x=0 n=5 x=x+n n=3 x=x+n

38

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Como se habr podido notar, en la definicin del concepto acumulador, ste no est restringido exclusivamente a valores numricos, a diferencia de un contador. Esto se debe a que es posible tener acumuladores cuyo valor puede contener valores de tipo alfanumrico para formar una cadena de caracteres, por ejemplo:

s = m = UPS s=s+m m = UM s=s+m

El resultado del ejemplo ser la formacin de la cadena de caracteres UPSUM, que ser almacenado en la variable s.

Como se puede observar en los ejemplos anteriores, a los contadores y acumuladores siempre les ser asignado un valor inicial que depender de la operacin a efectuar o del problema a resolver. Ejemplo 3.1. Construir un programa que muestre los nmeros enteros positivos de 1 a n.

Solucin empleando la estructura repetitiva para:

Datos de entrada: n Proceso: Leer( n ) PARA x = 1 HASTA n INCREMENTAR 1 Escribir( x ) Datos de salida: x

Inicio

n
x=1 x <= n x=x+1

Fin
Diagrama de flujo 3.1

39

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

#include <stdio.h> #include <conio.h> void main() { int n, x; clrscr(); printf( "Ingrese el valor de n: " ); scanf( "%d", &n ); for( x = 1; x <= n; x = x + 1 ) { printf( "%d\n", x ); } getch(); }
Programa 3.1. Codificacin del programa en lenguaje C.

Solucin empleando la estructura repetitiva mientras:

Datos de entrada: n Proceso: x=1 Leer( n ) MIENTRAS x <= n Escribir( x ) x=x+1 Datos de salida: x

Inicio

x=1

x <= n
SI

NO

x=x+1

Fin
Diagrama de flujo 3.2

40

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

#include <stdio.h> #include <conio.h> void main() { int n, x = 1; clrscr(); printf( "Ingrese el valor de n: " ); scanf( "%d", &n ); while( x <= n ) { printf( "%d\n", x ); x = x + 1; } getch(); }
Programa 3.2. Codificacin del programa en lenguaje C.

Solucin empleando la estructura repetitiva hacer mientras:

Datos de entrada: n Proceso: x=1 Leer( n ) HACER Escribir( x ) x=x+1

Inicio

x=1

x=x+1

MIENTRAS x <= n Datos de salida: x


x <= n
SI NO

Fin

Diagrama de flujo 3.3

41

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

#include <stdio.h> #include <conio.h> void main() { int n, x = 1; clrscr(); printf( "Ingrese el valor de n: " ); scanf( "%d", &n ); do{ printf( "%d\n", x ); x = x + 1; }while( x <= n ); getch(); }
Programa 3.3. Codificacin del programa en lenguaje C.

En gran cantidad de problemas, durante su fase de resolucin, es posible encontrar estructuras repetitivas que contengan tambin estructuras selectivas y/o estructuras repetitivas anidadas. Tal es el caso que se presenta en los siguientes ejemplos.

Ejemplo 3.2. Escriba un programa tal que dado como datos 30 nmeros enteros, obtenga la suma de los nmeros impares y el promedio de los pares.

42

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Datos de entrada: Num1, Num2, , Num30 Proceso: SumPar = 0 SumImp = 0 CuePar = 0 x=1 MIENTRAS x <= 30 Leer( Num ) SI Num <> 0 ENTONCES SI ( Num MOD 2 ) > 0 ENTONCES SumImp = SumImp + Num DE LO CONTRARIO SumPar = SumPar + Num CuePar = CuePar + 1 x=x+1 PromPar = SumPar / CuePar Datos de salida: ProPar, SumImp

Inicio SumPar = 0 SumImp = 0 CuePar = 0 x=1


4

SumImp = SumImp + Num 3

SumPar = SumPar + Num

x=x+1
4

CuePar = CuePar + 1

x <= 30
SI

NO 5 5

Num

ProPar = SumPar / CuePar

Num <> 0
SI

NO ProPar, SumImp

3 NO

( Num MOD 2 ) > 0

Fin
2

SI 1

Diagrama de flujo 3.4

43

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

#include <stdio.h> #include <conio.h> void main() { int SumPar = 0, SumImp = 0, CuePar = 0, x = 1, Num; float ProPar = 0; clrscr(); while( x <= 30 ) { printf( "Ingrese un nmero: " ); scanf( "%d", &Num ); if( Num !=0 ) { if( ( Num % 2 ) > 0 ) { SumImp = SumImp + Num; } else { SumPar = SumPar + Num; CuePar = CuePar + 1; } } x = x + 1; } ProPar = SumPar / CuePar; printf( "\nPromedio pares: %.1f", ProPar ); printf( "\nSuma impares : %d", SumImp ); getch(); }

Programa 3.4. Codificacin del programa en lenguaje C.

44

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Ejemplo 3.3. Un nmero es perfecto si la suma de sus divisores excepto el mismo es igual al propio nmero. Construya un programa para calcular e imprimir los nmeros perfectos menores o iguales que n.

Datos de entrada: n Proceso: x=1 Leer( n ) MIENTRAS x <= n sum = 0 y=1 MIENTRAS y <= ( x DIV 2 ) SI ( x MOD j ) = 0 ENTONCES sum = sum + y y=y+1 SI sum = x ENTONCES Escribir( x, Es un nmero perfecto ) x=x+1 Datos de salida: x

45

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Inicio

x=1

x <= n SI sum = 0, y = 1

NO

y <= ( x DIV 2 )

NO

SI
( x MOD y ) = 0

NO

sum = x

NO

SI sum = sum + y

SI x, es perfecto

y=y+1

x=x+1

Fin

Diagrama de flujo 3.5


#include <stdio.h> #include <conio.h> void main() { int x = 1, y, n, sum; clrscr(); printf( "Ingrese el valor de n: " ); scanf( "%d", &n ); while( x <= n ) { sum = 0; y = 1; while( y <= (int)( x / 2 ) ) { if( ( x % y ) == 0 ) { sum = sum + y; } y = y + 1; } if( sum == x ) { printf( "%d es un numero perfecto\n", x ); } x = x + 1; } getch(); }

Programa 3.5. Codificacin del programa en lenguaje C.

46

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

PROBLEMAS SUPLEMENTARIOS
PS 1.1. Convertir las siguientes ecuaciones en notacin computacional:
x=

( m + n )2 1-n ( m + n ) ( 1 n )2 1 n3

y=

v=mn+ c=

a2 + b2

x = a2 + ab + b2 x= y= -b + b2 4ac 2a

1-n ( m + n ) ( 1 n )2

( 1 n )
3 2

w=

m+n

( )
3

1-n 1+m

PS 1.2. Resuelva las siguientes expresiones aritmticas, considerando la jerarqua de operadores:

( 2 * 3 ) ** ( 1 / 3 ) / ( 2 * ( 13 + 5 ) ) ( 64 ** ( 1 / 2 ) + ( 21 10 ) ** 2 ) / ( 25 -11 ) ** 2 ( 3 ** 3 / 27 ** ( 1 / 3 ) ) * 6 / ( 15 6 ) ( ( 1 6 ) / ( ( 7 + 6 ) * ( 1 6 ) ** 2 ) ) ** ( 1 / 2 ) ( 6 + 7 * ( ( 1 6 ) / ( 1 + 7 ) ) ** ( 2 / 3 ) ) ** ( 1 / 2 ) 10 ** 2 + 10 * 5 + 5 ** 2 8 * 9 + ( 1 / 9 ** 3 ) ( ( 1 9 ) / ( 8 + 9 ) ) ** ( 1 / 2 ) * ( 1 - 9 ) ** ( 2 / 3 )

PS 1.3. Resuelva las siguientes expresiones lgicas:

( ( 6 + 12 ) >= ( 3 * 6 ) ) AND NOT ( 3 > 5 ) ( ( 13 < 10 ) = ( 15 <> 20 ) ) OR ( ( 20 > 18 ) AND ( 3 + 12 = 15 ) ) ( ( 13 < 10 ) = ( 15 <> 20 ) ) AND ( ( 20 > 18 ) OR ( 3 + 12 = 15 ) ) 10 * 3 = 30 AND NOT ( ( 15 * 2 <= 30 OR 20 +15 = 45 ) )

47

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

( ( 19 3 ) + 2 ** 2 = 20 ) AND NOT ( 15 > 17 ) NOT ( 27 ** ( 1 / 3 ) = 3 OR 4 < 10 ) AND ( 25 ** ( 1 / 2 ) = 6 OR 35 > 30 ) ( 8 ** 2 = 66 AND 16 ** ( 1 / 2 ) = 4 ) OR ( 99 < 100 AND NOT ( 40 / 5 = 8 ) ) ( 3 + ( 12 * 3 ) = 100 ) AND ( 27 / 3 = 9 ) AND ( 7 * 3 = 21 OR NOT ( 4 ** 3 = 64 ) )

PS 1.4. Construya un programa tal que dados los datos enteros A y B, escriba el resultado de la siguiente expresin:

( A + B )2 3
PS 1.5. Dada la matrcula y cinco calificaciones de un alumno obtenidas a lo largo del semestre, construya un programa que imprima la matrcula del alumno y el promedio de sus calificaciones. PS 1.6. Construya un programa tal que dados como datos la base y la altura de un rectngulo, calcule el permetro y el rea del mismo. PS 1.7. Construya un programa tal que dado el costo de un artculo vendido y la cantidad de dinero entregada por el cliente, calcule e imprima el cambio que se debe entregar al mismo. PS 1.8. Desarrolle un programa tal que dados como datos el peso y la estatura de una persona, expresados en libras y pies respectivamente, escriba su peso expresado en kilogramos y su estatura expresada en metros. Considere que 1 kg = 2.2046 lb y 1 m = 3.2808 ft. PS 1.9. Construya un programa que calcule e imprima el nmero de segundos que hay en un determinado nmero de das.

PS 1.10. En una casa de cambio necesitan un programa tal que dado como dato una cantidad expresada en dlares, convierta esa cantidad a pesos. Construya el programa correspondiente. PS 1.11. Dada la estabilidad econmica en un determinado pas, las agencias automotrices comienzan a ofrecer distintos planes de financiamiento para la

48

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

comercializacin de sus vehculos. La empresa XGW ofrece el siguiente plan de financiacin: dado el monto total del vehculo, el cliente debe pagar el 35% de enganche y el resto en 18 incmodas mensualidades iguales sin inters. Construya el programa que permita obtener cul es el importe del enganche y las mensualidades que debe pagar el cliente.

PS 1.12. Una persona compr una estancia en un pas sudamericano. La extensin de la estancia est especificada en acres. Construya un programa tal que dado como dato la extensin del campo en acres, calcule e imprima la extensin del mismo en hectreas, considerando que 1 acre = 4047 m2 y 1 hectrea = 10000 m2. PS 1.13. Una persona invierte en un banco una determinada cantidad de dinero y a una cierta tasa de inters mensual. Construya un programa que permita obtener el monto del dinero que obtendr al fin del perodo correspondiente.

PS 2.1. Construya un programa tal que dado como dato la calificacin de un alumno en un examen, escriba APROBADO en caso que esa calificacin sea mayor a 5. PS 2.2. Dado como dato el sueldo de un trabajador, aplquele un aumento del 15% si su sueldo es inferior a $1000. Imprima en este caso el nuevo sueldo del trabajador. Haga el programa correspondiente. PS 2.3. La tangente de un ngulo se define como el cociente entre el seno y el coseno de dicho ngulo.

tan = sen / cos

Construya un programa que permita calcular la tangente de un ngulo, considerando que se conoce el valor del seno y del coseno del mismo. Recuerde que el coseno debe ser diferente de 0. PS 2.4. Dado como dato el sueldo de un trabajador, considere un aumento del 15% si su sueldo es inferior a $1000 y de un 12% en caso contrario. Imprima el sueldo con el aumento incorporado. Haga el programa correspondiente.

49

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

PS 2.5. Construya un programa para calcular el precio del boleto de ida y vuelta en ferrocarril, conociendo la distancia del viaje de ida y el tiempo de estancia. Se sabe adems que si el nmero de das de estancia es superior a 7 y la distancia total (ida y vuelta) a recorrer es superior a 800 km, el boleto tiene una reduccin del 30%. El precio por km es de $0.17

PS 2.6. Construya un programa tal que dado como dato el sueldo de un trabajador, calcule su aumento segn el siguiente criterio:

Sueldo < $10,000 Sueldo >= $10,000 y Sueldo <= $15,000 Sueldo > $15,000

Aumento = 15% Aumento = 11% Aumento = 8%

Imprima el nuevo sueldo del trabajador. PS 2.7. Construya un programa tal que dado como datos A y N, compruebe la igualdad de la siguiente expresin:

A-N =

1 AN

El valor de A debe ser diferente de 0.

PS 2.8. Construya un programa tal que dado como dato una temperatura en grados Fahrenheit, determine el deporte que es apropiado practicar a esa temperatura, teniendo en cuenta la siguiente tabla:

Deporte Natacin Tenis Golf Esqu Marcha

Tabla PS.1 Temperatura > 85 70 < temp <= 85 32 < temp <= 70 10 < temp <= 32 <= 10

PS 2.9. Construya un programa que permita realizar operaciones aritmticas elementales, segn la opcin ingresada.

50

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

Tabla PS.2 Opcin Operacin 1 Suma 2 Resta 3 Multiplicacin 4 Divisin

PS 2.10. Construya un programa que permita calcular e imprimir el costo final de una llamada telefnica. Para calcular el costo final se sigue lo indicado en la siguiente tabla:

Clave 12 15 18 19 23 25 29

Tabla PS.3 Precio / Minuto Zona (3 primeros) Amrica del Norte 2.0 Amrica Central 2.2 Amrica del Sur 4.5 Europa 3.5 Asia 6.0 frica 6.0 Oceana 5.0

Precio / Minuto (del 4 en adelante) 1.5 1.8 3.5 2.7 4.6 4.6 3.9

PS 3.1. Construya un programa que calcule e imprima la suma de los N primeros nmeros naturales. PS 3.2. Se tiene calificaciones de un grupo de alumnos que presentaron un examen. El profesor desea obtener el promedio de estas calificaciones. Escriba un programa para resolver lo planteado anteriormente. PS 3.3. Desarrolle un programa tal que dado como datos N nmeros enteros, determine cuntos de ellos son pares y cuntos impares. PS 3.4. Haga un programa para obtener la tabla de multiplicar de un nmero entero K, comenzando desde 1.

51

DISEO ESTRUCTURADO DE ALGORITMOS

L.I.A. y M.C.C. PEDRO ALEJO ESCARELA RODRIGUEZ

PS 3.5. Elabore un programa que lea un nmero entero N y calcule el resultado de la siguiente serie:

1+

1 1 1 + +... + 2 3 N

PS 3.6. Construya un programa que lea 100 nmeros naturales y cuente cuntos de ellos son positivos, negativos o nulos.

PS 3.7. Elabore un programa que calcule la suma de los nmeros pares comprendidos entre 1 y N. PS 3.8. Elabore un programa que determine e imprima los nmeros primos comprendidos entre 1 y N. Recuerde que los nmeros primos son los que nicamente son divisibles entre la unidad y ellos mismos. PS 3.9. Elabore un programa que calcule el trmino nmero 180 de la secuencia Fibonacci. Recuerde que los dos primeros nmeros de la serie son 0 y 1. El resto se calcula como la suma de los dos nmeros inmediatos que le preceden.

Ejemplo de la serie: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, PS 3.10. Supngase que en una reciente eleccin hubo cuatro candidatos (con identificadores 1, 2, 3, 4). Usted habr de encontrar, mediante un programa, el nmero de votos correspondientes a cada candidato y el porcentaje que obtuvo respecto al total de los votantes. El usuario teclear los votos de manera desordenada, tal y como se obtuvieron en la eleccin, el final de datos est representado por un cero. Observe, como ejemplo, la siguiente lista:

13142214111213140

Donde 1 representa un voto para el candidato 1; 3 un voto para el candidato 3; y as sucesivamente.

52

Anda mungkin juga menyukai