Antologia..

download Antologia..

of 52

Transcript of Antologia..

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. ALGORITMOS1.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

2

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 algoritmoCasi 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.

3

DISEO ESTRUCTURADO DE ALGORITMOS

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

1.3.

Etapas de la solucin de un problemaSi 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.

4

DISEO ESTRUCTURADO DE ALGORITMOS

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

1.3.1. Anlisis profundo del problemaEsta 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:

5

DISEO ESTRUCTURADO DE ALGORITMOS

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

x=a+b

1.3.2. Construccin del algoritmoUna 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 algoritmoEn 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

6

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.

7

DISEO ESTRUCTURADO DE ALGORITMOS

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

1.4.

Conceptos fundamentalesAntes 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 datosLos 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

8

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:

a

B

$

9

-

#

f

+

@

!

9

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 variablesIdentificadores

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 aritmticasPara 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=mpara 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.814

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 63715

DISEO ESTRUCTURADO DE ALGORITMOS

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

1.4.4. Expresiones lgicasLas 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 = 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 ) ( 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 flujoHasta 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 impresoraE|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 FinDiagrama 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 #include #include //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

FinDiagrama de flujo 1.2

#include #include 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 SELECTIVASLas 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 ENTONCES SI ENTONCES | DE LO CONTRARIO EN CASO QUE 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 ENTONCESLa estructura selectiva SI 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 #include 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 < 1000V

F

#include #include 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

FinDiagrama de flujo 2.2

Programa 2.2. Codificacin del programa en lenguaje C.

2.2.

La estructura selectiva doble SI ENTONCES / SI NOLa estructura selectiva si 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 #include void main() { float Calif; clrscr(); printf( "Ingrese la calificacin: " ); scanf( "%f", &Calif ); if( Calif > 5 ) printf( "APROBADO" ); else printf( "REPROBADO" ); getch(); }

APROBADO

REPROBADO

FinDiagrama 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 < 1000V

F

NuevoSueldo = Sueldo * 1.15

NuevoSueldo = Sueldo * 1.12

NuevoSueldo

Fin

Diagrama de flujo 2.4

#include #include 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 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 #include #include 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 #include 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 1SI

NO

Condicin 1SI

NO

Condicin 2SI

NO

Condicin 2SI

NO

Condicin 3SI

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

1

2

4

A, B, C

B>CSI

NO

C, A, B 4 3

C, B, A

3

A>BSI

NO

1 A>CSI NO

A>CSI

NO

2

B, A, C

B, C, A

3 B>CSI NO

A, B, C 3 Fin

A, C, B

Diagrama de flujo 2.7#include #include 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 REPETITIVASEs 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 repetitivasEn 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 mientrasproceso

condicin SI

NO

Estructura repetitiva hacer mientras

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

3.2. Contadores y acumuladoresGeneralmente, 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

nx=1 x