Sei sulla pagina 1di 12

SEMANA 08

ESTRUCTURA DE DATOS
UNIVERSIDAD NACIONAL DEL SANTA
Ingeniera de Sistemas e Informtica III CICLO












INTEGRANTES:
Acero Ros Nathalie
Caballero Morachimo Diana
Sanchez Bazn Mineili
Vicua Portal Marlon



1
INDICE


Ejercicio 01

Ejercicio 02

Ejercicio 03

Ejercicio 04

Ejercicio 05

Ejercicio 06

Ejercicio 07

Ejercicio 08
02

03

04

06

07

09

10

11

2
EJERCICIOS SEMANA 08
1.- Codificar el algoritmo de Transformacin de una expresin infija a Expresin
Postfija en la herramienta de programacin de laboratorio.
INICIO
Exin[ ]={(A+B^D) / (Q-R*(S+T/V)}
Repetir i desde 0 hasta longitud Exin hacer
Imprimir Exin[i];
Fin_Repetir
int N= longitud cadena
Exin[N]=')';
Imprimir("Exin[ n ] : " +Exin[N]);
Meter('(');
Exin[Tope]=cadena
Tope=tope+1
Repetir i desde 0 hasta N hacer
com=Exin[i]; // com es la variable que compara

Si (com=='^' | | com=='/' | | com=='*'| | com=='+' | com=='-')entonces
Mientras (Precedencia(Pila[tope-1])>=Precedencia(com)){
Expo[topex]=Sacar();
topex++;
fin_mientras

Si (Precedencia(Pila[tope-1])<Precedencia(com)) entonces
Meter(com);

caso contrario
si (com=='('){
Meter(com);
Caso contrario
Si (com==')') entonces
j=tope-1;
Fin_si
fin_si
Mientras(Pila[j]!='(') hacer
aux = Sacar();
Expo[topex] =aux;
topex++;
j--;
Fin mientras
Sacar();
caso contrario
Expo[topex]=com;
topex++;
Fin_si
Fin_Repetir

Repetir k desde 0 hasta topex hacer
Imprimir Expo[k]
Fin _Repetir
FIN

3
2.- Codificar el algoritmo de Evaluacin de Expresiones Postfijas en la herramienta de
programacin de laboratorio.

INICIO
Exin[ ]={(A+B^D) / (Q-R*(S+T/V)}
Leer cadena;
Exin[0]=' ( ';
Repetir i desde 0 hasta longitude cadane con paso 1 hacer
Exin[i+1]=cadena ;
Imprimir Exin[i+1]
Fin para
int N=cadena.length();

Meter(')');
Repetir i desde N hasta 0 con paso -1 hacer
char com=Exin[i]; //compara los operadores
Si (com=='^' | com=='/' | com=='*' | com=='+' | com=='-') entonces
Mientras (Precedencia(Pila[tope-1])>Precedencia(com)) hacer
Expre[topex]=Sacar();
topex++;
fin_mientras
si (Precedencia(Pila[tope-1])<=Precedencia(com)) entonces
Meter(com);
Caso contrario
Si (com==')') entonces
Meter(com);
Caso contrario
Si (com=='(') entonces
int j=tope-1;

mientras (Pila[j]!=')') hacer
char aux = Sacar();
Expre[topex] =aux;
topex++;
j--;
fin mientras
Sacar();
Caso contrario
Expre[topex]=com;
topex++;
fin_Si
Fin_Si
Fin_Repetir

System.out.println("Datos finales");

Repetir k desde topex-1 hasta 0 con paso -1 hacer
Imprimir Expre[k]
Fin_Repetir

FIN


4
3.- Cierto nmero de usuarios, n, envan simultneamente un docymento a la
impresora comn, la cual debe terminar su orden de impresin. Las longitudes de los
documentos enviados son L1 Ln, siendo Li la longitud del documento enviado por el
usuario i (la numeracin de los usuarios es arbitraria). Suponiendo que el tiempo que
se tarda en imprimir un documento es proporcional a su longitud. Escribir el algoritmo
(pseudocdigo) que indique el orde ptimo en que se deben imprimir de manera que
se minimice el tiempo medio de espera de cada usuario. El tiempo de espera del
usuario i-simo vendr dado por el orden que haya establecido la impresora para su
documento. Si su documento es el j-simo en imprimirse, su tiempo de espera ser la
suma de los tiempos de impresin de los j primeros documentos segn ese orden (se
incluye el suyo en la suma). Los usuarios debe estar enterados del tiempo que les
tomar esperar.


INICIO
Leer N
Leer L
time = 0
Frente = 0
Final = 0
( Tiempo de impresin aproximado 30s = 0.5 m por hoja )
Si [ ( final = N ) y ( frente =1 ) ] o [ ( final + 1= frente ) ] entonces
Escribir Lista de Impresin Llena
Caso contrario
Si Final = N
Final = 1
Caso contrario
Final = Final + 1
Fin _ Si
Cola L[final] = L
x
0.5
time= time + cola L[Final]
Imprimir tiempo de impresin: te
Si Frente = 0
Frente = 1
Fin_ Si
Fin_Si

Si ( time = t ) ( t: Tiempo transcurrido en verlo ) entonces
Si Frente = 0
Escribir Lista de impresin vaca
Caso contrario
Cola [frente] =
Si Frente = Final

5
Frente = 0
Final = 0
Caso contrario
Si Frente = Final
Frente = 0
Final = 0
Caso contrario
Si Frente = N
Frente = 1
Caso contrario
Frente = Frente + 1
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Si
FIN































6

4.- Dados los caracteres (), {}, [], y una cadena s, a esta balanceada si tiene alguno de
estos formatos, s = , ( String nulo); s = (T); s = [T]; s = {T}; s = UT en donde T y U son
cadenas balanceadas (en otras palabras, para cada parntesis, llave o corchete abierto
existe un carcter de cierre correspondiente). Ejemplo s = { [ (c - d) 2] + 1 }. Escribir el
algoritmo (Pseudo cdigo) que use una PILA para ver si una cadena es balanceada.


INICIO
Cadena x="la cadena no es valanceada";
Entero tope=longitud de la pila - 1;
cont=0,cont2=0,cont3=0;
entero b=1;
Mientras (b==1) hacer
Si (tope<0) entonces
SALIR;
Fin_Si

Si (pila[tope] == '{')entonces
cont++;
Fin_Si

Si(pila[tope] == '[')entonces
cont2++;
Fin_Si

Si(pila[tope] == '(')entonces
cont3++;
Fin_Si

Si(pila[tope] == '}') entonces
cont--;
Fin_Si
si (pila[tope] == ']') entonces
cont2--;
Fin_Si
si (pila[tope] == ')') entonces
cont3--;
Fin_Si
tope=tope-1;
Fin_Mientras
Si(cont==0&& cont2==0 &&cont3 ==0)entonces
x="la cadena es valanceada";
Fin_Si
IMPRIMIR(x);
FIN





7
5.- Escribir el algoritmo (Pseudo cdigo) que maneje tres PILAS de datos (A, B, C) en
un soso arreglo implementada como lista enlazada. Las pilas pueden decrecer o crecer
en cada momento, pero el tamao del arreglo no variara. Si al pila necesita ms
espacio solo tiene que tomarlo del arreglo que tiene 15 lugares en funcin a su lista de
disponibles, si las 3 pilas completan los 15 lugares entonces se manda un mensaje de
pial llena. Al ingresar un dato se deber leer adems el nombre de pial donde se desea
colocarla. Contemplar la posibilidad de eliminar un dato de cualquier pila, lo que
provoca incrementar la lista de disponibles.


INICIO
topeA = 0, topeB = 0
topeC = 0, dispo = 1
aA = 0, aB = 0, aC = 0

Leer dato
Si ( longA + longB + longC = 0 ) entonces
Pila Llena
Caso contrario
Imprimir En que pila ingresar
Si (dato va en pila A) entonces
topeA = dispo
pila [ topeA ] = dato
dispo = sig [ topeA ]
ant [ topeA ] = Aa
sgte [ aA ] = topeA
aA = topeA
Fin_Si
Si ( dato va en pila B ) entonces
topeB = dispo
pila [ topeB ] = dato
dispo = sgte [ topeB ]
ant [ topeB ] = aB
sig [ aB ] = topeB
aB = topeB
Fin_Si
Si ( dato va en pila C ) entonces
topeC = dispo
pila [ topeC ] = dato
dispo = sgte [ topeC ]
ant [ topeC ] = aC
sgte [ aC ] = topeC
aC = topeC
fin_si
Fin_Si

Imprimir (en que pila desea eliminar)

8
Si pila A
Si topea = 0
Pila A vaca
Caso contrario
pila [ topeA ] =
sgte [ topeA ] = dispo
dispo = topeA
topeA = ant [ topeA ]
Fin_Si
Fin_Si
Si pila B
Si topeB = 0 entonces
Pila B vaca
Caso contrario
pila [ topeB ] =
sgte [ topeB ] = dispo
dispo = topeB
topeB = ant [ topeB ]
Fin_Si
Fin_Si
Si pila C
Si topeC = 0
Pila C vaca
Caso contrario
pila [ topeC ] =
sgte [ topeC ] = dispo
dispo = topeC
topeC = ant [ topeC ]
Fin_Si
Fin_Si
FIN



















9
6.- En al SUNAT se considera una cola frente a una ventanilla en al cual si un usuario al
llegar a su momento de atencin no puede ser atendido ()porque se olvid un
documento de fcil subsanacin), se le reintegra a una cola en ventanilla especial en la
posicin N 5 si solo se olvid la copia de su DNI o en la posicin N 10, si acaso hay ms
de 10 personas y se olvid llenar su formulario de impuestos, o al final de la misma, en
caso contrario. Se pide disear un procedimiento de MESAPARTES (lo que debe
suceder cuando un cliente es atendido), ESPECIAL (vuelta a la cola en ventanilla
especial) y otro de ENTRADA (inicial) en cola. Todo ello con vistas a que al 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. Efectu la
prueba de escritorio correspondiente.

INICIO Main
PTRA = 0
PTRB = 0
Leer Nombre
Si Nombre tiene DNI entonces
Si nombre lleno formulario entonces
PTRA = PTRA + 1
Llamar MESAPARTE ( PTRA, Nombre, PTRB )
PTRB = PTRB - 1
Caso contrario
PTRB = PTRB - 1
Llamar especial [ ( PTRB ).Nombre ]
Fin_si
Caso contrario
Si nombre lleno formulario entonces
Llamar ESPECIA D
Caso contrario
PTRB = PTRB + 1
Cola ( PTRB ) = Nombre
Fin_si
Fin_Si

INICIO MESAPARTES ( PTR ) NOMBRE) PTRB )
ColaA ( PTR ) = Nombre
Atender Cola ( 1 )
Desde i = 1 hasta ( PTR - 1 ) hacer
ColaA ( i ) = ColaA ( i + 1 )
Fin_desde

INICIO ESPECIAL D ( PTR ) NOMBRE)
Desde j = 6 hasta PTR hacer
ColaB ( i ) = ColaB ( i 1 )
Fin_Desde
ColaB ( 5 ) = Nombre
FIN

10
7.- Se tiene la siguiente frmula:



Escriba su forme infija, postfija y prefija correspondiente.

Infija:

X = ( a + ( b ^ 2 c ) ^ ( 1 / 2 ) ) / ( d ^ ( 1 / 3 ) e / f )

Prefija:

X = [ a+ [ [^b2] c ] ^ [/12] ] / [ d ^ [/13] - [/ef] ]
X = [ a + [-^b2c] ^ [/12] ] / [ [^d/13] - [/ef] ]
X = [ a + [^-^b2c/12] ] / [-^d/13/ef]
X = [+a^-^b2c/12] / [-^d/13/ef]
X = /+a^-^b2c/12-^d/13/ef

Posfija:

X = [ a + [ [b2^] c ] ^ [12/] ] / [ d ^ [13/] - [ef/] ]
X = [ a + [b2^c-] ^ [12/] ] / [ [d13/^] - [ef/] ]
X = [ a + [b2^c-12/^] ] / [d13/^ef/-]
X = [ab2^c-12/^+] / [d13/^ef/-]
X = ab2^c-12/^+d13/^ef/-/























11
8.- Se tiene una pila con los 10 primeros nmeros naturales, y una cola con 10
siguientes, escriba el algoritmo en Pseudo cdigo que utilizando las operaciones
bsicas para una de estas estructuras permite obtener la sumatoria del producto de
sus datos, atendiendo la regla LIFO para la pila y FIFO para la cola.

INICIO
Repetir i desde = 0 hasta 9 con paso 1 hacer
MULT[i]=PILA[9-i]*COLA[i];
Fin_Repetir
Cadena salida ="";
sumatoria=0;
Repetir i desde 0 hasta MULT.longitud con paso
salida=salida+"-"+MULT[i];
sumatoria =sumatoria+MULT[i];
Fin_Repetir
IMPRIMIR(salida);
IMPRIMIR(sumatoria);
FIN

Potrebbero piacerti anche