2.  Diagramas de Estado.

Slides:



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

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ESTRUCTURAS DE SECUENCIA
Una breve introducción
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
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.
Análisis sintáctico LR: SLR (LR simple)
Tema 2: Los tipos de datos
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
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.
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Alto Nivel. Y Es un compilador. YContiene un conjunto de palabras.
Pelando la cebolla 1. Aquí discutiremos lo necesario del lenguaje necesario para implementar una metodología que llamo “pelando la cebolla”. Permite abordar.
Simulación de un AFD Conversión de un AFND a un AFD.
Algoritmo.
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.
Applications Development I 6.1 Foro Tomas Anzalotta Alvarado.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
AYUDANTÍA 2 Lenguaje Imperativo y Java. Punteros Dirección a memoria (puede apuntar a NULL). Permite trabajar con memoria (variables dinámicas de heap).
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Introducción a la Programación Multimedial
PROGRAMACION.
Convenciones de nomenclatura y diseño
Tema 6: Elementos de programación adicionales
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
¿Cómo almacenar datos dentro del computador?
NÚMEROS ENTEROS Símbolo:.
Formas de Desisión Operadores lógicos II.
Clase 8: Strings Valeria Herskovic –
Introducción a la Programación Multimedial
Anexo Chame-San Carlos
Todo archivo se guarda en el disco duro con extensión .py
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
1. Desarrollo de Programas iterativos usando invariante
Básicos de Autómatas.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Tema 6. Conceptos básicos de programación (Clase 2)
Leccion 5: Escogiendo un Tipo de Variable
Estructuras de control repetitivas
Fundamentos del lenguaje de programación Condicionales, ciclos, Métodos, enumeraciones Escuela Técnica Superior Kinal Instructor Edwin Tumax.
Teclado y Pantalla (Java estándar)
LÓGICA DE PROGRAMACIÓN
Unidad 3. Introducción a la programación
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Expresiones regulares
Aplicaciones de RECURSIVIDAD
TEMA Nº 1 Conjuntos numéricos. Aprendizajes esperados: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión, tanto.
HERRAMIENTAS DE PROGRAMACIÓN
Diego Hernández R Pascal Variables Diego Hernández R
Conjuntos numéricos. objetivos: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión. recordar la operatoria básica.
Características de “C”
Punto Flotante Además de los enteros, existen problemas que se desea modelar en la computadora que requieren de números fraccionarios, que en matemática.
Arreglos en Java.
MATEMÁTICA PARA CIENCIAS DE LA SALUD (MAT011) Edmundo Julián Peña Rozas
2.  Diagramas de Estado.
Tema 6. Conceptos básicos de programación (Clase 2)
Estructuras de Repetición Algoritmos
ProcesadorNumero PROBLEMA 1 (Laboratorio N°1)
Estructuras de control
TEMA Nº 1 Conjuntos numéricos. Aprendizajes esperados: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión, tanto.
Guía teórica de manejo de estructuras de datos
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
Pipelining Peligros de control.
Objetivos.- Los estudiantes localizarán los números enteros positivos y negativos en la recta numérica. Los estudiantes identificarán situaciones de la.
Transcripción de la presentación:

2.  Diagramas de Estado

¿Qué es y para qué se usa? Técnica para desarrollar programas Adecuado para programas que analizan una secuencia de datos y dicen algo al respecto Permite visualizar los estados por los que pasa un programa. Transiciones de un estado a otro se realizan incondicionalmente o bajo una condición. Pueden ir acompañadas de una acción que se realiza con la transición.

Ejemplo: Contar palabras de una frase Simplificación 1: frase almacenada en un string s, y termina con un punto      String s = "Este es un ejemplo."; Simplificación 2: una "palabra" es cualquier secuencia de caracteres consecutivos distintos de blanco (y punto). Estrategia: examinar los caracteres 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 ESTADO INPUT ESTADO++ ACCION INICIO FUERA k=0; np=0; chaAt(k) == ‘ ‘ k++; chaAt(k) !== ‘ ‘ DENTRO np++; k++; chaAt(k) == ‘.’ FIN k++

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; } Esto lo podría generar un programa tomando como input la tabla

Programa: 2 versiones más “procesadas” 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;   } Esta version refleja los estados En el código 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; }

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. input<=50/++V; input>50/++R; R=V=A=0; input>50/++R; V R input>50/++R; input>50/++R; input<=50/++V; input<=50/++A; A1 A2 input<=50/++A;

Programa: dos versiones 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; ++R; else if (estado = Amarillo1) if( n <= 50 )         estado = Amarillo2; ++A;         estado = Verde; ++V; } 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; }

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 y a la derecha los >=0.

Solución 1 Un invariante : Su diagrama < 0 >=0 desconocidos i j

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

El programa correspondiente // 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];       --j;     }   }           // Version 2 while( i<j ) {    while( i<j && a[i]<0 )    while( i<j && a[j]>=0 )    if( 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: 345.45; 456; .34; ;(retorna cero) No Acepta: 345.45.34; 456,34; .34e;

El automata (c = s.charAt(k)) c>= ‘0’ && c>=‘9’/ val+=c-’0’;n*=10;k++; c>= ‘0’ && c>=‘9’/val=val*10 +c-’0’;k++; c== ‘.’ /n=10;k++; Val = 0.0; k = 0; Entero Decimal c>= ‘;’/return val c== ‘;’/return val Error c== ‘;’/return val Fin 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 < s.length() && estado != FIN && estado != ERROR; ++k ){     if( estado== ENTERO)         if( s.charAt(k) <= '9' && s.charAt(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) <= '9' && 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 < s.length() && s.charAt(k) <= '9' && s.charAt(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 < s.length() && s.charAt(k) <= '9' && s.charAt(k) >= '0') {           valor = valor + (s.charAt(k)-'0')/n;           n = n*10; 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=345+438; o sea <nombre_de_variable>=<entero><op><entero>; 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 <entero>(<op><entero>)* 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.