Sunteți pe pagina 1din 49

Universidad Nacional

Del Santa

Ing. Sistemas e Informtica

SEMANA #07: ESTRUCTURA LINEAL: PILAS. OPERACIONES BASICAS.


Ejercicio 2:
D
A + BC F G H
E

Forma Infija:
A +( BCD/(E F )G)H
Forma Prefija:
A +( BCD/(E F )G)H
A +(BCD/[ EF]G)H

A +([ BC ]D/[ EFG ])H


[ BC ]H
A+

BC / DEFG H
A+
BC /D EFGH
A+
+ A BC / D EFGH
Forma Sufija:
A +( BCD/(E F )G)H
BCD/H
A +
BCD/H

A+
BCH

A+

BC GH
A+

BC GH
A+
ABC GH+
Ejercicio 3:
b b24 ac
2a

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Forma infija:
( - B + ( ( B ^ 2 4 * A * C) ^ 1 / 2 ) ) / 2 *A
Forma Prefija:
( - B + ( ( B ^ 2 4 * A * C) ^ 1 / 2 ) ) / 2 *A
-B + ( ( [^ B 2] [* * 4 A C] )^ [ /1 2 ] ) / * 2 A
-B + ( [ - ^B 2 * * 4 A C]^ [/ 1 2 ] ) / *2 A
[-B] + [^ - ^B 2 * * 4 A C / 1 2 /] / *2 A
[+ - B ^ - ^B 2 * * 4 A C / 1 2 ] / [*2 A ]
/ + - B ^- ^ B 2 * * 4 A C / 1 2 *2 A
Forma Sufija:
( - B + ( ( B ^ 2 4 * A * C) ^ 1 / 2 ) ) / 2 *A
(- B + ( ( [B 2 ^] [ 4 A C * *] ) ^ [1 2 / ] / 2 A *
(- B + ( [B 2 ^ 4 A C * *-]^ [1 2 / ] / 2 A *
[- B] + [B 2 ^ 4 A C * *- 1 2 /^ ] / 2 A *
[ -B B 2 ^ 4 A C * *- 1 2 /^ + ] / [ 2 A * ]
-B B 2 ^ 4 A C * *- 1 2 /^ + 2 A * /

Ejercicio 4:
234567+*+*+
PASO
1
2
3
4
5
6
7
8
9
10
11

EXPO
2
3
4
5
6
7
+
*
+
*
+

7
13
65
69
207

6
5
4
3
2

PILA
2
2,3
2, 3, 4
2, 3, 4, 5
2, 3, 4, 5, 6
2, 3, 4, 5, 6, 7
2, 3, 4, 5, 13
2, 3, 4, 65
2, 3, 69
2, 207
209

Ejercicio 5:
12, 8, 3, -, /, 1, 2, 4, 6, +, *, +, +
PASO
1
2
3
4
5

EXPO
12
8
3
/

3
5

8
12

PILA
12
12, 8
12, 8, 3
12,5
2.4

Universidad Nacional
Informtica
Del Santa
6
7
8
9
10
11
12
13

1
2
4
6
+
*

+
+

Ejercicio 6:
N
S= (2 A+ ( N 1 )D)
2
Forma infija:
(N /2)( 2A+( N1)D)
Forma Prefija:
(N /2)( 2A+( N1)D)
[ N 2](2A +( N 1)D)

[ N 2](2A +[N 1]D)


[ N 2]([ 2 A]+[N 1]D)

[ N 2]([ 2 A]+[N 1 D ])
[ N 2][+ 2 AN 1 D]
/ N 2+ 2 AN 1 D
Forma Sufija:
(N /2)( 2A+( N1)D)
N 2/(2A+(N1)D)

2A+
N 2/

2 A+

N 2/

2 A+

N 2/

2 AN 1D+
N 2/

6
10
20
21

Ing. Sistemas e

4
2
1
2.4

2.4, 1
2.4, 1, 2
2.4, 1, 2, 4
2.4, 1, 2, 4, 6
2.4, 1, 2, 10
2.4, 1, 20
2.4, 21
23.4

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

N 2/2 AN 1D+

Ejercicio 7
1R N
G= A
1R
Forma infija:
A *( ( 1 R^N ) / (1 R ) )
Forma prefija:
A *( ( 1 R^N ) / (1 R ) )
A * ([ 1 ] [ ^ R N ] / ( - 1 R ) )
A * ( [ - 1 ^ R N ] / ( -1 R ) )
A * [ / - 1 ^ R N -1 R]
* A / - 1 ^ R N -1 R
Forma sufija:
A *( ( 1 R^N ) / (1 R ) )
A * ( [ 1 ] [ R N ^] ) / ( 1 R - ) )
A * ( [ 1 R N ^ - ] / [ 1 R -] )
A*1RN^- 1R-/
A 1RN^- 1R-/*
SEMANA #08: ALGORITMO CON PILAS
1. Codificar el algoritmo de Transformacin de una expresin Infija a
Expresin Postfija en la herramienta de programacin de laboratorio.
package infija.a.postfija;
import javax.swing.JOptionPane;
public class InfijaAPostfija {
public static int Jerarquia(char x) {
char aux = ' ';
if (x == '^') {
aux = 5;
} else if (x == '*' || x == '/') {
aux = 4;
} else if (x == '+' || x == '-') {
aux = 3;
}
return aux;
}
public static void main(String[] args) {
// TODO code application logic here
String Cadena = JOptionPane.showInputDialog("ingrese la operacion infija");
char Infija[] = new char[Cadena.length() + 1];
char Pila[] = new char[Cadena.length() + 1];
char Expo[] = new char[Cadena.length() + 1];
String Postfija = " ";
int TopePila = 0,TopeExpo = -1;

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Pila[TopePila] = '(';
for (int i = 0; i < Cadena.length(); i++) {
Infija[i] = Cadena.charAt(i);
}
int n = Cadena.length();
Infija[n] = ')';
while (TopePila != -1) {
for (int i = 0; i <= Cadena.length(); i++) {
char x = Infija[i];
if (x == '^' || x == '*' || x == '/' || x == '+' || x == '-') {
if (Pila[TopePila] == '(') {
TopePila=TopePila+1;
Pila[TopePila] = x;
} else {
if (Jerarquia(Pila[TopePila]) >= Jerarquia(x)) {
while (Pila[TopePila] != '(') {
TopeExpo=TopeExpo+1;
Expo[TopeExpo] = Pila[TopePila];
TopePila=TopePila-1;
}
if (Pila[TopePila] == '(') {
TopePila=TopePila+1;
Pila[TopePila] = x;
}
} else {
TopePila=TopePila+1;
Pila[TopePila] = x;
}
}
} else if (x == '(') {
TopePila=TopePila+1;
Pila[TopePila] = x;
} else if (x == ')') {
do {
if (Pila[TopePila] == '(') {
TopePila=TopePila-1;
} else {
TopeExpo=TopeExpo+1;
Expo[TopeExpo] = Pila[TopePila];
TopePila=TopePila-1;
}
} while (Pila[TopePila + 1] != '(');
} else {
TopeExpo=TopeExpo+1;
Expo[TopeExpo] = x;
}
}
}

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

for (int i=0;i<Expo.length;i++){


Postfija = Postfija +""+ Expo[i];
}
JOptionPane.showMessageDialog(null, "La expresin posfija es:
"+Postfija );
}
}
2. Codificar el algoritmo de Evaluacin de Expresiones Postfijas en la
herramienta de programacin de laboratorio.
3. Cierto nmero de usuarios, n, envan simultneamente un
documento a la impresora comn, la cual debe determinar su orden de
impresin. Las longitudes de los documentos enviados son l1...ln,
siendo li la longitud del documento enviado por el usuario i (la
numeracin de los usuarios es arbitraria). Suponiendo que el tiempo
que se tarda en imprimir un documento es proporcional a su longitud,
Escribir el algoritmo (Pseudo cdigo) que indique el orden ptimo en
que se deben imprimir de manera que se minimice el tiempo medio de
espera de cada usuario. El tiempo de espera del usuario i-simo
vendr dado por el orden que haya establecido la impresora para su
documento. Si su documento es el j-simo en imprimirse, su tiempo de
espera ser la suma de los tiempos de impresin de los j primeros
documentos segn ese orden (se incluye el suyo en la suma). Los
usuarios deben estar enterados del tiempo que les tomar esperar.
4. Dados los caracteres (), [] y {}, y una cadena s; s esta balanceada
si tiene alguno de estos formatos, s = "", (string nulo), s = (T), s = [T],
s = {T}, s = TU en donde T y U son cadenas balanceadas (en otras
palabras, para cada parntesis, llave o corchete abierto existe un
carcter de cierre correspondiente). Ejemplo {(a+b) [(cd) ^2]}.
Escribir el Algoritmo (Pseudo cdigo) que use una PILA para ver si una
cadena es balanceada.
5. Escribir el algoritmo (Pseudo cdigo) que maneje tres pilas de
DATOS (A, B y C) en un solo arreglo implementado como lista
enlazada. Las pilas pueden decrecer o crecer en cada momento, pero
el tamao del arreglo no variar. Si una pila necesita ms espacio solo
tiene que tomarlo del arreglo que tiene 15 lugares en funcin a su
lista de disponibles, si las 3 pilas completan los 15 lugares entonces
se manda un mensaje de pila llena. Al ingresar un dato se deber leer
adems el nombre de pila donde se desea colocarla. Contemplar la
posibilidad de eliminar un dato de cualquier pila, lo que provoca
incrementar la lista de disponibles.
CODIGO EN JAVA
import javax.swing.JOptionPane;
public class Mostrar {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

char pilaA[] = new char[16];


char pilaB[] = new char[16];
char pilaC[] = new char[16];
char arreglo[] = new char[16];
int x, a;
int topea = 0, frenteb = 0, topeb = 5, frentec = 11, topec = 10;
int contaa = 0, contab = 5, contac = 10;
char dato, dato2;
public void IPilaA() {
if (topea + 1 == frenteb) {
System.out.println("Cola A llena");
} else {
System.out.println("El dato " + dato + " fue ingresado en la Pila A");
topea++;
pilaA[topea] = dato;
arreglo[topea] = dato;
contaa++;
}
}
public void IPilaB() {
if (topea + 1 == frentec) {
System.out.println("Cola B llena");
} else {
System.out.println("El dato " + dato + " fue ingresado en la Pila B");
frenteb = 6;
topeb++;
pilaB[topeb] = dato;
arreglo[topeb] = dato;
contab++;
}
}
public void IPilaC() {
if (topea + 1 == 16) {
System.out.println("Cola C llena");
} else {
System.out.println("El dato " + dato + " fue ingresado en la Pila C");
frentec = 11;
topec++;
pilaC[topec] = dato;
arreglo[topec] = dato;
contac++;
}
}
public void mostrar() {
System.out.println("Pila A:");
for (int i = 1; i < contaa + 1; i++) {
System.out.print("[" + pilaA[i] + "]");

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

}
System.out.println(" ");
System.out.println("Pila B:");
for (int i = 6; i < contab + 1; i++) {
System.out.print("[" + pilaB[i] + "]");
}
System.out.println(" ");
System.out.println("Pila C:");
for (int i = 11; i < contac + 1; i++) {
System.out.print("[" + pilaC[i] + "]");
}
System.out.println(" ");
System.out.println("Arreglo:");
for (int i = 1; i < 16; i++) {
System.out.print("[" + arreglo[i] + "]");
}
System.out.println(" ");
}
public void Ingresar() {
dato = JOptionPane.showInputDialog("Ingrese dato: ").charAt(0);
}
public void Eliminar() {
dato2 = JOptionPane.showInputDialog("Ingrese dato a eliminar:
").charAt(0);
for (int i = 1; i < 16; i++) {
if (arreglo[i] == dato2) {
arreglo[i] = ' ';
if (i < 6) {
pilaA[i] = ' ';
} else if (i > 5 & i < 11) {
pilaB[i] = ' ';
} else if (i > 10) {
pilaC[i] = ' ';
}
} else {
System.out.println("El dato no se encuentra en el arreglo");
break;
}
}
}
}

package ejercicio.pkg5;
import javax.swing.JOptionPane;
public class Ejercicio5 extends Mostrar {
public static void main(String[] args) {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Mostrar m = new Mostrar();


int x, a;
do {
x = Integer.parseInt(JOptionPane.showInputDialog("Ingrese Opcion:" +
"\n" + "1)Ingresar dato" + "\n" + "2)Eliminar elemento" + "\n" + "3)Finalizar"));
switch (x) {
case 1:
m.Ingresar();
a = Integer.parseInt(JOptionPane.showInputDialog("En que pila
desea ingresar:" + "\n" + "1)Pila A" + "\n" + "2)Pila B" + "\n" + "3)Pila C"));
switch (a) {
case 1:
m.IPilaA();
m.mostrar();
break;
case 2:
m.IPilaB();
m.mostrar();
break;
case 3:
m.IPilaC();
m.mostrar();
}
break;
case 2:
m.Eliminar();
}
} while (x != 3);
}
}
PSEUDOCODIGO
pilaA=16
pilaB=16
pilaC=16
arreglo=16
leer x
leer a
topea=0 frenteb=0 topeb=5 frentec=11 topec=10
contaa=0 contab=5 contac=10
leer dato
leer dato2
i=0
Si (topea + 1 = frenteb) Entonces
Mostrar "Cola A llena "
Sino
Mostrar "El dato " , data " fue ingresado en la Pila A");

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

topea<-topea+1;
pilaA[topea] <- dato
arreglo[topea] <- dato
contaa<-contaa+1
Fin_si
Si (topea + 1 = frentec) Entonces
Mostrar "Cola B llena "
Sino
Mostrar "El dato " , dato " fue ingresado en la Pila B"
frenteb <- 6
topeb=topeb+1
pilaB[topeb] <- dato
arreglo[topeb] <- dato
contab=contab+1
Fin_si
Si (topea + 1 =16) Entonces
Mostrar "Cola C llena"
Sino
Mostrar "El dato " , dato " fue ingresado en la Pila C"
frentec<-11;
topec<-topec+1
pilaC[topec]<-dato
arreglo[topec]<-dato
contac=contac+1
Fin_si
Leer dato2
Mostrar "Ingrese dato a eliminar: "
Desde int i = 1 Hasta i < 16 Hacer +1
Si (arreglo[i] = dato2) Entonces
arreglo[i] = ' '
Si (i < 6) Entonces
pilaA[i] = ' '
Sino
Si (i > 5 y i < 11) Entonces
pilaB[i] = ' ';
Fin_si
Sino
Si (i > 10) Entonces
pilaC[i] = ' '
Fin_si
Fin_si
Sino
Mostrar "El dato no se encuentra en el arreglo"
Fin_si
Mostrar "Pila A:"

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Desde i = 1 Hasta i < contaa Hacer +1


Mostar "[" + pilaA[i] + "]"
Mostrar "Pila B:"
Desde i = 6 Hasta i < contab + 1 Hacer +1
System.out.print("[" + pilaB[i] + "]"
Mostrar "Pila C:"
Desde i = 11 Hasta i < contac + 1 Hacer +1
Mostrar "[" + pilaC[i] + "]"
Mostrar "Arreglo:"
Desde int i = 1 Hasta i < 16 Hacer +1
Mostrar "[" + arreglo[i] + "]"

6. En la SUNAT se considera una cola frente a una ventanilla en la cual


si un usuario al llegar a su momento de atencin no puede ser
atendido (por que se olvid un documento de fcil subsanacin), se le
reintegra a una cola en ventanilla especial en la posicin N 5 si solo
se olvid la copia de su DNI o en la posicin N10 si acaso hay ms de
10 personas y se olvid llenar su formulario de Impuestos, o al final de
la misma, en caso contrario. Se pide disear un procedimiento de
MESAPARTES (lo que debe suceder cuando un cliente es atendido),
ESPECIAL (vuelta a la cola en ventanilla especial) y otro de ENTRADA
(inicial) en cola. Todo ello con vistas a que el reingreso sea sencillo,
para lo que se sugiere controlar el N de personas en la cola, y en su
caso, un puntero al elemento adecuado de la cola para ejecutar el
reingreso. Efecte la prueba de escritorio correspondiente.
CODIGO EN JAVA
package sunat;
import javax.swing.JOptionPane;
//Llamado
public class Herencia {
char Dato,aux;
boolean Dni, ForImpuesto;
String DNI,Formulario;
int con=5, c=0, mayor,i, Frente=0, Final=0,FrentePre=0,FinalPre=0;
int n = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el tamao de
la cola normal: "));
int m = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el tamao de
la cola preferencial: "));
char Cola[]= new char[n];
char ColaPreferencial[]= new char[m];

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

public void LlenarColas(){


for (i=0;i<Cola.length;i++){
Cola[i]=' ';
}
for (i=0;i<ColaPreferencial.length;i++){
ColaPreferencial[i]=' ';
}
}
public void Dato(){
Dato = JOptionPane.showInputDialog("Ingrese el dato: ").charAt(0);
}
public void Insersin(){
if (Cola[Final]==' '){
Cola[Final]=Dato;
}else if (Final==Cola.length-1){
System.out.println("Cola llena.");
}else{
Final=Final+1;
Cola[Final]=Dato;
}
}
public void InsersinPreferencial(){
if (ColaPreferencial[FinalPre]==' '){
ColaPreferencial[FinalPre]=Dato;
}else if (FinalPre==ColaPreferencial.length-1){
System.out.println("Cola preferencial llena.");
}else{
FinalPre=FinalPre+1;
ColaPreferencial[FinalPre]=Dato;
}
}
public void Salida(){
//Analizar el mayor.
if (n>m){
mayor=n;
}else{
mayor=m;
}
//Posiciones (La cola mayor predomina)
for (i=0;i<mayor;i++){
System.out.print(i+ " | ");
}
System.out.println();
System.out.println("Cola normal");
System.out.println("Frente: "+Frente);
System.out.println("Final: "+Final);
//Cola normal
for (i=0;i<n;i++){

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

System.out.print(Cola[i]+" | ");
}
System.out.println();
System.out.println("Cola preferencial");
System.out.println("FrentePre: "+FrentePre);
System.out.println("FinalPre: "+FinalPre);
//Cola preferencial
for (i=0;i<m;i++){
System.out.print(ColaPreferencial[i]+" | ");
}
System.out.println();
System.out.println("--------------------");
}
public void Ventana(){
DNI = JOptionPane.showInputDialog("Usted tiene su copia de DNI?
\n(Ingrese 'Si' o 'No')");
switch (DNI){
case "Si":
Dni = true;
Formulario = JOptionPane.showInputDialog("Usted llen su
formulario de impuestos? \n(Ingrese 'Si' o 'No')");
switch (Formulario){
case "Si":
ForImpuesto = true;
break;
case "No":
ForImpuesto = false;
break;
}
break;
case "No":
Dni = false;
Formulario = JOptionPane.showInputDialog("Usted llen su
formulario de impuestos? \n(Ingrese 'Si' o 'No')");
switch (Formulario){
case "Si":
ForImpuesto = true;
break;
case "No":
ForImpuesto = false;
break;
}
break;
}
}
public void Eliminacion(){
if (Dni==false && ForImpuesto==false){
FinalPre=FinalPre+1;

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Cola[Frente]=ColaPreferencial[FinalPre];
Cola[Frente]=' ';
Frente=Frente+1;
}else{
if (Dni==false && ForImpuesto==true){
if (FinalPre>=4){
con=FinalPre;
do{
aux=ColaPreferencial[con+1];
ColaPreferencial[con+1]=ColaPreferencial[con];
ColaPreferencial[con]=aux;
con=con-1;
}while(con!=3);
ColaPreferencial[4]=Cola[Frente];
Cola[Frente]=' ';
Frente=Frente+1;
FinalPre=FinalPre+1;
}else{
if(ColaPreferencial[Final]==' '){
ColaPreferencial[FinalPre]=Cola[Frente];
Cola[Frente]=' ';
}else{
FinalPre=FinalPre+1;
ColaPreferencial[FinalPre]=Cola[Frente];
Cola[Frente]=' ';
Frente=Frente+1;
}
}
}else{
if(Dni==true && ForImpuesto==false){
if (FinalPre==Cola.length-1){
System.out.println("Cola llena");
}else{
con=FinalPre;
if(FinalPre>=9){
do{
aux=ColaPreferencial[con+1];
ColaPreferencial[con+1]=ColaPreferencial[con];
ColaPreferencial[con]=aux;
con=con-1;
}while(con!=8);
ColaPreferencial[9]=Cola[Frente];
Cola[Frente]=' ';
Frente=Frente+1;
FinalPre=FinalPre+1;
}else{
FinalPre=FinalPre+1;
ColaPreferencial[FinalPre]=Cola[Frente];

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Cola[Frente]=' ';
Frente=Frente+1;
}
}
}else{
if (Cola[Frente]!=' '){
Cola[Frente]=' ';
Frente=Frente+1;
}else if (Frente == Cola.length-1){
System.out.println("Cola normal vaca.");
}else{
Cola[Frente]=' ';
Frente=Frente+1;
}
}
}
}
for (int j=0;j<Cola.length;j++){
if (Cola[j]==' '){
c=c+1;
}
if (c==Cola.length){
Frente=0;
Final=0;
}
}
c=0;
}
public void EliminacionPreferencial(){
if(FrentePre==0){
ColaPreferencial[FrentePre]=' ';
FrentePre=FrentePre+1;
}else{
if(FrentePre == ColaPreferencial.length){
System.out.println("Cola preferencial vaca.");
}else{
ColaPreferencial[FrentePre]=' ';
FrentePre=FrentePre+1;
}
}
for (int j=0;j<ColaPreferencial.length;j++){
if (ColaPreferencial[j]==' '){
c=c+1;
}
if (c==ColaPreferencial.length){
FrentePre=0;
FinalPre=0;
}

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

}
c=0;
}
}

package sunat;
import javax.swing.JOptionPane;
public class SUNAT {
public static void main(String[] args) {
int opcion,opcion2;
Herencia he = new Herencia();
he.LlenarColas();
do{
opcion = Integer.parseInt(JOptionPane.showInputDialog("BIENVENIDO A LA
SUNAT"+"\nIngrese el tipo de cola al que desea ingresar: "+"\n1) Cola
normal."+"\n2) Cola preferencial."+"\n3) Salir."));
switch (opcion){
case 1:
do{
opcion2 =
Integer.parseInt(JOptionPane.showInputDialog("BIENVENIDO
A
LA
COLA
NORMAL"+"\nIngrese la opcin a elegir: "+"\n1) Ingreso de una persona a la
cola."+"\n2) Atencin de una persona."+"\n3) Salir."));
switch (opcion2){
case 1:
he.Dato();
he.Insersin();
he.Salida();
break;
case 2:
he.Ventana();
he.Eliminacion();
he.Salida();
break;
}
}while(opcion2!=3);
break;
case 2:
do{
opcion2 =
Integer.parseInt(JOptionPane.showInputDialog("BIENVENIDO
A
LA
COLA
PREFERENCIAL"+"\nIngrese la opcin a elegir: "+"\n1) Ingreso de una persona
a la cola."+"\n2) Atencin de una persona."+"\n3) Salir."));
switch (opcion2){
case 1:
he.Dato();

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

he.InsersinPreferencial();
he.Salida();
break;
case 2:
he.EliminacionPreferencial();
he.Salida();
break;
}
}while(opcion2!=3);
break;
}
}while(opcion!=3);
System.out.println("Gracias");
System.out.println("Desarrollado por Oscar Pereda.");
}
}
PSEUDOCODIGO
ENTRADA
Final 0 , frente 0
Inicio
Leer dato
Si final=N entonces
Escribir COLA LLENA
Sino
Final final LA+1
COLA(final) dato
Nc final(frente)+1
Si frente = 0 entonces
Frente 1
Nc final
Fin_si
Fin_si
FIN
MESAPARTES
Inicio
Si olvido es V entonces
Llamar procedimiento RETORNO
Sino
Si frente=0 entonces
Mostrar COLA VACIA
Sino
dato COLA(frente)
Si frente = final entonces

Frente 0
Final 0
Sino
Frente frente+1
Fin_si
Desde i=1 hasta N-1
COLA(i) COLA (i+1)
Fin_desde
Frente 1
Final final -1
Fin_si
RETORNO
Inicio
Tope 0
Si final <= 0 entonces
Final final +1
COLA((final) COLA(frente)
Sino
Desde j =Nc hasta 10 hacer
Tope tope+1
PILA (tope) cola
Fin _desde
COLA (10) COLA (frente)
P tope
Desde dato=1 hasta tope hacer
COLA(10+k) PILA(p)

Universidad Nacional
Informtica
Del Santa
P tope -1
Fin_desde
Fin_si
Desde i=1 hasta N-1

Ing. Sistemas e

COLA (i) COLA (i+1)


Fin_desde
Frente 1
Final final -1

7. Se tiene la siguiente frmula: Escribir su forma infija, prefija y


postfija correspondiente.
A+ B2C
X=
E
3 D
F

Forma Infija:
(A+((B^2C)^ ) / ((D^1/3)E/F)
Forma Prefija:
( A + ( ( B ^ 2 C ) ^ ) / ( ( D ^ (1 / 3) ) E / F )
(A+((^B2- C )^/12) /(( ^D/13) -/EF)
(A+(-^B2C)^/12)) / (-^D/13 /EF)
(A+(^-^B2C/12)) /(-^D/13 /EF)
(+A ^-^B2C/12))/(-^D/13/EF)
/+A^-^B2C/12-^D/13/EF
Forma Sufijo:
(A+((B^2C)^ ) / ((D^1/3)E/F)
( A + ( ( B2^ - C ) ^ 12/ ) / ( ( D13/^ ) E F / )
( A + ( ( B2^C-) ^12/ ) / (D 1 3 / ^ E F / - )
( A + ( B 2 ^ C 1 2/ ^) / (D 1 3 / ^ E F / - )
( A B 2 ^ C 1 2/ ^ + ) / (D 1 3 / ^ E F / - )
A B 2 ^ C 1 2/ ^ + D 1 3 / ^ E F / - /
8. Se tiene una pila con los primeros 10 nmeros naturales, y una cola
con los 10 siguientes, escriba el algoritmo en pseudo cdigo que
utilizando las operaciones bsicas para cada una de estas estructuras
permita obtener la sumatoria del producto de sus datos, atendiendo la
regla LIFO para la pila y FIFO para la cola.

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

CODIGO EN JAVA
package ejercicio_08;
import javax.swing.JOptionPane;
public class Ejercicio_08 {
public static void main(String[] args) {
//PILA
int pila[] = new int[10];
int tope = 0;
int i, j = 1, acum = 1;
if (tope == 10) {
JOptionPane.showMessageDialog(null, "PILA LLENA");
} else {
for (i = 0; i < 10; i++) {
tope = tope + 1;
pila[i] = j;
acum = acum * j;
j = j + 1;
System.out.println("|" + pila[i]);
}
}
System.out.println(" COLA " + acum);
int cola[] = new int[10];
int frente = 0, fin = 0;
int k, m = 11;
long multi = 1, suma;
for (k = 0; k < 10; k++) {
if (fin == 10) {
JOptionPane.showMessageDialog(null, "COLA LLENA");
} else {
fin = fin + 1;
cola[k] = m;
multi = multi * m;
m = m + 1;
}
if (frente == -1) {
frente = 1;
}
}
System.out.println(" PILA " + multi);
suma = multi + acum;
System.out.println("LA SUMA TOTAL ES DE: " + suma);
}
}

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

9. Dados los caracteres (), [] y {}, y una cadena s; s esta balanceada


si tiene alguno de estos formatos, s = "", (string nulo), s = (T), s = [T],
s = {T}, s = TU en donde T y U son cadenas balanceadas (en otras
palabras, para cada parntesis, llave o corchete abierto existe un
carcter de cierre correspondiente). Ejemplo s = {[(c-d) ^2]+ 1}.
Escribir el Algoritmo (Pseudo cdigo) que use una PILA para ver si una
cadena es balanceada.
SEMANA #10. ALGORITMOS CON COLAS. APLICACIONES
EJERCICIO 1
Se considera una cola frente a una ventanilla en la cual si un cliente al llegar a
la misma no puede ser atendido, se le reintegra a la cola a la posicin n 10, si
hay ms de 10 personas, o al final de la misma, en caso contrario. Se pide
disear un procedimiento de ATENCIN (lo que debe suceder cuando un cliente
es atendido), REINGRESO (vuelta a la cola) y otro de INGRESO (inicial) en cola.
Todo ello con vistas a que el reingreso sea sencillo, para lo que se sugiere
controlar el n de personas en la cola, y en su caso, un puntero al elemento
adecuado de la cola para ejecutar el reingreso.

CDIGO JAVA:

package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Ingrese tamao de la cola: ");
int TAM = in.nextInt();
String C[] = new String[TAM];
for (int i = 0; i < C.length; i++) {
C[i] = " ";
}
int OPCION, FINAL=-1, FRENTE=-1, OP, REING=10, LPRE;
String VALOR, z;
do {
System.out.println("\n" + "1)Ingresar" + "\t" + "2)Atender");
OP = in.nextInt();
if (OP == 1) {
System.out.println("Ingrese valor: ");
VALOR=in.next();
if(FINAL==C.length-1){
System.out.println("**COLA LLENA**");
}else{
if (FRENTE==-1) {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

FRENTE=0;
}
FINAL++;
C[FINAL]=VALOR;
}
}else if (OP == 2) {
if (FRENTE==-1){
System.out.println("NO HAY ELEMENTOS EN LA COLA");
}else{
System.out.println("1)Atendido?" +"\t"+ "2)No Atendido?"+"\n");
LPRE=in.nextInt();
if (LPRE==1) {
C[FRENTE]=" ";
while(FRENTE<FINAL){
C[FRENTE]=C[FRENTE+1];
FRENTE++;
}
C[FINAL]=" ";
FINAL--;
FRENTE=0;
if (FINAL==-1) {
FRENTE=-1;
}
}else if (LPRE==2){
if (FINAL>7) {
z=C[FRENTE];
C[FRENTE]=" ";
while(10>FRENTE){
C[FRENTE]=C[FRENTE+1];
FRENTE++;
}
C[REING]=z;
FRENTE=0;
}else{
z=C[FRENTE];
C[FRENTE]=" ";
while(FINAL>FRENTE){
C[FRENTE]=C[FRENTE+1];
FRENTE++;
}
C[FINAL]=z;
FRENTE=0;
}
}
}
}else{
System.out.println("Solo digite 1 o 2.");
}

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

System.out.println("Cola Actual.");
for (int i = 0; i < C.length; i++) {
System.out.print("| " + C[i] + " |");
}
System.out.println();
System.out.println("1)Continuar" + "\t" + "2)Salir");
OPCION = in.nextInt();
} while (OPCION == 1);
}
}

PSEUDOCDIGO:

{frente=0;final=0}
Inicio
Si frente=0 entonces
Escribir La Cola vaca no hay a quien atender
Caso contrario
Repetir desde i=2 hasta final
cola (i)=cola(i-1);
fin_desde
final =final-1;
Fin_si
/*REINGRESO*/
Si frente=0 entonces
Escribir Cola vaca no atiende
Caso contrario
Si final=1 entonces
Escribir Eres el ultimo te damos un tiempo para regularizar
documentos
Caso contrario
aux=cola(1);
Si final<10 entonces
Repetir desde i=2 hasta final
cola(i)=cola(i-1);
Fin_desde
cola(final)=aux;
caso contrario
Repetir desde i=2 hasta 10
cola(i-1)=cola(i);
Fin_desde

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

cola(10)=aux;
Fin_si
Fin_si
Fin_si
/*INGRESO*/
Leer X; {Nuevo ingreso}
Si final=n
Escribir Ya no se puede ingresar a nadie, no hay espacio
Caso contrario
final=final++;
cola(final-1)= x;
Si frente= 0 entonces
Frente=1;
Fin_si
Fin_si
Fin

EJERCICIO2
Un ascensor est situado en un edificio de N plantas (la planta baja es la 0) y
responde a dos tipos de peticiones de funcionamiento: las de los usuarios que
estn dentro del ascensor (peticiones internas) y las de los que estn fuera
(peticiones externas). Estas ltimas slo sern atendidas cuando no haya
peticiones
internas.
Los
dos
tipos
de
peticiones
se
gestionan
independientemente y responden a criterios de temporalidad, de manera que
las llamadas van siendo atendidas segn el orden de solicitud. Con este
planteamiento, hay que escribir un programa que simule el funcionamiento del
ascensor de forma que las peticiones se realicen mediante pulsaciones del
teclado y, "al mismo tiempo", mover el ascensor a los pisos que se van
solicitando. Se distinguir entre peticiones interiores y exteriores segn las
teclas pulsadas (teclas: 0, 1, 2, .. N, indican peticiones interiores a dichos pisos;
teclas: -0, -1, -2, ..., -N, indican peticiones exteriores en el mismo orden), la
tecla 'N+1' se reserva para finalizar la simulacin.
La visualizacin del proceso se puede realizar utilizando un mtodo
MOVER_ASCENSOR que muestra por pantalla el movimiento del ascensor. Este
mtodo responde al siguiente perfil: MOVER_ASCENSOR (desde, hasta: 0..N);
donde desde indica la posicin actual del ascensor y hasta, el piso al que debe
ir.

CDIGO JAVA:

o Java Class: Ejercicio2_metodo


package ejercicios_semana10;
public class Ejercicio2_metodo {
int INTERNA[]={4,6,8,10,17}; int FRENTEINT=0;
int FINALINT=INTERNA.length-1;

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

int[] EXTERNA={-6,-3,-1}; int FRENTEEXTERNA=0;


int FINALEXT=EXTERNA.length-1;
int N=15; int[] PISO=new int[10];int P=0;
public void SUBIR(){
while(FRENTEINT!=-1 && INTERNA[FRENTEINT]<N){
System.out.println("Subiendo al Piso N"+INTERNA[FRENTEINT]);
for(int k=P;k<=INTERNA[FRENTEINT];k++){
System.out.println("Piso N: "+k);
}
System.out.println(" ");
P=INTERNA[FRENTEINT];
if(FRENTEINT==FINALINT){
FRENTEINT=-1;
FINALINT=-1;
}else{
FRENTEINT++;
}
}
System.out.print("Ud. quizo subir al Piso N"+INTERNA[FRENTEINT]);
System.out.println(" Ud. ha llegado al ultimo Piso (Piso N15) ");
System.out.println(" ");
}
public void BAJAR(){
while(FRENTEEXTERNA!=-1 && EXTERNA[FRENTEEXTERNA]<N){
System.out.println("Bajando al Piso
N"+Math.abs(EXTERNA[FRENTEEXTERNA]));
for(int k=P;k>=Math.abs(EXTERNA[FRENTEEXTERNA]);k--){
System.out.println("Piso N: "+k);
}
System.out.println(" ");
P=Math.abs(EXTERNA[FRENTEEXTERNA]);
if(FRENTEEXTERNA==FINALEXT){
FRENTEEXTERNA=-1;
FINALEXT=-1;
}else{
FRENTEEXTERNA++;
}
}
}
}
o Java main class: Ejercicio2_implementacion
package ejercicios_semana10;
public class Ejercicio2_implementacion {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

public static void main(String[] args) {


Ejercicio2_metodo piso= new Ejercicio2_metodo();
System.out.println("El edificio consta de 15 Pisos.");
System.out.println(" ");
piso.SUBIR();
piso.BAJAR();
}
}

PSEUCDIGO:

INICIO
Leer peticin
SI peticin = n + 1 entonces
finaliza simulacin
caso contrario
SI peticin es interna entonces
frenteinterna =0, finalinterna = 0
Leer x
SI finalinterna = n entonces
Escribir cola llena: no hay lugares para peticiones
internas
caso contrario
finalinterna = finalinterna + 1
cola[final]= x
fin_si
SI frenteinterna = 0 entonces
frenteinterna = 1
fin_si
llamar a procedimiento cumplir_orden interna
caso contarrio
frenteexterno= 0, finalexterno= 0
leer x
SI finalexterna = n entonces
escribir cola llena : no hay lugares para
peticiones
externas
caso contrario
finalexterna= final + 1
cola[frente]= x
fin_si
SI frenteexterna = 0 entonces
frente= 1
fin_si

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

llamar a procedimientos cumplir_orden externo


fin_si
fin_si
FIN
// Procedimento cumplir_orden interno
INICIO
Piso_actual =0
Repetir Piso_destino
cola[frenteinterna] Hasta que (frenteinterna = 0)
Repetir
Si frenteinterna = finalinterna entonces
Frenteinterna= 0
Finalinterna= 0
Caso contrario
Frenteinterna= frenteinterna + 1
Fin_si
Piso_actual piso_destino
Hasta piso_destino
FIN
//Procedimiento cumplir_orden externo
INICIO
Piso_actual= 0
Repetir Piso_destino cola[frenteexterna] Hasta que (frenteexterna = 0)
Repetir
Si frenteexterna = finalexterna entonces
Frenteexterna= 0
Finalexterna= 0
Caso contrario
Frenteexterna= frenteexterna + 1
Fin_si
Piso_actual piso_destino
Hasta piso_destino
FIN

EJERCICIO3
Considera que palabra es una variable de tipo Cola que contiene la entrada del
usuario por teclado, P una pila de caracteres y el siguiente algoritmo: Cul es
la salida para la entrada "examen"?
1.
2.
3.
4.

mientras haya ms caracteres en palabra hacer


apilar el primero de la cola en la pila P
sacar de la cola
Fin_Mientras

Universidad Nacional
Informtica
Del Santa
5.
6.
7.
8.
9.

Mientras la pila P no sea vaca


Escribir la cima de P
Desapilar de P
Fin_Mientras
{frente=0, final=0;tope=0}

CDIGO JAVA:

package ejercicios_semana10;
public class Ejercicio3 {
int FRENTE=0;
int FINAL=5;
int N=6;
String[] COLA={"E","X","A","M","E","N"};
String[] PILA=new String [N];
int TOPE=-1;
public void SACAR(){
while(FRENTE<=FINAL){
TOPE=TOPE+1;
PILA[TOPE]=COLA[FRENTE];
if(FRENTE==FINAL){
System.out.println("Cola vaca.");
}
FRENTE=FRENTE+1;
}
}
public void SACARPILA(){
System.out.print("SALIDA:");
while(TOPE>-1){
System.out.print(PILA[TOPE]+" ");
TOPE=TOPE-1;
if(TOPE==-1){
System.out.println();
System.out.println("Pila vacia.");
}
}
System.out.println();
}
public static void main(String[] args) {
Ejercicio3 op=new Ejercicio3();
op.SACAR();
op.SACARPILA();
}
}

PSEUDOCDIGO:

Ing. Sistemas e

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Cul es la salida para la entrada examen?


INICIO
Tope 0; frente 1; final n;
Leer palabra;
Mientras frente < = final hacer
Tope tope + 1
P [tope] palabra [frente];
Si frente = final entonces
Escribir cola vaca
Fin_si
Frente frente + 1;
Fin_Mientras
Mientas tope > 0 hacer
Escribir la cima de P
Tope tope 1
Si tope = 0 entonces
Escribir pila vaca
Fin_si
Fin_Mientras
FIN
PRUEBA DE ESCRITORIO:
Tope
6
5
4
3
2
1
0

Pila[T
ope]
n
e
m
a
x
e

La salida es: nemaxe


EJERCICIO 4
Escribe el algoritmo en pseudocdigo que lea una cadena de caracteres del
teclado y decida si es palndromo, es decir, si se lee igual de izquierda a
derecha que de derecha a izquierda. Implemntalo despus en el Lenguaje de
programacin de su dominio. Ejemplo: daba le arroz a la zorra el abad es
palndromo.

CDIGO JAVA:

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

package ejercicios_semana10;
//codigo ded oscar mucho mejor
public class Ejercicio4 {
public static void main(String[] args) {
String[] FRASE = {"dabalearrozalazorraelabad"};
int INDICE=(int)(Math.random()*FRASE.length);
System.out.println("La frase: "+ FRASE[INDICE]);
if (PALINDROMO(FRASE[INDICE]))
System.out.println("Es Palindromo.");
else
System.out.println("No es Palindromo.");
}
static boolean PALINDROMO(String FRASE) {
//QUITAR ESPACIOS Y CONVERTIRLO A MINUSCULAS PARA HACER LAS
COMPARACIONES
String MODIFICADO = FRASE.replaceAll(" ","").toLowerCase();
int i=0;
while (i < MODIFICADO.length()/2) {
if (MODIFICADO.charAt(i)!
=MODIFICADO.charAt(MODIFICADO.length()-1-i))
return false;
i++;
}
return true;
}
}

PSEUDOCDIGO:

INICIO
Mostrar 'Ingrese la frase: '
Leer frase
i=1
j = longitud(frase)
hacer mientras (extraerLetra(frase, i) = extraerLetra(frase,j) y i < j) {
i=i+1
j=j-1
Fin HacerMientras
Si (i >= j) entonces
Mostrar "La frase: ", frase, " es palindromo"
Sino
Mostrar "La frase: ", frase, " es palindromo"
FinSi
FIN
EJERCICIO 5

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Un estacionamiento de las avionetas de un aerdromo es en lnea, con una


capacidad hasta 12 avionetas. Las avionetas llegan por el extremo izquierdo y
salen por el extremo derecho. Cuando llega un piloto a recoger su avioneta, si
sta no est justamente en el extremo de salida (derecho), todas las avionetas
a su derecha han de ser retiradas, sacar la suya y las retiradas colocadas de
nuevo en el mismo orden relativo en que estaban. La salida de una avioneta
supone que las dems se mueven hacia adelante, de tal forma que los espacios
libres del estacionamiento estn por la parte izquierda. Escriba el Algoritmo
(Pseudocdigo) para emular este estacionamiento tiene como entrada un
carcter que indica una accin sobre la avioneta, y la matricula de la avioneta.
La accin puede ser, llegada (E) o salida (S) de avioneta, En la llegada puede
ocurrir que el estacionamiento est lleno, si es as la avioneta espera hasta que
quede una plaza libre, o hasta que se d la orden de retirada (salida).

CDIGO JAVA:

o Java Class: Ejercicio5_metodo


package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio5_metodo {
Scanner te = new Scanner(System.in);
public String[] COLA;
public String[] RETIRADAS;
public int CONT = 0;
public int FINAL = -1;
public int FRENTE = -1;
public int POS = -1;
public int K;
public Ejercicio5_metodo() {
int N = 12;
RETIRADAS = new String[N];
COLA = new String[N];
for (int i = 0; i < COLA.length; i++) {
COLA[i] = "";
}
}
public void MOSTRAR() {
System.out.println("--------------------------");
for (int i = 0; i < COLA.length; i++) {
System.out.printf("" + (i + 1));
System.out.printf("" + " |" + COLA[i] + "| " + "");
}
System.out.println("");
System.out.println("--------------------------");

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

}
public void INGRESO() {
System.out.println("Ingrese MATRICULA de Avioneta: ");
String PLACA_AVIO = te.next();
if (CONT == COLA.length) {
System.out.println("**ESTACIONAMIENTO LLENO**");
} else {
CONT++;
if (FRENTE > 0 && FRENTE <= COLA.length - 1) {
FRENTE--;
COLA[FRENTE] = PLACA_AVIO;
} else {
if (FRENTE == 0) {
for (int i = FINAL; i >= FRENTE; i--) {
COLA[i + 1] = COLA[i];
}
COLA[FRENTE] = PLACA_AVIO;
FINAL++;
} else {
FINAL++;
COLA[FINAL] = PLACA_AVIO;
if (FRENTE == -1) {
FRENTE = 0;
}
}
}
MOSTRAR();
}
}
public void SALIDA() {
POS = -1;
if (CONT == 0) {
System.out.println("**ESTACIONAMIENTO VACIO**");
} else {
System.out.println("Ingrese MATRICULA de Avioneta que desee que
salga: ");
String matri = te.next();
for (int i = FRENTE; i <= FINAL; i++) {
if (COLA[i].equals(matri)) {
POS = i;
break;
}
}
if (POS == -1) {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

System.out.println("**MATRICULA DE AVIONETA NO
ENCONTRADA**");
} else {
CONT--;
if (FRENTE == FINAL) {
COLA[POS] = "";
FRENTE = -1;
FINAL = -1;
} else {
if (POS == FINAL) {
COLA[FINAL] = "";
FINAL--;
} else {
RETIRADA();
System.out.println("**(RETIRANDO AVIONETAS)**");
MOSTRAR();
System.out.println("Nde Matricula-Avioneta a salir: " +
COLA[POS]);
COLA[POS] = "";
FINAL--;
MOSTRAR();
REINGRESO();
System.out.println("**(REINGRESANDO AVIONETAS)**");
}
}
}
}
MOSTRAR();
}
public void RETIRADA() {
K = 0;
for (int i = FINAL; i > POS; i--) {
RETIRADAS[K] = COLA[i];
COLA[i] = "";
K++;
FINAL--;
}
}
public void REINGRESO() {
for (int i = POS; i >= (FRENTE + 1); i--) {
COLA[i] = COLA[i - 1];
COLA[i - 1] = "";
}
FRENTE++;
FINAL++;
K--;

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

while (K != -1) {
FINAL++;
COLA[FINAL] = RETIRADAS[K];
K--;
}
}
}
o Java main class: Ejercicio5_implementacion
package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio5_implementacion {
public static void main(String[] args) {
Scanner t = new Scanner(System.in);
Ejercicio5_metodo e5 = new Ejercicio5_metodo();
do {
System.out.println(" ESTACIONAMIENTO DE AVIONES");
System.out.println(" ---------------------------");
System.out.println("1)INGRESO\t2)SALIDA\t3)TERMINAR PROGRAMA");
int opc = t.nextInt();
if (opc == 1) {
e5.INGRESO();
} else if (opc == 2) {
e5.SALIDA();
}else if(opc==3){
System.exit(0);
}
} while (true);
}
}

PSEUDOCDIGO:

Algoritmo para llegada de Aviones


INICIO
N 12
Final 0
Leer AVION
Si Final = N entonces
Escribir Estacionamiento lleno
Caso contrario
Final Final + 1
Fin_Si
FIN

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Algoritmo para la salida de las Aviones


INICIO
Ingrese POSICION de la Avion
Si FINAL = 0 Entonces
Escribir No hay Aviones para salir
Caso contrario
Si POSICION = 1 Entonces
Si FINAL = 1 Entonces
COLA[POSICION] Vacio
FINAL FINAL -1
Sino
COLA[POSICION] Vacio
ARREGLARPOSICION /* Procedimiento
FINAL FINAL -1
Fin_Si
Sino
SACAR /* Procedimiento
COLA[POSICION] Vacio
LLENAR /* Procedimiento
FINAL FINAL 1
Fin_Si
Fin_Si
FIN /* Fin de salida de Aviones
PROCEDIMIENTOS [ ]:
ARREGLARPOSICION:
i=1
Mientras i<= FINAL 1 hacer
COLA[i] COLA[i + 1]
COLA[i + 1] Vacio
i = i+1
Fin_Mientras
FIN_ARREGLARPOSICION
SACAR
i=1
Mientras i<= POSICION 1 hacer
COLAAUX[i] COLA[i]
COLA[i] Vacio
i = i+1
Fin_Mientras
FIN_SACAR
LLENAR:
i=1
Mientras i <= POSICION 1 hacer
COLA[i] COLAAUX[i]

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

i = i+1
Fin_Mientras
COLAAUX Vacio
Si FINAL > POSICION entonces
i=1
Mientras i <= FINAL 1 hacer
COLA[i] COLA[i+1]
COLA[i+1] Vacio
Fin_Mientras
Fin_Si
FIN_LLENAR
EJERCICIO6
Elabore el pseudocdigo de las operaciones METER y SACAR de una bicola,
donde la cola de un extremo guarda cdigos de Radios y la del otro extremo
cdigos de Televisores.

CDIGO JAVA:

o Java Class: Ejercicio6_metodo:


package ejercicios_semana10;
import javax.swing.JOptionPane;
public class Ejercicio6_metodo {
int FRENTE = 0, FIN = -1;
String[] BICOLA = {" ", " ", " ", " "};
String X;
public void ingresarfrente() {
if (FRENTE == -1 || FIN == FRENTE && FRENTE == 0 || BICOLA[0] == X) {
System.out.println("COLA POR EL FRENTE LLENA");
} else {
X = JOptionPane.showInputDialog(null, "Ingrese una letra");
if (FRENTE > 0) {
FRENTE--;
}
BICOLA[FRENTE] = X;
if (FIN == -1) {
FIN++;
}
}
for (int i = 0; i < BICOLA.length; i++) {
System.out.print(" [ " + BICOLA[i] + " ] ");
}

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

}
public void INGRESARFINAL() {
if (FIN == BICOLA.length - 1) {
System.out.println("COLA POR EL FINAL LLENA");
} else {
X = JOptionPane.showInputDialog(null, "Ingrese una letra");
FIN++;
BICOLA[FIN] = X;
}
for (int i = 0; i < BICOLA.length; i++) {
System.out.print(" [ " + BICOLA[i] + " ] ");
}
}
public void ELIMINAR() {
if (FRENTE == BICOLA.length) {
System.out.println("COLA VACIA");
} else {
BICOLA[FRENTE] = " ";
FRENTE++;
}
for (int i = 0; i < BICOLA.length; i++) {
System.out.print(" [ " + BICOLA[i] + " ] ");
}
}
}
o Java main class: Ejercicio6_implementacion
package ejercicios_semana10;
import javax.swing.JOptionPane;
public class Ejercicio6_implementacion {
public static void main(String[] args) {
String bicola[] = {" ", " ", " ", " "};
int salida = 0;
Ejercicio6_metodo OP = new Ejercicio6_metodo();
do {
try {
salida = Integer.parseInt(JOptionPane.showInputDialog(null,
"1.Ingrese codigos de radio\n2.Ingrese codigos de
televisores\n3.Limpiar codigo\n4.Salir",
"CODIGOS", JOptionPane.QUESTION_MESSAGE));

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

switch (salida) {
case 1:
OP.ingresarfrente();
System.out.println();
break;
case 2:
OP.INGRESARFINAL();
System.out.println();
break;
case 3:
OP.ELIMINAR();
System.out.println();
break;
case 4:
JOptionPane.showMessageDialog(null, "GRACIAS POR USAR EL
PROGRAMA !!");
break;
default:
JOptionPane.showMessageDialog(null, "Opcion incorrecta",
"ERROR", JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception z) {
JOptionPane.showMessageDialog(null,
"ERROR" + z.getMessage());
}
} while (salida != 4);
}
}

PSEUDOCDIGO:

Mtodos:
Frente1 , fin0
String bicola[]
//ingreso de frente
Si(frente=0 o fin=frente y frente=0 o bicola[0]=x)entonces
Mostrar cola por el frente llena
Caso contrario
Leer x
Si(frente>0)entonces
Frentefrente-1
Fin si
Bicola[frente] x
Si (fin=0)entonces
Finfin+1

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Mostrar cola
//ingreso final
Si (fin=bicola.length-1)entonces
Mostrarcola vacia
Caso contrario
Leer x
Finfin+1
Bicola[fin]x
Fin si
Mostrar cola
//Eliminar
Si(frente=bicola.length)entonces
Mostrar cola vacia
Caso contrario
Bicola[frente]vacio
Frentefrente+1
Mostrar cola.
Aplicacion:
String bicola[]
Salida0
MetodosCodigos onuevo MetodoCodigos
Hacer Mientras (salida<>0)
Leer salida
Men de salida(1.- ingresar cdigo de radio 2.-ingrese cdigo de televisores 3.limpiar 4.- salir)
Caso 1
o. ingreseFrente
break
Caso 2
o.ingreseFinal
break
Caso 3
o.eliminar
break
Caso 4
Salir
Fin HacerMientras

EJERCICIO7
En un archivo de texto se encuentran los resultados de una competicin de tiro
al plato, de tal forma que en cada lnea se encuentra Apellido, Nombre, nmero
de dorsal y nmero de platos rotos. Se debe escribir el algoritmo
(Pseudocdigo), que lea el archivo de la competicin y determine los tres
primeros. La salida ha de ser los tres ganadores y a continuacin los

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

concursantes en el orden en que aparecen en el archivo (utilizar la estructura


cola).

CDIGO JAVA:

o Java Class: Ejercicio7_metodo


package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio7_metodo {
public String[] APELLIDO = new String[50];
public String[] NOMBRE = new String[50];
public String[] DORSAL = new String[50];
public int[] PLATO = new int[50];
int[] COLA1 = new int[50];
int FRENTE = -1;
int FINAL = -1;
String apellido;
String nombre;
String dorsal;
int platos;
Scanner t = new Scanner(System.in);
}
o Java Class: Ejercicio7_metodo_extends
package ejercicios_semana10;
public class Ejercicio7_metodo_extends extends Ejercicio7_metodo{
public void INGRESARDATOS() {
System.out.println("Ingrese apellido: ");
apellido = t.next();
System.out.println("Ingrese nombre: ");
nombre = t.next();
System.out.println("Ingrese el dorsal: ");
dorsal = t.next();
System.out.println("Ingrese cantidad de platos rotos: ");
platos = t.nextInt();
}
public void INGRESAR() {
if (FINAL < 50) {
FINAL++;
APELLIDO[FINAL] = apellido;
NOMBRE[FINAL] = nombre;

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

DORSAL[FINAL] = dorsal;
PLATO[FINAL] = platos;
}
if (FRENTE == -1) {
FRENTE = 0;
}
}
public void LISTARGENERAL() {
if (FINAL == -1) {
System.out.println("No existe ningun registro ...");
} else {
System.out.println("Puesto\t Nombres\t Apellidos\t Dorsal\t Platos
\n");
System.out.println("=============================
=====\n");
int i = 0;
while (FRENTE <= FINAL) {
System.out.println("" + (i + 1) + " \t" + NOMBRE[FRENTE] + "\t"
+ APELLIDO[FRENTE] + "\t" + DORSAL[FRENTE] + "\t"
+ PLATO[FRENTE] + "\n");
FRENTE++;
i++;
}
}
}
public void LISTAR() {
int mayor = 0;
int j = 0;
if (FINAL == -1) {
System.out.println("No existe ningun registro ...");
} else {
System.out.println("Puesto\t Nombres\t Apellidos\t Dorsal\t Platos
\n");
//
System.out.println("=============================
======\n");
for (int i = 0; i < 3; i++) {
mayor = PLATO[i];
for (int k = i + 1; k <= FINAL; k++) {
if (mayor < PLATO[k]) {
mayor = PLATO[k];
j = k;
}
}
System.out.println("" + (i + 1) + " \t" + NOMBRE[j] + "\t" +
APELLIDO[j] + "\t" + DORSAL[j] + "\t" + PLATO[j] + "\n");
int aux = PLATO[j];

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

PLATO[j] = PLATO[i];
PLATO[i] = aux;
}
}
}
}
o Java main class: Ejercicio7_implementacion
package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio7_implementacion {
public static void main(String[] args) {
Scanner t = new Scanner(System.in);
Ejercicio7_metodo_extends op = new Ejercicio7_metodo_extends();
int Opcion = 0;
do {
System.out.println("\nMENU DE OPCIONES:\t");
System.out.println("REGISTRO=>(1) \nLISTA GENERAL=>(2)\nLISTA
GANADORES=>(3)\nSALIR ==> (4)");
System.out.println("ELIJA UNA OPCION");
Opcion = t.nextInt();
switch (Opcion) {
case 1:
op.INGRESARDATOS();
op.INGRESAR();
break;
case 2:
op.LISTARGENERAL();
break;
case 3:
op.LISTAR();
break;
case 4:
System.exit(0);
break;
}
} while (Opcion != 5);
}
}

PSEUDOCDIGO:

Algoritmo para insertar datos


Fin1 = Fin2 = Fin3 = Fin4 = 0

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

INICIO
Ingrese Datos (Apellidos[Ap], Nombre[Nom], Numero de dorsal[Dor], Platos
rotos[Plat]]
Ingrese numero de Datos [N>3]
Si Fin4 >= N entonces
Escribir Cola llena
Caso contrario
Final 1 Final 1 + 1
Final 2 Final 2 + 1
Final 3 Final 3 + 1
Final 4 Final 4 + 1
COLA1[Fin1] Ap
COLA2[Fin2] Nom
COLA3[Fin3] Dor
COLA4[Fin4] Plat
Fin_Si
FIN
Algoritmo para buscar los tres primeros mayores
INICIO
i 1; j 0;
Mayor 0
Mientras [i <=3] hacer
Mayor = COLA [1]
j1
Mientras k=2 <= Fin4 hacer
Si Mayor < COLA4 [k] Entonces
Mayor COLA4 [k]
jk
Fin_Si
kk+1
Fin_Mientras
Escribir:
COLA1 [j], COLA1 [j]
COLA2 [j], COLA2 [j]
COLA3 [j], COLA3 [j]
COLA4 [j], COLA4 [j]
i i+1
Fin_Mientras
L=1
Mientras L <= Fin4 hacer
Si COLA4 [L] <> Vacio Entonces
Escribir:
COLA1 [L]
COLA2 [L]
COLA3 [L]
COLA4 [L]
Fin_Si

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

LL+1
Fin_Mientras
FIN
EJERCICIO 8
El despegue de aeronaves en un aeropuerto se realiza siguiendo el orden
establecido por una cola de prioridades. Hay 5 prioridades establecidas segn
el destino de la aeronave. Destinos de menos de 500 km tienen la mxima
prioridad, prioridad 1, entre 500 y 800 km prioridad 2, entre 801 y 1000 km
prioridad 3, entre 1001 y 1350 km prioridad 4 y para mayores distancias
prioridad 5. Cuando una aeronave recibe cierta seal se coloca en la cola que
le corresponde y empieza a contar el tiempo de espera. Los despegues se
realizan cada 6 minutos segn el orden establecido en las distintas colas de
prioridad. El piloto de una aeronave puede pasar el aviso a control de que tiene
un problema, y no puede despegar por lo que pasa al final de la cola y se da la
orden de despegue a la siguiente aeronave. Puede darse la circunstancia de
que una aeronave lleve ms de 20 minutos esperando, en ese caso pasar a
formar parte de la siguiente cola de prioridad y su tiempo de espera se
inicializa a cero. Escribir el algoritmo que simule este sistema de colas
mediante una lista nica, cada vez que despegue un avin saldr un mensaje
con las caractersticas del vuelo y el tiempo total de espera.
CDIGO JAVA:
package ejercicios_semana10;
import java.util.Scanner;
public class Ejercicio8 {
int n = 3;
String[] COLA_A = {" "," "," "};
String[] COLA_B = {" "," "," "};
String[] COLA_C = {" "," "," "};
String[] COLA_D = {" "," "," "};
String[] COLA_E = {" "," "," "};
int FRENTE_A = -1, FRENTE_B = -1, FRENTE_C = -1, FRENTE_D = -1,
FRENTE_E = -1;
int FINAL_A = -1, FINAL_B = -1, FINAL_C = -1, FINAL_D = -1, FINAL_E = -1,
DIS;
int TIEMPO = -1;
String AV;
Scanner t = new Scanner(System.in);
public void LLENAR_COLA() {
System.out.println(" ingresar el avion");
AV = t.next();
System.out.println("ingresar la distancia");
DIS = t.nextInt();

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

if (DIS > 0 && DIS < 500) {


FINAL_A = FINAL_A + 1;
COLA_A[FINAL_A] = AV;
System.out.println("");
System.out.println(" La distancia es: " + DIS);
} else {
if (DIS >= 500 && DIS <= 800) {
FINAL_B = FINAL_B + 1;
COLA_B[FINAL_B] = AV;
System.out.println("");
System.out.println(" La distancia es: " + DIS);
} else {
if (DIS >= 801 && DIS <= 1000) {
FINAL_C = FINAL_C + 1;
COLA_C[FINAL_C] = AV;
System.out.println("");
System.out.println(" La distancia es: " + DIS);
} else {
if (DIS >= 1001 && DIS <= 1350) {
FINAL_D = FINAL_D + 1;
COLA_D[FINAL_D] = AV;
System.out.println("");
System.out.println(" La distancia es: " + DIS);
} else {
FINAL_E = FINAL_E + 1;
COLA_E[FINAL_E] = AV;
System.out.println("");
System.out.println(" La distancia es: " + DIS);
}
}
}
}
}
public void ATENDER_CLIENTE() {
if (FRENTE_A < FINAL_A) {
System.out.println("avion por salir" + COLA_A[FRENTE_A + 1]);
} else {
if (FRENTE_B < FINAL_B) {
System.out.println("avion por salir" + COLA_B[FRENTE_B + 1]);
} else {
if (FRENTE_C < FINAL_C) {
System.out.println("avion por salir" + COLA_C[FRENTE_C + 1]);
} else {
if (FRENTE_D < FINAL_D) {

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

System.out.println("avion por salir" + COLA_D[FRENTE_D +


1]);
} else {
if (FRENTE_E < FINAL_E) {
System.out.println("avion por salir" + COLA_E[FRENTE_E +
1]);
}
}
}
}
}
while (TIEMPO >= 6) {
TIEMPO = TIEMPO + 1;
if (TIEMPO >= 5) {
if (FINAL_A > -1) {
if (FRENTE_A < FINAL_A) {
FRENTE_A = FRENTE_A + 1;
COLA_A[FRENTE_A] = "";
TIEMPO = -1;
} else {
FRENTE_A = -1;
FINAL_A = -1;
}
} else {
if (FINAL_B > -1) {
if (FRENTE_B < FINAL_B) {
FRENTE_B = FRENTE_B + 1;
COLA_A[FRENTE_B] = " ";
TIEMPO = -1;
} else {
FRENTE_B = -1;
FINAL_B = -1;
}
} else {
if (FINAL_C > -1) {
if (FRENTE_C < FINAL_C) {
FRENTE_C = FRENTE_C + 1;
COLA_A[FRENTE_C] = "";
TIEMPO = -1;
} else {
FRENTE_C = -1;
FINAL_C = -1;
}
} else {
if (FINAL_D > -1) {
if (FRENTE_D < FINAL_D) {
FRENTE_D = FRENTE_D + 1;
COLA_A[FRENTE_D] = "";

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

TIEMPO = -1;
} else {
FRENTE_C = -1;
FINAL_C = -1;
}
} else {
if (FINAL_E > -1) {
if (FRENTE_E < FINAL_E) {
FRENTE_E = FRENTE_E + 1;
COLA_A[FRENTE_E] = "";
TIEMPO = -1;
} else {
FRENTE_E = -1;
FINAL_E = -1;
}
}
}
}
}
}
}
}
System.out.println("Cola vacia ");
}
public void MOSTRAR() {
for (int i = 0; i < 3; i++) {
System.out.println("EL AVION ES:" + COLA_A[i] + "\n" + "EL AVION
ES:" + COLA_B[i] + "\n" + "EL AVION ES:" + COLA_C[i] + "\n" + "EL AVION
ES:" + COLA_D[i] + "\n" + "EL AVION ES:" + COLA_E[i] + "\n");
}
}
public static void main(String args[]) {
Scanner t = new Scanner(System.in);
Ejercicio8 op = new Ejercicio8();
int Opcion = 0;
do {
System.out.println("1.llenar cola \n2.atender cliente \n3.salir");
System.out.println("Escriba opcion");
Opcion = t.nextInt();
switch (Opcion) {
case 1:
op.LLENAR_COLA();

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

op.MOSTRAR();
break;
case 2:
op.ATENDER_CLIENTE();
op.MOSTRAR();
break;
case 3:
System.exit(0);
break;
}
} while (Opcion != 3);
}
}
o PSEUDOCDIGO:
Prioridad A, B, C, D, E
Distancia de viaje (Km):
A: Menor de 500
B: Entre 500 800
C: Entre 801 1000
D: Entre 1001 1350
E: Mayor de 1350
LLENAR COLAS
FRENT_A 0, FRENT_B 0,
FRENT_C 0, FRENT_D 0,
FRENT_E 0
FIN_A 0, FIN_B 0, FIN_C 0,
FIN_D 0, FIN_E 0
INICIO
Leer avion (AV), Leer Distancia de destino(DIS)
Si DIS > 0 y DIS < 500 Entonces
FIN_A FIN_A + 1
COLA[FIN_A] AV
Sino
Si DIS >= 500 y DIS <= 800 Entonces
FIN_B FIN_B + 1
COLB[FIN_B] AV
Sino
Si DIS >= 801 y DIS<= 1000 Entonces
FIN_C FIN_C + 1
COLC[FIN_C] AV
Sino
Si DIS >= 1001 y DIS <= 1350 Entonces
FIN_D FIN_D + 1
COLD[FIN_D] AV

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

Sino
FIN_E FIN_E + 1
COLE[FIN_E] AV
Fin_Si
Fin_Si
Fin_Si
Fin_Si
FIN
//Atender al Cliente
Tiempo 0
INICIO
Si FRENT_A < FIN_A Entonces
Mostrar ColaA(FRENT_A + 1) // Avion por Salir
Sino
Si FRENT_B < FIN_B Entonces
Mostrar ColaA(FRENT_B + 1)
Sino
Si FRENT_C < FIN_C Entonces
Mostrar ColaC(FRENT_C + 1)
Sino
Si FRENT_D < FIN_D Entonces
Mostrar ColaD(FRENT_D + 1)
Sino
Si FRENT_E < FIN_E Entonces
Mostrar ColaE(FRENT_E + 1)
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Repetir hasta que tiempo >= 7
tiempo tiempo + 1
Si tiempo >= 6 Entonces // Cada 6 segundos como Ejemplo
Si FIN_A > 0 Entonces
Si FRENT_A < FIN_A Entonces
FRENT_A FRENT_A + 1
Cola(FRENT_A) vacio
tiempo 0
Sino
FRENT_A 0
FIN_A 0
Fin_Si
Sino
Si FIN_B > 0 Entonces
Si FRENT_B < FIN_B Entonces
FRENT_B FRENT_ B + 1
Cola(FRENT_ B) vacio

Universidad Nacional
Informtica
Del Santa

Ing. Sistemas e

tiempo 0
Sino
FRENT_ B 0
FIN_ B 0
Fin_Si
Sino
Si FIN_C > 0 Entonces
Si FRENT_ C < FIN_ C Entonces
FRENT_ C FRENT_ C +
1
Cola(FRENT_ C) vacio
tiempo 0
Sino
FRENT_ C 0
FIN_ C 0
Fin_Si
Sino
Si FIN_D > 0 Entonces
Si FRENT_ D < FIN_ C Entonces
FRENT_ D FRENT_ D + 1
Cola(FRENT_ D) vacio
tiempo 0
Sino
FRENT_ D 0
FIN_ D 0
Fin_Si
Sino
Si FIN_E > 0 Entonces
Si FRENT_ E < FIN_ C Entonces
FRENT_ E FRENT_ E + 1
Cola(FRENT_ E) vacio
tiempo 0
Sino
FRENT_ E 0
FIN_ E 0
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Repetir
Escribir Cola vacia
FIN

S-ar putea să vă placă și