Documente Academic
Documente Profesional
Documente Cultură
Página Principal
/ ► Mis cursos
/ ► P.O.O C#
/ ► Tema 2
/ ► Algoritmos de programación
Algoritmos de programación
Algoritmos de programación
Contenidos:
1-Definición de Algoritmo.
Es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para
resolver un problema.
1. Cada paso del algoritmo debe estar bien definido: Esto significa que la definición de un
paso debe ser suficientemente clara, para que una persona pueda entenderla y realizarla. Si
bien no se puede dar un criterio determinado para decidir si un paso esta bien definido,
debemos apelar al sentido común para decidir que un paso esta especificado sin
ambigüedades.
2. Cada paso del algoritmo debe poder realizarse en un tiempo finito y deben requerir un
esfuerzo finito: Es natural pedir que si debemos seguir una receta para realizar algo, cada
paso podamos terminarlo y además tenga un costo finito. No tendría sentido una
especificación como esperar en la fila hasta que se acabe el universo y luego avanzar un
paso, pues dicha especificación no deja clara cual es la cantidad de Tiempo necesaria para
avanzar un paso. ¿El universo se terminara mañana o dentro de 1000 millones de años? Por
otro lado, si uno de los pasos del algoritmo requiérese un tiempo indeterminado para ser
ejecutado, tampoco podríamos determinar si el algoritmo terminará en algún momento.
4. Tener cero o más entradas: Datos son proporcionados a un algoritmo como insumo (o
estos son generados de alguna forma) para llevar a cabo las operaciones que comprende.
5. Tener una o más salidas: Debe siempre devolver un resultado; de nada sirve un algoritmo
que hace algo y nunca sabemos que fue. El devolver un resultado no debe ser considerado
como únicamente “verlos” en forma impresa o en pantalla, como ocurre con las
computadoras. Existen muchos otros mecanismos susceptibles de programación que no
cuentan con una salida de resultados de esta forma. Por salida de resultados debe
entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del
algoritmo.
6. Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando
nada más ni nada menos que aquello que se requiera para y en su ejecución.
1. Salir de la cama
2. Quitarse la pijamas
3. Darse un baño
4. Vestirse
5. Desayunar
6. Utilizar el transporte ( autobús, carro , bicicleta, etc)
Ejemplo
Se quiere hallar el área de un triangulo para un valor racional dado de la variable x, esto se
puede hacer ejecutando el algoritmo que sigue:
Algoritmo1
Observar que se está evaluando la función f(x)= 2x2 + 3x que es la que permite calcular el
área de la figura (área del rectángulo x.2x más el área del triángulo 2x.3/2). Recordar que el
área de un rectángulo se calcula como la multiplicación de sus lados, mientras que el área
de un triángulo se calcula como el área de la base por la altura entre dos.
Las acciones que puede realizar un ejecutor son llamadas acciones primitivas y los
algoritmos tienen que estar enunciados a partir de estas acciones.
¿Este algoritmo es único? La respuesta obvia es NO, se puede, también, hacer lo siguiente:
Algoritmo 1a
Observar ahora se está evaluando la función f(x)= (2x + 3)x que en definitiva es la misma
función f(x) = 2x2 + 3x.
Si se compara los algoritmos 1 y 1a se observa que el 1a hace que el ejecutor haga menos
cantidad de pasos u operaciones, aunque con ambos se obtiene el mismo resultado.
Tener diversas variantes de algoritmos para resolver un mismo tipo de problema, supone la
selección del mejor algoritmo para el problema dado; sin embargo en la práctica las cosas
no son tan fáciles y en ocasiones no es tan obvio poder escoger un algoritmo entre un
grupo, pues la cantidad de operaciones no siempre es el único criterio a tener en cuenta.
También debe considerarse, por ejemplo, el tamaño del algoritmo, la claridad con que está
expresado, etc. Estos criterios entran en contradicción al hacer el análisis. Una regla que se
cumple generalmente en el trabajo de computación, es que cuando se ahorra tiempo se
gasta más espacio y viceversa.
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural:
pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las
descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo
y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones
son formas más estructuradas para representar algoritmos; no obstante, se mantienen
independientes de un lenguaje de programación específico.
+ suma,
- resta,
/ división
a=x*2
Paso 1: a = x * x
Paso 2: b = 2 * a
Paso 3: c = 3 * x
Paso 4: r = b + c
Paso 1: a = 4 * 4, a = 16
Paso 2: b = 2 * 16, b = 32
Paso 3: c = 3 * 4, c = 12
Paso 4: r = 32 + 12, r = 44
Para completar este algoritmo totalmente hacen falta dos operaciones que aquí se están
asumiendo: conocer que x es un dato y por lo tanto se tiene que saber su valor antes de
comenzar y por otro lado saber que el resultado del cálculo se queda en r.
- lectura de datos: se utilizará la palabra leer, lo que se tienen como datos iniciales.
- salida de los datos: se utilizará la palabra escribir, seguida de los valores que se desean se
den como respuesta.
El algoritmo 1 queda:
Paso 1: leer x
Paso 2: a = x * x
Paso 3: b = 2 * a
Paso 4: c = 3 * x
Paso 5: r = b + c
Paso 6: escribir r
Pero no siempre los algoritmos son tan simples estos están estructurados de diferentes
maneras es decir por las estructuras de control que son las que deciden qué camino tomará
el algoritmo, el ejemplo antes visto responde a una estructura secuencial que no es mas
que :
1. Estructura secuencial: consiste en colocar una instrucción tras otra, de manera que se
van ejecutando de arriba abajo.
Ejemplo
Leer (n1);
Leer (n2);
Leer (n3);
suma = n1 + n2 + n3;
media = suma / 3;
escribir (media);
inicio
conjunto de acciones;
fin
sino
inicio
conjunto de acciones;
fin
Leer (n1);
Leer (n2);
Leer (n3);
suma = n1 + n2 + n3;
media = suma / 3;
si (media >= 0)
inicio
escribir (raiz);
fin
si no
Antes de hallar la raíz cuadrada hay que ver que la media no es negativa: La estructura
condicional permite anidar unas instrucciones en otras.
Supongamos que queremos calcular la nota media de la siguiente forma:
si (teoria >= 5)
inicio
si (practica < 5)
si no
fin
si no
inicio
si (practica >= 5)
si no
fin
Otra forma de resolverlo es usando el operador y en las condiciones. Este operador permite
combinar dos condiciones de manera que solo será verdad si ambas condiciones se
cumplen:
si no
inicio
si no
fin
si (teoria >= 5)
inicio
si (practica < 5)
inicio
fin
fin
si no
inicio
si (practica >= 5)
Además del operador y también existe el operador o el cual permite ejecutar una acción
determinada si se verifica una de las condiciones.
Leer (edad);
si no
escribir("Puedes trabajar");
Es decir, solo trabajan los que tengan 16 o más años y menos de 65.
Estructura mientras
inicio
conjunto de acciones;
fin
Esta estructura evalúa la condición una vez realizada la acción. Por tanto, las instrucciones
que están dentro se ejecutan al menos una vez. El formato de esta estructura es el siguiente:
repetir
inicio
conjunto de acciones;
fin
Leer (edad);
escribir("Puedes trabajar");
si no
Ej: algoritmo que lee por teclado unos números (hasta que introduzcamos un número
negativo) y calcula su media.
suma = 0 ; n = 0;
inicio
n = n + 1;
fin
si (n > 0)
inicio
media = suma / n;
si no
suma = 0; n = 0;
repetir
inicio
si (numero >= 0)
inicio
n = n + 1;
fin
fin
si (n > 0)
inicio
media = suma / n;
fin
si no
Estructura para
Permite realizar una acción un número determinado de veces. El formato de esta estructura
es el siguiente:
inicio
conjunto de acciones;
fin
En cada iteración del bucle variable va tomando distintos valores comprendidos entre inicio
y fin. En la primera iteración toma el valor inicio, en la segunda inicio+1, y así
sucesivamente hasta el valor fin.
suma = 0;
para n de 1 a 20
inicio
fin
suma = 0;
n = 0;
inicio
escribir("Introduzca nº", n+1); leer (numero);
n = n + 1;
fin
media = suma / n;
si no
inicio
si no
Fin
Un error muy común con las estructuras de repetición consiste en poner mal la condición de
finalización u olvidarse de incrementar el contador, dando lugar a bucles infinitos (bucles
que no acaban nunca).
suma = 0;
n = 1;
repetir
inicio
leer (numero);
suma = suma + numero;
fin
suma = 0;
n = 1;
repetir
inicio
leer (numero);
n = n - 1;
fin
Este bucle nunca finaliza ya que olvidamos incrementar la variable n. En este caso, la n
siempre es menor de 20, ya que la decrementamos en vez de incrementarla.
Ej.: Calcular la media de una serie de nº positivos dados por teclado. Un valor de 0, como
entrada, indicará el final de la serie de números.
Pseudocódigo
contador = 0;
suma = 0;
leer(numero);
inicio
suma = suma + numero;
contador = contador + 1;
leer(numero);
fin
si (contador <> 0)
sino
media = 0;
escribir(media);
Ej.: Calcular la suma de los N primeros números impares, siendo N un nº dado por teclado.
suma = 0;
c = 1;
impar = 1;
leer (n);
mientras (c <= n)
inicio
impar = impar + 2;
c = c + 1;
fin
escribir (suma);
Saltar Navegación
Navegación
Página Principal
o Área personal
o Páginas del sitio
o Mi perfil
o Mis cursos
P.O.O C#
Participantes
General
Tema 1
Tema 2
Algoritmos de programación
Cuestionario Lección 2
Saltar Navegación
Navegación