Anda di halaman 1dari 10

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

TEMA 2: ALGORITMOS Y PROGRAMAS


TEMA 2: ALGORITMOS Y PROGRAMAS ......................................................................................................................1 INTRODUCCIN .....................................................................................................................................................................1 Anlisis del problema .....................................................................................................................................................1 Bsqueda del algoritmo ..................................................................................................................................................1 Programacin del algoritmo...........................................................................................................................................3 ESTRUCTURAS DE CONTROL .................................................................................................................................................4 Estructuras secuenciales.................................................................................................................................................4 Estructuras selectivas .....................................................................................................................................................4 Estructuras repetitivas (o bucles) ...................................................................................................................................8 PROGRAMACIN MODULAR ..................................................................................................................................................9 Ambito de las variables.................................................................................................................................................10 Paso de parmetros ......................................................................................................................................................10 PROGRAMACIN ESTRUCTURADA .......................................................................................................................................10 RECURRENCIAS (O RECURSIVIDAD) ....................................................................................................................................10

Introduccin

Un algoritmo es una sucesin finita de pasos no ambiguos, que se ejecutan en un tiempo finito, que le dicen al ordenador lo que hay que hacer en cada momento para llegar a la resolucin del problema. Resaltar que: ... es una cantidad finita de pasos que se llevan a cabo en un tiempo finito (los bucles infinitos no son algoritmos.) ... es una sucesin de pasos no ambiguos, es decir cada paso especifica una tarea determinada a ser realizada en cada momento por el ordenador. Los pasos a seguir en la resolucin de cualquier problema mediante un ordenador son los siguiente: 1. Anlisis del problema. 2. Bsqueda del algoritmo. 3. Programacin de algoritmo. 4. Traduccin y comprobacin del programa. Anlisis del problema a.b.c.Acotar y especificar el problema con total precisin (obtener el mximo de informacin acerca de lo que debemos resolver y las soluciones a determinar.) Definir los datos iniciales o de partida (que datos necesitamos proporcionar al problema para resolverlo.) Definir que datos o resultados debe proporcionar el algoritmo.

Bsqueda del algoritmo Bsqueda de una sucesin finita de pasos no ambiguos que nos lleven a la resolucin del problema: a.- Seleccin del mejor algoritmo. b.- Mejora del algoritmo.

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

La seleccin y la mejora se hacen, habitualmente, en funcin del tiempo de ejecucin (aproximadamente la cantidad de instrucciones que se tienen que ejecutar para resolver correctamente el problema.) Ejemplo 1: Bsqueda de nmeros primos entre 2 y un cierto valor MAX 1.- Anlisis del problema. Qu es un nmero primo? Qu entradas tenemos? Qu queremos obtener como resultado? 2.- Bsqueda del algoritmo. Mtodo 1
.1. .2. .3. .4. .5. .6. .7. X=2 I=2 Hacer ( X/I ) Si I es menor que X y la divisin es entera entonces X no es primo y pasar a 7 Si I es igual que X entonces X es primo y pasar a 7 Incrementar I y pasar a .3. Si X es ms pequeo que MAX entonces incrementar X y pasar a .2.

Mejora del algoritmo: parar la divisin si la I es mayor que X/2 Mtodo 2: Criba de Eratstenes
.1. .2. .3. .4. .5. Poner todos los nmeros entre 2 y MAX uno detrs de otro. Si hay nmeros sin tachar, el primero de ellos es primo Tachar de la lista todos los mltiplos del primer nmero Borrar el primer nmero Borrar los tachados y pasar a .2.

Ejemplo 2: Suma de una sucesin aritmtica 1.- Anlisis del problema. Descripcin del problema: a1 + a2 + a3 + ... + an donde a2 = a1 + d y en general an = a1 + (n-1)*d Entrada: Primer trmino (a1) Distancia (d) Nmero de trminos (n) Salida: Suma de todos los trminos

a
i =1

= Sn

2.- Bsqueda del algoritmo.


Mtodo 1 Calcular los trminos e ir sumndolos poco a poco:
.1. .2. .3. .4. .5. .6. .7. .8. .9. Sn 0 i1 X a1 Si i es ms grande que n saltar a .9. Sn Sn + X XX+d ii+1 Volver a .4. Mostrar el resultado (Sn)

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas


Mtodo 2: Aplicacin de la frmula
.1. .2.

12755 - Tcnicas Informticas (Lic. Fsicas)

S n = n a1 +

n (n 1) d 2

Mostrar el resultado (Sn)

Para la obtencin de los algoritmos utilizaremos normalmente dos mtodos: Diseo descendente o modular: El problema se divide en subprogramas de ms fcil resolucin.

Representacin grfica de funciones. La representacin como un solo problema es difcil de resolver, sin embargo podemos calcular los cortes con los ejes, mximos, mnimos y puntos de inflexin, asntotas,... Una vez obtenidos los resultados podemos proceder a juntarlos y obtener la representacin grfica. Diseo por refinamiento por pasos: Se va buscando la solucin y se va especificando hasta llegar a una solucin concreta que s sabemos resolver. x2 x4 + + ... 2! 4!

Resolucin de la serie de Taylor: cos( x) = 1 + Solucin parcial xn Solucin parcial n!

Generalmente la utilizacin de los dos mtodos es complementaria. Programacin del algoritmo Una vez determinado el algoritmo hay que escribirlo en un lenguaje de alto nivel. Por eso lo mejor es escribir el algoritmo en un lenguaje restringido que sea fcil de traducir a un lenguaje de alto nivel. Existen dos formas bsicas de escribir los algoritmos para conseguir esto: El pseudocdigo y los organigramas (o diagramas de flujo.) El pseudocdigo es una manera de escribir algoritmos de forma poco estricta (con una sintaxis relajada) o estructuras de datos poco detalladas, pero intentando acercar las ideas del algoritmos a estructuras y sintaxis parecidas a las de los lenguajes de alto nivel en los que vamos a programar el algoritmo. Los organigramas o diagramas de flujo son dibujos que representan de manera grfica tanto las tareas como la sucesin de tareas del algoritmo. Las tareas se representan mediante rectngulos, rombos y romboides y el flujo de tareas mediante flechas que enlazan las diferentes tareas. Las instrucciones se representan en rectngulos: Las entradas y salidas en romboides:

Las condiciones en rombos:

El inicio, el final y los puntos de reunin de flujo en crculos:

Ejercicios: 1. Calcular la tabla del dos. 2. Calcular el cuadrado de los 10 primeros nmeros. 3. Calcular el factorial de un nmero.
Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia 3

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

Estructuras de control
Llamaremos estructuras de control a las acciones que tienen como objeto marcar el orden de ejecucin de las instrucciones y que van a servirnos para escribir concisamente y sin ambigedades los algoritmos. Todas las estructuras de control que estudiaremos estarn compuestas de unos elementos bsicos (lxico) y una estructura (sintaxis.) Estructuras secuenciales En una estructura secuencial una instruccin sigue a otra en una secuencia lineal. Pseudocdigo
Inicio tarea1 tarea2 ... tarean Fin

Organigrama

Ejemplo: Producto escalar de dos vectores bidimensionales. (ax, ay) (bx, by) = ax*bx + ay*by Pseudocdigo
Inicio Leer (ax) Leer (ay) Leer (bx) Leer (by) prod_esc ax*bx + ay*by Escribir (prod_esc) Fin

Organigrama

Estructuras selectivas Son las que toman una cierta direccin dentro del flujo del programa en funcin de una condicin o el valor de una variable.

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas


Alternativas simples

12755 - Tcnicas Informticas (Lic. Fsicas)

Se realiza una accin o conjunto de acciones si se cumple una determinada condicin. Pseudocdigo
... Si ( condicin ) entonces acciones Fin_si ...

Organigrama

Ejemplo: Ordenar dos nmeros (Leidos dos nmeros escribir por pantalla primero el menor y luego el mayor) Pseudocdigo
Inicio Leer (a) Leer (b) Si (a > b) Entonces aux a ab b aux Fin_si Escribir (a) Escribir (b) Fin

Organigrama

Alternativas dobles

Si una condicin se cumple se realizan unas acciones, si no se cumple la condicin se realizan otras. Pseudocdigo
... Si ( condicin ) entonces acciones1 sino acciones2 Fin_si ...

Organigrama

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

Ejemplo sencillo: Dado un nmero, decir si es positivo o negativo. Pseudocdigo


Algoritmo Positivo_Negativo Variables x: Entero Inicio Leer (x) Si (x<0) entonces Escribir (Numero negativo) sino Escribir (Numero positivo) Fin_si Fin

Organigrama

Ejemplo: Clculo de las soluciones de una ecuacin de segundo grado.


x= b b2 4 a c 2a

Pseudocdigo
Algoritmo ecuacin_segundo_grado Variables a, b, c: entero x1, x2: real discriminante: entero Inicio Leer (a, b, c) Si1 (a = 0) entonces Si2 (b = 0) entonces Si3 (c = 0) entonces Escribir (La solucin es cualquier valor real) Sino3 Escribir (No existe ningn valor que cumpla la ecuacin) Fin_si3 Sino2 x1 -c / b Escribir (x1) Fin_si2 Sino1 discriminante b * b - 4 * a * c Si4 (discriminate < 0) entonces Escribir (Soluciones complejas) Sino4 x1 (-b + sqrt (discriminante) ) / ( 2 * a) x2 (-b + sqrt (discriminante) ) / ( 2 * a) Escribir (x1, x2) Fin_si4 Fin_si1 Fin

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas Organigrama

12755 - Tcnicas Informticas (Lic. Fsicas)

Alternativas mltiples

Dependiendo del valor de una variable se realizan unas acciones u otras. Pseudocdigo
... Segn_sea (variable) hacer Caso valor1: acciones1 Caso valor2: acciones2 Caso valorn: accionesn Default: accionesx Fin_segn_sea

Organigrama

... Este tipo de estructuras se utiliza especialmente cuando se programan mens de seleccin. Ejemplo: Calculadora infantil. Realizar un programa que pida dos nmeros y una operacin (suma, resta, multiplicacin o divisin) y nos de el resultado de operar los nmeros con esa operacin.

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

Pseudocdigo
Algoritmo Calculadora Variables a, b, op: Entero res: Real Inicio Escribir ( Dame nmeros) Leer (a, b) Escribir (Dame operacin:) Escribir ((1-Suma/2-Resta) Escribir((3-Multiplic./4-Divisin) Leer (op) Segn_sea (op) hacer Caso 1: res a + b Escribir (res) Caso 2: res a - b Escribir (res) Caso 3: res a * b Escribir (res) Caso 4: res a / b Escribir (res) Default: Escribir (Operacin no vlida) Fin_segn_sea Fin

Organigrama

Estructuras repetitivas (o bucles) Un bucle es un conjunto de instrucciones del programa que se ejecutan repetidamente o bien un nmero determinado de veces, o bien mientras se cumpla una determinada condicin (hay que tener cuidado con los bucles infinitos) Todo bucle contiene los siguientes elementos (aunque no necesariamente en ese orden):

Iniciacin de las variables referentes al bucle. Decisin (seguimos con el bucle o terminamos.) Cuerpo del bucle.
Bucle DesdeHasta

Existen tres tipos de bucles en programacin estructurada: Este bucle se utiliza cuando sabemos el nmero de veces que queremos que se realice una cierta tarea. Pseudocdigo
... Desde variable v_ini hasta v_fin hacer acciones Fin_desde

Organigrama

...

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas


Bucle HacerMientras

12755 - Tcnicas Informticas (Lic. Fsicas)

Este bucle lo utilizaremos si sabemos la condicin que hace que se repita la tarea varias veces. Las acciones se realizan al menos una vez, antes de realizar la comprobacin de la condicin Pseudocdigo
... Hacer acciones Mientras (condicin)

Organigrama

...

Bucle MientrasHacer

Es muy parecido al anterior, pero en este caso la comprobacin de la condicin se realiza antes de ejecutar la tarea, de manera que la tarea puede no llegar a hacerse. Pseudocdigo
... Mientras (condicin) Hacer acciones Fin_Mientras

Organigrama

...
Bucles anidados e independientes.

Existen dos maneras bsicas de utilizar varios bucles: De forma anidada y de forma independiente. De forma independiente nos limitaremos a ir haciendo los bucles de manera que al finalizar uno empezar el siguiente. De esta forma las tareas entre bucles son independientes (clculo del nmero combinatorio) Otra forma es mediante la utilizacin de bucles anidados. Los bucles anidados son bucles que estn dentro de otros bucles de manera que la ejecucin de los bucles internos depende de la ejecucin de los bucles externos (algoritmo que muestre las tablas de multiplicar del 1 al 10.)

Programacin modular
Cuando realizamos ciertos programas (por ejemplo el programa de nmeros combinatorios) podemos darnos cuenta que existen ciertas partes del programa que se repiten de forma muy similar, de manera que cambiando pocos elementos quedaran realmente iguales. Estas partes del programa que se repiten podramos hacerlas depender de unos valores para que sirviesen para cualquier propsito. A estas partes de los programas es a lo que llamaremos mdulos o subprogramas. Con esta separacin podemos reutilizar ciertas partes del cdigo de forma ms sencilla, y podemos escribir ms fcilmente los programas utilizando el diseo descendente para la resolucin de algoritmos. Las caractersticas bsicas que deben cumplir los subprogramas o mdulos son: a.- Realizacin de una tarea especfica. b.- Parametrizacin para caracterizar la actuacin de los mdulos (parmetros)

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

Tema 2: Algoritmos y programas

12755 - Tcnicas Informticas (Lic. Fsicas)

c.- Existen bsicamente dos tipos distintos de subprogramas: las funciones y los procedimientos (las funciones devuelven uno o ms valores, mientras que los procedimientos devuelven ninguno o ms.) Ambito de las variables
Variables Locales

Son propias de cada mdulo y slo existen mientras dura la ejecucin del mdulo. Cuando la ejecucin del mdulo desaparece, las variables locales desaparecen.
Variables Globales

Son variables que existen durante toda la ejecucin del algoritmo, de manera que se puede acceder a ellas en cualquier momento de la ejecucin del algoritmo.

Paso de parmetros
Por valor

Slo se tiene en cuenta el valor del parmetro pasado al mdulo, de manera que durante la ejecucin del mdulo se reserva un espacio para ese parmetro y se copia el valor pasado en ese nuevo espacio. Cuando acaba la ejecucin del mdulo, el espacio para el parmetro desaparece.
Por referencia

Lo que pasamos a la funcin es una referencia al parmetro que se pasa, de manera que no existe un espacio reservado para ese parmetro durante la ejecucin del mdulo. Cualquier modificacin que realicemos del parmetro quedar reflejado en el punto desde el que se hizo la llamada al mdulo.

Programacin estructurada
Diremos que estamos realizando una programacin estructurada si empleamos para el diseo de los algoritmos el diseo descendente y/o modular. descomponemos, en funcin del diseo descendente, el programa en mdulos independientes (prohibida la utilizacin de variables globales.) en cualquier caso, slo utilizamos en la escritura de los algoritmos (y los programas) los tres tipos de estructuras de control vistas.

Recurrencias (o recursividad)
Es la propiedad de llamar a una funcin desde s misma o desde otra que ha sido llamada por sta. En matemticas la recursividad es una forma sencilla y habitual de definir una funcin a partir de ella misma (por ejemplo la definicin de factorial o de los nmeros de Fibonacci.) Una caracterstica muy importante de la recursividad es que, igual que en las estructuras repetitivas, debe de existir un punto o condicin de fin, que en algn momento detenga la recursividad.

Apuntes realizados por Ricardo Ferrs Departamento de Informtica. Universidad de Valencia

10