ii unidad[estructura]

60
Universidad Nacional Ing. Sistemas e Informática Del Santa SEMANA #07: ESTRUCTURA LINEAL: PILAS. OPERACIONES BASICAS. Ejercicio 2: A + ( BCD E F G ) H 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 A + ¿ A + ¿ A + ¿ + A∗−¿ BC / D EFGH ¿ Forma Sufija: A +( BCD /( E F )∗G)∗H A + ¿ A + ¿ A + ¿ A + ¿ A + ¿ ABC¿ ¿ G∗−H∗+¿ Ejercicio 3: b 2 4 ac 2 a 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

Upload: luisangelmancovilcherres

Post on 07-Jul-2016

253 views

Category:

Documents


0 download

DESCRIPTION

Programacion. Estructura de Datos

TRANSCRIPT

Page 1: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e InformáticaDel Santa

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

Ejercicio 2:A+(B∗C− D

EF∗G)∗H

Forma Infija:A+(B∗C−D / (EF )∗G)∗H

Forma Prefija:A+(B∗C−D / (EF )∗G)∗HA+(B∗C−D / [¿ EF ]∗G)∗HA+([¿BC ]−D /[¿EFG])∗HA+¿A+¿A+¿+A∗−¿BC /D∗EFGH ¿

Forma Sufija:A+(B∗C−D / (EF )∗G)∗HA+¿A+¿A+¿A+¿A+¿ABC∗¿¿G∗−H∗+¿

Ejercicio 3:−b±√b2−4 ac

2aForma 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 * /

Page 2: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

Ejercicio 4:

234567+*+*+

PASO EXPO A B PILA1 2 22 3 2,33 4 2, 3, 44 5 2, 3, 4, 55 6 2, 3, 4, 5, 66 7 2, 3, 4, 5, 6, 7 7 + 7 6 2, 3, 4, 5, 138 * 13 5 2, 3, 4, 659 + 65 4 2, 3, 6910 * 69 3 2, 20711 + 207 2 209

Ejercicio 5:

12, 8, 3, -, /, 1, 2, 4, 6, +, *, +, +

PASO EXPO A B PILA1 12 122 8 12, 83 3 12, 8, 34 - 3 8 12,55 / 5 12 2.46 1 2.4, 17 2 2.4, 1, 28 4 2.4, 1, 2, 49 6 2.4, 1, 2, 4, 610 + 6 4 2.4, 1, 2, 1011 * 10 2 2.4, 1, 2012 + 20 1 2.4, 2113 + 21 2.4 23.4

Ejercicio 6:S= N

2(2 A+(N−1 )∗D)

Forma infija:(N /2)∗(2∗A+(N−1)∗D)

Forma Prefija:(N /2)∗(2∗A+(N−1)∗D)[¿N 2]∗(2∗A+(N−1)∗D)[¿N 2]∗(2∗A+[−N 1]∗D)

Page 3: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

[¿N 2]∗([¿2 A ]+[−N 1]∗D)[¿N 2]∗([¿2 A ]+[¿−N 1D ])[¿N 2]∗[+¿2 A∗−N 1D ]¿ /N 2+¿2 A∗−N 1D

Forma Sufija:(N /2)∗(2∗A+(N−1)∗D)¿¿¿¿¿N 2/2 A∗N 1−D∗+¿

Ejercicio 7G=A 1−R

N

1−RForma 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 RForma sufija: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 - / *

SEMANA #08: ALGORITMO CON PILAS

1. Codificar el algoritmo de Transformación de una expresión Infija a Expresión Postfija en la herramienta de programación 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;

Page 4: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} 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; 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 {

Page 5: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

TopeExpo=TopeExpo+1; Expo[TopeExpo] = Pila[TopePila]; TopePila=TopePila-1; } } while (Pila[TopePila + 1] != '('); } else { TopeExpo=TopeExpo+1; Expo[TopeExpo] = x; } } } for (int i=0;i<Expo.length;i++){ Postfija = Postfija +""+ Expo[i]; } JOptionPane.showMessageDialog(null, "La expresión posfija es: "+Postfija ); }}

2. Codificar el algoritmo de Evaluación de Expresiones Postfijas en la herramienta de programación de laboratorio.

3. Cierto número de usuarios, n, envían simultáneamente un documento a la impresora común, la cual debe determinar su orden de impresión. Las longitudes de los documentos enviados son l1...ln, siendo li la longitud del documento enviado por el usuario i (la numeración 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 código) 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 impresión de los j primeros documentos según 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 paréntesis, llave o corchete abierto existe un carácter de cierre correspondiente). Ejemplo {(a+b) [(cd) ^2]}. Escribir el Algoritmo (Pseudo código) que use una PILA para ver si una cadena es balanceada.

5. Escribir el algoritmo (Pseudo código) 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

Page 6: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

el tamaño del arreglo no variará. Si una pila necesita más espacio solo tiene que tomarlo del arreglo que tiene 15 lugares en función 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 además 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 JAVAimport javax.swing.JOptionPane;public class Mostrar { 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");

Page 7: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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] + "]"); } 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;

Page 8: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} } }}

package ejercicio.pkg5;import javax.swing.JOptionPane;public class Ejercicio5 extends Mostrar { public static void main(String[] args) { 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

Page 9: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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"); 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] = ' ';

Page 10: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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:" 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 atención no puede ser atendido (por que se olvidó un documento de fácil subsanación), se le reintegra a una cola en ventanilla especial en la posición Nº 5 si solo se olvidó la copia de su DNI o en la posición N°10 si acaso hay más de 10 personas y se olvidó llenar su formulario de Impuestos, o al final de la misma, en caso contrario. Se pide diseñar 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. Efectúe la prueba de escritorio correspondiente.

CODIGO EN JAVApackage sunat;import javax.swing.JOptionPane;

Page 11: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

//Llamadopublic 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 tamaño de la cola normal: ")); int m = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el tamaño de la cola preferencial: ")); char Cola[]= new char[n]; char ColaPreferencial[]= new char[m]; 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 Insersión(){ 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 InsersiónPreferencial(){ 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{

Page 12: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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++){ 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":

Page 13: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

ForImpuesto = true; break; case "No": ForImpuesto = false; break; } break; } } public void Eliminacion(){ if (Dni==false && ForImpuesto==false){ FinalPre=FinalPre+1; 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{

Page 14: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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]; 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 vacía."); }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 vacía."); }else{

Page 15: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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; } } 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 opción a elegir: "+"\n1) Ingreso de una persona a la cola."+"\n2) Atención de una persona."+"\n3) Salir.")); switch (opcion2){ case 1: he.Dato(); he.Insersión(); he.Salida(); break; case 2: he.Ventana(); he.Eliminacion(); he.Salida(); break;

Page 16: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} }while(opcion2!=3); break; case 2: do{ opcion2 = Integer.parseInt(JOptionPane.showInputDialog("BIENVENIDO A LA COLA PREFERENCIAL"+"\nIngrese la opción a elegir: "+"\n1) Ingreso de una persona a la cola."+"\n2) Atención de una persona."+"\n3) Salir.")); switch (opcion2){ case 1: he.Dato(); he.InsersiónPreferencial(); 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 ENTRADAFinal 0 , frente 0Inicio Leer datoSi final=N entoncesEscribir “COLA LLENA”SinoFinal final LA+1COLA(final) datoNc final(frente)+1Si frente = 0 entonces Frente 1 Nc finalFin_siFin_siFIN

MESAPARTESInicioSi olvido es V entoncesLlamar procedimiento RETORNOSinoSi frente=0 entoncesMostrar “COLA VACIA”Sinodato COLA(frente)Si frente = final entoncesFrente 0Final 0SinoFrente frente+1Fin_si

Page 17: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

Desde i=1 hasta N-1COLA(i) COLA (i+1)Fin_desdeFrente 1Final final -1Fin_si

RETORNOInicioTope 0Si final <= 0 entoncesFinal final +1COLA((final) COLA(frente)Sino Desde j =Nc hasta 10 hacer

Tope tope+1PILA (tope) colaFin _desdeCOLA (10) COLA (frente)P topeDesde dato=1 hasta tope hacerCOLA(10+k) PILA(p)P tope -1Fin_desdeFin_siDesde i=1 hasta N-1COLA (i) COLA (i+1)Fin_desdeFrente 1Final final -1

7. Se tiene la siguiente fórmula: Escribir su forma infija, prefija y postfija correspondiente.

X= A+√B2−C3√D− E

F

Forma Infija: ( A + ( ( B ^ 2 – C ) ^ ½ ) / ( ( D ^ 1 / 3 ) – E / F )Forma Prefija:( A + ( ( B ^ 2 – C ) ^ ½ ) / ( ( 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 )( + A ^ - ^ B 2 C / 1 2 ) ) / ( - ^ D / 1 3 / E F )/ + A ^ - ^ B 2 C / 1 2 - ^ D / 1 3 / E FForma Sufijo:( A + ( ( B ^ 2 – C ) ^ ½ ) / ( ( D ^ 1 / 3 ) – E / F )( A + ( ( B2^ - C ) ^ 12/ ) / ( ( D13/^ ) – E F / )( A + ( ( B2^C-) ^12/ ) / (D 1 3 / ^ E F / - )

Page 18: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

( 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 números naturales, y una cola con los 10 siguientes, escriba el algoritmo en pseudo código que utilizando las operaciones básicas 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.

CODIGO EN JAVApackage 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; }

Page 19: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

if (frente == -1) { frente = 1; } } System.out.println(" PILA " + multi); suma = multi + acum; System.out.println("LA SUMA TOTAL ES DE: " + suma); }}

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 paréntesis, llave o corchete abierto existe un carácter de cierre correspondiente). Ejemplo s = {[(c-d) ^2]+ 1}. Escribir el Algoritmo (Pseudo código) 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 posición nº 10, si hay más de 10 personas, o al final de la misma, en caso contrario. Se pide diseñar un procedimiento de ATENCIÓN (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.

CÓDIGO 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 tamaño 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;

Page 20: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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) { 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];

Page 21: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

FRENTE++; } C[FINAL]=z; FRENTE=0; } } } }else{ System.out.println("Solo digite 1 o 2."); } 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); } }

PSEUDOCÓDIGO:

{frente=0;final=0}

Inicio

Si frente=0 entonces

Escribir “ La Cola vacía no hay a quien atender”

Caso contrarioRepetir desde i=2 hasta finalcola (i)=cola(i-1);fin_desdefinal =final-1;Fin_si

/*REINGRESO*/Si frente=0 entonces Escribir “Cola vacía no atiende”

Caso contrarioSi final=1 entonces Escribir “Eres el ultimo te damos un tiempo para regularizar documentos”

Caso contrario

Page 22: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

aux=cola(1);Si final<10 entoncesRepetir desde i=2 hasta finalcola(i)=cola(i-1);Fin_desdecola(final)=aux;caso contrarioRepetir desde i=2 hasta 10cola(i-1)=cola(i);Fin_desdecola(10)=aux;Fin_siFin_siFin_si/*INGRESO*/Leer X; {Nuevo ingreso}Si final=nEscribir “Ya no se puede ingresar a nadie, no hay espacio ” Caso contrariofinal=final++;cola(final-1)= x;Si frente= 0 entoncesFrente=1;Fin_siFin_si Fin

EJERCICIO2Un 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 están dentro del ascensor (peticiones internas) y las de los que están fuera (peticiones externas). Estas últimas sólo serán 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 según 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 según 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 simulación.La visualización del proceso se puede realizar utilizando un método MOVER_ASCENSOR que muestra por pantalla el movimiento del ascensor. Este método responde al siguiente perfil: MOVER_ASCENSOR (desde, hasta: 0..N);

Page 23: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

donde desde indica la posición actual del ascensor y hasta, el piso al que debe ir.

CÓDIGO JAVA:

o Java Class: Ejercicio2_metodopackage ejercicios_semana10;

public class Ejercicio2_metodo { int INTERNA[]={4,6,8,10,17}; int FRENTEINT=0; int FINALINT=INTERNA.length-1; 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 Nº15) "); 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{

Page 24: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

FRENTEEXTERNA++; } } }}

o Java main class: Ejercicio2_implementacion

package ejercicios_semana10;

public class Ejercicio2_implementacion {

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(); }}

PSEUCÓDIGO:

INICIO Leer petición SI petición = n + 1 entonces finaliza simulación caso contrario SI petición 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

Page 25: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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 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

Page 26: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

EJERCICIO3Considera 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: ¿Cuál es la salida para la entrada "examen"?

1. mientras haya más caracteres en palabra hacer2. apilar el primero de la cola en la pila P3. sacar de la cola4. Fin_Mientras5. Mientras la pila P no sea vacía6. Escribir la cima de P7. Desapilar de P8. Fin_Mientras9. {frente=0, final=0;tope=0}

CÓDIGO 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 vacía."); } 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."); }

Page 27: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} System.out.println(); } public static void main(String[] args) { Ejercicio3 op=new Ejercicio3(); op.SACAR(); op.SACARPILA(); }}

PSEUDOCÓDIGO:

¿Cuál es la salida para la entrada “examen”?

INICIOTope 0; frente 1; final n;Leer palabra;

Mientras frente < = final hacerTope tope + 1P [tope] palabra [frente];Si frente = final entonces

Escribir “cola vacía”Fin_siFrente frente + 1;

Fin_MientrasMientas tope > 0 hacer

Escribir “la cima de P”Tope tope – 1Si tope = 0 entonces

Escribir “pila vacía”Fin_si

Fin_MientrasFIN

PRUEBA DE ESCRITORIO:

La salida es: nemaxe

Tope Pila[Tope]

6 5 4 3 2 1 0

n e m a x e

Page 28: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

EJERCICIO 4Escribe el algoritmo en pseudocódigo que lea una cadena de caracteres del teclado y decida si es palíndromo, es decir, si se lee igual de izquierda a derecha que de derecha a izquierda. Impleméntalo después en el Lenguaje de programación de su dominio. Ejemplo: daba le arroz a la zorra el abad es palíndromo.

CÓDIGO JAVA:

package ejercicios_semana10;//codigo ded oscar mucho mejorpublic 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; }}

PSEUDOCÓDIGO:

INICIOMostrar 'Ingrese la frase: 'Leer frasei = 1j = longitud(frase)

Page 29: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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" FinSiFIN

EJERCICIO 5 Un estacionamiento de las avionetas de un aeródromo es en línea, 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 demás se mueven hacia adelante, de tal forma que los espacios libres del estacionamiento estén por la parte izquierda. Escriba el Algoritmo (Pseudocódigo) para emular este estacionamiento tiene como entrada un carácter que indica una acción sobre la avioneta, y la matricula de la avioneta. La acción 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).

CÓDIGO 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++) {

Page 30: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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("--------------------------"); }

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**");

Page 31: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} 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) { 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("N°de 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++;

Page 32: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

FINAL--; } }

public void REINGRESO() { for (int i = POS; i >= (FRENTE + 1); i--) { COLA[i] = COLA[i - 1]; COLA[i - 1] = ""; } FRENTE++; FINAL++; K--; 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); }}

PSEUDOCÓDIGO:

Page 33: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

Algoritmo para llegada de AvionesINICION ← 12Final ← 0Leer AVION

Si Final = N entoncesEscribir “Estacionamiento lleno”

Caso contrarioFinal ← Final + 1

Fin_SiFIN

Algoritmo para la salida de las AvionesINICIO

Ingrese POSICION de la AvionSi FINAL = 0 Entonces

Escribir “No hay Aviones para salir”Caso contrario

Si POSICION = 1 EntoncesSi FINAL = 1 Entonces

COLA[POSICION] ← VacioFINAL ← FINAL -1

SinoCOLA[POSICION] ← VacioARREGLARPOSICION /* ProcedimientoFINAL ← FINAL -1

Fin_SiSino

SACAR /* ProcedimientoCOLA[POSICION] ← VacioLLENAR /* ProcedimientoFINAL ← FINAL – 1

Fin_SiFin_Si

FIN /* Fin de salida de Aviones

PROCEDIMIENTOS [ ]:

ARREGLARPOSICION:i = 1Mientras i<= FINAL – 1 hacer

COLA[i] ← COLA[i + 1]COLA[i + 1] ← Vacio i = i+1

Fin_MientrasFIN_ARREGLARPOSICIONSACAR

Page 34: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

i = 1Mientras i<= POSICION – 1 hacer

COLAAUX[i] ← COLA[i]COLA[i] ← Vacioi = i+1

Fin_Mientras

FIN_SACAR

LLENAR:i = 1Mientras i <= POSICION – 1 hacer

COLA[i] ← COLAAUX[i]i = i+1

Fin_MientrasCOLAAUX ← VacioSi FINAL > POSICION entonces

i = 1Mientras i <= FINAL – 1 hacer

COLA[i] ← COLA[i+1]COLA[i+1] ← Vacio

Fin_MientrasFin_Si

FIN_LLENAR

EJERCICIO6Elabore el pseudocódigo de las operaciones METER y SACAR de una bicola, donde la cola de un extremo guarda códigos de Radios y la del otro extremo códigos de Televisores.

CÓDIGO 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 {

Page 35: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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] + " ] "); } }

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;

Page 36: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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)); 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); }}

PSEUDOCÓDIGO:

Métodos:

Page 37: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

Frente1 , fin0String bicola[]//ingreso de frenteSi(frente=0 o fin=frente y frente=0 o bicola[0]=x)entoncesMostrar “cola por el frente llena”Caso contrarioLeer xSi(frente>0)entoncesFrentefrente-1Fin si Bicola[frente] xSi (fin=0)entoncesFinfin+1Mostrar cola//ingreso finalSi (fin=bicola.length-1)entoncesMostrar”cola vacia”Caso contrarioLeer xFinfin+1Bicola[fin]xFin siMostrar cola //Eliminar Si(frente=bicola.length)entoncesMostrar “cola vacia”Caso contrarioBicola[frente]vacioFrentefrente+1Mostrar cola.

Aplicacion:

String bicola[]Salida0MetodosCodigos onuevo MetodoCodigosHacer Mientras (salida<>0)Leer salidaMenú de salida(1.- ingresar código de radio 2.-ingrese código de televisores 3.- limpiar 4.- salir)Caso 1o. ingreseFrentebreakCaso 2 o.ingreseFinalbreakCaso 3o.eliminar

Page 38: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

breakCaso 4 SalirFin HacerMientras

EJERCICIO7 En un archivo de texto se encuentran los resultados de una competición de tiro al plato, de tal forma que en cada línea se encuentra Apellido, Nombre, número de dorsal y número de platos rotos. Se debe escribir el algoritmo (Pseudocódigo), que lea el archivo de la competición y determine los tres primeros. La salida ha de ser los tres ganadores y a continuación los concursantes en el orden en que aparecen en el archivo (utilizar la estructura cola).

CÓDIGO 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: ");

Page 39: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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; 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 {

Page 40: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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]; 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:

Page 41: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

op.LISTAR(); break; case 4: System.exit(0); break; } } while (Opcion != 5); }}

PSEUDOCÓDIGO:

Algoritmo para insertar datosFin1 = Fin2 = Fin3 = Fin4 = 0INICIOIngrese 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 contrarioFinal 1 ← Final 1 + 1Final 2 ← Final 2 + 1Final 3 ← Final 3 + 1Final 4 ← Final 4 + 1COLA1[Fin1] ← Ap

COLA2[Fin2] ← NomCOLA3[Fin3] ← DorCOLA4[Fin4] ← PlatFin_Si

FIN

Algoritmo para buscar los tres primeros mayores INICIO

i ← 1; j 0; Mayor 0Mientras [i <=3] hacerMayor = COLA [1]j ← 1

Mientras k=2 <= Fin4 hacerSi Mayor < COLA4 [k] Entonces

Mayor ← COLA4 [k]j ← k

Fin_Sik ← k + 1

Fin_MientrasEscribir:

Page 42: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

COLA1 [j], COLA1 [j]COLA2 [j], COLA2 [j]

COLA3 [j], COLA3 [j]COLA4 [j], COLA4 [j]i ← i+1

Fin_MientrasL = 1Mientras L <= Fin4 hacer

Si COLA4 [L] <> Vacio EntoncesEscribir:COLA1 [L]COLA2 [L]COLA3 [L]COLA4 [L]

Fin_SiL ← L + 1

Fin_MientrasFIN

EJERCICIO 8El despegue de aeronaves en un aeropuerto se realiza siguiendo el orden establecido por una cola de prioridades. Hay 5 prioridades establecidas según el destino de la aeronave. Destinos de menos de 500 km tienen la máxima 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 señal se coloca en la cola que le corresponde y empieza a contar el tiempo de espera. Los despegues se realizan cada 6 minutos según 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 más 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 avión saldrá un mensaje con las características del vuelo y el tiempo total de espera.

CÓDIGO 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 = {" "," "," "};

Page 43: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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();

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); } } }

Page 44: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

} }

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) { 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 {

Page 45: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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] = ""; 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"); }

Page 46: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

}

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(); op.MOSTRAR(); break; case 2: op.ATENDER_CLIENTE(); op.MOSTRAR(); break; case 3: System.exit(0); break; } } while (Opcion != 3); }}

o PSEUDOCÓDIGO:

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

Page 47: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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 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

Page 48: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

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 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

Page 49: II Unidad[Estructura]

Universidad Nacional Ing. Sistemas e Informática

Del Santa

FIN_ E ← 0 Fin_Si Fin_Si Fin_Si Fin_Si Fin_Si Fin_Si Fin_Si Fin_Repetir Escribir “Cola vacia” FIN