Sunteți pe pagina 1din 12

Introduccin a la Programacin

ING. WENDOLINE ARTEAGA SABJA

[ALGORITMOS]
Este captulo pretende sentar las bases del diseo y creacin de algoritmos utilizando estructuras simples , condiciones y ciclos

CAPITULO I Algoritmos
Para poder crear programas eficientes que resuelvan problemas complejos, es necesario el diseo previo de uno o varios algoritmos. Los algoritmos son independientes del lenguaje de programacin, lo que implica que un algoritmo puede codificarse en distintos lenguajes de programacin y ejecutarse en computadores distintos, sin embargo el algoritmo ser siempre el mismo, lo que evita que uno se entretenga o pierda tiempo en los detalles del lenguaje. Una posible definicin es la siguiente: Un algoritmo es, una secuencia de pasos simples, bien definidos, que permiten obtener a partir de cero o ms entradas, una o ms salidas.

Algunas caractersticas de los algoritmos. 1. Debe ser preciso, importa el orden de realizacin de cada paso. 2. Debe estar definido. Si se sigue un algoritmo dos veces se debe obtener el mismo resultado en ambos casos. 3. Debe ser finito. Si se sigue un algoritmo, debe terminar en algn momento. 4. Un algoritmo debe ser simple. Por simple se entiende la cualidad de ser corto, no requerir muchos bucles anidados. Para escribir un algoritmo, es importante darle un nombre que nos recuerde la tarea para la que ha sido diseado. Este nombre ir acompaado de las entradas y las salidas del algoritmo. Por convenio, las entradas irn antes que las salidas y encerradas entre parntesis; las salidas aparecern detrs de una flecha.

Preparar_ limonada (limn, azcar, agua) Limonada

PREPARAR LIMONADA

A esta parte del algoritmo la llamaremos encabezamiento del algoritmo. En el ejemplo anterior, el nombre nos dice claramente que se trata de un algoritmo que indica los pasos para preparar una limonada, que recibe como entrada limn, azcar y agua, y produce como salida una limonada

A la secuencia completa de instrucciones requerida para resolver el problema la llamaremos el cuerpo del algoritmo. En esta seccin, cada accin ocupar una lnea y ser especificada con claridad.

Para indicar que la mezcla recibe o guarda el jugo de limn y agua usamos la flecha, que nos indica el sentido de la accin, y nos permitimos abusar del signo de suma para indicar que los dos elementos de la derecha se juntan. Mezcla Jugo_Limn + Agua La mayora de las tareas requieren que algunas instrucciones se repitan un nmero, no siempre conocido, de veces. Para representar este hecho se usar la palabra Mientras seguida de una pregunta o condicin, encerrada entre parntesis, que indica qu condiciones deben darse para continuar ejecutando las acciones del ciclo. Por ejemplo:

Mientras (Mezcla Dulce) hacer lo siguiente Mezcla Mezcla + Azcar Fin Mientras

En este ejemplo, la instruccin: Mezcla Mezcla + Azcar, significa que voy agregando azcar a la mezcla y coloco todo nuevamente en la mezcla. Esta instruccin se repite mientras la Mezcla no est Dulce. La condicin de entrada al ciclo puede ser tan compleja como queramos, pero es aconsejable que sea sencilla si queremos disear algoritmos que cualquiera pueda comprender.

Tambin hay instrucciones que slo deben seguirse en caso de que se cumpla una condicin. Para especificar esto, usaremos la palabra Si seguida de una expresin lgica (pregunta) encerrada entre parntesis y seguida de la palabra entonces y la accin o las acciones a realizarse en este caso. Opcionalmente, podemos indicar tras la forma C/C (caso contrario), lo que deseamos que se ejecute en caso de que la condicin especificada no se cumpla. Por ejemplo:

Si (Mezcla == Amarga) entonces Limonada NO TOMAR C/C Hielo Congelar (Agua) Limonada Mezcla + Hielo Fin Si En caso de que la Mezcla quede amarga, pondremos NO TOMAR en Limonada. Si no est amargo (caso contrario) pondremos la MEZCLA y HIELO en Limonada. De esta manera la salida, Limonada, siempre tendr algo que devolver.

Usaremos el sangrado (indentacin) para distinguir, en el cuerpo del algoritmo, las instrucciones que son parte de un ciclo y aquellas que deben ejecutarse de forma condicional. Podemos usar otros algoritmos para mantener simple nuestro algoritmo principal, por ejemplo llamaremos al algoritmo CONGELAR cuya salida es Hielo y su nica entrada es Agua Hielo Congelar (Agua) Ejemplo del algoritmo completo:

Preparar_ limonada (Limn, Azcar, Agua) Limonada Jugo_Limn Exprimir ( Limn) Mezcla Jugo_Limn + Agua

Mientras (Mezcla Dulce) hacer lo siguiente Mezcla Mezcla + Azcar Fin Mientras

Si (Mezcla == Amarga) entonces Limonada NO TOMAR C/C Hielo Congelar (Agua) Limonada Mezcla + Hielo Fin Si Terminar devolviendo Limonada El algoritmo trabaja con las entradas y salidas nicamente, para generar en el proceso otros trminos como por ejemplo Licuado, que en adelante llamaremos variable (ya que puede cambiar) contiene un valor inicial y se utiliza para hacer el algoritmo ms comprensible. Algunos ejercicios para practicar 1. Preparar un caf 2. Enviar un mail 3. Sacar una foto 4. Calcular el permetro de un triangulo.

Condiciones
Para escribir un buen algoritmo se requiere entender cmo trabaja la condicin SI. Por ello mostraremos algunos ejemplos que nos aclaren su funcionamiento. La palabra Si permite realizar una pregunta en forma de condicin, para determinar si se ejecutan o no las instrucciones o pasos que se encuentran dentro la estructura, por ejemplo en el Algoritmo X: Si la condicin es verdad: Se ejecutan el PASO 1, 2 y 3 Si la condicin es falsa: Algoritmo X () PASO 1 Si (CONDICIN?) entonces PASO 2 Fin_Si PASO 3 Terminar devolviendo Se ejecutan el PASO 1 y 3 solamente

La palabra Si nos permite indicar que accin o acciones van a realizarse si se cumple la condicin, por ejemplo tenemos el algoritmo para Preparar Chocolate caliente Preparar Chocolate (Leche, Chocolate, Canela) Chocolatada Preparado Chocolate + Canela Si (Leche = Fria) entonces Leche Calentar ( Leche) Fin_Si Chocolatada Leche + Preparado Terminar devolviendo Chocolatada

Vea que en este ejemplo no se necesita el Caso Contrario o C/c, y la instruccin SI termina con la accin Fin_Si.

El paso de poner el Chocolate y la Canela en Preparado se realiza siempre y es la primera instruccin del algoritmo, pero para que la accin Calentar Leche se ejecute es necesario que la condicin (Leche = Fria) sea verdadera. Finalmente la accin de mezclar Leche con el Preparado se realiza siempre, ya que esta fuera de la instruccin SI.

La palabra Si puede ir relacionada a un Caso Contrario (y solo a uno), por ejemplo en el Algoritmo Y: Si la condicin es verdad: Se ejecutan el PASO 1, 2 y 4 Si la condicin es falsa: Algoritmo Y () PASO 1 Si (CONDICIN?) entonces PASO 2 C/c PASO 3 Fin_Si PASO 4 Terminar devolviendo En un segundo ejemplo vemos como encontrar el mayor de dos nmeros, esta vez utilizando Caso contrario Encontrar_mayor (Num1, Num2) MAYOR Si (Num1 >= Num2) entonces MAYOR Num1 C/ C MAYOR Num2 Fin_Si Terminar devolviendo MAYOR Si la condicin (Num1 >= Num2) es verdadera, podemos afirmar que Num1 es el mayor, en caso contrario decimos que Num2 es el mayor. Dejamos al estudiante pensar que suceder en el caso de que ambos nmeros sean iguales. Se ejecutan el PASO 1 , 3 y 4

Llamadas a otros ALGORITMOS

Una de las ventajas de trabajar con algoritmos es que estos se pueden reutilizar, esta es una gran caracterstica, pues permite dividir el problema en problemas ms pequeos. Al tener algoritmos pequeos los mantenemos simples, lo que facilita cualquier tarea de programacin, prueba y mantenimiento. Para aprovechar esta caracterstica se debe tener especial cuidado al llamar el algoritmo, se debe respetar (es decir, que no se debe cambiar) el nombre del algoritmo llamado o invocado. El nmero de las entradas y las salidas del algoritmo deben ser siempre las mismas. Si el problema es el de encontrar el MAYOR de tres nmeros, el algoritmo cambia y se necesitan realizar ms preguntas y anidar una condicin SI dentro de otra. Note que en el ejemplo siguiente se necesita utilizar la palabra Y que funciona como el operador lgico /\ segn lo expuesto en clase.

Encontrar_Mayor_de3 (Num1, Num2, Num3) MAYOR Si (Num1 >= Num2 y Num1>=Num3) entonces MAYOR Num1 C/c Si (Num2 >= Num1 y Num2>=Num3) entonces MAYOR Num2 C/c MAYOR Num3 Fin_Si Fin_Si Terminar devolviendo MAYOR

Si pensamos en una solucin para encontrar el mayor de 4 o 5 nmeros el algoritmo se complica demasiado y no mantiene la propiedad de simplicidad, es aqu donde resulta interesante reutilizar.

A continuacin se muestra como encontrar el mayor de 3 nmeros llamando 2 veces al algoritmo que encuentra el mayor de 2 nmeros.

Buscar_May (Num1, Num2, Num3) Respuesta Mayor1 Encontrar_Mayor(Num1,Num2)

Respuesta Encontrar_Mayor(Mayor1,Num3) Terminar devolviendo Respuesta

En la primera llamada se utilizan como entradas los dos primeros nmeros y se guarda el resultado en una variable llamada Mayor1, que luego se usa como entrada en la segunda llamada para compararla con el tercer nmero. Se deja al estudiante la tarea de encontrar el mayor de 4, 5 y 6 nmeros.

Ciclos
MIENTRAS Cuando se desea repetir una accin un nmero no siempre conocido de veces, se presenta la oportunidad de utilizar ciclos para facilitar la tarea, que se describe con la palabra MIENTRAS seguida de las instrucciones a repetirse y el Fin del Mientras.

Por ejemplo en el Algoritmo Y, el Paso 1 se ejecuta una vez al principio y el Paso 2 se repetir MIENTRAS la CONDICION sea VERDADERA, es importante asegurarse que la condicin en algn momento pase a ser FALSA para que el ciclo no se quede iterando infinitamente, finalmente cuando el ciclo se detiene se ejecuta el Paso 3 y el algoritmo termina

Algoritmo Y () PASO 1 MIENTRAS (CONDICIN?) HACER PASO 2 Fin Mientras PASO 3 Terminar devolviendo

Veamos un caso en el que se pide sumar los primeros 10 nmeros enteros positivos, tal vez la primera idea puede ser esta:

Sumar_10_Enteros () Suma Suma 1+2+3+4+5+6+7+8+9+10 Terminar devolviendo Suma

Como se puede ver este algoritmo es correcto. Pero que sucede si se pide sumar los primeros 1000 nmeros enteros positivos. La primera opcin se debe descartar porque deja de ser prctica, y surgen los ciclos para ayudarnos. Por ejemplo: Sumar_1000_Enteros () Suma NUM 1 Suma 0 Mientras (NUM <= 1000) hacer Suma Suma + NUM NUM NUM +1 Fin_ Mientras Terminar devolviendo Suma

Note que el anterior algoritmo inicializa las variables NUM y Suma antes de ingresar al ciclo, otro aspecto muy importante es que la condicin se convertir en Falsa en algn momento pues NUM se incrementa de 1 en 1 gracias a la instruccin NUM NUM + 1 Lo que nos asegura que este ciclo no ser infinito, pues NUM dejar de ser menor o igual a mil.

Finalmente Suma va acumulando los valores de NUM gracias a la instruccin:

Suma Suma + NUM

Dejamos al estudiante pensar como modificar el algoritmo en el caso de que se desee sumar los primeros N nmeros enteros positivos.

HACER - MIENTRAS Una segunda opcin para utilizar ciclos es la estructura Hacer seguida de Mientras, que es til cuando se desea agregar la condicin o pregunta al final. De este modo los pasos que quedan dentro se ejecutan al menos UNA vez.

Por ejemplo en el Algoritmo Z, el Paso 1 se ejecuta al principio del algoritmo y el Paso 2 se ejecuta SIEMPRE la primera vez y se repetir MIENTRAS la CONDICION sea VERDADERA, al igual que en la anterior estructura, es importante asegurarse que la condicin en algn momento pase a ser FALSA para que el ciclo no se quede iterando infinitamente, finalmente si el ciclo se detiene se ejecuta el Paso 3 y el algoritmo termina Algoritmo Z () PASO 1 HACER PASO 2 MIENTRAS (CONDICIN?) PASO 3 Terminar devolviendo

Veamos un caso en el que el uso de HACER MIENTRAS es ms corto que la alternativa MIENTRAS. Por ejemplo, si se desea un algoritmo que Lea una palabra clave, la palabra clave ser SECRETO, y que devuelva en cuantos intentos se descubri la palabra clave, se tiene

Detective1 () Intentos Intentos 0 HACER PalabraLeer() Intentos Intentos + 1 MIENTRAS ( Palabra Secreto) Terminar devolviendo Intentos

La versin utilizando el MIENTRAS quedara un poco ms larga en este caso, pero de igual forma es correcta.

Detective2 () Intentos Intentos 1 PalabraLeer() MIENTRAS ( Palabra Secreto) Hacer PalabraLeer() Intentos Intentos + 1 Fin Mientras Terminar devolviendo Intentos

Se deja al estudiante pensar como modificar el Detective1 para que el algoritmo pida la clave 5 veces en caso de que el usuario no adivine debe retornar FRACASO, en caso de que acierte debe retornar XITO Ejercicios: Utilizando la estructura cclica que usted considere ms adecuada, resolver los siguientes algoritmos y realizar las pruebas correspondientes 1. Leer letras y detenerse cuando aparezca alguna vocal, contar los intentos antes de encontrar una vocal 2. Leer nmeros hasta que aparezca el 1 y calcular el promedio de los nmeros ledos. 3. Leer nmeros hasta que se introduzca el 0 y mostrar cuantos son menores que 10 y cuntos son mayores o iguales a 10 4. Crear un algoritmo Leer_Nota que lea Notas del 1 al 100 y calcule el promedio, se debe pedir al profesor notas hasta que ingrese una nota no vlida, por ejemplo 150 -23

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