Sunteți pe pagina 1din 17

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

S-ar putea să vă placă și