Está en la página 1de 16

EjerciciosEstructurasRepetitivas

1.Medicamentos

Una distribuidora de medicina ha estado teniendo muchas devoluciones ltimamente debido a


que los productos que estn siendo despachados a sus clientes tienen una fecha de
vencimiento muy prxima, por lo cual la gerencia ha decidido realizar un estudio acerca del
estado actual del inventario. Para esto se ha levantado informacin como fechas de
vencimiento de los productos, numero de lotes y costos de inventario asociados. Con esta
informacinsesolicitalasiguienteinformacin:
a)Desarrollarunsubprogramaqueindiquelacantidaddelotesqueestnporvenceresteao.
b)Desarrollar un programa que determine el costo de la mercadera que esta por vencer este
ao.
c)
Adicionalmente se sabe que el loteestacodificadodelasiguientemanera:XX10293023843,
en donde los 2 primeros valores son las categoras de productos que representan los
siguientesvalores:
AN:Antibioticos
MU:Mucoliticos
LA:Laxantes.
Determinar,queelnombredelacategorarepresentaelmayorvalorendineroenalmacn.

deflotesPorVencer(fechaVencimientos)

end

defobtenerCosto(costos,fechaVencimientos)

end

defobtenerCategoriaMayorCosto(costos,lotes)

end

#zonadetest

defpregunta_1
fechas1=["12/10/2016","12/10/2016","12/12/2016","12/10/2016","12/10/2017"]
fechas2=["12/10/2016","12/10/2016","12/12/2016","12/10/2015","12/10/2017"]
fechas3=["12/10/2016","12/10/2015","12/12/2016","12/10/2015","12/10/2017"]
printvalidate(0,lotesPorVencer(fechas1))
printvalidate(1,lotesPorVencer(fechas2))
printvalidate(2,lotesPorVencer(fechas3))

end

defpregunta_2
fechas1=["12/10/2016","12/10/2016","12/12/2016","12/10/2016","12/10/2017"]
costos1=[22,20,44,35,46]
fechas2=["12/10/2016","12/10/2016","12/12/2016","12/10/2015","12/10/2017"]
costos2=[22,20,44,35,46]
fechas3=["12/10/2016","12/10/2015","12/12/2016","12/10/2015","12/10/2017"]
costos3=[22,20,44,35,46]

printvalidate(0,obtenerCosto(costos1,fechas1))
printvalidate(35,obtenerCosto(costos2,fechas2))
printvalidate(55,obtenerCosto(costos3,fechas3))
end

defpregunta_3
lotes1=["AN12312334","AN32423434","AN54565456","LA6576556","AN423423423"]
costos1=[22,20,44,35,46]
lotes2=["MU97767633","MU242323579","MU788767654","MU346342","MU78768668"]
costos2=[22,20,44,35,46]
lotes3=["AN12333","AN45646","AN768667","LA43224334","AN56456445"]
costos3=[22,20,44,35000,46]

printvalidate("Antibioticos",obtenerCategoriaMayorCosto(costos1,lotes1))
printvalidate("Mucoliticos",obtenerCategoriaMayorCosto(costos2,lotes2))
printvalidate("Laxantes",obtenerCategoriaMayorCosto(costos3,lotes3))
end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest

puts"Testdepruebadelprograma"
puts""
pregunta_1
pregunta_2
pregunta_3
puts""
end
test

2.Encuestadora.

La encuestadora Datitos desea realizar un programa que le permita analizar ciertos datos de
una poblacin. Para esto ha recolectado una base de datos que lepermitirrealizarestalabor
consuayuda.

Setienen4arreglosquecontienenlossiguientesdatos:nombre,edad,sexo,documentos

Sepide:

Determinarlacantidaddehombrescuyaedadseamayora40.
DadoelnmerodeDNI,obtenerelnombrededichociudadano.
Dadounnombre,determinarcuntoshomnimostienedichociudadano.
Determinar cuntos ciudadanos tienen la coincidencia de que su edad seencuentreenalguna
partedesunmerodedocumento.
Por ejemplo si un ciudadano tiene su nmero de documento 42264954 y tiene 26 aos,
entoncescumpleconlacondicindecoincidencia.

defhombresMayor40(listaEdades,listaSexos)

end

defobtenerNombre(dni,listaDocumentos,listaNombres)

end

defobtenerNumHomonimos(nombre,listaNombres)

end

defcoincidenciaEdad(documentos,edades)

end

#zonadetest

defpregunta_1
edades=[22,20,44,35,46]

sexos=['M','F','F','M','M']
edades1=[22,20,54,55,46]
sexos1=['M','F','F','M','M']
printvalidate(1,hombresMayor40(edades,sexos))
printvalidate(2,hombresMayor40(edades1,sexos1))
end

defpregunta_2
documentos=["42264954","45553237","44234532","49000021","43612323"]
nombres=["JoseRuiz","MariaPrado","LuzDelgado","MarioRuiz","JoseRuiz"]
printvalidate("JoseRuiz",obtenerNombre("42264954",documentos,nombres))
printvalidate("MariaPrado",obtenerNombre("45553237",documentos,nombres))
end

defpregunta_3
nombres=["JoseRuiz","MariaPrado","LuzDelgado","MarioRuiz","JoseRuiz"]
printvalidate(2,obtenerNumHomonimos("JoseRuiz",nombres))
printvalidate(1,obtenerNumHomonimos("MariaPrado",nombres))
printvalidate(0,obtenerNumHomonimos("MariaSalgado",nombres))
end

defpregunta_4
documentos=["42264954","45553237","44234532","49000021","43612323"]
edades=[22,20,44,35,46]
documentos1=["42264999","45553777"]
edades1=[15,77]
documentos2=["45564999","41233777"]
edades2=[17,53]
printvalidate(2,coincidenciaEdad(documentos,edades))
printvalidate(1,coincidenciaEdad(documentos1,edades1))
printvalidate(0,coincidenciaEdad(documentos2,edades2))
end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest

puts"Testdepruebadelprograma"
puts""
pregunta_1
pregunta_2

pregunta_3
pregunta_4
puts""
end
test

3.Aerolnea

Una conocida aerolnea necesita contar con un programa que le permitagestionarinformacin


acerca del estado de los asientos de cada uno de sus vuelos. Para esto, se cuenta con 2
arreglos: el primer arreglo contiene el nmero de asientos que tiene el vuelo, y el segundo
contieneelestadodecadaunodelosasientos(O=ocupado,D=desocupado).

Serequierelosiguiente:

1. Subprogramaqueobtengalacantidaddeasientosdisponibles.
2. Subprogramaquedevuelvalalistadeasientosqueseencuentrandisponibles.
3. Subprograma que devuelva el nmero del primer asiento disponible. En caso no exista
asientodisponibledevolvercero.
4. Subprograma que devuelva el nmero del ltimo asiento disponible. En caso no exista
asientodisponibledevolvercero.
5. Subprogramaquedevuelvaelporcentajedeasientosdisponibles.

defnumAsientosDisponibles(estadoAsientos)

end

deflistaAsientosDisponibles(asientos,estadoAsientos)

end

defprimerAsientoDisponible(asientos,estadoAsientos)

end

defultimoAsientoDisponible(asientos,estadoAsientos)

end

defporcentajeDisponible(estadoAsientos)

end


#zonadetest

deftest_numAsientosDisponibles
printvalidate(10,numAsientosDisponibles(@estado1))
printvalidate(8,numAsientosDisponibles(@estado2))
printvalidate(7,numAsientosDisponibles(@estado3))
end

deftest_listaAsientosDisponibles
printvalidate([4,6,7,8,10,11,13,15,16,17],listaAsientosDisponibles(@listaAsientos,@estado1))
printvalidate([1,2,3,9,10,11,12,15],listaAsientosDisponibles(@listaAsientos,@estado2))
printvalidate([6,11,13,15,16,18,19],listaAsientosDisponibles(@listaAsientos,@estado3))
end

deftest_primerAsientoDisponible
printvalidate(4,primerAsientoDisponible(@listaAsientos,@estado1))
printvalidate(1,primerAsientoDisponible(@listaAsientos,@estado2))
printvalidate(6,primerAsientoDisponible(@listaAsientos,@estado3))

end

deftest_ultimoAsientoDisponible
printvalidate(17,ultimoAsientoDisponible(@listaAsientos,@estado1))
printvalidate(15,ultimoAsientoDisponible(@listaAsientos,@estado2))
printvalidate(19,ultimoAsientoDisponible(@listaAsientos,@estado3))

end

deftest_porcentajeDisponible
printvalidate(0.50,porcentajeDisponible(@estado1))
printvalidate(0.40,porcentajeDisponible(@estado2))
printvalidate(0.35,porcentajeDisponible(@estado3))

end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest
@listaAsientos=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

@estado1=["O","O","O","D","O","D","D","D","O","D","D","O","D","O","D","D","D","O","O","O"]
@estado2=["D","D","D","O","O","O","O","O","D","D","D","D","O","O","D","O","O","O","O","O"]
@estado3=["O","O","O","O","O","D","O","O","O","O","D","O","D","O","D","D","O","D","D","O"]

puts""
test_numAsientosDisponibles
test_listaAsientosDisponibles
test_primerAsientoDisponible
test_ultimoAsientoDisponible
test_porcentajeDisponible
puts""
end
test

4.Cifrado

El cifrado por desplazamiento, es una de las tcnicas de codificacin de textos ms simples y


usados. Es un tipo de cifrado por sustitucin en el que una letra en el texto original es
reemplazada por otra letra que se encuentra un nmero fijo de posiciones ms adelante en el
alfabeto.

Por ejemplo, con un desplazamiento de 3 posiciones, la A sera sustituida por la D (situada 3


lugares a la derecha de la A), la B sera reemplazada por la E, etc. Se supone queelalfabeto
es circular de modo que, a todos los efectos, a continuacin de la Z comienzan de nuevo las
letrasA,B,C,etc.

Seproponequeprogramelossiguientessubprogramas:

1. Subprogramaquerecibaunaletrayquedevuelvalaletra quecorrespondaaaplicaruna
determinadaposicindedesplazamiento.
2. Subprogramaquerecibaeltextoacifrarydevuelvacomoresultadoeltextocifrado.

Debe tener en cuenta que slo se codifican los caracteres correspondientes a las letras del
alfabeto, el resto de caracteres (espacios en blanco, signos de puntuacin,etc)permanecern
inalterados.

Ejemplo:Sieltextoacodificares:UNTEXTOylaclavees3resultarXQWHAWR

defobtenerLetraDesplazada(abecedario,letra,desplazamiento)

end


defcifrado(texto,desplazamiento,abecedario)

end

#ZonadeTest

deftest_obtenerLetraDesplazada
printvalidate("X",obtenerLetraDesplazada(@abecedario,"U",3))
printvalidate("Q",obtenerLetraDesplazada(@abecedario,"N",3))
printvalidate("",obtenerLetraDesplazada(@abecedario,"",3))
printvalidate("W",obtenerLetraDesplazada(@abecedario,"T",3))
printvalidate("H",obtenerLetraDesplazada(@abecedario,"E",3))
printvalidate("A",obtenerLetraDesplazada(@abecedario,"X",3))
printvalidate("W",obtenerLetraDesplazada(@abecedario,"T",3))
printvalidate("R",obtenerLetraDesplazada(@abecedario,"O",3))

printvalidate("B",obtenerLetraDesplazada(@abecedario,"Z",2))
printvalidate("G",obtenerLetraDesplazada(@abecedario,"E",2))
printvalidate("V",obtenerLetraDesplazada(@abecedario,"T",2))
printvalidate("C",obtenerLetraDesplazada(@abecedario,"A",2))

printvalidate("C",obtenerLetraDesplazada(@abecedario,"Y",4))
printvalidate("E",obtenerLetraDesplazada(@abecedario,"A",4))
printvalidate("",obtenerLetraDesplazada(@abecedario,"",4))
printvalidate("I",obtenerLetraDesplazada(@abecedario,"E",4))
printvalidate("W",obtenerLetraDesplazada(@abecedario,"S",4))
printvalidate("X",obtenerLetraDesplazada(@abecedario,"T",4))
printvalidate("E",obtenerLetraDesplazada(@abecedario,"A",4))
end

deftest_cifrado
printvalidate("XQWHAWR",cifrado("UNTEXTO",3,@abecedario))
printvalidate("BGVC",cifrado("ZETA",2,@abecedario))
printvalidate("CEIWXE",cifrado("YAESTA",4,@abecedario))
end

#zonadetest

defvalidate(expected,value)
expected==value?".":"F"
end

deftest
@abecedario=
["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","
Z"]

puts"Testdepruebadelprograma"
puts""
test_obtenerLetraDesplazada
puts""
test_cifrado
puts""
end
test

5.Repuestos

ExisteunreporteenlaempresaREPUESTOSIQUITOSS.A.conlasiguienteinformacin:

VENTAS
Cdigo

Descripcin

2010

2011

RMF8IX1

Radiador

1250.21

2501.20

KRC90Z1

Bomba de petrleo

1250.52

1351.21

HYN9M90

Filtro de aceite

3125.25

4254.25

IIU90881P

Cadena de distribucin

6512.52

5524.25

Selepidequeimplementelossiguientessubprogramasparadeterminarlosiguiente:

a)Culeselcdigodelrepuestomsvendidoenelao2011?
b) Qu repuesto (indicar descripcin),esaquelquedisminuysusventasentrelosaos 2010
y2011?(sisonmsdeunoindicarelltimodeellos).
c) Cul es la variacin de incremento o disminucin (expresado en porcentaje) entre las
ventastotalesderepuestosentrelosaos2010y2011?

# encoding: UTF-8
def mas_vendido(codigo, ventas2011)

end

def disminucion_ventas(descripcion, ventas2010, ventas2011)


end
def variacion_ventas(ventas2010, ventas2011)
end
#--- zona de test ---def test_mas_vendido
print validate(mas_vendido(@codigo1, @ventas2011a ), "EPO12Z11")
print validate(mas_vendido(@codigo2, @ventas2011b ), "CTJ81X89")
end
def test_disminucion_ventas
print validate(disminucion_ventas(@descripcion1, @ventas2010a, @ventas2011a), "Empaquetadura
de motor")
print validate(disminucion_ventas(@descripcion2, @ventas2010b, @ventas2011b), "Anillos")
end
def test_variacion_ventas
print validate(variacion_ventas(@ventas2010a, @ventas2011a), 12.29)
print validate(variacion_ventas(@ventas2010b, @ventas2011b), -48.56)
end
def validate (expected, value)
expected == value ? "." : "F"
end
def test
@codigo1 = ["PAX89Z18","VZL87X20","CKJ81X89","EPO12Z11"]
@descripcion1 = ["Pistn ","Vlvula","Cigeal","Empaquetadura de motor"]
@ventas2010a = [1250.21,1250.52,3125.25,6512.52]
@ventas2011a = [2501.20,1351.21,4254.25,5524.25]
@codigo2 = ["ZAX89Z18","FZL87X20","CTJ81X89","EXO12Z11"]
@descripcion2 = ["Cadena distribucion ","Radiador","Bomba de combustible","Anillos"]
@ventas2010b = [11250.21,12250.52,43125.25,76512.52]
@ventas2011b = [12501.20,21351.21,34254.25,5524.25]

puts "---------------------------"
test_mas_vendido
test_disminucion_ventas
test_variacion_ventas
puts " "
end
test

6.Sueldos

Una empresa cuenta con la informacin de los sueldos de sus empleados los mismos que
estnasociadosasusnombres.Laempresatienelaurgenciadeconocerlosiguiente:

Un subprograma que reciba como parmetro el nombre de los empleados y otro con los
sueldosdecadauno.Sedebedeterminarquineselempleadoqueganamsenlaempresa.
Un subprograma que reciba como parmetro el nombre de los empleados y otro con los
sueldos de cada uno. Se debe determinar quin es el empleado que gana menos en la
empresa.
Un subprograma que reciba como parmetro los sueldos de los trabajadores y nos retorne el
promediodetodoslossueldos.
Un subprograma que reciba como parmetro los sueldos de los trabajadores y nos retorne el
totaldelossueldos.

deftrabajador_de_mayor_sueldo(nombres,sueldos)

end

deftrabajador_de_menor_sueldo(nombres,sueldos)

end

defpromedio_sueldos(sueldos)

end

deftotal_sueldos(sueldos)

end

#zonadetest

deftest_trabajador_de_mayor_sueldo
printvalidate(trabajador_de_mayor_sueldo(@nombres1,@sueldos1),"OscarPimentel")
printvalidate(trabajador_de_mayor_sueldo(@nombres1,@sueldos2),"JoseAlcantara")
printvalidate(trabajador_de_mayor_sueldo(@nombres1,@sueldos3),"ErnestoAgurto")
end

deftest_trabajador_de_menor_sueldo
printvalidate(trabajador_de_menor_sueldo(@nombres1,@sueldos1),"RocioMorante")
printvalidate(trabajador_de_menor_sueldo(@nombres1,@sueldos2),"MariaLuyo")
printvalidate(trabajador_de_menor_sueldo(@nombres1,@sueldos3),"JuanPerez")
end
deftest_promedio_sueldos
printvalidate(promedio_sueldos(@sueldos1),2585.49)
printvalidate(promedio_sueldos(@sueldos2),58000.48)
printvalidate(promedio_sueldos(@sueldos3),216703.32)
end

deftest_total_sueldos
printvalidate(total_sueldos(@sueldos1),31025.89)
printvalidate(total_sueldos(@sueldos2),696005.71)
printvalidate(total_sueldos(@sueldos3),2600439.82)

end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest
@nombres1=["RobertoMontero","JoseAlcantara","RosarioMedina","RocioMorante","Maria
Luyo","OscarPimentel","AlbertoPino","CeliaMayer","AlfredoPinto","JuanPerez","Andres
Montero","ErnestoAgurto"]
@sueldos1
=[1250.12,1585.01,3456.54,234.19,1234.89,7861.99,1241.00,4001.01,4320.12,3400.88,1239.9
1,1200.23]
@sueldos2
=[31232.21,211585.21,43456.24,12234.22,11234.19,127861.10,12241.02,40101.10,42320.10,1
1300.18,71239.92,81200.22]
@sueldos3
=[81222.71,176585.44,43876.56,712514.55,81224.66,67861.70,77241.32,43101.30,342320.70,
18130.56,75139.76,881220.56]

puts""

test_trabajador_de_mayor_sueldo
test_trabajador_de_menor_sueldo
test_promedio_sueldos
test_total_sueldos
puts""
end
test
7.FocusGroup

Unaempresadeseaconocerlaopinindelpblicosobresusproductosquesonquesosde
cincotipos:Parmesano,Gouda,Edam,FrescoyAzul.Porelloquiereunaaplicacinquele
permitaprocesarlosdatos.Alosasistentesselesdaunasencuestasdondemarcansus
preferenciasenunniveldel1al5dondesehadefinido:

NivelDefinicin
1Nolocomprara
2Locompraramuypoco
3Locomprarararavez
4Locompraraaveces
5Locomprarasiempre

Selepidelosiguiente:

Desarrollarunsubprogramaquedetermineququesostienenclasificacinde5?
Desarrollarunsubprogramaquedeterminequporcentajedequesosestporsobre3en
elpuntaje?
Desarrollarunsubprogramaquepermitabuscarelniveldeunquesoespecfico.

defbuscar_mejores_quesos(nivel,tipo_queso)

end

defcalcular_quesos_sobre_promedio(nivel)

end

defbuscar_nivel_queso_por_tipo(nivel,tipo_queso,nombre_queso)

end

#ZonadeTest

@tipo_queso=["Parmesano","Gouda","Edam","Fresco","Azul"]

deftest_buscar_mejores_quesos
toma1=[5,3,5,3,2]
toma2=[3,2,3,5,1]
toma3=[1,5,3,4,5]

printvalidate(["Parmesano","Edam"],buscar_mejores_quesos(toma1,@tipo_queso))
printvalidate(["Fresco"],buscar_mejores_quesos(toma2,@tipo_queso))
printvalidate(["Gouda","Azul"],buscar_mejores_quesos(toma3,@tipo_queso))
end

deftest_calcular_quesos_sobre_promedio
toma1=[5,3,5,3,2]
toma2=[3,2,3,5,1]
toma3=[1,5,3,4,5]

printvalidate(40.00,calcular_quesos_sobre_promedio(toma1))
printvalidate(20.00,calcular_quesos_sobre_promedio(toma2))
printvalidate(60.00,calcular_quesos_sobre_promedio(toma3))
end

deftest_buscar_nivel_queso_por_tipo
toma1=[5,3,5,3,2]
toma2=[3,2,3,5,1]
toma3=[1,5,3,4,5]

printvalidate(5,buscar_nivel_queso_por_tipo(toma1,@tipo_queso,"Edam"))
printvalidate(5,buscar_nivel_queso_por_tipo(toma2,@tipo_queso,"Fresco"))
printvalidate(1,buscar_nivel_queso_por_tipo(toma3,@tipo_queso,"Parmesano"))
printvalidate(5,buscar_nivel_queso_por_tipo(toma3,@tipo_queso,"Gouda"))
end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest
puts"Testdepruebadelprograma"
puts""
test_buscar_mejores_quesos
puts""

test_calcular_quesos_sobre_promedio
puts""
test_buscar_nivel_queso_por_tipo
puts""
end

test

8.Sobreusodecelular

Sehadeterminadoqueelusodembparaenviardatossevaamanejarsegnlossiguientes
montos:

Consumo(mb)Soles/mb
Primeros100mb0.15
De101a500mb0.20
De501a1000mb0.35
Msde1000mb0.80

Losmontosseincrementansegnlacantidaddembusados.Siporejemplouso80mb
entoncespago:

80*0,15

Perosiconsumo110entoncespagolosprimeros100a0.15ylossiguientes10alatarifa
siguientequeseran0.20solesloquedaracomoresultado.

100*0.15+10*0.20

Sepidelosiguiente:

1.Subprogramaquedadaunadeterminadacantidaddemb(consumo),devuelvael
costo/mb.
2.Subprogramaquecalculeelmontototalapagar.

defcosto_mb(consumo)

end

defmontoPagar(consumo)


end

#zonadelprogramaprincipal

#zonadetest
deftest_costo_mb
printvalidate(0.20,costo_mb(150))
printvalidate(0.35,costo_mb(560))
printvalidate(0.80,costo_mb(1560))
end

deftest_montoPagar
printvalidate(182.50,montoPagar(750))
printvalidate(1058.0,montoPagar(1985))
printvalidate(80.0,montoPagar(425))
end

defvalidate(expected,value)
expected==value?".":"F"
end

deftest

puts"Testdepruebadelprograma"
puts""
test_costo_mb
puts""
test_montoPagar
puts""
end
test

También podría gustarte