GRAMATICA LENGUAJE JAVA ANTECEDENTE Para describir la gramática del lenguaje Java se utilizara la Forma Backus Neur (BNF). El autor utiliza las siguientes formas:
< > Elemento No Terminal – Compuesto de ó define :-
Se Define como ó compuesto de
…
Sucesión
()
Agrupa
max
Indica cantidad Mínima y máxima de Elementos
min
1. NATURALEZA DE LOS SIMBOLOS Java define los símbolos de naturaleza:
:- :- :-0…9 : - SIMBOLOS
NATURALEZA
A…Z
a…z
0…9
+ - * /%
& | (Alt 124)
><=
{}
() []
,;.
“ „
2. TOKENS: REGLAS (BNF) Token: Se define como una colección de símbolos de igual naturaleza. Los Token se pueden definir de naturaleza: :-
:- > :- < > == (igual) <= >= != (diferente) :- |||| (or) (or) && (and) ! (negación) Ejemplo: i<=a && j!=k || k==z :- <únicos> :- + - * / % (residuo) :- :- ++ (incremento) -- (decremento) Ejemplo: ++i ++i que es i=i+1 i=i+1 :- += -= *= /= Ejemplo: a+=b que es a=a+b :- ++ (incremento) -- (decremento) Ejemplo: i++ que es i=i+1 :- :- „‟
Ejemplo: „a‟ 25 6
:-”
1
Ejemplo: “casa”
“
2. TOKENS: REGLAS (BNF) Token: Se define como una colección de símbolos de igual naturaleza. Los Token se pueden definir de naturaleza: :-
:- > :- < > == (igual) <= >= != (diferente) :- |||| (or) (or) && (and) ! (negación) Ejemplo: i<=a && j!=k || k==z :- <únicos> :- + - * / % (residuo) :- :- ++ (incremento) -- (decremento) Ejemplo: ++i ++i que es i=i+1 i=i+1 :- += -= *= /= Ejemplo: a+=b que es a=a+b :- ++ (incremento) -- (decremento) Ejemplo: i++ que es i=i+1 :- :- „‟
Ejemplo: „a‟ 25 6
:-”
1
Ejemplo: “casa”
“
:- < reservada> < clase>< método> :- min min usculas Ejemplo: static 2
:- Ejemplo: String : - letra Ejemplo: a 0
: - letra Ejemplo: Cliente 0
: - Ejemplo: int : - titulada Ejemplo: IndexOf 1
: - titulada Ejemplo:StringTokenizer 1
:- :-
digito Ejemplo: 9 1
:- . Ejemplo: 3.1416 3.1416
2. SINTAXIS 2.1 Declaración de Variables y constantes En java se puede definir dos tipos de datos a declarar: : - | < nombre clase>
Declaración de Constantes static final = ; : - int |float|boolean| long |byte|double|char :- Ejemplo: static final int salario=50000;
Declaración de Variables: Formato 1: ; Formato 2: = ; Formato 3: , ; 0
Ejemplos: int A; int B=5; int C, i=0;
2.2 Declaración de Objetos = new (); Ejemplo: Hashtable H=new Hashtable();
2.3 Declaración, creación, subindicación e Inicialización de Arreglos Declaración de un Arreglo: []; Ejemplo: int[] A;
// A es un arreglo de enteros
String S[]; // S es un arreglo de la Clase Strings
Creación de un arreglo >nombre Variable>[]= new [ ] ;
Ejemplo: int A[]= new int[10]; // A un vector de 10 enteros
Subindicación de un arreglo A[0], A[1], ..., A[9] // correcto
Tamaño de un arreglo: . length
Ejemplo: A.length
Inicialización de un arreglo: int A[]= new int[10]; for (int i=0; i
2.4 Estructura de una Clase Java Se define una clase como una estructura de la siguiente manera: class { // Definición de variables // Definición del Constructor . Puede haber varios public (.) { // Aquí van las sentencias del constructor. } // Definición de los métodos de la clase. ( ) { // Aquí van declaración de variables, objetos, constantes, sentencias java return ; } } El nombre de la clase se define al inicio de la estructura. Toda la clase se escribe entre dos llaves {}. Lo primero que se suele definir son los atributos de la clase. Esto son variables que son visibles desde todos los métodos que constituyen la clase. A continuación se escriben los constructores de la clase. Estos no devuelven ningún valor y contienen las sentencias que crean los objetos de su clase. Puede haber varios constructores. Se tienen que diferenciar en los argumentos que cada uno de ellos recibe. Después se escriben los diferentes métodos de la clase. Estos son funciones que al igual que los atributos pueden ser públicos, privados, protegidos, estáticos. Las sentencias que constituyen un método se escriben entre dos llaves {}. Obsérvese también que cada instrucción se termina con un punto y coma ;.
BNF: : - public | static | prívate | protected : - | < nombre clase> : - void | : - int |float|boolean| long |byte|double|char : - | :- |
,
0
2.5 Estructura de los Programas escritos en Java La estructura de los programas escritos en Java está sujeta a las siguientes reglas:
Regla 1. Cada Programa es una Clase (clausula class) Regla 2. El nombre del archivo debe ser el mismo que el de la clase, y la extensión debe ser .java Regla 3. La ejecución de un programa comienza por una función principal ó o función main(). Esta función debe pertenecer a una y solamente a una clase. La clase que posee la función main() puede declararse como public class y se debe cumplir que el nombre del archivo debe ser el mismo que el de la clase, y la extensión debe ser .java
Regla 4. Un programa puede ser una colección de clases, que se interrelacionan. Por lo tanto, se debe cumplir la Regla 3 si existe una clase con la función main() Regla 5. Las clausula import como package es lo único permitido a estar por fuera de cualquier clase.
Nota 1. Con la clausula import se puede acceder a todas las clases de un paquete de clases. Por ejemplo: import java.util.*; Se puede acceder a las clases StringTokenizer, Hashtable, Scanner, etc del paquete de clases util
Nota 2. La manera como se escribe la función main() es: public static void main(String[] args)
Taller Primer Programa Aplicativo Java Ingreso a la Aplicación JCreator LE 4.50
Los tips del día, por favor pulsar el Botón Close
Para crear un Programa Fuente java es necesario: Menú File>New>File
Seleccionar la Opción Empty Java File y después el botón Next
En el Nombre coloque Primero y pulse el Botón Finísh
Aparece el Ambiente de Trabajo.
Área Código Java
Compilar
Ejecutar el Programa
Antecedente 1. En el import se coloca el paquete de clases Por defecto es import java.lang.*; 2. El Nombre del public class es igual al nombre del archivo Por ejemplo si el nombre del archivo es Primero.java Se debe escribir public class Primero 3. Seleccione desde el import hasta el segundo}
Menú Edición>copiar import java.lang.*; public class { public static void main(String[] args) { } }
a. Menú Edición>Pegar b. Coloque la palabra Primero en la línea public class así: public class Primero c. Vamos a hacer la multiplicación de dos numero ( c = a x b ) por medio de sumas sucesivas , lo primero que se debe hacer es forma algorítmica Entero a, b, c, i c=0 a=3 b=5 Para i = 1 hasta b c=c+a Fpara Escriba c d. Una vez modelado y probado el algoritmo se procede a codificar en Java, para eso, se debe colocar el código java debajo de
public static void main(String[] args) { Codigo java int a=3, b=5,c=0, i ; for(i=1; i<= b; i++) c+=a; System.out.println(“ La Suma igual a “+ c);
d. El Programa debe quedar así: import java.lang.*; public class Primero { public static void main(String[] args) { int a=3, b=5,c=0, i ; for(i=1; i<= b; i++) c+=a; System.out.println(“ La Suma igual a “+ c); } } Pantalla JCREATOR LE
4. Para compilar (Verificación de errores léxicos y sintácticos)
Menú Build>Build File
En la Ventana Build Output se verifica existencia de errores. En este caso no los hay. 5. Para Ejecutar el Programa
Menú Run>Run File
Si usted desea continuar, ahora vamos hacer los siguientes ejercicios: a) Potencia b) Fibonacci
Práctica De Potencia 1. Menú File > Close WorkSpace 2. Seleccione desde el import hasta el segundo}
Menú Edición>copiar import java.lang.*; public class { public static void main(String[] args) { } } 3. Es Necesario crear el archivo java:
Menú File>New>File a. En la casilla de texto Name: coloque el nombre del programa con extensión java), en este caso Potencia b. En la Casilla de Texto Location: C:\ o utilice el botón … y seleccione C: (Carpeta Raíz) c. Pulse el Botón Finish d. Menú Edición>Pegar en la ventana de código e. Coloque la palabra Potencia en la línea public class así: public class Potencia 4. Lo primero que se debe hacer es en forma algorítmica Entero pot, b, n, i pot=1 b= 3 n=5 Para i = 1 hasta n pot = pot * b Fpara Escriba pot
5. Una vez modelado y probado el algoritmo se procede a codificar en Java, para eso, se debe colocar el código java debajo de
public static void main(String[] args) { código java int i,n=5,b=4,pot=1; for(i=1;i<=n;i++) pot=pot*b; System.out.println("La Potencia es: "+pot); 6. El Programa debe quedar así: import java.lang.*; public class Potencia { public static void main(String[] args) { int i,n=5,b=4,pot=1; for(i=1;i<=n;i++) pot=pot*b; System.out.println("La Potencia es: "+pot); } } 7. Para compilar (Verificación de errores léxicos y sintácticos)
Menú Build>Build File
En la Ventana Build Output se verifica existencia de errores. En este caso no los hay. 8. Para Ejecutar el Programa
Menú Run>Run File
Práctica De Fibonacci 1. Menú File > Close WorkSpace
2. Seleccione desde el import hasta el segundo}
Menú Edición>copiar import java.lang.*; public class { public static void main(String[] args) { } }
3. Es Necesario crear el archivo java:
Menú File>New>File a. En la casilla de texto Name: coloque el nombre del programa con extensión java), en este caso Fibonacci b. En la Casilla de Texto Location: C:\ o utilice el botón … y seleccione C: (Carpeta Raíz) c. Pulse el Botón Finish d. Menú Edición>Pegar Menú en la ventana de código e. Coloque la palabra Fibonacci en la línea public class así: f. public class Fibonacci g. Lo primero que se debe hacer es en forma algorítmica
Entero a,b,c,i a=0 b=1 Para I=1 hasta 10 c=a+b Escriba(c) b=a a=c Fpara 5. Una vez modelado y probado el algoritmo se procede a codificar en Java, para eso, se debe colocar el código java debajo de
public static void main(String[] args) { código java int a=0,b=1,c=0,i; for(i=1;i<=10;i++) { c=a+b; System.out.println(c); b=a; a=c; }
6. El Programa debe quedar así: import java.lang.*; public class Fibonacci { public static void main(String[] args) { int a=0,b=1,c=0,i; for(i=1;i<=10;i++) { c=a+b; System.out.println(c); b=a; a=c; } } } 7. Para compilar (Verificación de errores léxicos y sintácticos)
Menú Build>Build File
En la Ventana Build Output se verifica existencia de errores. En este caso no los hay. 8. Para Ejecutar el Programa
Menú Run>RunFile
Taller hecho por y para ustedes. Gracias
2.6 Sentencias de Entrada/Salida Entrada de Datos: Forma 1(Ver TALLER LECTURA DESDE EL TECLADO.doc): String S; DataInputStream in=new DataInputStream(System.in); System.out.println("Digite Cadena"); try { S=in.readLine(); } catch(IOException e){}
Forma 2(Ver TALLER CAJAS DE DE DIALOGO.doc): El método showInputDialog Este método nos permite mostrar diálogos estandarizados que nos piden que introduzcamos algún dato. Al igual que en los métodos anteriores los argumentos que utilizan principalmente son el mensaje a mostrar, el título, etc. A continuación vemos un ejemplo de uso de este este método. String n = JOptionPane.showInputDialog(null, JOptionPane.showInputDialog(null, "Introduce el dato");
Como podemos observar en el código anterior este método nos devuelve una cadena que contiene los datos que hemos introducido en el diálogo. Nota: Debe Debe utilizarse import javax.swing.*; javax.swing.*;
Forma 3(Ver 3(Ver TALLER Paquete Util.doc): Util.doc): Se puede usar la Clase Scanner para realizar la entrada de datos desde teclado. Scanner scanner = new Scanner(System.in); System.out.print("Escriba dos números: ");
double x = scanner.nextDouble(); double y = scanner.nextDouble(); System.out.println("producto: " + (x + y)); La clase Scanner ofrece una serie de métodos que permiten ingresar tipos primitivos de datos utilizando: int nextInt() byte nextByte() short nextShort() long nextLong()
double nextDouble() float nextFloat()
Nota: Debe utilizarse import java.util.*;
boolean nextBoolean()
Salida de Datos: Forma 1: System.out.println( ); // Salta línea e publica cadena System.out.print( ); // Publica cadena Ejemplo: System.out.println(“H o l a”);
Forma 2(Ver TALLER CAJAS DE DIALOGO.doc): El método showMessageDialog Este método nos permite mostrar diálogos que muestran un mensaje y contienen un botón de aceptación. Los parámetro mínimos necesarios dependen del carácter del mensaje aunque general mente son la ventana padre, el mensaje a mostrar, el título del diálogo y el tipo de mensaje que se mostrará. En las siguientes figuras podremos ver algunos ejemplos junto al código que lo genera. JOptionPane.showMessageDialog( null, “Diálogo de información”);
JOptionPane.showMessageDialog( null, “Diálogo de advertencia”, “Título del Mensaje”, JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog( null, “Diálogo de error”, “ Título del Mensaje”, JOptionPane.ERROR_MESSAGE);
Nota. Debe utilizarse import javax.swing.*;
2.7 ARBOL DE CONDICION
Cuando es necesario evaluar la presencia ó no de una condición Es más sencillo entenderlo inicialmente como un árbol de condición para determinar cuál es el camino lógico cuando se presente o no esta condición
Presencia
Condición
Ausencia
Ejemplo. Determinar cuando es mayor de edad.
Árbol de Condición ESCRIBA Mayor de Edad Edad>=18
Presencia
Ausencia ESCRIBA Menor de Edad
Ejemplo. Puntos Mínimos
Árbol de Condición
ESCRIBA Pasa la prueba Puntos>=6
Presencia
Ausencia ESCRIBA Repetir Prueba
SINTAXIS JAVA Forma 1: If( ) | Forma 2: If( ) | else | Donde: La palabra reservada else indica Ausencia
Las BNF son: : : - < condicionante > ∫ : : - && | | : : - < variable > :: - > < >= <= == != :: - ∫ :: - | :: - + / * : - { ; …}
PROGRAMA EN JAVA (Compilado JCREATOR) DEL MAYOR DE EDAD import java.util.*; public class Prueba1 { public static void main(String args[]) { int edad; Scanner scanner = new Scanner(System.in); System.out.print("Lea edad: "); edad = scanner.nextInt(); if(edad>=18) System.out.print("Es mayor de Edad "); else System.out.print("Es menor de Edad "); } } PROGRAMA EN JAVA (Compilado JCREATOR) PUNTOS MINIMOS
import java.util.*; public class Prueba2 { public static void main(String args[]) { int puntos; Scanner scanner = new Scanner(System.in); System.out.print("Lea puntos: "); puntos = scanner.nextInt(); if(puntos>=6) System.out.print(" Paso la Prueba "); else System.out.print(" Perdio la Prueba "); } }
2.8 AUTOMATA DE CICLO FINITO
Se conoce el número de veces a realizar determinada(s) actividad(es) Se realiza en cuatro momentos: E0. Previo al Autómata a. b. c. d.
Inicializar el Índice Comparar el Índice contra una cota o limite superior e inferior Actividad(es) a Realizar Incremento o decremento de Índice
a
b
c
d
Existen dos clases de Autómata de Ciclo Finito: - -
Incremental Decremental
MOMENTOS
INCREMENTAL
DECREMENTAL
a
INDICE=LIMITE INFERIOR
INDICE=LIMITE SUPERIOR
b
INDICE <= LIMITE SUPERIOR
INDICE >= LIMITE INFERIOR
c
SENTENCIA(S)
SENTENCIA(S)
d
INDICE=INDICE+1
INDICE=INDICE-1
IR AL MOMENTO b
IR AL MOMENTO b
SINTAXIS JAVA:
for( a; b; d) c Donde c::- ; | |
EJEMPLOS: 1. La Multiplicación de A X B por medio de Suma. Esta suma se representa como la sumatoria de B en A – Veces. A ∑ B=0+B+B+B i=1 A - Veces El índice i va desde 1 hasta A ó sea i = 1… A Limite Inferior =1 Limite Superior = A E0. S=0 La Sumatoria se debe iniciar en 0 Lea A Lea B Autómata a. i=1 b. i <= A c. S=S+B d. i=i+1 ir al Momento b PROGRAMA EN JAVA (Compilado JCREATOR) import java.util.*; public class Prueba3 { public static void main(String args[]) { int a,b,c=0,i; Scanner scanner = new Scanner(System.in); System.out.println("Lea a: "); a = scanner.nextInt(); System.out.println("Lea b: "); b = scanner.nextInt(); for(i=1; i<= b; i++) c+=a; System.out.println(" La Suma igual a: "+ c); } }
2. El Factorial de un numero n. Lea n Л i = 1*1*2*3*….n (Multiplicatoria de i n veces) i=1 n - Veces El índice i va desde 1 hasta n ó sea i = 1… n Limite Inferior =1 Limite Superior = n E0. F=1 Lea n
La Multiplicatoria se debe iniciar en 1
Autómata a. i=1 b. i <= n c. F = F * i d. i=i+1 ir al Momento b PROGRAMA EN JAVA (Compilado JCREATOR) import java.util.*; public class Prueba4 { public static void main(String args[]) { int f=1,n,i; Scanner scanner = new Scanner(System.in); System.out.println("Lea n: "); n = scanner.nextInt(); for(i=1;i<=n;i++) f*=i; System.out.println(" Factorial es: "+ f); } }
3. Listar hasta el Termino n esimo de la serie de Fibonacci El índice i va desde 1 hasta n ó sea i = 1… n Limite Inferior =1 Limite Superior = n E0. Padre=0 Abuelo= 1 Lea n Autómata a. i=1 b. i <= n c. Nieto = Padre + Abuelo Escribir Nieto Abuelo = Padre Padre = Nieto d. i=i+1 ir al Momento b PROGRAMA EN JAVA (Compilado JCREATOR) import java.util.*; public class Prueba5 { public static void main(String args[]) { int Padre=0, Abuelo=1, Nieto, i, n; Scanner scanner = new Scanner(System.in); System.out.println("Lea n: "); n = scanner.nextInt(); for(i=1;i<=n;i++) { Nieto=Padre+Abuelo; System.out.println(Nieto); Abuelo=Padre; Padre=Nieto; } } }
4. Lectura y escritura de un vector Un vector es un Arreglo Unidimensional Se debe declarar un Vector de n – posiciones. Las posiciones de un vector en este caso inician en 0 y llegan hasta la posición n-1
0 1
2
3
4 . . . n -1
A
Entonces para recorrer un vector se requiere de un índice que:
indice = 0 … n – 1 Limite Inferior = 0 Limite Superior = n – 1 E0: Constante Entera n = 10 Entera A [n] Se declara el Vector A de n – posiciones Autómata de Lectura a. i = 0 b. i < n // También se puede colocar i < = n - 1 c. Lea A[ i ] d. i =i + 1 ir al Momento b Autómata de Escritura a. i = 0 b. i < n c. Escribir A[ i ] d. i =i + 1 ir al Momento b
PROGRAMA EN JAVA (Compilado JCREATOR) import java.util.*; public class LecturaVector { public static void main(String[] args) { int n,i,j,aux; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Dimension o tamaño del vector: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; for(i=0;i
CICLO ANIDADOS
Se presenta cuando un Autómata hace parte del momento c de otro Autómata. Se representa de la siguiente manera:
a
b d
c d c
Entonces se habla de un Autómata Externo y un Autómata Interno. 5. A nivel de interpretación, se va a ilustrar un Autómata de Horas y un Autómata de Minutos. El Autómata de Horas es el Externo y su índice Hora va desde 0 hasta 23 El Autómata de Minutos es el interno y su índice Minuto va desde 0 hasta 59 Autómata Externo a. Hora = 0 b. Hora < = 23 c. Autómata Interno a. Minuto = 0 b. Minuto < = 59 c. Mostrar Hora: Minuto d. Minuto = Minuto +1 Ir al Momento b del Autómata Interno Fin Autómata Interno d. Hora = Hora +1 Ir al Momento b del Autómata externo
PROGRAMA EN JAVA (Compilado JCREATOR) public class Prueba6 { public static void main(String args[]) { int Hora, Minuto; for(Hora=0;Hora<24;Hora++) { System.out.println(); for(Minuto=0;Minuto<60;Minuto++) System.out.println(Hora+":"+Minuto); } } }
6. Lectura y Escritura de una matriz Una Matriz es un Arreglo Bidimensional. Se puede representar como un conjunto de Vectores, donde se estructura por filas y columnas Se debe declarar una Matriz de n – posiciones por n - posiciones. Donde las primeras n – Posiciones representan las Filas Las Segundas n – Posiciones representan las Columnas En el caso de Java como C, las filas como las columnas inician en 0 y llegan hasta la posición n-1 0 1
2
3
4 . . . n -1 0 1
A
FILAS
n-1
COLUMNAS Para recorrer una Matriz se requiere de un índice para las filas y otro índice para las columnas: Entonces, se necesita de dos Autómatas uno Externo para recorrer filas y un Interno para recorrer columna por columna de la fila activa ( índice autómata externo).
indice Externo= 0 … n – 1. Se toma como el índice i Indice Interno= 0… n – 1. Se toma como el índice j Limite Inferior = 0 Limite Superior = n – 1 E0: Constante Entera n = 10 Entera A [n] [n] Se declara una Matriz A de n – posiciones por n - posiciones
Autómata de Lectura Autómata Externo
a. i = 0 b. i < n c. Autómata Interno
a. j=0 b. j < n c. Lea A[ i ] [ j ] d. j = j +1 ir al momento b del Autómata Interno Fin Autómata Interno
d. i =i + 1 ir al Momento b del Autómata Externo
Autómata de Escritura Autómata Externo
a. i = 0 b. i < n c. Salto de Línea Autómata Interno
a. j=0 b. j < n c. Escriba A[ i ] [ j ] d. j = j +1 ir al momento b del Autómata Interno Fin Autómata Interno
d. i =i + 1 ir al Momento b del Autómata Externo
PROGRAMA EN JAVA (Compilado JCREATOR) import java.util.*; class LecturaEscrituraMatriz { public static void main(String[] args) { int filas, columnas,i,j; Scanner scanner = new Scanner(System.in); System.out.println("Digite las filas "); filas = scanner.nextInt(); System.out.println("Digite las columnas "); columnas = scanner.nextInt(); int A[][]=new int[filas][columnas]; //Lectura() for(i=0;i=10) System.out.print(A[i][j]+" "); else
System.out.print(A[i][j]+" "); } } System.out.println(); System.exit(0); } } 7. Ordenamiento de un Vector Solo se analiza el Autómata de Ordenamiento de un vector n – posiciones porque los autómatas de lectura y escritura en un vector fueron ya analizados.
Se toma como caso un ordenamiento sencillo que este autor lo denomina lineal que consiste en dos índices (indica posición dentro del vector) comparado y comparante: Comparado
Comparante
Posición 0
Posición 1 hasta n -1
Posición 1
Posición 2 hasta n -1
Posición 2
Posición 3 hasta n -1
Se concluye entonces Autómata Externo
Autómata Interno
Posición i= 0…n - 2
Posición j= i + 1 …. n - 1
E0: Constante Entera n = 10 Entera A [n]
Se declara el Vector A de n – posiciones
Autómata de lectura de vector Autómata de Escritura de Vector Autómata Externo(Comparado)
a. i=0 b. i < n -1 // Igual a n < = n-2 c. Autómata Interno(Comparante)
a. j = i + 1 b. j < n // Igual a n<= n -1 c. Si A[ i ] > A[ j ] k= A[ i] A[ i ] = A[ j ] A[ j ] = k Fin Si d. j = j +1 ir al momento b del Autómata Interno Fin Autómata Interno
d. i =i + 1 ir al Momento b del Autómata Externo Fin Autómata Externo
Autómata Escritura vector
PROGRAMA EN Java (Compilado JCreator) import java.util.*; public class OrdenVector { public static void main(String[] args) { int n,i,j,aux; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Dimension o tamaño del vector: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; for(i=0;iA[j]) { aux=A[i]; A[i]=A[j]; A[j]=aux; } System.out.println("Vector Ordenado"); for(i=0;i
AUTOMATA DE CICLO MIENTRAS QUE Se realiza una sentencia(s) siempre y cuando se presente una condición. Esta condición se denomina Condición de Permanencia(CP) . Semánticamente se expresa Mientras que se cumpla con la condición de Permanencia se realizan las sentencias Es muy importante, tener en cuenta que la condición cambie de valor en algún instante.
E0
b
e d
c
Este Autómata evalúa la condición de Permanencia antes de realizar sentencias (momento c), por eso se denomina Autómata de Pre Condición de Permanencia
MOMENTOS
QUE PASA
E0
Estado Previo al Autómata
b.
Si se cumple CP(Condición de Permanencia)
c.
Sentencia(s)
d.
Ir al Momento b
e.
Condición de Salida = negacion(CP)
SINTAXIS JAVA: while( b) c
Donde c::- ; | |
El BNF es el siguiente: : : - < condicionante > ∫ : : - && | | : : - < variable > :: - > < >= <= == != :: - ∫ :: - | :: - + / * -
8. Digitalización de un Numero
Un número es un conjunto de dígitos: :-|0|1|...|9| :- ∫ Dado un número se debe llevar cada digito a una posición de un vector. Entonces, La Unidad del Número a la Posición 0 La Décima del Número a la Posición 1 La Centésima del Número a la posición 2 y así sucesivamente. E0: Entero A[n] Vector de n - posiciones Lea x // Numero tope=-1 // Cuando ingresa al ciclo se incrementa y debe cumplir tope=0…n-1 Condición de Permanencia (CP) CP:: tope0 // x>0 Porque debe tener dígitos a obtener
Autómata Mientras Que b. si tope0 (CP) c. tope=tope+1 A[tope]= residuo(x,10) // x residuo de 10 x= x /10 d. ir a b Fin Autómata Mientras Que
Autómata Escribir Vector:( 0…tope)
PROGRAMA EN Java (Compilado JCreator) import java.util.*; public class Prueba7 { public static void main(String[] args) { int n,i,x,tope=-1; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Numero de Digitos: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; System.out.println("Lea Numero a digitalizar: "); x=scanner.nextInt(); while(tope0) { tope++; A[tope]= x % 10; x/=10; } System.out.println(); System.out.println("Numero Digitalizado: "); for(i=tope;i>=0;i--) System.out.println("A["+i+"]: "+A[i]+" "); } }
9. Búsqueda de un valor x en un vector no ordenado E0: Constante Entera n = 10 Entera A [n] Se declara el Vector A de n – posiciones Lectura x // valor a buscar dentro del vector Autómata de lectura de vector Autómata de Escritura de vector Condición de Permanencia (CP):: i
Presencia
Ausencia ESCRIBA No exista el valor x
PROGRAMA EN Java (Compilado JCreator) import java.util.*; public class Prueba8 { public static void main(String[] args) { int n,i,x; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Tamaño Vector: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; for(i=0;i
10. Verificar si el número n es primo o no. Los Números primos son aquellos que son divisible por si mismo y por la unidad. Entonces, el índice debe empezar en 2 y terminar en la raíz cuadrada o en la mitad del número. Se toma entonces el intervalo del índice como de 2 hasta n/2 E0. Lea n i=2 CP:: i<=n/2 AND residuo(n,i) no sea 0 , ó sea, n no sea múltiplo de i Autómata del Primo b. si i<=n/2 AND residuo(n,i) no sea 0 c. i=i+1 d. ir a b ESCRIBA n no es primo i<= n /2
Presencia
Ausencia ESCRIBA n es primo
Fin Autómata del Primo
PROGRAMA EN JAVA (Compilado JCreator) import java.util.*; public class Prueba9 { public static void main(String[] args) { int i,n; Scanner scanner = new Scanner(System.in); System.out.println("Lea Numero a Evaluar: "); n=scanner.nextInt(); i=2; while(i<=n/2 && n%i!=0) i++; if(i<=n/2) System.out.println(n+" No es primo "); else System.out.println(n+" Es primo "); } } Algo muy interesante para enriquecer y relacionar los dos autómatas cíclicos ( finito y mientras que) se presenta bajo dos antecedentes: -
Antecedente 1: Existe un conteo ó rango que comprende un limite inferior hasta limite superior Antecedente 2: Cuando el índice que controla el conteo o rango esta presente en los condicionantes de la condición de Permanencia.
En el caso de verificar si el número n es primo o no. El índice i se establece entre 2 hasta n/2(condicionante 1) El residuo(n,i) no sea 0 (condicionante 2) Por lo tanto, se puede realizar también en el autómata de ciclo finito con condición de permanencia
SINTAXIS JAVA: for( a; b; d) c E0. Lea n CP:: i<=n/2 AND residuo(n,i) no sea 0 , ó sea, n no sea múltiplo de i Autómata del Primo a. i = 2 b. si i<=n/2 AND residuo(n,i) no sea 0 c. d. i = i + 1 ir a b Fin Autómata del Primo ESCRIBA n no es primo i<= n /2
Presencia
Ausencia ESCRIBA n es primo
PROGRAMA EN JAVA (Compilado JCreator) import java.util.*; public class Prueba10 { public static void main(String[] args) { int i,n; Scanner scanner = new Scanner(System.in); System.out.println("Lea Numero a Evaluar: "); n=scanner.nextInt(); for(i=2;i<=n/2 && n%i!=0;i++); if(i<=n/2) System.out.println(n+" No es primo "); else System.out.println(n+" Es primo "); } }
OTRO PROGRAMA DE BUSQUEDA EN UN VECTOR Búsqueda Lineal en un Vector Ordenado import java.util.*; public class Prueba11 { public static void main(String[] args) { int n,i,j,aux,x; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Tamaño Vector: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; for(i=0;iA[j]) { aux=A[i]; A[i]=A[j]; A[j]=aux; } System.out.println("Vector Ordenado"); for(i=0;i
if(i
AUTOMATA DE CICLO HAGA MIENTRAS QUE Se realiza una sentencia(s) siempre y cuando se presente una condición. Esta condición se denomina Condición de Permanencia(CP) . Semánticamente se expresa como Haga las sentencias Mientras que se cumpla con la condición de Permanencia. Es muy importante, tener en cuenta que la condición cambie de valor en algún instante.
E0
b
c
Este Autómata realizar sentencias (momento c) y después evalúa la condición de Permanencia , por eso se denomina Autómata de Post Condición de Permanencia
MOMENTOS
QUE PASA
E0
Estado Previo al Autómata
c.
Sentencia(s)
b.
Si se cumple CP(Condición de Permanencia) ir al Momento c
e.
Condición de Salida = negacion(CP)
SINTAXIS Java: do { c } while( b);
Donde c::- ; | |
El BNF es el siguiente: : : - < condicionante > ∫ : : - && | | : : - < variable > :: - > < >= <= == != :: - ∫ :: - | :: - + / * -
11. Validación de un Numero Se desea que una Nota este entre 1…10 E0:
Condición de Permanencia (CP) En este caso se aplica la conceptualización de: CP = negación (Condición de Salida – CS) CS:: nota>= 1 && nota < = 10 ; entonces CP:: nota< 1 || nota > 10 Autómata Haga Mientras Que c. Lea Nota b. Si nota< 1 || nota > 10 ir a c Fin Autómata Haga Mientras Que
ESCRIBA Pasa la prueba nota>=6
Presencia
Ausencia ESCRIBA Repetir Prueba
Programa compilado en JCreator import java.util.*; public class Prueba13 { public static void main(String args[]) { int nota; Scanner scanner = new Scanner(System.in); do { System.out.print("Lea Nota: "); nota = scanner.nextInt(); } while(nota<1 || nota>10); if(nota>=6) System.out.print(" Paso la Prueba "); else System.out.print(" Perdio...repetir la Prueba "); } }
12. Búsqueda Binaria Previamente debe estar ordenado el Vector Se deben declarar tres índices minimo, maximo y mitad Se debe buscar un numero x en la mitad…de la mitad…del vector donde mitad= (minimo+maximo)/2 E0: Constante Entera n = 10 Entera A [n]
Se declara el Vector A de n – posiciones
Autómata de lectura de vector Autómata de Escritura de Vector Autómata de Ordenamiento de Vector Autómata de Escritura de Vector minimo=0 maximo=n-1 Lea x // valor a buscar Condición de Permanencia (CP) En este caso se aplica la conceptualización de: CP = negación (Condición de Salida – CS-) CS:: minimo > maximo || A[mitad] == x CP:: minimo <= maximo || A[mitad] no es igual a x
Autómata Haga Mientras Que c. mitad = (minimo+maximo) /2 minimo= mitad +1 A[mitad]< x
Presencia
Ausencia
maximo= mitad -1 A[mitad]> x
Presencia
Ausencia
b. Si minimo <= maximo || A[mitad] no es igual a x vaya a c. Fin Autómata Haga Mientras Que
Existe posición mitad A[mitad]= = x
Presencia
Ausencia No existe
Programa compilado en JCreator import java.util.*; public class Prueba12 { public static void main(String[] args) { int n,i,j,aux,x; int menor,mayor,mitad; int A[]; Scanner scanner = new Scanner(System.in); System.out.println("Lea Tamaño Vector: "); n=scanner.nextInt(); System.out.println(); A=new int[n]; for(i=0;iA[j]) { aux=A[i]; A[i]=A[j]; A[j]=aux; } System.out.println("Vector Ordenado"); for(i=0;i
mitad=(menor+mayor)/2; if(A[mitad]>x) mayor=mitad-1; if(A[mitad]=menor); if(A[mitad]==x) System.out.println("Existe: "+x+" en la Posicion: "+mitad); else System.out.println("No Existe "); }
}
AUTOMATA DE SELECCION De Acuerdo al valor de una y solamente una variable se realiza una acción. La Categoría de Selección se da mediante: -
Atómico: Valor Unico.
-
Conjunto de Valores: Valor1, Valor2, Valor3
-
Cota:
>= Valor <= Valor
-
<
Valor
>
Valor
SINO: Cuando no se presenta los anteriores valores
También se puede crear un árbol de selección así:
Único Valor1,Valor2 Variables Valor3 Hasta Valor4
Cota
En el caso del lenguaje Java la categoría de selección es Único.
SINTAXIS JAVA: switch(variable) { case valor1 : |