2. Diagramas de Estado. ¿Qué es y para qué se usa? Una técnica para desarrollar programas Espacialmente adecuado para programas que tienen que analizar.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
ALGORITMOS Y LENGUAJES Estructuras de Control CONDICIONAL
Metodología de la Programación
Repaso para la construcción del intérprete 2012
Resolución de Problemas y Algoritmos Buffer - Read & Readln
Variables Prof. Gonzalo Pastor.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
ESTRUCTURAS DE SECUENCIA
Una breve introducción
Variables y pruebas de escritorio
Subrutinas.
FUNCIONES Y PROCEDIMIENTOS
APLICACIONES DE PILAS Estructuras de Datos.
Tema 6: Clases Antonio J. Sierra.
Profesor: Julio Canales
Lenguaje C.
Semana 5 Subprogramas..
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Sistemas de Numeración
Análisis sintáctico LR: SLR (LR simple)
LÓGICA - DECISIONES Los valores lógicos: constantes, variables y expresiones lógicas, permiten controlar la ejecución de las sentencias de un programa.
Programación en Matlab
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Tema 2: Los tipos de datos
CI TEORIA semana 4 Estructura Algorítmica: SELECCIÓN
TEMA Nº 1 Conjuntos numéricos.
Capítulo 1 “Elementos de Programación”
Sistemas de numeración
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Resumen Fundamentos de Programación/ Programación I
Teoría – Alejandro Gonzalez
Aproximaciones por límites
EXPRESIONES Y SENTENCIAS
COMP 250.  Ejemplo:  Suponer que se necesita codificar un programa donde se muestre como resultado el string “Bienvenidos al mundo de JAVA!!!” cien.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
FILTROS. Un filtro es un programa que recibe una entrada, la procesa y devuelve una salida. Relacionando filtros simples podemos hacer prácticamente cualquier.
1. Desarrollo de Programas iterativos usando invariante
Estructuras de Control.
Análisis Léxico Área Software de Base.
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
NÚMEROS REALES.
Sentencias de repetición
Matrices Prof. Flor Narciso Departamento de Computación
FUNDAMENTOS DE PROGRAMACIÓN
LOS NUMEROS NATURALES Los números naturales son el conjunto de los números enteros positivos, y como positivo todo número que se ubica a la derecha del.
Términos algoritmo diseñar algoritmo implementar algoritmo
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
PHP con Bases de Datos Tema 2 Variables, Constantes y Tipos de Datos
 Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan miembros de una comunidad.
Pelando la cebolla 1. Aquí discutiremos lo necesario del lenguaje necesario para implementar una metodología que llamo “pelando la cebolla”. Permite abordar.
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
Presente un cuestionario con los aspectos mas importantes sobre los
ESPAD III * DÍA 12 ECUACIONES LINEALES.
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Estructuras de Decisión
Algoritmo.
Para aplicaciones.   Una variable es un espacio de memoria en donde se almacenan datos 1. VARIABLES.
ESTRUCTURAS DE DECISION MULTIPLE
DETECCION DE SEÑALES BINARIAS EN RUIDO GAUSSIANO El criterio de toma de decisión fue descrito por la ecuación Un criterio muy usado para escoger el nivel.
Gabriela Araya Baez Estudiante Ingenieria Civil Industrial.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
1 Métodos. 2 Un método es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Ing. Barros Rodriguez D. Ronald Introducción a la Programacón.
2.  Diagramas de Estado.
2.  Diagramas de Estado.
Transcripción de la presentación:

2. Diagramas de Estado

¿Qué es y para qué se usa? Una técnica para desarrollar programas Espacialmente adecuado para programas que tienen que analizar una secuencia de datos y decir algo respecto de ella Un diagrama de estados nos permite visualizar los diferentes estados por los que va pasando un programa. Las transiciones de un estado a otro se realizan ya sea incondicionalmente o bajo una condición. Además, pueden ir acompañadas de una acción que se realiza junto con la transición.

Ejemplo: Contar palabras de una frase Simplificación: la frase está almacenada en un string s, y termina con un punto String s = "Este es un ejemplo."; Para este ejemplo, una "palabra" es cualquier secuencia de caracteres consecutivos distintos de blanco (y punto). Estrategia: examinar los caracteres del string de izquierda a derecha, usando charAt(k) Lo que se haga con cada carácter depende si estábamos dentro o fuera de una palabra. Esto último corresponde a los estados del programa.

El diagrama

Expresando las transiciones como tabla ESTADOINPUTESTADO++ACCION INICIOFUERAk=0; np=0; FUERAchaAt(k) == ‘ ‘FUERAk++; FUERAchaAt(k) !== ‘ ‘DENTROnp++; k++; FUERAchaAt(k) == ‘.’FIN DENTROchaAt(k) == ‘ ‘FUERAk++; DENTROchaAt(k) !== ‘ ‘DENTROk++ DENTROchaAt(k) == ‘.’FIN

Programa: El miope np = 0; k = 0; estado = FUERA; while(estado != FIN){ c = s.charAt(k); if( estado==FUERA ) if( c!=' ' ) { estado = DENTRO; ++np; ++k; } else if (c == ‘.’) estado = FIN; else ++k; else // estado==DENTRO if( c==' ' ) { estado = FUERA; ++k; } else if (c == ‘.’) estado = FIN; else ++k; } Esto lo podría generar un autómata tomando como input la tabla

Programa: 2 versiones más “procesadas” np = 0; estado = FUERA; k = 0; while((c=s.charAt(k))!='.'){ if( estado==FUERA ) { if( c!=‘ ') { ++np; estado = DENTRO; } } else // estado==DENTRO if( c==' ' ) estado = FUERA; } ++k; } k = 0; np = 0; while( s.charAt(k)!='.' ) { // estado==FUERA while( s.charAt(k)==' ' ) ++k; if( s.charAt(k)=='.' ) break; ++np; ++k; // estado==DENTRO while( s.charAt(k)!=' ' && s.charAt(k)!='.' ) ++k; if( s.charAt(k)=='.' ) break; ++k; }

Ejemplo: Un sistema de alerta ambiental Un sistema de alerta de la calidad del aire emite una señal verde cada vez que la medición del aire está bajo el valor 50. Si esta medición sobrepasa los 50 entonces se emite una señal roja. Para volver a emitir una señal verde deben venir por lo menos 3 mediciones bajo los 50, durante las cuales se emite una señal amarilla. Suponga que las medidas para el día se ingresan por teclado cada minuto. Al final del día se ingresa un valor negativo y el computador responde con el número de minutos en que se emitió una señal verde, roja y amarilla. VR A1 A2 R=V=A=0; input<=50/++V; input>50/++R; input<=50/++A; input>50/++R ; input<=50/++V; input<=50/++A; input>50/++R;

V = R = A = 0; estado = Verde; while((n=input() >=0){ if( estado==Verde) if( n >50) { estado = Rojo;++R; } else ++V; else if (estado = Rojo) if( n <= 50 ) { estado = Amarillo1; ++A; } else ++R; else if (estado = Amarillo1) if( n <= 50 ) { estado = Amarillo2; ++A; } else estado = Rojo;++R; } else if( n <= 50 ) { estado = Verde; ++V; } else estado = Rojo;++R; } V = R = A = 0; estado = Verde; while((n=input() >=0){ if( n >50) { estado = Rojo;++R; } else //n < 50 if (estado = Rojo) estado = Amarillo1; ++A; } else if (estado = Amarillo1) estado = Amarillo2; ++A; else estado = Verde; ++V; } Programa: dos versiones

Relación Invariante-Diagrama Un invariante se puede asociar a un estado del diagrama Ejemplo: – Reordenar los elementos de a[0],..., a[n] dejando a la izquierda los =0.

Solución 1 Un invariante conocido: Su diagrama >=0< 0desconocidos ij

Solución 2 Invariante alternativo: Su diagrama >=0< 0desconocidos ij

El programa correspondientes // Version 1 i = 0;j = n; while( i<j ) { if(a[i]<0) ++i; else if(a[j]>=0) --j; else { a[i] a[j]; ++i; --j; } // Version 2 i = 0;j = n; while( i<j ) { while( i<j && a[i]<0 ) ++i; while( i =0 ) --j; if( i<j ) { a[i] a[j]; ++i; --j; }

Chequeo de expresiones PROBLEMA: Escribir una función con encabezado pubic static double valor(String s) que recibe como parámetro un string que contiene un número real terminado con un ; y entregue su valor. Si el número está mal escrito debe retornar Math.MAXDOUBLE (el máximo double que puede guardar java). No usar substring !!! Acepta: ; 456;.34; ; (retorna cero) No Acepta: ; 456,34;.34e; ; (retorna cero)

El automata (c = s.charAt(k)) Entero Decimal Fin Error Val = 0.0; k = 0; c>= ‘0’ && c<=‘9’/val=val*10 +c-’0’;k++; c== ‘.’ /n=10;k++; c>= ‘0’ && c<=‘9’/ val+=(c-’0’)/n;n*=10;k++; c== ‘;’/return val c>= ‘;’/return val c == otro/ return Math.maxDouble;

El programa // Version 1 double valor = 0; int n; int final ENTERO =1, DECIMAL =2, ERROR =3, FIN =0; estado = ENTERO; for( k=0; k = '0' ) valor = valor*10 + s.charAt(k)-'0'; else if (s.charAt(k) == ';') estado = FIN; else if (s.charAt(k) == '.') { n = 10; estado = DECIMAL; else estado = ERROR; else if(estado == DECIMAL) if( s.charAt(k) = '0' ) { valor = valor + (s.charAt(k)-'0')/n; n = n*10; } else if (s.charAt(k) == ';') estado = FIN; else estado = ERROR; } if (estado == FIN)return valor else return Math.MAXDOUBLE;

El programa // Version 2 double valor = 0; k = 0; while(k = '0') { valor = valor*10 + s.charAt(k)-'0'; k++; } if (s.charAt(k) == ';') return valor else if (s.charAt(k) != '.') return Math.MAXDOUBLE; int n = 10; while (k = '0') { valor = valor + (s.charAt(k)-'0')/n; n = n*10; k++; } if (s.charAt(k) == ';') return valor else return Math.MAXDOUBLE;

Propuestos 1- Dibujar un autómata que reconozca expresiones (termine en un estado final si está bien escrita, en uno de error si no) del tipo: unavariable= ; o sea = ; 1.1 permita uno o más espacios entre los elementos (variable, signo igual, enteros, operación, punto-coma) 1.2 después del signo = puede venir un solo número, o una cadena de ( )* 1.3 haga una función que devuelva el valor de la expresión suponiendo que solo vienen sumas de números positivos si está bien escrita, o devuelve el valor -1; 2- Dibujar un autómata que quede en un estado final si los primeros dos caracteres de una entrada que puede ser infinitamente larga (no cabe en una variable) coinciden con los últimos dos. 3- Escribir una función que tenga el encabezado public static true valido(String s) que retorna true si el string s empieza con uno o más caracteres 'a' seguidos por uno o más caraceters 'b' y terminados con uno o más caracteres 'c' seguido por un carácter ';'. Además debe imprimir (con System.out.println(....) ) la cantidad de caracteres a, b y c que venían en la secuencia. Por ejemplo: aabbbbcc;, abbbbc;, abc;, aaabc; son secuencias válidas. bbbccc;, axbbccc;, aaaccc;, aabcc (no tiene ';' al final) son inválidas.