Está en la página 1de 46

Universidad Nacional Ing.

Sistemas e Informática
Del Santa

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

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

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

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

Ejercicio 3:
−b ± √b 2−4 ac
2a
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 * /
Universidad Nacional Ing. Sistemas e Informática
Del Santa

Ejercicio 4:

234567+*+*+

PASO EXPO A B PILA


1 2 2
2 3 2,3
3 4 2, 3, 4
4 5 2, 3, 4, 5
5 6 2, 3, 4, 5, 6
6 7 2, 3, 4, 5, 6, 7
7 + 7 6 2, 3, 4, 5, 13
8 * 13 5 2, 3, 4, 65
9 + 65 4 2, 3, 69
10 * 69 3 2, 207
+
11 207 2 209

Ejercicio 5:

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

PASO EXPO A B PILA


1 12 12
2 8 12, 8
3 3 12, 8, 3
4 - 3 8 12,5
5 / 5 12 2.4
6 1 2.4, 1
7 2 2.4, 1, 2
8 4 2.4, 1, 2, 4
9 6 2.4, 1, 2, 4, 6
10 + 6 4 2.4, 1, 2, 10
*
11 10 2 2.4, 1, 20
12 + 20 1 2.4, 21
13 + 21 2.4 23.4

Ejercicio 6:
N
S= (2 A + ( N−1 )∗D)
2
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)
[¿ N 2]∗([¿ 2 A]+[−N 1]∗D)
[¿ N 2]∗([¿ 2 A]+[¿−N 1 D])
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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

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

Ejercicio 7
1−R N
G= A
1−R
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 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;
}
return aux;
}
public static void main(String[] args) {
Universidad Nacional Ing. Sistemas e Informática
Del Santa

// 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 {
TopeExpo=TopeExpo+1;
Expo[TopeExpo] = Pila[TopePila];
TopePila=TopePila-1;
}
} while (Pila[TopePila + 1] != '(');
} else {
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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 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 JAVA
import 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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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] + "]");
}
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:");
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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) {
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) {
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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");
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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


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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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 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 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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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{
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')");
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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;
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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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];
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;
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

}
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{
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();
Universidad Nacional Ing. Sistemas e Informática
Del Santa

he.Insersión();
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 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

ENTRADA Frente  1
Final  0 , frente  0 Nc  final
Inicio Fin_si
Leer dato Fin_si
Si final=N entonces FIN
Escribir “COLA LLENA”
Sino MESAPARTES
Final final LA+1 Inicio
COLA(final)  dato Si olvido es V entonces
Nc  final(frente)+1 Llamar procedimiento RETORNO
Si frente = 0 entonces Sino
Universidad Nacional Ing. Sistemas e Informática
Del Santa

Si frente=0 entonces Si final <= 0 entonces


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

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

A+ √ B2−C
X=
E
√3 D−
F

Forma Infija:
(A+((B^2–C)^½ ) / ((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^2–C)^½ ) / ((D^1/3)–E/F)
Universidad Nacional Ing. Sistemas e Informática
Del Santa

( 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 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 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;
}
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;
do {
System.out.println("\n" + "1)Ingresar" + "\t" + "2)Atender");
OP = in.nextInt();
if (OP == 1) {
System.out.println("Ingrese valor: ");
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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];
FRENTE++;
}
C[FINAL]=z;
FRENTE=0;
}
}
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

}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 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 vacía 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 Ing. Sistemas e Informática
Del Santa

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 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); donde desde indica la posición actual del ascensor y
hasta, el piso al que debe ir.

 CÓDIGO 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;
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){
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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{
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();
}
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

 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
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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: ¿Cuál es la salida para la entrada "examen"?
1. mientras haya más caracteres en palabra hacer
2. apilar el primero de la cola en la pila P
3. sacar de la cola
4. Fin_Mientras
5. Mientras la pila P no sea vacía
6. Escribir la cima de P
7. Desapilar de P
8. Fin_Mientras
9. {frente=0, final=0;tope=0}

 CÓDIGO JAVA:

package ejercicios_semana10;

public class Ejercicio3 {


int FRENTE=0;
int FINAL=5;
int N=6;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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.");
}
}
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”?

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 vacía”
Fin_si
Frente  frente + 1;
Fin_Mientras
Mientas tope > 0 hacer
Escribir “la cima de P”
Universidad Nacional Ing. Sistemas e Informática
Del Santa

Tope  tope – 1
Si tope = 0 entonces
Escribir “pila vacía”
Fin_si
Fin_Mientras
FIN

PRUEBA DE ESCRITORIO:

Tope Pila[T
ope]
6 n
5 e
4 m
3 a
2 x
1 e
0

La salida es: nemaxe

EJERCICIO 4
Escribe 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 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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

while (i < MODIFICADO.length()/2) {


if (MODIFICADO.charAt(i)!=MODIFICADO.charAt(MODIFICADO.length()-1-i))
return false;
i++;
}
return true;
}
}

 PSEUDOCÓDIGO:

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
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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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

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;
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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


Universidad Nacional Ing. Sistemas e Informática
Del Santa

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--;
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);
}
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

 PSEUDOCÓDIGO:

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

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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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]
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 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 {
X = JOptionPane.showInputDialog(null, "Ingrese una letra");
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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;

public class Ejercicio6_implementacion {

public static void main(String[] args) {


Universidad Nacional Ing. Sistemas e Informática
Del Santa

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:

Frente1 , fin0
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”
Universidad Nacional Ing. Sistemas e Informática
Del Santa

Caso contrario
Leer x
Si(frente>0)entonces
Frentefrente-1
Fin si
Bicola[frente] x
Si (fin=0)entonces
Finfin+1
Mostrar cola
//ingreso final
Si (fin=bicola.length-1)entonces
Mostrar”cola vacia”
Caso contrario
Leer x
Finfin+1
Bicola[fin]x
Fin si
Mostrar cola
//Eliminar
Si(frente=bicola.length)entonces
Mostrar “cola vacia”
Caso contrario
Bicola[frente]vacio
Frentefrente+1
Mostrar cola.

Aplicacion:

String bicola[]
Salida0
MetodosCodigos onuevo MetodoCodigos
Hacer Mientras (salida<>0)
Leer salida
Menú de salida(1.- ingresar código de radio 2.-ingrese código 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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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: ");
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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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 {
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;
}
}
}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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

 PSEUDOCÓDIGO:

Algoritmo para insertar datos


Fin1 = Fin2 = Fin3 = Fin4 = 0
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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]
j←1
Mientras k=2 <= Fin4 hacer
Si Mayor < COLA4 [k] Entonces
Mayor ← COLA4 [k]
j←k
Fin_Si
k←k+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
L←L+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 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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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 = {" "," "," "};
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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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) {
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;
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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

}
Universidad Nacional Ing. Sistemas e Informática
Del Santa

}
}
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();
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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
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
Universidad Nacional Ing. Sistemas e Informática
Del Santa

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

También podría gustarte