Saltar a contenido principal
Introducción a la programación con C#
Usted se ha identificado como Mariela Pavó (Salir)
Ruta a la página
Página Principal
/ ► Mis cursos
/ ► P.O.O C#
/ ► Tema 2
/ ► Algoritmos de programación
Algoritmos de programación
Algoritmos de programación
Lección #2: Algoritmos de programación.
Objetivo: Definir concepto de Algoritmo. Diseñar algoritmos teniendo en cuenta
situaciones problémicas determinadas. Obtener algoritmos básicos. Implementar algoritmos
básicos.
Contenidos:
1-Definición de Algoritmo.
2-Obtención de algoritmos básicos.
3-Implementación de algoritmos básicos.
Sesión de Cuestionario: Cuestionario Lección 2
¿Qué es un algoritmo de programación?
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.
3. Un algoritmo debe finalizar en un número.
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.
Un ejemplo de un algoritmo para llegar a la escuela
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
Paso 1: Multiplicar el valor de x por sí mismo y poner el resultado en a.
Paso 2: Multiplicar el valor de a por 2 y poner el resultado en b.
Paso 3: Multplicar el valor de x por 3 y poner el resultado en c.
Paso 4: Sumar el valor de b con el valor de c y poner el resultado en r. En r tenemos el
resultado final
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.
En este algoritmo se utilizan tres acciones fundamentales o primitivas “multiplicar”, “poner
el resultado en” y “sumar”. Se supone, entonces, que el ejecutor del algoritmo conoce estas
acciones y puede ejecutarlas.
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
Paso 1: Multiplicar el valor de x por 2 y poner el resultado en a.
Paso 2: Sumar el valor de a con 3 y poner el resultado en b.
Paso 3: Multiplicar el valor de b por el valor de x y poner el resultado en r. En r tenemos el
resultado final.
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.
Formas de expresión de los algoritmos
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.
La descripción de un algoritmo usualmente se hace en tres niveles:
1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo
matemático y se explica el algoritmo de manera verbal, posiblemente con
ilustraciones y omitiendo detalles.
2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que
encuentran la solución.
3. Implementación. Se muestra el algoritmo expresado en un lenguaje de
programación específico o algún objeto capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un
análisis de complejidad o ambos.
El pseudocódigo es la representación narrativa (no hay reglas sintácticas estrictas) de un
algoritmo, escrita en lenguaje natural utilizando las estructuras de control típicas de
algún Lenguaje de Programación y algunos símbolos algebraicos.
Solución del ejemplo anterior en pseudocódigo:
Por ejemplo se puede convenir que:
Para las operaciones aritméticas se utilizarán los siguientes símbolos:
+ suma,
- resta,
* multiplicación, (no se utilizará el punto (.) común en matemática)
/ división
Para la operación “poner el resultado en” se utilizará el signo =.
De tal manera que si se quiere expresar: “multiplicar x por 2 y poner el resultado en a” se
escribirá:
a=x*2
El algoritmo 1 quedará entonces:
Paso 1: a = x * x
Paso 2: b = 2 * a
Paso 3: c = 3 * x
Paso 4: r = b + c
Una ejecución del algoritmo se puede ver de la siguiente forma:
Si se tiene una figura en que x=4, entonces
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
Luego el área de la figura es 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.
Para ello se introducen dos nuevas operaciones o pasos:
- 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
Pseudocódigo de un algoritmo que calcule la media de tres números:
Se tienen 3 números: n1, n2, n3.
Leer (n1);
Leer (n2);
Leer (n3);
suma = n1 + n2 + n3;
media = suma / 3;
escribir (media);
El orden en el que se realizan las operaciones es importante: no puede calcularse la media
sin antes haber leído los números.
También existen otras estructuras para los algoritmos como son :
2. Estructura selectiva o condicional (si, si no): permiten ejecutar un conjunto de
instrucciones u otras en función de si se cumple o no una condición
3. Estructura iterativa o de repetición (mientras, repetir, para): permite repetir una
instrucción o grupo de ellas un nº fijo de veces o mientras (o hasta que) una condición sea
cierta.
Estructura selectiva o condicional
El formato de esta estructura es el siguiente:
si (se cumple la condición)
inicio
conjunto de acciones;
fin
sino
inicio
conjunto de acciones;
fin
Es decir, primero se examina la condición: si resulta verdadera, se ejecutan las acciones
asociadas al si, en caso contrario se ejecutan las acciones asociadas al sino. La instrucción
si no, no es obligatoria en una estructura condicional (si no queremos hacer nada en caso
que la condición sea falsa).
Algoritmo que calcula la media de 3 nº y devuelve su raíz cuadrada.
Leer (n1);
Leer (n2);
Leer (n3);
suma = n1 + n2 + n3;
media = suma / 3;
si (media >= 0)
inicio
raiz = RaizCuadrada (media);
escribir (raiz);
fin
si no
escribir ("No se puede hallar la raíz cuadrada");
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 teoría >= 5 y practica < 5: media = 0.4 x teoría + 0.6 x práctica
• Si practica >= 5 y teoría < 5: media = 0.6 x teoría + 0.4 x práctica
• En cualquier otro caso se calculara su media normalmente.
Leer (teoria); Leer (practica);
si (teoria >= 5)
inicio
si (practica < 5)
media = 0.4 * teoria + 0.6 * practica;
si no
media = (teoria + practica) / 2;
fin
si no
inicio
si (practica >= 5)
media = 0.6 * teoria + 0.4 * practica;
si no
media = (teoria + practica) / 2;
fin
escribir("La media es ", media);
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:
Leer (teoría); Leer (practica);
si (teoria >= 5 y practica < 5)
media = 0.4 * teoria + 0.6 * practica;
si no
inicio
si (practica >= 5 y teoria < 5)
media = 0.6 * teoria + 0.4 * practica;
si no
media = (teoria + practica) / 2;
fin
escribir("La media es ", media);
Otra posible solución sería:
Leer (teoria); Leer (practica);
media = (teoria + practica) / 2;
si (teoria >= 5)
inicio
si (practica < 5)
inicio
media = 0.4 * teoria + 0.6 * practica;
fin
fin
si no
inicio
si (practica >= 5)
media = 0.6 * teoria + 0.4 * practica;
fin
escribir("La media es ", media);
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 (edad < 16 o edad >= 65)
escribir("No puedes trabajar");
si no
escribir("Puedes trabajar");
Es decir, solo trabajan los que tengan 16 o más años y menos de 65.
Estructura iterativa o de repetición.
Esta estructura presenta una serie de variantes que permiten:
Estructura mientras
Esta estructura permite repetir un conjunto de instrucciones 0 o más veces, ya que la
condición se verifica antes de entrar en el bucle. El formato de esta estructura es el
siguiente:
mientras (se cumpla la condición)
inicio
conjunto de acciones;
fin
Es decir, primero se examina la condición: si resulta falsa, se pasa directamente a la
instrucción que haya tras el fin, de manera que nos saltamos todas las instrucciones que
haya dentro del bucle.
Estructura repetir … mientras
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
mientras (se cumpla la condición);
Leer (edad);
si (edad >= 16 y edad < 65)
escribir("Puedes trabajar");
si no
escribir("No Puedes trabajar");
Ej: algoritmo que lee por teclado unos números (hasta que introduzcamos un número
negativo) y calcula su media.
suma = 0 ; n = 0;
escribir("Dame un nº no negativo"); leer (numero);
mientras (numero >= 0)
inicio
suma = suma + numero;
n = n + 1;
escribir("Dame un nº no negativo"); leer (numero);
fin
si (n > 0)
inicio
media = suma / n;
escribir("La media es ", media);
fin
si no
escribir ("La media es 0");
Ej: Algoritmo anterior usando el repetir
suma = 0; n = 0;
repetir
inicio
escribir("Dame un nº no negativo"); leer (numero);
si (numero >= 0)
inicio
suma = suma + numero;
n = n + 1;
fin
fin
mientras (numero >= 0);
si (n > 0)
inicio
media = suma / n;
escribir("La media es ", media);
fin
si no
escribir("La media es 0");
Estructura para
Permite realizar una acción un número determinado de veces. El formato de esta estructura
es el siguiente:
para variable de inicio a fin
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.
Ej: Algoritmo que pide 20 números por teclado y calcula su media.
suma = 0;
para n de 1 a 20
inicio
escribir("Introduzca nº", n); leer (numero);
suma = suma + numero;
fin
media = suma / (n-1);
escribir("La media es ", media);
Restamos 1 a n ya que se sale del bucle para cuando la variable n
sobrepasa el valor 20.
La estructura para puede sustituirse por mientras o por repetir:
suma = 0;
n = 0;
mientras (n < 20)
inicio
escribir("Introduzca nº", n+1); leer (numero);
suma = suma + numero;
n = n + 1;
fin
media = suma / n;
escribir(" La media es ", media);
¿Cual de las tres variantes usar ante un determinado problema?:
si (el bucle tiene que ejecutarse un numero fijo de veces)
Utilizar la estructura para;
si no
inicio
si (el bucle debe ejecutarse como mínimo una vez)
Utilizar la estructura repetir...mientras;
si no
Utilizar la estructura mientras;
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
mientras (n <= 20);
media = suma / (n-1);
suma = 0;
n = 1;
repetir
inicio
leer (numero);
suma = suma + numero;
n = n - 1;
fin
mientras (n <= 20);
media = suma / (n-1);
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);
mientras (numero <> 0)
inicio
suma = suma + numero;
contador = contador + 1;
leer(numero);
fin
si (contador <> 0)
media = suma / contador;
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
suma = suma + impar;
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