Está en la página 1de 70

GRAMATICA LENGUAJE JAVA

ANTECEDENTE
Para describir la gramtica 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

Sucesin

()

Agrupa

max

Indica cantidad Mnima y mxima de Elementos

min

1. NATURALEZA DE LOS SIMBOLOS


Java define los smbolos de naturaleza:
<smbolos>:- <letras> <dgitos> <operadores><blanco>
<letras>:- <maysculas> <minsculas>
<dgitos>:-09
<operadores>: - <aritmticos> <lgicos> <relacin> <bloques> <agrupacin>
<puntuacin> <literal>
SIMBOLOS

NATURALEZA

AZ

<maysculas>

az

<minsculas>

09

<dgitos>

+ - * /%

<aritmticos >

& | (Alt 124)

<lgicos>

><=

<relacin>

{}

<bloques>

() []

<agrupacin>

,;.

<puntuacin>

<literal>
<blanco>

2. TOKENS: REGLAS (BNF)


Token: Se define como una coleccin de smbolos de igual naturaleza.
Los Token se pueden definir de naturaleza:
<Token>:- <Operadores><Operandos>
<operadores>:- ><relacin><lgicos><aritmticos<literal>
<Relacin>:- < > == (igual) <= >= != (diferente)
<Lgicos >:- || (or) && (and) ! (negacin)
Ejemplo: i<=a && j!=k || k==z
<Aritmticos>:- <nicos> <dobles>
<Aritmticos nicos>:-

+ - * / % (residuo)

<Aritmticos dobles>:- <prefijo> <infijo> <postfijos>


<prefijo>:- ++ (incremento) -- (decremento)
Ejemplo: ++i que es i=i+1
<infijo>:- += -= *= /=
Ejemplo: a+=b que es a=a+b
<postfijo>:- ++ (incremento)
-- (decremento)
Ejemplo: i++ que es i=i+1
<Literal>:-<char><cadena>
<char>:- <smbolo>
Ejemplo: a
256

<cadena>:-

Ejemplo: casa

<smbolo>

<operandos>:- <variable> <objeto>< reservada> < clase>< mtodo><numero>


<todo minscula>:- min usculas Ejemplo: static
2

<titulada>:- <mayscula> <todo minscula> Ejemplo: String


<nombre variable>: - <letra>

letra

Ejemplo: a

<nombre objeto>: - <letra> letra

Ejemplo: Cliente

<nombre reservada>: - <todo minscula> Ejemplo: int


<nombre mtodo>: - <todo minscula> titulada Ejemplo: IndexOf
1

<nombre clase>: - titulada Ejemplo:StringTokenizer


1

<numero>:- <entero> <real>


<numero entero>:-

digito Ejemplo: 9
1

<numero real>:- <numero entero> . <numero entero> Ejemplo: 3.1416

2. SINTAXIS
2.1 Declaracin de Variables y constantes
En java se puede definir dos tipos de datos a declarar:
<tipo dato>: - <tipo variable> | < nombre clase>
Declaracin de Constantes
static final <tipo variable> <nombre variable> = <valor>;
<tipo variable>: - int |float|boolean| long |byte|double|char
<valor>:- <numero> <literal>
Ejemplo: static final int salario=50000;
Declaracin de Variables: <declaracin de variable>
Formato 1: <tipo variable> <nombre variable>;
Formato 2: <tipo variable> <nombre variable> = <valor>;
Formato 3: <tipo variable> <formato 1 2>

, <Formato 1 2>;

Ejemplos:
int A; int B=5; int C, i=0;
2.2 Declaracin de Objetos
<nombre clase> <nombre objeto> = new <nombre clase> ();
Ejemplo:
Hashtable H=new Hashtable();
2.3 Declaracin, creacin, subindicacin e Inicializacin de Arreglos
Declaracin de un Arreglo:
<tipo dato> <nombre Variable>[];
Ejemplo:
int[] A;

// A es un arreglo de enteros

String S[]; // S es un arreglo de la Clase Strings

Creacin de un arreglo
<tipo dato> >nombre Variable>[]= new <tipo dato> [ <entero> ] ;
Ejemplo:
int A[]= new int[10]; // A un vector de 10 enteros
Subindicacin de un arreglo
A[0], A[1], ..., A[9] // correcto
Tamao de un arreglo:
<nombre variable> . length
Ejemplo:
A.length
Inicializacin de un arreglo:
int A[]= new int[10];
for (int i=0; i<A.length; i++)
A[i]= i;

2.4 Estructura de una Clase Java


Se define una clase como una estructura de la siguiente manera:
class <nombre clase> {
// Definicin de variables
<tipo ambiente> <declaracin de variable>
// Definicin del Constructor . Puede haber varios
public <nombre clase> (<argumentos>.)
{
// Aqu van las sentencias del constructor.
}

// Definicin de los mtodos de la clase.


<tipo ambiente> <tipo mtodo> <nombre mtodo> ( <argumentos>)
{
// Aqu van declaracin de variables, objetos, constantes, sentencias java
return <valor>;
}
}

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 mtodos que constituyen la clase.
A continuacin se escriben los constructores de la clase. Estos no devuelven
ningn 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.
Despus se escriben los diferentes mtodos de la clase. Estos son funciones
que al igual que los atributos pueden ser pblicos, privados, protegidos,
estticos.
Las sentencias que constituyen un mtodo se escriben entre dos llaves {}.
Obsrvese tambin que cada instruccin se termina con un punto y coma ;.

BNF:
<tipo ambiente>: - public | static | prvate | protected
<tipo dato>: - <tipo variable> | < nombre clase>
<tipo mtodo>: - void | <tipo dato>
<tipo variable>: - int |float|boolean| long |byte|double|char
<argumento>: - <tipo dato> <nombre objeto> | <nombre variable>
<argumentos>:- <blanco> | <argumento>

, <argumento>

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
extensin debe ser .java
Regla 3. La ejecucin de un programa comienza por una funcin
principal o funcin main(). Esta funcin debe pertenecer a una y
solamente a una clase. La clase que posee la funcin 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 extensin debe ser
.java
Regla 4. Un programa puede ser una coleccin de clases, que se
interrelacionan. Por lo tanto, se debe cumplir la Regla 3 si existe una
clase con la funcin 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 funcin main() es:
public static void main(String[] args)

Taller Primer Programa Aplicativo Java


Ingreso a la Aplicacin JCreator LE 4.50

Los tips del da, por favor pulsar el Botn Close

Para crear un Programa Fuente java es necesario:


Men File>New>File

Seleccionar la Opcin Empty Java File y despus el botn Next

En el Nombre coloque Primero y pulse el Botn Finsh

Aparece el Ambiente de Trabajo.

rea Cdigo 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 Edicin>copiar
import java.lang.*;
public class
{
public static void main(String[] args)
{

}
}

a. Men Edicin>Pegar
b. Coloque la palabra Primero en la lnea public class as:
public class Primero
c. Vamos a hacer la multiplicacin de dos numero ( c = a x b ) por medio de
sumas sucesivas , lo primero que se debe hacer es forma algortmica
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 cdigo 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 (Verificacin de errores lxicos y sintcticos)


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

Prctica De Potencia
1. Men File > Close WorkSpace
2. Seleccione desde el import hasta el segundo}
Men Edicin>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
extensin java), en este caso Potencia
b. En la Casilla de Texto Location: C:\ o utilice el botn y seleccione C:
(Carpeta Raz)
c. Pulse el Botn Finish
d. Men Edicin>Pegar en la ventana de cdigo
e. Coloque la palabra Potencia en la lnea public class as:
public class Potencia
4. Lo primero que se debe hacer es en forma algortmica
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 cdigo java debajo de
public static void main(String[] args)
{
cdigo 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 (Verificacin de errores lxicos y sintcticos)


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

Prctica De Fibonacci
1. Men File > Close WorkSpace

2. Seleccione desde el import hasta el segundo}


Men Edicin>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
extensin java), en este caso Fibonacci
b. En la Casilla de Texto Location: C:\ o utilice el botn y seleccione
C: (Carpeta Raz)
c. Pulse el Botn Finish
d. Men Edicin>Pegar Men en la ventana de cdigo
e. Coloque la palabra Fibonacci en la lnea public class as:
f. public class Fibonacci
g. Lo primero que se debe hacer es en forma algortmica

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 cdigo java debajo de
public static void main(String[] args)
{
cdigo 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 (Verificacin de errores lxicos y sintcticos)
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 DIALOGO.doc):


El mtodo showInputDialog
Este mtodo nos permite mostrar dilogos estandarizados que nos piden que
introduzcamos algn dato. Al igual que en los mtodos anteriores los
argumentos que utilizan principalmente son el mensaje a mostrar, el ttulo, etc.
A continuacin vemos un ejemplo de uso de este mtodo.
String n = JOptionPane.showInputDialog(null, "Introduce el dato");

Como podemos observar en el cdigo anterior este mtodo nos devuelve una
cadena que contiene los datos que hemos introducido en el dilogo.
Nota: Debe utilizarse import javax.swing.*;

Forma 3(Ver TALLER Paquete 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 nmeros: ");

double x = scanner.nextDouble();
double y = scanner.nextDouble();
System.out.println("producto: " + (x + y));
La clase Scanner ofrece una serie de mtodos 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( <Cadena> ); // Salta lnea e publica cadena
System.out.print( <Cadena> ); // Publica cadena
Ejemplo:
System.out.println(H o l a);

Forma 2(Ver TALLER CAJAS DE DIALOGO.doc):


El mtodo showMessageDialog
Este mtodo nos permite mostrar dilogos que muestran un mensaje y
contienen un botn de aceptacin. Los parmetro mnimos necesarios
dependen del carcter del mensaje aunque general mente son la ventana
padre, el mensaje a mostrar, el ttulo del dilogo y el tipo de mensaje que se
mostrar. En las siguientes figuras podremos ver algunos ejemplos junto al
cdigo que lo genera.
JOptionPane.showMessageDialog( null, Dilogo de informacin);

JOptionPane.showMessageDialog( null, Dilogo de advertencia, Ttulo del


Mensaje, JOptionPane.WARNING_MESSAGE);

JOptionPane.showMessageDialog( null, Dilogo


Mensaje, JOptionPane.ERROR_MESSAGE);

Nota. Debe utilizarse import javax.swing.*;

de

error,

Ttulo

del

2.7 ARBOL DE CONDICION

Cuando es necesario evaluar la presencia no de una condicin


Es ms sencillo entenderlo inicialmente como un rbol de condicin para
determinar cul es el camino lgico cuando se presente o no esta condicin

Presencia

Condicin

Ausencia

Ejemplo. Determinar cuando es mayor de edad.


rbol de Condicin

ESCRIBA Mayor de Edad


Edad>=18

Presencia

Ausencia
ESCRIBA Menor de Edad

Ejemplo. Puntos Mnimos


rbol de Condicin

ESCRIBA Pasa la prueba


Puntos>=6

Presencia

Ausencia
ESCRIBA Repetir Prueba

SINTAXIS JAVA
Forma 1:
If( <condicin> )
<sentencia> | <Bloque de Sentencias>
Forma 2:
If( <condicin> )
<sentencia> | <Bloque de Sentencias>
else
<sentencia> | <Bloque de Sentencias>
Donde:
La palabra reservada else indica Ausencia

Las BNF son:


<condicin>: : - < condicionante > <operador lgico> <condicionante>
<operador lgico>: : - && | |
<condicionante> : : - < variable > <operador de relacin> <operacin>
<operador de relacin>:: - > < >= <= == !=
<operacin> :: - <operando> <operador aritmtico> <operando>
<operando>:: - <variable> | <numero>
<operador aritmtico> :: - + / * <Bloque de Sentencias>: - { <sentencia> ; <sentencia>}

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 nmero de veces a realizar determinada(s) actividad(es)


Se realiza en cuatro momentos:
E0. Previo al Autmata
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

b
d

Existen dos clases de Autmata de Ciclo Finito:


-

Incremental
Decremental

MOMENTOS

INCREMENTAL

DECREMENTAL

INDICE=LIMITE INFERIOR

INDICE=LIMITE SUPERIOR

INDICE <= LIMITE SUPERIOR

INDICE >= LIMITE INFERIOR

SENTENCIA(S)

SENTENCIA(S)

INDICE=INDICE+1

INDICE=INDICE-1

IR AL MOMENTO b

IR AL MOMENTO b

SINTAXIS JAVA:

for( a; b; d)
c
Donde
c::- ; | <Sentencia> | <Bloque de Sentencias>

EJEMPLOS:
1. La Multiplicacin 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
Autmata
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

Autmata
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
Autmata
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 posicin n-1

4 . . . n -1

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
Autmata de Lectura
a. i = 0
b. i < n
// Tambin se puede colocar i < = n - 1
c. Lea A[ i ]
d. i =i + 1
ir al Momento b
Autmata 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 tamao del vector: ");
n=scanner.nextInt();
System.out.println();
A=new int[n];
for(i=0;i<A.length;i++)
{
System.out.print("Digite A["+i+"]: ");
A[i]=scanner.nextInt();
System.out.println();
}
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
System.exit(0);
}
}

CICLO ANIDADOS

Se presenta cuando un Autmata hace parte del momento c de otro Autmata.


Se representa de la siguiente manera:

b
d

d
c

Entonces se habla de un Autmata Externo y un Autmata Interno.


5. A nivel de interpretacin, se va a ilustrar un Autmata de Horas y un
Autmata de Minutos.
El Autmata de Horas es el Externo y su ndice Hora va desde 0 hasta 23
El Autmata de Minutos es el interno y su ndice Minuto va desde 0 hasta 59
Autmata Externo
a. Hora = 0
b. Hora < = 23
c. Autmata Interno
a. Minuto = 0
b. Minuto < = 59
c. Mostrar Hora: Minuto
d. Minuto = Minuto +1
Ir al Momento b del Autmata Interno
Fin Autmata Interno
d. Hora = Hora +1
Ir al Momento b del Autmata 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
posicin n-1
0

4 . . . n -1
0
1

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 Autmatas uno Externo para recorrer filas y un Interno
para recorrer columna por columna de la fila activa ( ndice autmata 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

Autmata de Lectura
Autmata Externo
a. i = 0
b. i < n
c.
Autmata Interno
a. j=0
b. j < n
c. Lea A[ i ] [ j ]
d. j = j +1
ir al momento b del Autmata Interno
Fin Autmata Interno
d. i =i + 1
ir al Momento b del Autmata Externo
Autmata de Escritura
Autmata Externo
a. i = 0
b. i < n
c.
Salto de Lnea
Autmata Interno
a. j=0
b. j < n
c. Escriba A[ i ] [ j ]
d. j = j +1
ir al momento b del Autmata Interno
Fin Autmata Interno
d. i =i + 1
ir al Momento b del Autmata 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<filas;i++)
{
System.out.println();
for(j=0;j<columnas;j++)
{
System.out.print("Digite A["+i+"]["+j+"]: ");
A[i][j]=scanner.nextInt();
}

}
//Escritura
System.out.println(" ------ Matriz Leida -------");
for(i=0;i<filas;i++)
{
System.out.println();
for(j=0;j<columnas;j++)
{
if(A[i][j]>=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 Autmata de Ordenamiento de un vector n posiciones porque los
autmatas 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 posicin dentro del vector) comparado y comparante:
Comparado

Comparante

Posicin 0

Posicin 1 hasta n -1

Posicin 1

Posicin 2 hasta n -1

Posicin 2

Posicin 3 hasta n -1

Se concluye entonces
Autmata Externo

Autmata Interno

Posicin i= 0n - 2

Posicin j= i + 1 . n - 1

E0:
Constante Entera n = 10
Entera A [n]

Se declara el Vector A de n posiciones

Autmata de lectura de vector


Autmata de Escritura de Vector
Autmata Externo(Comparado)
a. i=0
b. i < n -1 // Igual a n < = n-2
c.
Autmata 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 Autmata Interno
Fin Autmata Interno
d. i =i + 1
ir al Momento b del Autmata Externo
Fin Autmata Externo
Autmata 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 tamao del vector: ");
n=scanner.nextInt();
System.out.println();
A=new int[n];
for(i=0;i<A.length;i++)
{
System.out.print("Digite A["+i+"]: ");
A[i]=scanner.nextInt();
System.out.println();
}
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
for(i=0;i<A.length-1;i++)
for(j=i+1;j<A.length;j++)
if(A[i]>A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
System.out.println("Vector Ordenado");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
}
}

AUTOMATA DE CICLO MIENTRAS QUE


Se realiza una sentencia(s) siempre y cuando se presente una condicin. Esta
condicin se denomina Condicin de Permanencia(CP) .
Semnticamente se expresa Mientras que se cumpla con la condicin de
Permanencia se realizan las sentencias
Es muy importante, tener en cuenta que la condicin cambie de valor en algn
instante.

E0

b
d

Este Autmata evala la condicin de Permanencia antes de realizar


sentencias (momento c), por eso se denomina Autmata de Pre Condicin de
Permanencia
MOMENTOS

QUE PASA

E0

Estado Previo al Autmata

b.

Si se cumple CP(Condicin de Permanencia)

c.

Sentencia(s)

d.

Ir al Momento b

e.

Condicin de Salida = negacion(CP)

SINTAXIS JAVA:
while( b)
c

Donde
c::- ; | <Sentencia> | <Bloque de Sentencias>

El BNF es el siguiente:
<condicin de Permanencia>: : - < condicionante > <operador lgico> <condicionante>
<operador lgico>: : - && | |
<condicionante> : : - < variable > <operador de relacin> <operacin>
<operador de relacin>:: - > < >= <= == !=
<operacin> :: - <operando> <operador aritmtico> <operando>
<operando>:: - <variable> | <numero>
<operador aritmtico> :: - + / * -

8. Digitalizacin de un Numero

Un nmero es un conjunto de dgitos:


<Digito>:-|0|1|...|9|
<Numero>:- <digito>
Dado un nmero se debe llevar cada digito a una posicin de un vector.
Entonces,
La Unidad del Nmero a la Posicin 0
La Dcima del Nmero a la Posicin 1
La Centsima del Nmero a la posicin 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=0n-1
Condicin de Permanencia (CP)
CP:: tope<n AND x>0 // x>0 Porque debe tener dgitos a obtener

Autmata Mientras Que


b. si tope<n AND x>0 (CP)
c.
tope=tope+1
A[tope]= residuo(x,10) // x residuo de 10
x= x /10
d. ir a b
Fin Autmata Mientras Que
Autmata Escribir Vector:( 0tope)

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(tope<n && x>0)
{
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. Bsqueda 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
Autmata de lectura de vector
Autmata de Escritura de vector
Condicin de Permanencia (CP):: i<n AND A[ i ] sea diferente de x
i=0
Autmata de Bsqueda de Valor:
b. i<n AND A[ i ] sea diferente de x
c.
i= i +1
d. ir a b
Fin Autmata de Bsqueda de Valor
ESCRIBA Existe x en la posicin i
i<n

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 Tamao Vector: ");
n=scanner.nextInt();
System.out.println();
A=new int[n];
for(i=0;i<A.length;i++)
{
System.out.print("Digite A["+i+"]: ");
A[i]=scanner.nextInt();
System.out.println();
}
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
System.out.println("Lea Numero a Buscar: ");
x=scanner.nextInt();
i=0;
while(i<n && A[i]!=x)
i++;
if(i<n)
System.out.println(" Encontrado en la Posicion: "+i);
else
System.out.println(" No Encontrado ");
}
}

10. Verificar si el nmero n es primo o no.


Los Nmeros primos son aquellos que son divisible por si mismo y por la unidad.
Entonces, el ndice debe empezar en 2 y terminar en la raz cuadrada o en la mitad del
nmero.
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 mltiplo de i

Autmata 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 Autmata 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 autmatas cclicos ( 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 condicin de Permanencia.

En el caso de verificar si el nmero 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 tambin en el autmata de ciclo finito con condicin 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 mltiplo de i
Autmata 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 Autmata 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


Bsqueda 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 Tamao Vector: ");
n=scanner.nextInt();
System.out.println();
A=new int[n];
for(i=0;i<A.length;i++)
{
System.out.print("Digite A["+i+"]: ");
A[i]=scanner.nextInt();
System.out.println();
}
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
for(i=0;i<A.length-1;i++)
for(j=i+1;j<A.length;j++)
if(A[i]>A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
System.out.println("Vector Ordenado");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
System.out.println("Lea Numero a Buscar: ");
x=scanner.nextInt();
i=0;
while(i<A.length && A[i]<x)
i++;

if(i<A.length && A[i]==x)


System.out.println("Existe: "+x+" en la Posicion: "+i);
else
System.out.println("No Existe ");
System.exit(0);
}
}

AUTOMATA DE CICLO HAGA MIENTRAS QUE


Se realiza una sentencia(s) siempre y cuando se presente una condicin. Esta
condicin se denomina Condicin de Permanencia(CP) .
Semnticamente se expresa como Haga las sentencias Mientras que se
cumpla con la condicin de Permanencia.
Es muy importante, tener en cuenta que la condicin cambie de valor en algn
instante.

E0

Este Autmata realizar sentencias (momento c) y despus evala la condicin


de Permanencia , por eso se denomina Autmata de Post Condicin de
Permanencia
MOMENTOS

QUE PASA

E0

Estado Previo al Autmata

c.

Sentencia(s)

b.

Si se cumple CP(Condicin de Permanencia)


ir al Momento c

e.

Condicin de Salida = negacion(CP)

SINTAXIS Java:
do
{
c
}
while( b);

Donde
c::- ; | <Sentencia> | <Bloque de Sentencias>

El BNF es el siguiente:
<condicin de Permanencia>: : - < condicionante > <operador lgico> <condicionante>
<operador lgico>: : - && | |
<condicionante> : : - < variable > <operador de relacin> <operacin>
<operador de relacin>:: - > < >= <= == !=
<operacin> :: - <operando> <operador aritmtico> <operando>
<operando>:: - <variable> | <numero>
<operador aritmtico> :: - + / * -

11. Validacin de un Numero


Se desea que una Nota este entre 110
E0:

Condicin de Permanencia (CP)


En este caso se aplica la conceptualizacin de:
CP = negacin (Condicin de Salida CS)
CS:: nota>= 1 && nota < = 10 ; entonces
CP:: nota< 1 || nota > 10
Autmata Haga Mientras Que
c. Lea Nota
b. Si nota< 1 || nota > 10 ir a c
Fin Autmata 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. Bsqueda Binaria


Previamente debe estar ordenado el Vector
Se deben declarar tres ndices minimo, maximo y mitad
Se debe buscar un numero x en la mitadde la mitaddel vector
donde mitad= (minimo+maximo)/2
E0:
Constante Entera n = 10
Entera A [n]

Se declara el Vector A de n posiciones

Autmata de lectura de vector


Autmata de Escritura de Vector
Autmata de Ordenamiento de Vector
Autmata de Escritura de Vector
minimo=0
maximo=n-1
Lea x // valor a buscar
Condicin de Permanencia (CP)
En este caso se aplica la conceptualizacin de:
CP = negacin (Condicin de Salida CS-)
CS:: minimo > maximo || A[mitad] == x
CP:: minimo <= maximo || A[mitad] no es igual a x

Autmata 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 Autmata Haga Mientras Que

Existe posicin 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 Tamao Vector: ");
n=scanner.nextInt();
System.out.println();
A=new int[n];
for(i=0;i<A.length;i++)
{
System.out.print("Digite A["+i+"]: ");
A[i]=scanner.nextInt();
System.out.println();
}
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
for(i=0;i<A.length-1;i++)
for(j=i+1;j<A.length;j++)
if(A[i]>A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
System.out.println("Vector Ordenado");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
System.out.println("Lea Numero a Buscar: ");
x=scanner.nextInt();
menor=0;
mayor=A.length-1;
do
{

mitad=(menor+mayor)/2;
if(A[mitad]>x)
mayor=mitad-1;
if(A[mitad]<x)
menor=mitad+1;
}
while(A[mitad]!=x && mayor>=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 accin.


La Categora de Seleccin se da mediante:
-

Atmico: Valor Unico.

Conjunto de Valores: Valor1, Valor2, Valor3

Cota:

>= Valor
<= Valor
< Valor
> Valor

SINO: Cuando no se presenta los anteriores valores

Tambin se puede crear un rbol de seleccin as:


nico
Valor1,Valor2
Variables
Valor3 Hasta Valor4

Cota

En el caso del lenguaje Java la categora de seleccin es nico.

SINTAXIS JAVA:
switch(variable)
{
case valor1 :
<sentencia> | <conjunto de sentencias>
[ break; ]
case valor2 :
<sentencia> | <conjunto de sentencias>
[ break; ]

[ default:
<sentencia> | <conjunto de sentencias>
]
}

La clusula break: Es opcional. Rompe la continuidad de casos.


La clusula default: Es opcional. Cuando el valor de variable no est en el rango o
caso de valores.

Ejemplo:
Se desea clasificar por edades del 1 al 9.
La edad del 2 al 4 es Prvulos
La edad del 5 al 6 es Kinder
La edad del 7 al 9 es Infantil
switch (edad)
{
case 2:
case 3:
case 4:
cout<<Parvulos ;
break;
case 5:
case 6:
cout<<Kinder ;
break;
case 7:
case 8:
case 9:
cout<<Infantil;
default:
cout<< Mal Leda la Edad;

}
Si la edad leda es de valor 3 se toma el caso 3 y 4 caso escribiendo Prvulos y se
sale del switch por la clusula break
Si la edad leda no est en el rango de 2 al 9 se activa el segmento default
imprimiendo
Mal Leda la Edad

13. Identificar Categora segn la Edad.


La edad del 2 al 4 es Prvulos
La edad del 5 al 6 es Kinder
La edad del 7 al 9 es Infantil

E0:
Lea Edad
Autmata de Seleccin

Parvulos

2,3,4
5,6

kinder
edad
7,8,9
infantil
sino

Error

PROGRAMA EN JAVA (Compilado en JCreator)


import java.util.*;
public class Prueba14
{
public static void main(String args[])
{
int edad;
Scanner scanner = new Scanner(System.in);
System.out.print("Lea Edad: ");
edad=scanner.nextInt();
switch (edad)
{
case 2:
case 3:
case 4:
System.out.println("Parvulos ");
break;
case 5:
case 6:
System.out.println("Kinder ");
break;
case 7:
case 8:
case 9:
System.out.println("Infantil");
default:
System.out.println("Mal Leida la Edad");

}
}
}

16. Identificar Digito: Unidad, decena, centena, mil de un nmero


Autmata Haga Mientras Que (Validar que el numero este entre 19999)
c.
Lea numero
b. si numero <1 || numero> 9999 ir a c
Fin Autmata Haga Mientras Que (Validar que el numero este entre 19999)
Autmata Mientras Que (Digitalizar el numero)
E0:
n = -1
b. si numero >0
c.
n++
A[n]=residuo(n,10)
n = n /10
ir a b

Fin Autmata Mientras Que (Digitalizar el numero)


unidad

0
1

decena
i
2
centena
3

mil

PROGRAMA EN JAVA (Compilado JCreator)


import java.util.*;
public class Prueba15
{
public static void main(String[] args)
{
int i,x,n=-1;
int A[]=new int[4];
Scanner scanner = new Scanner(System.in);
do
{
System.out.println("Lea Numero a digitalizar[1...9999]: ");
x=scanner.nextInt();
}
while(x<1 || x>9999);
while(x>0)
{
n++;
A[n]= x % 10;
x/=10;
}
System.out.println();
System.out.println("Numero Digitalizado: ");
for(i=0;i<=n;i++)
switch(i)
{
case 0:
System.out.println("Unidad: "+A[i]+" ");
break;
case 1:
System.out.println("Decena: "+A[i]+" ");
break;
case 2:
System.out.println("Centena: "+A[i]+" ");
break;
case 3:
System.out.println("Mil: "+A[i]+" ");
break;
}
}
}

17. Un Men de Operaciones Aritmticas


Se lee una variable denominada opcin.
Si tecla = 1 se hace suma( c= a + b)
Si tecla = 2 se hace resta( c= a - b)
Si tecla = 3 se se hace multiplicacin(c= a * b)
Si tecla = 4 se se hace divisin(c= a / b)
Si tecla = 5 se sale del programa.
Para este programa se necesita un autmata Haga Mientras Que opcin no sea igual
a5
E0:
Lea a
Lea b
Autmata Haga Mientras Que (permanencia en el Programa)
c.
Autmata Haga Mientras Que (Validar que opcion sea 1 a 5)
c.
Borrar Pantalla
Mostrar Opciones
Lea opcion
b. si opcion <1 || opcion > 5 ir a c
Fin Autmata Haga Mientras Que (Validar que opcion sea 1 a 5)
c = a+b

1
2

c= a -b

opcion
3

c= a * b

c = a /b
Mostar resultado de Operacin
b. si opcion no es igual a 5 ir a c

PROGRAMA EN JAVA (Compilado JCreator)


import java.util.*;
public class Prueba16
{
public static void main(String[] args)
{
int a,b,c,opcion;
Scanner scanner = new Scanner(System.in);
System.out.println(" Valor de a: ");
a=scanner.nextInt();
System.out.println(" Valor de b: ");
b=scanner.nextInt();
do
{
do
{

System.out.println("1. Suma ");


System.out.println("2. Resta");
System.out.println("3. Multiplicacion");
System.out.println("4. Division");
System.out.println("5. Salir ");
System.out.println("Digite opcion [1..5]");
opcion=scanner.nextInt();
System.out.println();
}
while(opcion<1 || opcion>5);
switch(opcion)
{
case 1:
c=a+b;
System.out.println(c+" = "+a+" + "+b);
break;
case 2:

c=a-b;
System.out.println(c+" = "+a+" - "+b);
break;
case 3:
c=a*b;
System.out.println(c+" = "+a+" * "+b);
break;
case 4:
c=a/b;
System.out.println(c+" = "+a+" / "+b);
break;
}
System.out.println();
}
while(opcion!=5);
}
}

También podría gustarte