You are on page 1of 68

FUNDAMENTOS DE

ALGORITMOS

Computabilidad: Término matemático para nombrar a los
estudios sobre teoría de la computación. Consiste en
encontrar la representación adecuada para la descripción de
un problema o un fenómeno.

Conocimiento transmisible: se da si se cierra el ciclo

Descripción

Representación

FUNDAMENTOS DE
ALGORITMOS

Modelo: Especificación, generalmente en términos
de un lenguaje matemático, de los pasos necesarios
para reproducir, aquí y ahora, un subconjunto
determinado de la realidad descrito previamente

FUNDAMENTOS DE
ALGORITMOS
1.

2.

3.

4.
5.

Definición o análisis del
problema: Descripción
específica y comprensible
del problema a resolver
Diseño del algoritmo:
Planteamiento de los
pasos a seguir para
resolver el problema
Transformación del
algoritmo en un programa
independientemente del
lenguaje de programación.
Ejecución y validación del
programa
Mejoras y correcciones al
programa

Tiene un número determinado de pasos .FUNDAMENTOS DE ALGORITMOS  Algoritmo: Conjunto ordenado y finito de pasos u operaciones que permite hallar la solución de un problema.  CARACTERÍSTICAS:  Definido: debe indicar el orden de la realización de cada paso y no debe tener ambigüedad  Preciso: Si se sigue dos veces o más se obtendrá e el mismo resultado cada vez  Finito: Debe terminar en algún momento. Es un método formal y sistemático de representar la descripción de un proceso.

 Proceso : elaboración del procedimiento.FUNDAMENTOS DE ALGORITMOS   Correcto: Sin errores  Debe tener al menos una salida  Su solución debe ser concreta  Debe ser sencillo y legible  Eficiente y efectivo  Se ha de desarrollar en el menor tiempo posible Un algoritmo debe describir tres partes:  Entrada(s) : elementos o condiciones iniciales necesarios para resolver el problema.  Salida(s): Resultados que se desean obtener .

. haciendo una lista de sus nombres y especificando a qué tipo corresponde cada uno. en donde debe expresarse el identificador o nombre correspondiente con la palabra reservada que señale el lenguaje. que llevarán en conjunto a la solución de un problema. Siempre que se haga debe ponerse un encabezado de programa. Representa una secuencia lógica de actividades. generalmente ésta suele ser program que en algoritmia significa algoritmo  Declaración de Variables: En este punto se describen todas las variables que son usadas en el algoritmo. Los elementos que debe llevar un algoritmo son  Cabecera del algoritmo: Existen pasos o procedimientos que se realizan para comenzar un programa.FUNDAMENTOS DE ALGORITMOS  Pseudocódigo: Representación descriptiva de las operaciones de un algoritmo.

es decir.FUNDAMENTOS DE ALGORITMOS   Declaración de Constantes: En este punto se declararán todas las constantes de carácter estándar. que tengan nombre y un valor ya conocido o valores que ya no pueden variar en el transcurso del algoritmo  Cuerpo del algoritmo: Una vez añadidas la cabecera y la declaración de variables y constantes se procede a realizar los pasos del algoritmo A continuación se muestra un ejemplo: .

A: real Mostrar “Dame el radio” Leer r A <.FUNDAMENTOS DE ALGORITMOS Algoritmo Área_Círculo  {Cálculo del área de un circulo pidiendo el radio al usuario} var r.*r^2 Mostrar “El área es:”. A Fin  Nombre del algoritmo  {Comentario con descripción del problema}  Declaración de variables y constantes  Cuerpo del algoritmo cte: :real Inicio Cabecera .

FUNDAMENTOS DE ALGORITMOS  Diagrama de flujo: Es la representación gráfica de las operaciones de un algoritmo. Los símbolos más comúnes son: . Contiene símbolos gráficos que se encuentran estandarizados.

Diagramas de flujo más comúnes .

Diagramas de flujo más comúnes (cont.) .

Inicio var r. A: real cte: :real A A <.*r^2 “Dame el radio:” “El área es ”. A. “u^2” r Fin A .

en un programa. Entonces. todos diferentes.FUNDAMENTOS DE ALGORITMOS  Instrucciones que se le dan a la Computadora  Un algoritmo se compone de muchos pasos. sentencias o proposiciones (lenguaje de alto nivel). los que son interpretados como instrucciones (lenguaje de bajo nivel). . la secuencia de instrucciones especifica las operaciones que la computadora debe realizar.

división. impresora. etc. resta. lógicas (operaciones and. or. un número determinado o indeterminado de veces. etc. unidad de disco. Instrucciones Aritmético-Lógicas: Tienen la función de ejecutar operaciones aritméticas (suma.FUNDAMENTOS DE ALGORITMOS  Las instrucciones básicas y comunes pueden dividirse en cuatro grupos:     Instrucciones de Entrada /Salida: Transferencia de datos e información entre dispositivos periféricos (teclado. Instrucciones Repetitivas: Permiten la repetición de secuencias de instrucciones. not. multiplicación. . potenciación).). Instrucciones Selectivas: Estas permiten la elección de una tarea entre varias alternativas en función de los resultados de diferentes expresiones condicionales.) y memoria central.

a éstos los llamamos variables. quienes representan datos de estos tipos.FUNDAMENTOS DE ALGORITMOS     CONSTANTES Y VARIABLES Las constantes son datos cuyos valores no cambian. Entonces una variable se conoce como un objeto. caracteres y boolean o lógicas. En la mayoría de los lenguajes de programación se permiten diferentes tipos de constantes: enteras. reales. . A las variables y a las constantes se les conoce o identifica por los atributos siguientes: nombre o identificador que lo asigna y tipo que describe el uso de la variable. o partida de datos cuyo valor puede cambiar durante la ejecución del algoritmo o programa. pero existen datos cuyos valores sí varían durante la ejecución del programa.

. ‘ “ / \ o espacios en blanco y tabuladores   Palabras reservadas: Existe un conjunto palabras que se utilizan tanto en pseudocódigo como en los lenguajes de programación no pueden ser utilizadas como nombres de identificadores ni de funciones.% # @ . excepto ñ o Ñ.FUNDAMENTOS DE ALGORITMOS  Identificadores: Deben empezar con letra. . o guión bajo y estar seguidos de cero o más letras. números o guiones bajos  No se permiten símbolos como  $ ¡ ! ¿ ? ° | & .

siendo reemplazado por el nuevo valor. Las acciones de asignación se clasifican según sea el tipo de expresiones en: Asignación aritméticas. si es que está en un lenguaje de programación La operación de asignación es representada por un símbolo u operador: La acción de asignar puede ser destructiva ya que puede perderse el valor que tuviera la variable antes.FUNDAMENTOS DE ALGORITMOS     OPERACION DE ASIGNACION Se le otorgan valores a una variable. Asignación lógica y Asignación de caracteres . Esta operación de asignación se conoce como instrucción o sentencia de asignación.

variables. paréntesis y nombres de funciones especiales. símbolos de operación. debido a que éstos están implicados en la ejecución de las operaciones indicadas.  Según el tipo de objetos que manipulan.FUNDAMENTOS DE ALGORITMOS EXPRESIONES  Son la combinación de constantes. caracter -> resultado tipo caracter. lógicas -> resultado tipo lógico. relacionales -> resultado tipo lógico. pueden clasificarse en:      Aritméticas -> resultado tipo numérico. Estas constan de operandos y operadores. idea que puede ser utilizada en notaciones de matemática tradicional. Los valores de las variables nos permitirán determinar el valor de las expresiones. .

mod o % (residuo de división entera) .(operador monario) ^ (exponenciación).FUNDAMENTOS DE ALGORITMOS          Expresiones Aritméticas Estas expresiones son análogas a las fórmulas matemáticas. Las variables y constantes son numéricas (real o entera) y las operaciones son las aritméticas Operadores aritméticos Precedencia . (radicación) *. div o / (cociente de división entera) . +. / (división real).

FUNDAMENTOS DE ALGORITMOS         Expresiones lógicas: Su valor es siempre verdadero o falso. <= = o == (igualdad) <> o != (desigualdad) . < >=. variables lógicas y otras expresiones lógicas. utilizando los operadores lógicos y los operadores relacionales Operadores relacionales Precedencia >. Se forman combinando constantes lógicas .

FUNDAMENTOS DE ALGORITMOS  Operadores lógicos  Precedencia A NOT  ! o ~ o not (negado) F V  and o && (conjunción) V F  or o || (disyunción)  Nota: En C un valor falso se toma como 0 y un valor verdadero se toma como cualquier valor diferente de cero A B AND OR F F F F F V F V V F F V V V V V .

FUNDAMENTOS DE ALGORITMOS     ENTRADA Y SALIDA DE INFORMACION El ingreso de datos es importante para que la computadora realice los cálculos. etc). A la entrada se le conoce como operación de Lectura (read). La operación de lectura se realiza a través de los dispositivos de entrada que son (teclado. La operación de salida se realiza por medio de dispositivos como (monitor. . a esta operación se le conoce como escritura (write). impresora. CD-Rom. unidades de disco. luego. esta operación es la entrada. estos datos se convertirán en resultados y serán la salida.). etc.

. exige que su diseño sea fácil de comprender y su flujo lógico un camino fácil de seguir  La descomposición de programas en módulos más simples de programar se dará a través de la programación modular. y la programación estructurada permitirá la escritura de programas fáciles de leer y modificar.INTRODUCCION A LA PROGRAMACION ESTRUCTURADA  El entendimiento de los algoritmos y luego de los programas.

 . transfiriendo el control a submódulos (los que son denominados subprogramas). se procederá a una nueva subdivisión en otros módulos más pequeños aún. para que puedan realizar sus funciones. codificándose independientemente de otros módulos. Sin embargo. En este tipo de programación el programa es dividido en módulos. cada submódulo devolverá el control al módulo principal una vez completada su tarea. el cual supervisa todo lo que sucede. codificados y puestos a punto por separado. cada uno de las cuales realiza una tarea específica.  Los programas contienen un módulo denominado módulo principal. Cada uno de éstos son analizados.PROGRAMACION MODULAR Este es uno de los métodos para el diseño más flexible y de mayor performance para la productividad de un programa. Si las tareas asignadas a cada submódulo son demasiado complejas.

 . excepto el módulo al que llama y sus submódulos correspondientes. Puede ser que un módulo derive el control a otro mediante un proceso denominado bifurcación. manipulación de datos. Estas pueden ser entrada.PROGRAMACION MODULAR Este procedimiento se realiza hasta que cada uno de los módulos realicen tareas específicas. los resultados producidos por un módulo pueden ser utilizados por otro módulo cuando se transfiera a ellos el control. salida.  Los módulos son independientes. Sin embargo. control de otros módulos o alguna combinación de éstos. de modo que ningún módulo puede tener acceso directo a cualquier otro módulo. pero se debe tomar en cuenta que esta derivación deberá ser devuelta a su módulo original.

PROGRAMACION MODULAR .

se reduce la complejidad de los problemas y se minimiza los errores. Gracias a la programación estructurada. Aquí se hace un número limitado de estructuras de control. también lo es su verificación. de depuración y mantenimiento de los programas. su lectura y mantenimiento. es más fácil la escritura de los programas.PROGRAMACION ESTRUCTURADA   Cuando hablamos de Programación Estructurada. Gracias a éstas. nos referimos a un conjunto de técnicas que con el transcurrir del tiempo han evolucionado. la productividad de un programa se ve incrementada de forma considerable y se reduce el tiempo de escritura. Esta programación es un conjunto de técnicas que incorpora:  diseño descendente (top-down)  recursos abstractos  estructuras básicas .

. las que son capaces de ejecutar o constituyen instrucciones de computadora disponible.PROGRAMACION ESTRUCTURADA   Los recursos abstractos son utilizados como un apoyo en la programación estructurada. en vez de los recursos concretos de los que se dispone (lenguaje de programación determinado). Para separar un programa en términos de recursos abstractos debemos descomponer acciones complejas en acciones más simples.

de tal forma que se interrelacionen mediante entradas y salidas de información.PROGRAMACION ESTRUCTURADA Diseño descendente (Top-Down)  Este es un proceso en el cual el problema se descompone en una serie de niveles o pasos sucesivos (stepwise). Considerando los problemas desde dos puntos de vista: ¿que hace? y ¿cómo lo hace?  . las que son sucesivas. Esta metodología consiste en crear una relación entre las etapas de estructuración.

PROGRAMACION ESTRUCTURADA .

FUNDAMENTOS DE ALGORITMOS Estructuras básicas de control  En un programa estructurado. el flujo lógico se gobierna por las estructuras de control básicas:  Secuenciales  Selectivas o de selección  Repetitivas  Teorema de la Programación Estructurada:  Un programa propio puede ser escrito utilizando sólo los tres tipos de estructuras de control antes mencionadas  .

 Las tareas se dan de tal forma que la salida de una es la entrada de la que sigue y así en lo sucesivo hasta cumplir con todo el proceso.  .PROGRAMACION ESTRUCTURADA ESTRUCTURA SECUENCIAL  Es la estructura en donde una acción (instrucción) sigue a otra de manera secuencial.

 El resultado de la condición se evalúa como falso o verdadero y se obtiene al comparar dos expresiones mediante operadores relacionales.PROGRAMACION ESTRUCTURADA ESTRUCTURA DE DECISIÓN  Decisión: Elegir una alternativa o camino en el flujo del algoritmo cuando se cumpla o no una determinada condición. De ser necesario realizar más de una comparación al mismo tiempo se asocian con operadores lógicos  .

Guía de referencia rápida de lenguaje C  Estructuras de control .

) En algunas ocasiones para realizar las comparaciones también se hace uso de una variable booleana o bandera (flag).PROGRAMACION ESTRUCTURADA Estructuras de control Decisiones (cont. Una bandera es una variable que sólo puede tener dos valores: falso o verdadero .

PROGRAMACION ESTRUCTURADA    Estructuras de control Ciclo. lazo o bucle: Repetir un conjunto de instrucciones varias veces con base en que se cumpla o no una determinada condición. loop. A cada ejecución del conjunto de instrucciones en un ciclo se le llama iteración .

este ciclo se ejecuta por lo menos una vez  Desde hasta (for): Se utiliza cuando se conoce el número de veces que se va a repetir un conjunto de instrucciones. Requiere de un valor inicial. no hace nada y sigue con el flujo normal del algoritmo  Hacer mientras (do while): Realiza un conjunto de instrucciones y continua mientras se cumpla una condición. un valor final y un contador . Primero evalúa la condición y luego ejecuta el conjunto de instrucciones. De no cumplirse la condición desde el inicio.PROGRAMACION ESTRUCTURADA Tipos de ciclos:  Mientras (while): Se lleva a cabo mientras se cumpla una condición. A diferencia del anterior.

PROGRAMACION ESTRUCTURADA  Contador: variable que almacena el número de veces que se ha repetido un conjunto de instrucciones en un ciclo. indica el número de veces que se ha ejecutado el ciclo  En un ciclo. en otras palabras. también hay otro tipo de que se hacer usa frecuentemente  Acumulador: aquella variable que almacena el resultado de una operación anterior y se utiliza para obtener el siguiente resultado .

PROGRAMACION ESTRUCTURADA Decisiones anidadas Cuando se tiene una serie de estructuras de control de la forma .

PROGRAMACION ESTRUCTURADA  si condición1 entonces  si condición2 entonces … si condiciónN entonces sino fin_si  sino  fin_si  sino  fin_si .

generalmente de tipo entero o caracter. se puede simplificar al poner una estructura del tipo . se puede hacer uso de la decisión anidada para evaluar los distintos casos. caso de/case)  Cuando una variable puede tomar varios valores. sin embargo.PROGRAMACION ESTRUCTURADA  Decisión múltiple o alternativa selectiva múltiple (según_sea.

PROGRAMACION ESTRUCTURADA .

p. var arrentero(1.7):entero arrentero(4)  18 0 1 2 3 4 5 6 10 0 7 14 4 2 -10 .. ej..PROGRAMACION ESTRUCTURADA    Arreglos Un arreglo es un conjunto ordenado de variables del mismo tipo que se encuentran reunidas bajo un mismo nombre La forma de declarar un arreglo en términos de algoritmos es      var arrNombre(7): arreglo de tipo var arrNombre(1.7):tipo La forma de acceder a cada elemento del arreglo es por medio de un índice.

Funciones comunes a todos los lenguajes de programación Matemática Algorítmica Matemática Algorítmica x abs(x) x ex ln  x log10  x sen x cos  x sqrt(x) senh x cosh  x sinh(x) tanh  x cosh(x) exp(x) senh1  x tanh(x) log(x) cosh 1  x asinh(x) log10(x) tanh 1  x acosh(s) sin(x) tan  x cos(x) sen1  x tan(x) cos1  x asin(x) tan 1  x acos(s) atanh(x) .

Cadenas y sus operaciones  Representación  Dependiendo del lenguaje las cadenas se pueden representar entre comillas simples o dobles  Por ejemplo: ‘cadena con comillas simples’ “cadena con comillas dobles” .

depende del lenguaje de programación la forma en que se declaren y se asignen  En lenguaje algorítmico simplemente podemos declararlas así: var nombre_cadena: cadena var nombre_cadena: string . las cadenas son un tipo de variable.Cadenas y sus operaciones  Declaración y asignación de cadenas  En general. sin embargo.

Cadenas y sus operaciones  Al declararlas de esta forma podemos hacer uso de varias funciones y operaciones que permiten manipularlas y que son comunes en los lenguajes de programación.  La forma en como se asigna una cadena en lenguaje algorítmico puede ser de la siguiente manera: var micadena: cadena micadena <.“hola qué tal” .

length$ micadena {len=12} .Cadenas y sus operaciones  En lenguaje algorítmico las funciones que manipulan cadenas llevan un símbolo de “$” al final de su nombre.  Longitud de una cadena: Devuelve el número de caracteres que contiene la cadena var len:entero len <.

“hola qué tal” print$ micadena print$ “ahora introduce una nueva cadena” read$ micadena print$ “La nueva cadena es: “.Cadenas y sus operaciones  Leer y mostrar cadenas: Para únicamente leer o mostrar cadenas se hace uso de las funciones read$ y print$. respectivamente. micadena . Por ejemplo: var micadena: cadena micadena <.

cadena2.Cadenas y sus operaciones  Concatenación de cadenas  La concatenación es una operación especial que consiste en la yuxtaposición de 2 o más cadenas.cadena1 + cadena2 print$ cadena3 {Muestra en pantalla hola qué tal} .“hola qué” cadena2 <. En lenguaje algorítmico la podemos representar como: var cadena1.“ tal” cadena3 <. cadena3: cadena cadena1 <.

Cadenas y sus operaciones cadena3 <.cadena2 + cadena1 print$ cadena3 {Muestra enconcatenación pantalla talhola que}  Observe que la no es conmutativa .

” . si cadena2 = cadena1 print$ “Las cadenas son iguales” sino print$ “Las cadenas no son iguales.Cadenas y sus operaciones  Comparación de cadenas y ordenamiento  Se pueden comparar cadenas lexicográficamente y determinar si son iguales o no lo son.

“va después de ” print$ cadena2 {podría usarse < pero habría que cambiar el orden de las sentencias} . “va después de ” print$ cadena1 sino print$ cadena1.Cadenas y sus operaciones  o si una de ellas se encuentra en orden alfabético primero que otra si cadena2 > cadena1 print$ cadena2.

Cadenas y sus operaciones

Obtención de una subcadena

Otra de las operaciones más comunes con cadenas es la
obtención de una subcadena a partir de un caracter, por
ejemplo:

var cadena1, cadena2: cadena
cadena1 <- “hola qué tal”
cadena2 <- substr$ cadena1, ‘q’
print$ cadena2
{Muestra en pantalla la subcadena qué
tal}

Cadenas y sus operaciones

Del ejemplo anterior se obtuvo una
subcadena que empieza con el caracter
indicado, sin embargo, si no existiera
dicho caracter la función podría devolver
el valor NULL (nil, null)

NULL es un valor especial que, en este
caso, indica que la cadena está vacía o
que no existe la cadena solicitada y se
cadena2
<- como
substr$
debería
de tratar
error cadena1, ‘z’
{Con el valor anterior de cadena 1,
cadena2 vale NULL porque no existe
z}

Cadenas y sus operaciones

Pueden existir también cadenas vacías y su longitud es
de 0.

Asignar una cadena vacía a una variable de tipo cadena
podría servir para limpiar el contenido de esa variable.

No todos los lenguajes permiten cadenas vacías

Cadenas y sus operaciones   Es posible obtener una subcadena a partir de que se le indique las posiciones inicial y final o solamente la posición inicial cadena2 <{cadena2 = cadena2 <{cadena2 = substr$ cadena1.3 “la qué tal”} Podría regresar NULL si las posiciones de la cadena exceden la longitud de la misma .3.6 “la q”} substr$ cadena1.

instr$ cadena1.Cadenas y sus operaciones  Búsqueda de subcadenas  Una operación frecuente es tratar de localizar si una cadena forma parte de una cadena más grande o buscar la posición en que aparece determinado caracter o secuencia de caracteres de var cadena1: cadena texto var posicion:entero cadena1 <. “la” print posicion {Muestra en pantalla 2} .“hola qué tal” posicion <.

Cadenas y sus operaciones  La función instr$ devuelve el índice de la posición donde se encuentra el primer elemento de la subcadena deseada  Si la subcadena no existe en la cadena devuelve 0. .

“hola qué tal” cadena2 <. var cadena1.insert$ cadena1. Si la posición excede a la longitud de la cadena devuelve NULL . cadena2.Cadenas y sus operaciones  Inserción de una cadena dentro de otra.“ABC” cadena3 <. cadena2. 4 print$ cadena3 {Muestra en pantalla la cadena Se inserta una cadena holaABC qué dentro tal} de otra en la posición indicada. cadena3: cadena cadena1 <.

3.remove$ cadena1. l = 4} . cadena2. var cadena1.Cadenas y sus operaciones  Borrar una subcadena de una cadena. 4 print$ cadena2 {Muestra en pantalla la cadena houé tal} {p = 3. Para eliminar una subcadena que comienza en la posición p y tiene una longitud l. cadena3: cadena cadena1 <.“hola qué tal” cadena2 <.

“ABC” print$ cadena3 {Muestra en pantalla la cadena hABC qué tal} .replace$ cadena1.Cadenas y sus operaciones  Sustitución de una subcadena por otra. cadena2. cadena3: cadena cadena1 <. Para reemplazar una subcadena de una cadena por otra subcadena se tiene: var cadena1.“hola qué tal” cadena2 <.“ola” cadena3 <. cadena2.

Si la posición es mayor que la longitud de la cadena se devolvería NULL .“hola qué tal” car <. 4 print car {Muestra en pantalla el caracter ‘a’} La función chrstr$ obtiene un caracter de la posición indicada.chrstr$ cadena1.Cadenas y sus operaciones   Obtención de un caracter de una cadena var cadena1: cadena var car: caracter cadena1 <.

strchr$ cadena1. car print$ cadena1 {Muestra en pantalla la cadena holw qué tal} .Cadenas y sus operaciones  Sustitución de un caracter en una cadena var cadena1: cadena var car: caracter cadena1 <. 4.“hola qué tal” read car {Suponiendo que se leyó ‘w’} cadena1 <.

.Cadenas y sus operaciones  La función strchr$ reemplaza el caracter de la cadena en la posición indicada por un nuevo caracter  Si se excede de la longitud de la cadena devolvería el valor NULL.

4.istrchr$ cadena1. car print$ cadena1 {Muestra en pantalla la cadena holwa qué tal} . var cadena1: cadena var car: caracter cadena1 <.“hola qué tal” read car {Suponiendo que se leyó ‘w’} cadena1 <. Para añadir un caracter a una cadena en una posición dada tenemos.Cadenas y sus operaciones  Inserción de un caracter en una cadena.

“1250” num <.Cadenas y sus operaciones  Conversión de cadenas a números var cadena1: cadena var num: entero cadena1 <.strtonum$ cadena1 print num {Muestra en pantalla el número convertido} .

1250 cadena1 <.Cadenas y sus operaciones  Conversión de números a cadenas var cadena1: cadena var num: entero num <.numtostr$ num print$ cadena1 {Muestra en pantalla la cadena convertida} .