viernes, 15 de abril de 2016

ALGORITMOS REPETITIVOS

Un bucle o lazo (Loop)  es un segmento de un algoritmo o programa, cuya instrucciones se repiten un número determinado de veces mientras se cumple una determinada condición (existe o es verdadera la condición). SE debe establecer un mecanismo para determinar las tareas repetitivas. Este mecanismo es una condición que puede ser verdadera o falsa y que se comprueba una vez a cada paso o iteración del bucle (total de instrucciones que se repiten en el bucle).
Un bucle consta de tres partes:
  •  decisión,
  •  cuerpo del bucle,
  •  salida del bucle.



Si tras la lectura de la variable N se coloca una condición, el bucle dejará de ser infinito y tendrá fin cuando la condición sea verdadera.

El diagrama de flujo escrito en pseudo código es aproximadamente el siguiente:

Inicio
    SUMA 0
    1: leer N
    Si N = 0 entonces
        Escribir SUMA
        Ir_a fin
    Si_no
        Suma suma + N
    FIN_SI
    IR_A 1
FIN



BUCLES ANIDADOS
Un bucle puede anidarse dentro de otro como se vio en clase con los condicionales anidados (un si fin_si dentro de otro si Fin_si)

Contadores

Un contador es una variable cuyo valor se incrementa o decremento en una cantidad constante en cada vuelta.
La siguiente figura 
contar del 1 al 50

presenta un diagrama de flujo para un algoritmo que se desea repetir 50 veces; el contador se representa en este ejemplo con la variable CONT. La instrucción que representa a un contador es la asignación CONT = CONT + 1.
La siguiente figura

Decrementar desde N hasta 0

es otro ejemplo de un diagrama de flujo con contador; es este caso, negativo. Se dice también descontar.
El contador puede ser positivo (incrementos, uno en uno) o negativo (decrementos, uno en uno).

Importante acerca de incrementos y decrementos:
En la primera Figura el contador cuenta desde 1 al 50 y deja de contar cuando la variable CONT toma el valor 51 y se termina el bucle.

En la segunda Figura el contador cuenta negativamente, o lo que es lo mismo, descuenta o decrementa; comienza a contar en n y se decrementando hasta llegar a cero, en cuyo caso se termina el bucle y se realiza la acción escribir.

Como se vio anteriormente la condición permite terminar el bucle cuando ésta es verdadera (si) 
ahora veremos las estructuras repetitivas que se usarán en el curso de algoritmos:

Tipos de estructuras repetitivas


Mientras Condicion Hacer
Fin_mientras

Desde Variable=inicio  Hasta Variable=Final  hacer
Fin_desde

(La anterior también puede ser usada con la palabra PARA en vez de DESDE ejemplo:

    PARA Variable=inicio  Hasta Variable=Final  hacer

    Fin_PARA)


Repetir
Hasta Condicion


Hemos visto que las Estructura repetitivas son aquellas en las que especialmente se diseña para todas aquellas

aplicaciones en las cuales una operación o conjunto de ellas deben repetirse muchas veces.

asi los Bucles (lazos o LOOPs) Son estructuras que repiten una secuencia de instrucciones un numero determinado de veces.



Interacción: Es el hecho de repetir la ejecución de una secuencia de acciones; en otras palabras el algoritmo repite muchas veces las acciones.

Al utilizar un bucle para sumar una lista de números, se necesita saber cuantos números se han de sumar, para poder detenerlo en el momento preciso; las dos principales preguntas ha realizarse en el diseño de un bucle son:
¿Que contiene el bucle? y ¿Cuántas veces se debe repetir?



Casos Generales de Estructuras repetitivas
1) La condición de Salida del bucle se realiza al principio del bucle (estructura mientras) también llamada PRE-CONDICIONAL
2) La condición de Salida se origina al final del bucle; el bucle se verifica hasta que se verifique una cierta condición
también llamada POST-CONDICIONAL (estructura Repetir Hasta).
3) La condición de salida se realiza con un contador que cuente el numero de interacciones. ( i es un contador que cuenta desde el valor inicial (vi.) hasta el valor final (vf) con los incrementos que se consideren.) (estructura DESDE o PARA)

ALGORITMOS DE SELECCION MULTIPLE

La estructura de selección múltiple switch permite seleccionar una ruta de entre varias rutas posibles en base al valor de una variable selector que se compara con una lista de constantes enteras o de carácter c1, c2, c3, ..., cn. Cuando se encuentra una correspondencia entre el valor de la variable selector y una constante, se ejecuta la acción o el grupo de acciones asociadas a dicha constante. Si el selector no coincide con ninguna constante, se efectúa la acción por defecto, si es que existe.



En la tabla que sigue se muestra el código y el pseudocódigo de la estructura switch.
Consideraciones:

• Las sentencias break y el caso por defecto default son opcionales.
• El caso por defecto default no tiene que ser el último de todos sino que puede ser el primero u ocupar una posición intermedia.
• Luego de efectuarse la acción o las acciones de un case o del default, se proseguirá con la ejecución de la acción o las acciones de los case que siguen hasta encontrar un break o hasta llegar al final de la estructura switch; lo que ocurra primero.
• Es un error de sintaxis tener casos duplicados.
• Las acciones pueden ser acciones simples o acciones compuestas. En el caso de acciones compuestas no es necesario colocarlas entre llaves de bloque.

ALGORITMOS CONDICIONALES


En un algoritmo puede existir una condición que bifurque el flujo normal del conjunto de instrucciones de acuerdo a la decisión que se tome. Por lo tanto, el programador debe tener en cuenta las alternativas que se pueden tomar en base a la pregunta: ¿Qué pasa si ocurre tal cosa ? Vamos a mencionar unos ejemplos de algoritmos con condiciones.
1. Condiciones sencillas: (Una o dos alternativas)
Ocurren cuando tenemos algo como lo siguiente:

………….
…………. (conjunto de instrucciones)
………….
Si condición entonces
………
………
fin del si
…………
………… (instrucciones)
…………

1. Hacer un algoritmo que lea los nombres y edades de dos personas e imprima cual de ellas tiene más edad.
1. Inicio
2. leer nombre1 y edad1
3. leer nombre2 y edad2
4. comparar edad1 con edad2:
5. Si edad1 > edad2 imprimir ( nombre1, ” es mayor “)
6. si edad2 > edad1 imprimir ( nombre2, ” es mayor”)
7. Si edad1 = edad2 imprimir (“Edades iguales”)
8. Fin
2. En una Granja existen N conejos, N1 blancos y N2 negros. Se venden X negros y Y blancos.
Hacer un algoritmo que:
a) Imprima la cantidad de conejos vendida
b) Si P1 es el precio de venta de los conejos blancos y P2 es el precio de venta de los conejos negros, imprima el monto total de la venta.
c) Imprima el color de los conejos que se vendieron mas.
Solución:
1. Inicio
2. Leer datos: N, N1,N2,X,Y,P1,P2
3. Calcular la cantidad de conejos vendida: CCV = X + Y
4. Imprimir la cantidad de conejos vendida: Imprimir CCV
5. Calcular el monto de la venta: MVenta = X * P2 + Y * P1
6. Imprimir monto de la venta: Imprimir MVenta
7. Si X > Y entonces
Imprimir “Se vendieron mas conejos negros”
en otro caso
Imprimir “Se vendieron mas conejos blancos”
8. Fin
3. Elaborar un algoritmo que lea el importe bruto de una factura y determine el importe neto según los siguientes criterios:
· Importe bruto menor de 20.000 -> sin descuento
· Importe bruto mayor de 20.000 -> 15% de descuento
1. Inicio
2. Leer importeb
3. Calcular descuento:
Si importeb >= 20000 entonces
descuento =importeb * 0.15;
en otro caso
descuento = 0
finsi
4. Calcular monto total de la factura:
total:=importe – descuento
5. Escribir total
6. fin
4. Un decreto presidencial permite el aumento del 10& a aquellos trabajadores que ganen el sueldo mínimo oficial (Sueldomo). Hacer un algoritmo que lea el sueldo de un trabajador e imprima el sueldo a devengar, después del decreto.
Inicio
Leer sueldot
Si sueldot = sueldomo entonces
sueldot = sueldot + (sueldomo*0,10)
Imprimir sueldo
Fin

ALGORITMOS SECUENCIALES

La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
  1. Simples: Consiste en pasar un valor constante a una variable (a ← 15)
  2. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1)
  3. Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b)
  4. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ← c + b*1/2).
Un ejemplo de estructura secuencial, como obtener el área de un triángulo:
Inicio 
...
    float b, h, a;
    printf("Diga la base");
    scanf("%f", &b);
    printf("Diga la altura");
    scanf("%f", &h);
    a = (b*h)/2;
    printf("El área del triángulo es %f", a)
...
Fin 
 

INTRODUCCION

El desarrollo de algoritmos es un tema fundamental en el diseño de programas o soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder crear de manera fácil y rápida sus programas.

La siguiente documentación pueden servir de apoyo a tutores o profesores, en su labor cotidiana de enseñanza y al estudiante, facilitarle el desarrollo de su capacidad analítica y creadora, para de esta manera mejorar su destreza en la elaboración de algoritmos que sirven como base para la codificación de los diferentes programas que tendrá que desarrollar a lo largo de su carrera.