Web viewmain(String[] args) {/* La ... * método de Montecarlo se basa en repetir muchas veces...
Transcript of Web viewmain(String[] args) {/* La ... * método de Montecarlo se basa en repetir muchas veces...
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 1 ~
DIAGRAMAS DE WARNIER/ORR
Los diagramas de Warnier/Orr (también conocidos como construcción lógica de programas/construcción lógica de sistemas) fueron desarrollados inicialmente en Francia por Jean Dominique Warnier y en los Estados Unidos por Kenneth Orr. Este método ayuda al diseño de estructuras de programas identificando la salida y resultado del procedimiento, y entonces trabaja hacia atrás para determinar los pasos y combinaciones de entrada necesarios para producirlos. Los sencillos métodos gráficos usados en los diagramas de Warnier/Orr hacen evidentes los niveles en un sistema y más claros los movimientos de los datos en dichos niveles.
ELEMENTOS BASICOS
Los diagramas de Warnier/Orr muestran los procesos y la secuencia en que se realizan. Cada proceso se define de una manera jerárquica ; es decir, consta de conjuntos de subprocesos que lo definen, en cada nivel, el proceso se muestra en una llave que agrupa a sus componentes. Puesto que un proceso puede tener muchos subprocesos distintos, un diagrama de Warnier/Orr usa un conjunto de llaves para mostrar cada nivel del sistema.
Conjuntos: {Subconjuntos: Cardinalidad: (1,n)Condicionalidad: (0,1)Secuencia de acciones mutuamente excluyentes: +
USO DE DIAGRAMAS DE WARNIER/ORR
La capacidad de mostrar la relación entre procesos y pasos de un proceso no es exclusiva de los diagramas de Warnier/Orr, así como tampoco lo es el uso de la iteración, selección de alternativas o el tratamiento de casos individuales. Tanto los diagramas de flujo estructurado y los métodos del español estructurado logran eso también. Sin embargo, el enfoque que se usa para desarrollar las definiciones de un sistema por medio de estos diagramas es distinto y se adapta y se adaptan bien a los que se usan en el diseño de sistemas lógicos.
Para desarrollar un diagrama de Warnier/Orr , el analista trabaja hacia atrás, empezando con la salida del sistema y usando un análisis orientado hacia la salida. En el papel el desarrollo se mueve de izquierda a derecha. En primer lugar, se definen la salida o resultados esperados del procedimiento. En el nivel siguiente, mostrado mediante la inclusión por medio de una llave, se definen los pasos necesarios para producir la salida. A su vez, cada paso se define un poco más. Las llaves adicionales agrupan los procesos requeridos para producir el resultado en el siguiente nivel.
Los diagramas de Warnier/Orr ofrecen a los expertos en sistemas algunas ventajas distintivas. Son simples en apariencia y fáciles de entender. Aun así, son poderosas herramientas de diseño. Tienen la ventaja de mostrar agrupaciones de procesos y los datos que deben transferirse de nivel a nivel. Además, la secuencia del trabajo hacia atrás garantiza que el sistema estará orientado hacia el resultado.
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 2 ~
Ejemplo:
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 3 ~
Ejemplo de un robot encargado de dar la bienvenida a los invitados de una fiesta
Nota.
Se utiliza para disyuntivas
Se utiliza en el caso de concurrencia de sentencias
Dar la bienvenida(1,N)
Saludar invitado
Por la mañana?(1,N)
Decir “Buenos días”
Por la tarde?(1,N)
Decir “Buenas tardes”(1,N)
Por la noche?(1,N)
Decir “Buenas noches”(1,N)
Coger el abrigo del invitado Colgar el abrigo en el perchero
(1,N)
Ayudar al invitado a quitarse el abrigo(1,N)
Acompañar invitado al salón
+
+
+
+
+
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 4 ~
EJEMPLO. Para el ejemplo de Pi-Montecarlo cuyo código pongo a continuación, crear el diagrama de Warrier Orr
/* Importamos la clase externa Random para utilizarla luego. La * clase Random sirve para generar números pseudoaleatorios. */import java.util.Random;
/** * La clase PiMontecarlo tan solo contiene una rutina para * estimar el número PI según una variante del método de * Montecarlo. * @author Curso_programador * */public class PiMontecarlo {
/** * El método main() sirve para poder ejecutar el programa; * es, por lo tanto, obligatorio ponerlo. * @param args No se utilizan. */public static void main(String[] args) {
/* La variable entera cont servirá para contabilizar * el número de veces que repetimos la operación. Es * el número de disparos que hacemos. */int cont;/* La variable dentro servirá para contabilizar aquellos * puntos que caigan dentro del cuadrante. */int dentro = 0;/* La variable gna es un objeto de la clase Random, que * nos permitirá generar números pseudoaleatorios. */Random gna = new Random(System.currentTimeMillis());
/* Repetición de las operaciones 100000 veces. El * método de Montecarlo se basa en repetir muchas veces * un resultado aleatorio, contando cuántas de esas * veces es favorable. */for (cont = 0; cont < 100000; cont++) {
/* Generamos dos valores pseudoaleatorios entre * 0 y 1. Deben ser valores con decimales, de modo * que escogemos el tipo double para sendas * variables. * Los números pseudoaleatorios los produce el * objeto gna mediante su método nextDouble(); son * valores con decimales comprendidos entre 0 y 1. * */double x = gna.nextDouble();double y = gna.nextDouble();
/* Hacemos el cálculo de la raíz cuadrada de la * suma de los cuadrados de x e y, que se * corresponde con la distancia del punto (x,y) al * origen de coordenadas. El resultado lo metemos * en la variable d, de tipo double. */double d = Math.sqrt(x*x + y*y);
/* Aquí decidimos si el resultado es favorable o no * para el método de Montecarlo. El criterio es que * la distancia d debe ser menor que 1, en cuyo
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 5 ~
* caso se considera que el punto cayó dentro del * cuadrante. */if (d < 1.0) {
// Si cayó dentro del cuadrante, contabilizamos.
dentro++;}
}
/* Ya fuera del bucle y después de contabilizar los * puntos, hacemos el cálculo de la estimación de PI.*/double pi = 4.0 * dentro / cont;/* Imprimimos por pantalla el resultado obtenido. */System.out.println(pi);
}}
Calcularpi
Inicialización
Cont = 0(1,N)
Dentro = 0(1,N)Inicializar operador de números pseudoaleatorios
Semilla. Valor del reloj des sistema(1,N)
Disparar punto(100000) d= +√ ¿¿+y2)
(1,N)
Calcular coordenadas(1,N)
Cálculo final
+
X=random(0,1)(1,N)y=random(0,1)(1,N)
Punto dentro??(1,N)
d<=1(1,N)d>=1(1,N)
Incrementar dentro
Incrementar cont
Pi=4*(dentro/cont)
Mostrar resultado pi
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 6 ~
EJEMPLO. Realizar el diagrama de Warnier Orr para una máquina de café (sencilla), como la vista en el Diagrama de actividad siguiente
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 7 ~
Nota. En este diagrama se añaden algunos elementos como el del azúcar y el descafeinado
Máquina de café
Insertar monedas (1…*)
Teclear artículo
Selección y cobro
Preparación
Recogida
SelecciónSaldo suficiente??
si Preparacion= true
No Mostrar importeAjustar cantidad de azúcar(1….*)
Más azúcar
Menos azúcar
+
+
Preparación==true?
Colocar vaso
Preparar mezcla
Calentar agua
Moler café
Filtrar cafe
Calentar leche
Añadir leche
Añadir agitador
Café
Café c/ leche
Moler café
Calentar agua
Filtrar cafe
Desbloquear puerta
Aviso acústico
+
Descafeinado ………….
+
DIAGRAMA DE WARNIER ORR METODOLOGIA ~ 8 ~
2010-07-21
El punto de entrada:
En Java método main( )
En C/C++función main( )
EJEMPLO Así para el caso del cálculo de factores primos tendríamos un Diagrama como el que sigue:
Estructura de un programa “sencillo”
Estructura de datos
Procesamiento de los datos
Generación de los resultados
Main ( )
Solicitar número
esPrimo( )
FactoresPrimos( )
Mostrar resultados
+