Documente Academic
Documente Profesional
Documente Cultură
3.1. Qu es un algoritmo?
Analizar el problema
Depurar El algoritmo
Disear un algoritmo
Traducir el algoritmo
Figura: 1: Segunda Fase del Ciclo de Programacin
Como expresamos en la Unidad 1, luego de analizar detalladamente el problema hasta entenderlo completamente, se procede a disear un algoritmo (trazar un plan) que lo resuelva por medio de pasos sucesivos y organizados en secuencia lgica. El concepto intuitivo de algoritmo (procedimientos y reglas) se puede encontrar en procesos naturales de los cuales muchas veces no se es consciente. Por ejemplo, el proceso digestivo es un concepto intuitivo de algoritmo con el que se convive a diario sin que haga falta una definicin matemtica del mismo. Tener claro el proceso digestivo, no implica que los alimentos consumidos nutran ms. La familiaridad de lo cotidiano impide a las personas ver muchos algoritmos que se suceden a su alrededor. Procesos, rutinas o biorritmos naturales como la gestacin, las estaciones, la circulacin sangunea, los ciclos csmicos, etc., son algoritmos naturales que generalmente pasan desapercibidos. Un Algoritmo es una secuencia ordenada de instrucciones, pasos o procesos que llevan a la solucin de un determinado problema.
Dato Curioso La palabra Algoritmo tiene su origen en el nombre del matemtico Persa "Mohamed ibn Musa al Khwarizmi" (825 d.C.). Su apellido fue traducido al latn como Algorismus y posteriormente paso al espaol como Algoritmo. Khwarizmi fue bibliotecario en la corte del califa al-Mamun y astrnomo en el observatorio de Bagdad. Sus trabajos de lgebra, aritmtica y tablas astronmicas adelantaron enormemente el pensamiento matemtico y fue el primero en utilizar la expresin al-yabr (de la que procede la palabra lgebra). Su trabajo con los algoritmos introdujo el mtodo de clculo utilizando la numeracin arbiga y la notacin decimal.
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS En el mbito de la computacin, los Algoritmos son una herramienta que permite describir claramente un conjunto finito de instrucciones, ordenadas secuencialmente y libres de ambigedad, que debe llevar a cabo una computadora para lograr un resultado previsible. Caractersticas de un Algoritmo: Realizable: El proceso algortmico debe terminar despus de una cantidad finita de pasos. Se dice que un algoritmo es inaplicable cuando se ejecuta con un conjunto de datos iniciales y el proceso resulta infinito o durante la ejecucin se encuentra con un obstculo insuperable sin arrojar un resultado. Comprensible: Debe ser claro lo que hace, de forma que quien ejecute los pasos (ser humano o mquina) sepa qu, cmo y cundo hacerlo. Debe existir un procedimiento que determine el proceso de ejecucin. Preciso: El orden de ejecucin de las instrucciones debe estar perfectamente indicado. Cuando se ejecuta varias veces, con los mismos datos iniciales, el resultado debe ser el mismo siempre. La precisin implica determinismo. Ejemplos Un procedimiento que realizamos varias veces al da consiste en lavarnos los dientes. Veamos la forma de expresar este procedimiento como un Algoritmo: [1] Tomar la crema dental [2] Destapar la crema dental [3] Tomar el cepillo de dientes [4] Aplicar crema dental al cepillo [5] Tapar la crema dental [6] Abrir la canilla del lavatorio [7] Remojar el cepillo con la crema dental [8] Cerrar la canilla del lavatorio [9] Frotar los dientes con el cepillo [10] Abrir la canilla del lavatorio [11] Enjuagarse la boca [12] Enjuagar el cepillo [13] Cerrar la canilla del lavatorio [14] Secarse la cara y las manos con una toalla Los pasos para cambiar una lmpara quemada son:
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS [1] Ubicar una escalera debajo de la lmpara quemada [2] Tomar una lmpara nueva [3] Subir por la escalera [4] Girar la lmpara quemada hacia la izquierda hasta soltarla [5] Enroscar la lmpara nueva en el portalmparas hasta apretarla [6] Bajar de la escalera [7] Fin Discutir con sus compaeros de clase la forma de optimizar los algoritmos presentados como ejemplo.
Dato Curioso En 1936, el lgico y matemtico ingls Alan Turing (1291-1954), construy la primera mquina conceptual como una herramienta matemtica para estudiar los procesos algortmicos. Un clculo en una mquina de Turing consta de una secuencia de pasos que ejecuta su unidad de control. Si un problema se puede resolver en la mquina de Turing entonces es algortmico, y recprocamente si un problema tiene solucin algortmica, entonces se puede resolver en la mquina de Turing.
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS bsicas de la computacin, independientemente de los detalles de su implementacin; mientras que un programa tiene un conjunto especfico de detalles para resolver un problema. Se puede observar que una tcnica de solucin (correspondiente al algoritmo) se puede utilizar en diferentes situaciones problemticas (correspondiente a los programas). De manera inversa, se espera que una solucin exitosa de problemas incorpore procesos generales que son independientes de las situaciones especficas. Las siguientes actividades son de razonamiento abstracto que permite entrenarse y desarrollar habilidades de pensamiento algortmico y procedimental. a. Completar el cuadro con un ? con la figura (1 a 5) correspondiente para completar la secuencia:
** Ao 2010 **
c. Sin hacer ningn dibujo, imaginar y describir las figuras que van en las posiciones con un ?. Luego, dibujar las secuencias completas en la cuadricula inferior:
** Ao 2010 **
d. Ordenar los pasos para pescar en un ro: ___ El pez se traga el anzuelo. ___ Enrollar la lnea. ___ Tirar la lnea al agua.
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS ___ Llevar el pescado a casa. ___ Quitar el anzuelo de la boca del pescado. ___ Poner carnada al anzuelo. ___ Sacar el pescado del agua.
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS de problemas contiene un conjunto finito y preciso de instrucciones o primitivas utilizables para especificar la solucin buscada. Es necesario que el significado de cada primitiva del lenguaje sea exactamente conocido y como consecuencia no se pueden admitir infinitas primitivas. Ntese que desde el punto de vista del diseo del algoritmo, el contar con un numero finito de instrucciones posibles termina con el problema de decidir, de una forma totalmente subjetiva, el grado de detalle necesario para que los pasos a seguir puedan ser interpretados correctamente. El conjunto de instrucciones determinar cuales son los pasos elementales posibles que se utilizarn para el diseo de la solucin. Un lenguaje de expresin de problemas debe reunir las siguientes caractersticas: Debe estar formado por un nmero de instrucciones finito. Debe ser completo, es decir que todas las acciones de inters deben poder expresarse con dicho conjunto de instrucciones. Cada instruccin debe tener un significado (efecto) preciso. Cada instruccin debe escribirse de modo nico. No siempre los problemas se expresan con primitivas que representen un subconjunto preciso del lenguaje natural: se puede utilizar un sistema de smbolos grficos (tales como los de los diagramas de flujo); puede emplearse una simbologa puramente matemtica; puede crearse un lenguaje especial orientado a una aplicacin; pueden combinarse grficas con texto, etc. De todos modos, cualquiera sea la forma del lenguaje elegido ste siempre respetar las caractersticas mencionadas anteriormente. Por qu? Porque si se quiere que una mquina interprete y ejecute las rdenes del lenguaje, por ms sofisticada que sea, requerir que las rdenes diferentes constituyan un conjunto finito; que cada orden pueda ser interpretada de un modo nico y que los problemas solubles por la mquina sean expresables en el lenguaje. 3.4.1. Diagramas de Flujo El Diagrama de Flujo es una herramienta grfica valiosa para la representacin esquemtica de la secuencia de instrucciones de un algoritmo o de los pasos de un proceso. Simbologa de los diagramas de flujo
Con el fin de evitar la utilizacin de smbolos diferentes para representar procesos iguales, la Organizacin Internacional para la Estandarizacin (ISO, por su sigla en ingls) y el Instituto Nacional Americano de Estandarizacin (ANSI, por su sigla en ingls), estandarizaron los smbolos que mayor aceptacin tenan en 1985.
** Ao 2010 **
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS La Tabla 1 presenta los smbolos de diagramas de flujo que utilizaremos en este curso. Smbolo Funcionalidad del Smbolo
Inicio/Final Se utiliza para indicar el inicio y el final de un diagrama; del Inicio slo puede salir una lnea de flujo y al Final slo debe llegar una lnea. Entrada General Entrada de datos en General. Expresa lectura. Accin/Proceso General Indica una accin o instruccin general (cambios de valores de variables, asignaciones, operaciones aritmticas, etc.) Decisin En su interior se almacena una condicin, y dependiendo de su resultado lgico (verdadero o falso) se sigue por un camino del diagrama u otro. Este smbolo se utiliza en la estructura selectiva si entonces que estudiaremos en la Unidad 5 y en las estructuras iterativas precondiconales y poscondicionales que analizaremos en la Unidad 6. Se utiliza para representar la estructura selectiva doble si entonces/sino, en su interior se almacena una condicin. Si el resultado es verdadero se contina por el camino de la izquierda, y si es falso por el camino de la derecha. Decisin Mltiple En su interior se almacena un selector, y dependiendo de su valor se sigue por una de las ramas o caminos alternativos. Este smbolo se utiliza para la estructura selectiva opcin de, que analizaremos en la Unidad 5. Salida Impresa Representa la impresin de resultados. Expresa escritura.
NO
SI
SI
NO
uno
varios
** Ao 2010 **
Las fases mostradas en la Figura 2 se presentan en la mayora de los diagramas de flujo, a veces en orden diferente o repitiendo alguna de ellas o tomando alguna decisin. Reglas para la elaboracin de diagramas de flujo Cuando el algoritmo se desea expresar en forma de diagrama de flujo, se deben tener en cuenta algunas reglas o principios bsicos para su elaboracin (Rojas & acato, 1980):
** Ao 2010 **
10
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS Poner un encabezado que incluya un ttulo que identifique la funcin del algoritmo; el nombre del autor; y la fecha de elaboracin; Slo se pueden utilizar smbolos estndar (ISO 5807); Los diagramas se deben dibujar de arriba hacia abajo (top_down) y de izquierda a derecha (right to left); La ejecucin del programa siempre empieza en la parte superior del diagrama; Los smbolos de Inicio y Final deben aparecer solo una vez; La direccin del flujo se debe representar por medio de flechas (lneas de flujo); Todas las lneas de flujo deben llegar a un smbolo o a otra lnea; Una lnea de flujo recta nunca debe cruzar a otra. Cuando dos lneas de flujo se crucen, una de ellas debe incluir una lnea arqueada en el sitio donde cruza a la otra (Figura 3); No puede llegar ms de una lnea a un smbolo. (Figura 4); Las lneas de flujo deben ser rectas, verticales y horizontales (nunca inclinadas); Se deben inicializar las variables que se utilicen o permitir la asignacin de valores mediante consulta al usuario; Las bifurcaciones y ciclos se deben dibujar procurando una cierta simetra; Cada rombo de decisin debe tener al menos dos lneas de salida (una para SI y otra para NO); La notacin utilizada en el diagrama de flujo debe ser independiente del lenguaje de programacin. La solucin presentada en el diagrama puede escribirse posteriormente en cualquier lenguaje de programacin; Cuando realizamos una tarea compleja es conveniente poner comentarios que expresen o ayuden a entender lo que hicimos. (texto entre { }); Las acciones y decisiones se deben describir utilizando el menor nmero de palabras posible; sin que resulten confusas o poco claras; Si el Diagrama se vuelve complejo y confuso, es mejor utilizar smbolos conectores para reducir las lneas de flujo; Todo el Diagrama debe ser claro, ordenado y fcil de recorrer; El Diagrama se debe probar recorrindolo con datos iniciales simples (prueba de escritorio).
** Ao 2010 **
11
3.4.2. Pseudocdigo
4
El seudocdigo est compuesto por proposiciones informales en espaol compuestas por metapalabras o palabras reservadas o primitivas que permiten expresar detalladamente las instrucciones que llevan desde un estado inicial (problema) hasta un resultado deseado (solucin). En la siguiente tabla se enumeran las metapalabras que se utilizarn en este curso:
** Ao 2010 **
12
Uso
equivalente al parntesis de apertura en la sintaxis de un enunciado compuesto Encabezamiento para la definicin de constantes. parte de la seleccin simple o doble, que gua el control cuando la condicin es verdadera Procedimiento para imprimir. Procedimiento para imprimir, y luego saltar a la lnea siguiente. parte ejecutora de la estructura iterativa finita parte final de la estructura iterativa poscondicional repetir, o prefijo del lmite superior de la variable de control de la iteracin para Procedimiento para leer, para la entrada de datos. parte inicial de la estructura iterativa precondicional mientras operador lgico de negacin operador lgico de disyuncin parte inicial de la seleccin mltiple Parte inicial de la iteracin precondicional para parte inicial de la estructura iterativa poscondicional repetir parte inicial de la seleccin simple o doble parte de la seleccin doble, que gua el control cuando la condicin es falsa equivalente al parntesis de cierre en la sintaxis de un enunciado compuesto encabezamiento para la definicin de variables operador lgico de conjuncin Tabla 2: Metadefiniciones
Analizar el problema
Depurar El algoritmo
Disear un algoritmo
Traducir el algoritmo
Figura: 5: Tercera Fase del Ciclo de Programacin
** Ao 2010 **
13
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS Retomando el problema del ejemplo analizado en la Unidad 1, realizaremos el diseo de su algoritmo y la traduccin a seudocdigo.
ALGORITMO EN DIAGRAMA DE FLUJO
Traducimos el algoritmo diseado a SEUDOCDIGO {conocemos la medida de la base y la altura del tringulo} Paso 1: comienza Paso 2: div = 2 Paso 3: base = 3 Paso 4: altura = 4 Paso 5: area base*altura/div Paso 6: escribir (area) Paso 7: termina {en la variable area est almacenado el valor calculado del rea del tringulo rectngulo}
** Ao 2010 **
14
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS guardar datos (valores). El valor de una Variable puede cambiar en algn paso del Algoritmo o permanecer invariable; por lo tanto, el valor que contiene una variable es el del ltimo dato asignado a esta. 3.5.2. Constantes Las Constantes, de la misma forma que las variables y son espacios de trabajo (contenedores) reservados para guardar datos (valores), pero que, luego de ser asignados, no cambian en ninguna instruccin del Algoritmo. 3.5.3. Contadores Los contadores se implementan como una estructura de programacin (A A + 1) que consiste en almacenar en una variable A, el valor de ella misma (A) ms un valor constante (por ejemplo 1). Es muy til para controlar el nmero de veces que debe ejecutarse un grupo de instrucciones en un algoritmo. 3.5.4. Acumuladores Estructura muy utilizada en programacin (A A + B) y que consiste en almacenar en una variable A, el valor de ella misma (A) ms otro valor variable (B). Es muy til para calcular sumatorias. 3.5.5. Identificadores Los identificadores son nombres que se dan a los elementos utilizados para resolver un problema y poder diferenciar unos de otros. Al asignar nombres (identificadores) a variables, constantes y procedimientos se deben tener en cuenta algunas reglas: Los nombres pueden estar formados por una combinacin de letras y dgitos (saldoMes12, cadena10, fecha2, etc.). El primer carcter de un nombre debe ser una letra. Los nombres deben ser nemotcnicos, con slo leerlos se puede entender lo que contienen. Deben ser muy descriptivos; no utilizar abreviaturas, a menos que se justifique plenamente. Es conveniente utilizar una sola palabra para nombrar pginas, controles, variables, etc. No utilizar caracteres especiales (%, +, /, #, >, , etc.). Excepto el _ (guin bajo). Se debe tener en cuenta que algunos lenguajes de programacin no admiten las tildes. No utilizar las palabras reservadas por los lenguajes de programacin. Para cumplir con convenciones ampliamente utilizadas, si es un nombre compuesto por varias palabras, cada una de las palabras (con excepcin de la primera) deben empezar con mayscula. Ejemplo: fechaInicial, baseTriangulo, etc.
** Ao 2010 **
15
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS 3.5.6. Operadores Son smbolos que sirven para manipular datos. Los operadores y las operaciones que se pueden realizar con ellos se clasifican en: Aritmticos: Posibilitan las operaciones entre datos numricos y dan como resultado otro valor numrico. Ejemplo: potencia (**); producto (*); divisin (/); suma (+); resta (-); Alfanumricos: Permiten operar con datos alfanumricos. No se vern en este curso. Relacinales: Permiten la comparacin entre datos del mismo tipo y dan como resultado dos valores posibles: Verdadero o Falso. Ejemplo: igual a (=); menor que (<); mayor que (>). Lgicos: Posibilitan la evaluacin lgica de dos expresiones de tipo lgico. Dan como resultado uno de dos valores posibles: Verdadero o Falso. Fueron descriptos y explicados en la Unidad 2. (, , )
Operacin potencia multiplicacin divisin suma resta mdulo (resto de la divisin entera) Divisin entera
** Ao 2010 **
16
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS Los operadores se ejecutan en un orden determinado, respetando la jerarqua o prioridad de cada uno de ellos. A igual prioridad de operador se ejecuta primero el que est ms a la izquierda. Operadores () ** *,/,div,mod +, =, <>, <, >, <=, >=, Jerarqua (mayor)
(menor)
3.5.8. Expresiones Una Expresin est compuesta por valores, funciones,primitivas, constantes y/o variables, o por una combinacin de los anteriores mediante operadores. Son Expresiones: Un valor (1.3, Jorge) Una Constante o una Variable (divide, base, rea) Una funcin (cos 60, arctan 1) Una combinacin de valores, constantes, variables, funciones y operadores que siguen reglas de construccin y orden de evaluacin de los operadores (base * altura/2) Las Expresiones pueden ser: Aritmticas: Dan como resultado un valor numrico. Contienen nicamente operadores aritmticos y datos numricos (pi * 20 - X) Alfanumricas: Dan como resultado una serie o cadena de caracteres. (No se analizarn en este curso)
** Ao 2010 **
17
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS Lgicas: Dan como resultado un valor "Verdadero" o "Falso". Contienen variables y/o constantes enlazadas con operadores lgicos (A>0 B<=5). De Asignacin: Estas Expresiones asignan el resultado de una Expresin a una Variable o a una Constante. La Expresin de Asignacin (area base * altura/2) asigna () el valor resultante de la Expresin Aritmtica (base * altura / 2) a la variable area. Si una expresin contiene subexpresiones entre parntesis, estas se resuelven primero, respetando el orden de evaluacin de los operadores contenidos en esas subexpresiones. O sea, siempre se evalan primero las subexpresiones que se encuentran en el ltimo nivel de anidamiento. Las expresiones siempre se evalan teniendo en cuenta la jerarqua de los operadores y de izquierda a derecha. La asignacin es una operacin destructiva. O sea, que si la variable tena asignado un valor, ste se destruye, conservando ahora el nuevo valor asignado. 3.5.9. Ejercitacin 3.5.9.1. Seala con un el identificador correcto para:
I. Una variable que contendr la sumatoria de las producciones anuales a. b. c. d. sumaProduciones Producciones Suma Sum_Prod
II. Una constante que contendr la cantidad de das laborables en el ao a. b. c. d. DiasL D_L diasLaborables DiasLaborablesAo
III. Una variable que cuenta la cantidad de nmeros positivos ledos a. Contador
b. cuentaPositivos
** Ao 2010 **
18
d. Cont_Posi 3.5.9.2. Expresiones I. Evaluar paso a paso las siguientes expresiones: a. 7*8* (160 mod 3 ** 3) div 9 * 2 28 7*8* (160 mod 3 ** 3) div 9 * 2 28
27
7*8* 25 div 9 * 2 28
56
56* 25 div 9 * 2 28
1400
1400 div 9 * 2 28
155
155 * 2 28
310
310 28
282
b. 5 ** 3 > 16*2 c. 5*4 + 28 div 9 <= 7**2 34 div 11 d. (15 <= 6**2) (45 3**3 <> 36 div 2) 3.5.9.3. Asignacin Dados los siguientes bloques de asignacin, completar las tablas con los valores que van tomando las variables: Bloque i 1. cuenta 0 2. acumula0
** Ao 2010 ** 19
Unidad 3: ALGORITMOS, CONCEPTOS BSICOS 3. palabrahola 4. estadoverdadero 5. cuentacuenta +1 6. acumulaacumula + cuenta *3 7. palabrahola Juan 8. estado(8 > 5) (15 < 2**3) 9. cuentacuenta + 1 10. acumulaacumula + cuenta asignacin 1 2 3 4 5 6 7 8 9 10 2 5 1 3 hola Juan falso cuenta 0 0 hola verdadero acumula palabra estado
Bloque ii 1. validoverdadero 2. total0 3. divide1.5 4. divide25/13 + 4 5. peso23.56 6. total56 * peso + divide 7. validodivide <= peso
** Ao 2010 **
20