Algoritmos Un algoritmo establece, de manera gen érica e informal, la secuencia de pasos o acciones que resuelve un determinado problema. Los algoritmos constituyen la documentaci ón principal que se necesita para poder iniciar la fase de codificaci ón.
Un algoritmo para un programador es una herramienta que le permite resaltar los aspectos m ás importantes de una situació situaci ón y descartar los menos relevantes. Todo problema de c ómputo se puede resolver ejecutando una serie de acciones en un orden espec í fico. fico. ón de levantarse Por ejemplo considere el algoritmo que se elaborar í a para el problema o situaci situació todas las mañ mañanas para ir al trabajo: 1. Salir de la cama 2. quitarse el pijama 3. ducharse ducharse 4. vestirse vestirse 5. desayunar desayunar 6. arrancar arrancar el autom automóvil para ir al trabajo o tomar transporte.
Representaci ón de Algoritmos Fundamentalmente, dos tipos de notaci ón: Pseudocó Pseudocódigo ● ● Diagramas de flujo.
El diseñ diseño de un algoritmo es independiente del lenguaje que despu és se vaya a utilizar para codificarlo. Algoritmo en pseudoc ódigo Pseudocó Pseudocódigo es la descripció descripci ón de un algoritmo que asemeja a un lenguaje de programaci ón pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones comp comple leja jas. s. El pseu pseudo doccódigo no está reg regido ido por nin ningún estándar.
La sintaxis para escribir un algoritmo en pseudoc ódigo es: algoritmo [ constantes tantes> ] [ tipos_de_datos datos> ] [ variables ] inicio fin
1
Un algoritmo escrito en pseudocó pseudoc ódigo siempre se suele organizar en tres secciones: ● Cabecera : En la secció secci ón de cabecera se escribe el nombre del algoritmo. ● Declaraciones : En la secció secci ón de declaraciones se declaran algunos objetos (variables, constantes,...) que va a utilizar el programa. ● Cuerpo: En el cuerpo está est án descritas todas las acciones que se tienen que llevar a cabo en el programa, y siempre se escriben entre las palabras inicio y fin.
Ejemplo de un algoritmo en Pseudoc ódigo Por ejemplo, el algoritmo de un programa que va a calcular la suma de dos n úmeros enteros cualesquiera introducidos por el usuario y, despu és, va a mostrar por pantalla el resultado obtenido, puede ser el siguiente: algoritmo Sumar variables entero a, b, c inicio escribir( "Introduzca el primer nú número (entero): " ) leer( a ) escribir( "Introduzca el segundo nú n úmero (entero): " ) leer( b ) c←a+b escribir( "La suma es: ", c ) fin
Diagramas de flujos. Los diagramas de flujo son descripciones gr áficas de algoritmos; usan sí s í mbolos mbolos conectados con flechas para indicar la secuencia de instrucciones y est án regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos peque ños, ya que abarcan mucho espacio y su construcció construcci ón es laboriosa. Por su facilidad de lectura son usados como introducci ón a los algoritmos, algoritmos, descripci descripció descripci ón de proc proces esos os a pers person onas as ajena jenass a la ón de un lenguaje y descripció computació computación. ón Otra Otra defi defini nici ció del diagrama de f lujo es la siguiente: "Es un esquema para representar gr áficamente un algoritmo. Se basan en la utilizaci ón de diversos sí mbolos mbolos para representar operaciones espec í ficas. ficas. Se les llama diagramas de flujo porque los sí mbolos mbolos utilizados se conectan por medio de flechas para indicar la secuencia de operaci ón. Para hacer comprensibles los diagramas a todas las personas, los s í mbolos mbolos se someten a una normalizació normalización; es decir, se hicieron sí s í mbolos mbolos casi universales, ya que, en un principio cada usuario podrí podrí a tener sus propios sí s í mbolos mbolos para representar sus procesos en forma de Diagrama de flujo. Esto trajo como consecuencia que s ólo aquel que conocí conoc í a sus sí sí mbolos, mbolos, los podí podí a interpretar. La simbologí simbologí a utilizada para la elaboració elaboraci ón de diagramas de flujo es variable y debe ajustarse a un
2
patró patrón definido previamente." Principales sí mbolos: mbolos: Flecha: Indica el sentido y trayectoria del proceso de informaci ón o tarea. Rectángulo: Se usa para representar un evento o proceso determinado. Éste es controlado dentro del diagrama de flujo en que se encuentra. Es el s í mbolo mbolo má más comú comúnmente utilizado. Rectángulo redondeado: Se usa para representar un evento que ocurre de forma autom ática y del cual generalmente se sigue una secuencia determinada. Rombo: Se utiliza para representar una condici ón. Normalmente el flujo de informació informaci ón entra por arriba y sale por un lado si la condici ón se cumple o sale por el lado opuesto si la condici ón no se cumple. Lo anterior hace que a partir de éste el proceso tenga dos caminos posibles. Cí rculo: rculo: Representa un punto de conexió conexi ón entre procesos. Se utiliza cuando es necesario dividir un diagra diagrama ma de flujo en varias varias partes, partes, por ejempl ejemplo o por razone razoness de espaci espacio o o simpli simplicid cidad. ad. Una referencia debe de darse dentro para distinguirlo de otros. La mayor í a de las veces se utilizan números en los mismos.
Los algoritmos tambié también se pueden representar, grá gr áficamente, por medio de diagramas de flujo. Los diagramas de flujo se pueden utilizar con otros fines, no obstante, a los diagramas de flujo que representa representan n algoritmos algoritmos tambié también se les les cono conoce ce como como ordi ordino nogra grama mas. s. Dich Dicho o de otra otra forma, orma, un ordinograma representa, de manera grá gr áfica, el orden de los pasos o acciones de un algoritmo. Por ejemplo, el agoritmo escrito en pseudocó pseudoc ódigo tambié también se puede representar mediante el siguiente ordinograma:
3
El pseudocó pseudocódigo y los diagramas de flujo son las dos herramientas m ás utilizadas para diseñ dise ñar algoritmos en programació programación estructurada. Si bien, entre ambos tipos de representaci ón existen las siguientes diferencias importantes: 1. Los diagramas de flujo empezaron a utilizarse antes que que el pseudocó pseudoc ódigo. 2. En pseudocó pseudoc ódigo se suelen definir tres secciones del algoritmo (cabecera, declaraciones y cuerpo). Sin embargo, en un ordinograma só s ólo se representa el cuerpo. 3. En un ordinograma ordinograma suele suele ser má m ás f ácil ver, a primera vista, cuá cu ál es el orden de las acciones del algoritmo. 4. Los sí s í mbolos mbolos grá gráficos utilizados en un diagrama de flujo han sido estandarizados por el American National Standards Institute (ANSI). Sin embargo, no existe un "pseudoc ódigo está estándar".
4
Figura Nº 1. Sí mbolos mbolos grá gráficos má más utilizados para diseñ dise ñar ordinogramas
Figura Nº 1. Sí mbolos mbolos grá gráficos má más utilizados para diseñ dise ñar ordinogramas
Para realizar un algoritmo se combinará combinar á los elementos bá b ásicos que se pueden utilizar a la hora de diseñ diseñar un algoritmo: • Tipos de datos •
Variables
•
Constantes
•
Operadores
•
Expresiones
•
Instrucciones
Los datos que utilizan los programas se pueden clasificar en base a diferentes criterios. Uno de los más significativos es aquel que dice que todos los datos que utilizan los programas son simples o compuestos.
5
Un dato simple es indivisible (ató (at ómico), es decir, no se puede descomponer. Ejemplo 1: Un añ año es un dato simple. Año...: 2006 Un añ año se expresa con un n úmero entero, el cual no se puede descomponer. Sin embargo, un dato compuesto está est á formado por otros datos. Ejemplo 2: Una fecha es un dato compuesto por tres datos simples (d í a, a, mes, añ a ño). Fecha: Dí a...: a...: 30 Mes...: 11 Año...: 2006 Ejemplo 3: Otro ejemplo de dato simple es una letra. Letra...: t Una letra se representa con un cará car ácter del alfabeto. Pero, cuando varias letras se agrupan, entonces se obtiene un dato compuesto por varios caracteres. Ejemplo 4: Para formar un nombre de persona se utilizan varios caracteres. Nombre...: Ana (dato compuesto por tres caracteres)
Alguno de los tipos de datos: •
Entero
•
Real
•
Lógico
•
Cará Carácter
•
Cadena
De ello ellos, s, tan tan solo solo el tipo tipo cade cadena na es comp compue uest sto. o. Los Los dem dem ás son son los los tipos tipos de dato datoss simp simple less considerados está est ándares ndares.. Esto Esto quier quieree decir decir que la may mayorí or í a de los lengua lenguajes jes de progra programac macii ón permiten trabajar con ellos. Datos de tipo entero Un dato de tipo entero es aquel que puede tomar por valor un n úmero perteneciente al conjunto de los nú números enteros (Z), el cual está est á formado por los nú números naturales, su opuestos (n úmeros negativos) y el cero. Z= { ..., -3, -2, -1, 0, 1, 2, 3, ... }
6
Ejem Ejempl plo o 5: La edad edad de una una pers person onaa y el a ño en que nació naci ó, son son dos dos dato datoss de tipo tipo ente entero ro:: Edad...: 29 Año....: 1976 Z es un conjunto infinito de nú n úmeros enteros, y como el ordenador no puede representarlos todos, un dato de tipo entero só s ólo puede tomar por valor un nú n úmero perteneciente a un subconjunto de Z. Los valores má máximo y mí mí nimo nimo de dicho dicho subconju subconjunto nto var var í an an segú según las caracterí caracter í sticas sticas de cada ordenador y del compilador que se utilice. En pseudocó pseudocódigo, para indicar que un dato es de tipo entero se utiliza la palabra reservada: entero Datos de tipo real Un dato de tipo real es aquel que puede tomar por valor un n úmero perteneciente al conjunto de los números reales (R), el cual está est á formado por los nú n úmeros racionales e irracionales.
Ejemplo 6: El peso de una persona (en kilogramos) y su altura (en cent í metros), metros), son datos que pueden considerarse de tipo real. Peso.....: 75,3 Altura...: 172,7 R es un conjunto infinito de nú n úmeros reales, y como el ordenador no puede representarlos todos, un dato de tipo real só s ólo puede tomar por valor un nú n úmero perteneciente a un subconjunto de R. Los valores de dicho subconjunto var í an an segú según las caracterí caracter í sticas sticas de cada ordenador y del compilador que se utilice. En pseudocódigo, para indicar que un dato es de tipo real se utiliza la palabra reservada: real
Datos de tipo lógico En programació programación, un dato de tipo ló l ógico es aquel que puede tomar por valor s ólo uno de los dos siguientes: { verdadero, falso }
Los valores verdadero y falso son contrapuestos, de manera que, un dato de tipo l ógico siempre está está asociado a que algo se cumpla o no se cumpla. Ejemplo 7: El estado de una barrera de paso de trenes es un dato que puede considerarse de tipo lógico, por ejemplo, asociando verdadero a que est é subida y falso a que est é bajada. Estado...:falso(indica que la barrera est á bajada) En pseudocódigo, para indicar que un dato es de tipo l ógico se utiliza la palabra reservada: logico
Datos de tipo carácter Un dato de tipo cará car ácter es aquel que puede tomar por valor un car ácter perteneciente al conjunto de los caracteres que puede representar el ordenador.
En pseudocó pseudocódigo, el valor de un dato de tipo car ácter se puede representar entre comillas simples (') o dobles ("). Pero, en este curso, se van a utilizar solamente las comillas simples (al igual que se hace en lenguaje C ). 7
Ejemplo : En un examen con preguntas en las que hay que seleccionar la respuesta correcta entre varias opciones dadas (a, b, c, d, e), la respuesta correcta de cada una de las preguntas es un dato de tipo carácter. Respueta correcta a la pregunta 3...:'c'
Datos de tipo cadena Un dato de tipo tipo cadena cadena es aquel aquel que pueden pueden tomar por valor valor una secuenc secuencia ia de caract caractere eres. s. En pseudocó pseudocódigo, el valor de un dato de tipo cadena se puede representar entre comillas simples (') o dobles (") .
Ejemplo : El tí tí tulo tulo de un libro y el nombre de su autor, son datos de tipo cadena. Tí tulo...: Autor....:
"La Odisea" "Homero"
(cadena (cadena
de de
9 6
caracteres) caracteres)
Obsé Obsérvese rvese que, que, en la caden cadenaa "La Odisea", Odisea", el cará car ácter cter espaci espacio o en blanco blanco tambi tambiéén se cuen cuenta ta.. En pseudocódigo, para indicar que un dato es de tipo cadena se utiliza la palabra reservada: cadena
Variables
En programació programación, una variable representa a un espacio de memoria en el cual se puede almacenar un dato. Grá Gr áficamente, se puede representar como:
Constantes En programació programación, una constante representa a un valor (dato almacenado en memoria) que no puede cambiar durante la ejecució ejecuci ón de un programa.
Tipos de Operadores ● Operadores aritmé aritméticos
En las expresiones aritmé aritm éticas se pueden utilizar los siguientes operadores aritmé aritm éticos:
8
Figura Nº 2. Operadores aritmé aritméticos
●
Operadores relacionales Un operador relacional se utiliza para comparar los valores de dos expresiones. Éstas deben ser del mismo tipo (aritmé (aritm éticas, ló lógicas, de cará car ácter o de cadena).
Figura Nº 3. Clasificació Clasificación de los operadores relacionales en pseudoc ódigo.
Para escribir una expresió expresi ón relacional (ló (lógica) se utiliza la sintaxis: ón>
●
Operadores ló lógicos Un operador ló lógico actú actúa, exclusivamente, sobre valores de expresiones l ógicas. Los 9
operadores ló lógicos son:
Figura Nº 4. Clasificació Clasificación de los operadores ló l ógicos en pseudocó pseudoc ódigo.
El operador conjunció conjunción (y) y el operador disyunció disyunci ón (o) siempre actú actúan sobre dos operandos, mientras que, el operador negació negaci ón (no) só sólo actú actúa sobre un operando, o dicho de otra forma, es un operador monario.
●
Operadores de cadenas Sólo existe un operador de cadena:
Figura Nº 5. Clasificació Clasificación de los operadores de cadena en pseudoc ódigo.
El operador concatenació concatenaci ón (+) realiza la concatenació concatenaci ón de dos operandos de tipo cadena, es decir, los encadena. Prioridad de operadores En pseudocó pseudocódigo , la prioridad entre los operadores aritmé aritm éticos, relacionales, ló l ógicos y de cadena es:
10
Figura Nº 6 . Prioridad de los operadores. Instrucción de asignación Una instrucció instrucción de asignació asignaci ón (o simplemente asignació asignaci ón) consiste en asignar el resultado de la evaluació evaluación de una expresió expresi ón a una variable.
En pseudocó pseudocódigo, la sintaxis para escribir una asignaci ón es: ← Instrucción de salida Una instrucció instrucción de salida (o simplemente salida) consiste en llevar hacia el exterior los valores (datos) obtenidos de la evaluació evaluaci ón de una lista de expresiones. Normalmente, los datos son enviados a la salida está est ándar (la pantalla), pero, tambié tambi én existen otros dispositivos de salida (la impresora, el plotter,...). En pseudocó pseudocódigo, la sintaxis de una instrucció instrucci ón de salida es: escribir( , , ..., )
Tambié También se puede escribir como:
11
escribir( ) Instrucción de entrada
Una instrucció instrucción de entrada (o simplemente entrada) consiste en asignar a una o m ás variables, uno o más valores (datos) recibidos desde el exterior. Normalmente, los datos son recogidos desde la entrada está estándar (el teclado), pero, tambié tambi én existen otros dispositivos de entrada (el rató rat ón, el escá escáner,...). En pseudocó pseudocódigo, la sintaxis de una instrucció instrucci ón de entrada es: leer(,no (,nombre_de_la_v mbre_de_la_variable_2>,..,,.., ariable_n> )
Tambié También se puede escribir como: leer( ) Instrucciones de control alternativas ● Instrucció Instrucción alternativa doble ● Instrucció Instrucción alternativa simple ● Instrucció Instrucción alternativa mú múltiple
Instrucción alternativa doble En pseudocó pseudocódigo, para escribir una instrucció instrucci ón alternativa doble se utiliza la sintaxis: si ( ) sino fin_si
Para que se ejecute el , la condici ón tiene que ser verdadera. Por el contrario, si la condició condici ón es falsa, se ejecutar á el ..
Instrucción de decisición simple Una instrucció instrucción alternativa simple (o simplemente alternativa simple) es una variante (m ás sencilla) de una instrucció instrucci ón alternativa doble. En pseudocó pseudoc ódigo, para escribir una alternativa simple se utiliza la sintaxis: si ( ) fin_si
Instrucción de decisición múltiple Una instrucció instrucción alternativa mú múltiple (o simplemente alternativa mú múltiple) permite seleccionar, por
12
medio de una expresió expresi ón, el siguiente bloque de instrucciones a ejecutar de entre varios posibles. En pseudocó pseudocódigo, para escribir una alternativa mú m últiple se utiliza la sintaxis: segun_sea ( ) : > : > . .. : > [ sino : ] fin_segun_sea
Instrucciones de control repetitivas ●
Instrucció Instrucción repetitiva mientras
●
Instrucció Instrucción repetitiva hacer...mientra
●
Instrucció Instrucción repetitiva para
Instrucción repetitiva mientras En pseudocó pseudocódigo, para escribir una instrucció instrucci ón repetitiva mientras, se utiliza la sintaxis: mientras ( ) fin_mientras
Para que se ejecute el , la condici ón tiene que ser verdadera. Por el contrario, si la condició condici ón es falsa, el no se ejecuta.
Instrucción repetitiva hacer...mientras En pseudocó pseudocódigo, para escribir una instrucció instrucci ón repetitiva hacer...mientras se utiliza la sintaxis: hacer mientras ( )
En un bucle hacer...mientras, primero se ejecuta el bloque de instrucciones y, despu és, se evalú eval úa la condició condición. En el caso de que ésta sea verdadera, se vuelve a ejecutar el bloque de instrucciones. Y así así sucesivamente, sucesivamente, hasta que, la condici ón sea falsa. Instrucción repetitiva para En pseudocó pseudocódigo, para escribir una instrucció instrucci ón repetitiva para se utiliza la sintaxis: para ← l> hasta [ incremento |
13
decremento ] hacer fin_para
El cará carácter tuberí tuberí a ( | ) se utiliza para indicar que, o bien se escribe incremento o bien se escribe decremento pero, no ambos. En una instrucció instrucci ón repetitiva para, siempre se utiliza una a la que se debe asignar un . De forma que si, por ejemplo, se escribe: incremento en cada iteració iteraci ón del bucle, al valor de la se le suma el y, cuando la supera el , el bucle finaliza.
14