ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD ELE CTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN I TÉRMINO 2011-2012
Nombre:_____________________________ Nombre:__________________ ___________ Matrícula:___________________________ Matrícula:________________ ___________ TEMA 1 (30 puntos) Implemente un procedimiento que dado un número n, escriba en pantalla los n primeros cubos, de acuerdo a las siguientes reglas: Para n= 5, la salida es: a. Sumando el primer impar se obtiene el primer cubo f(1,3)= 1 = 1 b. Sumando los dos siguientes impares, se obtiene el segundo cubo f(2,3)= 3 + 5 = 8 c. Sumando los tres siguientes impares se obtiene el tercer cubo f(3,3)= 7 + 9 + 11 = 27 y así en así en adelante f(4,3)= 13 + 15 + 17 + 19 = 64 f(5,3)= 21 + 23 + 25 + 27+ 29 = 125
TEMA 2 (30 puntos) El ‘International Standard Book Number’, en español, ‘Número Estándar Internacional de Libro’, abreviado ISBN, es un identificador único para libros, previstos para uso comercial. El ISBN está compuesto de 13 dígitos y consiste de 5 partes: 1. La industria. (978 identifica la publicación de un libro) 2. El código de país o lengua de origen. 3. El código del editor. (Asignado por la agencia nacional del ISBN) 4. El número del libro. (Asignado por el editor) 5. El dígito verificador. Implemente:
a) El procedimiento ISBN (long código, int A[]); que recibe el ISBN de 13 dígitos y un arreglo A vacío de tamaño 13. El procedimiento llena el arreglo A con el ISBN. b) La función bool ISBNValido (int A[]); que recibe un arreglo A con el ISBN y retorna verdadero si el dígito verificador es válido, de lo contrario retorna falso. El cálculo de un dígito verificador ISBN‐13 empieza con los primeros 12 dígitos del ISBN: 1. Cada dígito de izquierda a derecha es multiplicado alternadamente por 1 ó 3. Dígito Verificador
ISBN Válido 9 7
8
3
1
6
1
4
8
4
1
0
X =
1 8
3 9
1 1
3 18
1 1
3 12
1 8
3 12
1 1
3 0
1 9
3 21
0
2. Se suman estos nuevos dígitos entre sí, en el ejemplo: suma = 9+21+8 +9+1+18+1+12+8+12+1+0= 100 3. Se obtiene el residuo de dividir esta suma por 10, en el ejemplo residuo es 0. 4. Se calcula resultado, el cual es 10 – 10 –residuo, en el ejemplo resultado es 10. 5. Finalmente se obtiene el verificador. Si resultado es 10 el dígito verificador es 0, caso contrario verificador es resultado. En el ejemplo el dígito verificador que se obtiene es 0 y coincide con el dígito verificador del ISBN recibido, por lo que ese ISBN es válido.
Elaborado por: Elaborado por: V. Cedeño, C. M Falcones, M Falcones, G. Luzardo, J. Luzardo, J. Moreno, J. Moreno, J. Rodríguez, F. Rosero, J. Rosero, J. Tibau.
TEMA 3 (40 puntos) Se desea implementar el juego el juego “La Guía del Viajero Intergaláctico” de un solo jugador. solo jugador. El juego se desarrolla en un tablero de 42 casillas y 3 dados especiales de nueve lados. Las galaxias están representadas por direcciones de 3 dígitos y el jugador comienza en la casilla 1 en la galaxia con la dirección 000. El Viajero lanza los 3 dados al mismo tiempo para obtener la dirección de una galaxia a la cual quiere viajar, el resultado de cada uno de los dados representa uno de los dígitos de la dirección de la galaxia. El número de casilleros que El Viajero puede avanzar en el tablero es la distancia entre las direcciones de dos galaxias que sean cercanas. Dos galaxias se consideran cercanas cuando la distancia entre ellas es menor o igual a 4 años luz. La distancia entre dos galaxias se calcula de la siguiente forma: 1. Se suman los dígitos de la dirección de la galaxia a la cual se quiere viajar. 2. Se suman los dígitos de la dirección de la galaxia en la que se encuentra actualmente. 3. Se restan los resultados obtenidos y el valor absoluto de éste representa la cantidad de años luz que las separan y la cantidad de casillas que debe avanzar. Nota: Si la suma de los dígitos de la dirección es mayor a 9 se suman los dígitos del número obtenido.
Ejemplo Lanzamiento 1: Galaxia 000 0+0+0 =0 Galaxia 175 1+7+5 = 13, 1+3=4 Distancia = |0 – |0 – 4 | = 4 Galaxias son cercanas y avanza y avanza 4 casillas en el tablero el tablero
Ejemplo Lanzamiento 2: Galaxia 175 1+7+5 = 13, 1+3=4 Galaxia 567 5+6+7= 18, 1+8 = 9 Distancia= |4 ‐9| = 5 Galaxias no son cercanas y no y no se avanza nin una casilla en el tablero el tablero
Para mala suerte de El Viajero, La Galaxia es un lugar lleno de peligros: • Si un jugador cae en la casilla 31 se encontrará con un cinturón de asteroides el cual lo enviará de regreso a la Galaxia 341 (casilla 23). • Si un jugador un jugador cae en la casilla 33 se encontrará con una galaxia que está siendo consumida por un agujero negro y perderá el juego. el juego. El juego El juego termina cuando El Viajero: • Llega o sobrepasa la casilla 42 donde se encuentra una Galaxia de un universo paralelo. • Cae en la casilla 33 del agujero negro Al finalizar el juego se indicará si el jugador ha ganado el juego y se mostrará el número de lanzamientos realizados. Ud. Deberá implementar: a) La función int SiguienteGalaxia(); la cual retorna la dirección de 3 dígitos de la siguiente galaxia a visitar. b) La función bool cercanas(int d1, int d2, int *distancia); la cual recibe dos direcciones de galaxias y retorna verdadero si las galaxias son cercanas, de lo contrario retorna falso y actualiza el valor de distancia entre las dos galaxias. c) El procedimiento casilla(int posJugador); el cual muestra en pantalla un mensaje que indica la posición en la que se encuentra el jugador y si ha caído en el cinturón de asteroides o en un agujero negro. d) Un programa que simule el juego y USE las funciones y procedimientos implementados anteriormente. En cada turno del jugador del jugador se deberá mostrar por pantalla: • Las direcciones de las galaxia actual y destino • La distancia entre las dos galaxias y si son cercanas o no • El número de casillas por avanzar
Elaborado por: Elaborado por: V. Cedeño, C. M Falcones, M Falcones, G. Luzardo, J. Luzardo, J. Moreno, J. Moreno, J. Rodríguez, F. Rosero, J. Rosero, J. Tibau.
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN II TÉRMINO 2011-2012
Nombre:__________________ ___________ Matrícula:________________ ___________ TEMA 1 (20 puntos) Escriba el conjunto de instrucciones en Logo que permitan dibujar la siguiente figura: 50
40
16 200 TEMA 2 (35 puntos) Escriba la implementación en SciLab de la función obtieneModa, la cual recibe como parámetro de entrada un arreglo de enteros escalares y devuelve la moda estadística. La moda estadística es el número que más se repite en el arreglo. Si uno o mas números se repiten la misma cantidad de veces, la función debe retornar el menor de todos. Por ejemplo sea el siguiente arreglo:
‐‐>arreglo=[3,5,7,5,5,2,4,2,1,3,2,3]; La salida de la función será la siguiente ‐‐>moda=obtieneModa(arreglo) moda = 2. NOTA: Tome en cuenta que si el arreglo está ordenado resulta más sencillo determinar cuantas veces se repite cada número en el arreglo. Considere que tiene a la mano la función [arregloSalida] = ordena (arreglo), la cual ordena los números en el arreglo, la cual debe usar para simplificar la tarea de obtener la moda en el arreglo de entrada.
TEMA 3 (45 puntos) Se desea implementar el juego “AeroWar” de un solo jugador. Una matriz mxn representa el espacio aéreo, la cual al inicar el programa está llena de ceros indicando que no hay aviones. En cada turno, los aviones avanzan de arriba hacia abajo por la matriz, una casilla por turno y su objetivo es salir por la parte inferior de la matriz. El objetivo del jugador es disparar a los aviones para evitar que salgan. Existen cuatro tipos de aviones, de diferentes tamaños: Tipo1, Tipo2, Tipo3 o Tipo4. Al iniciar el juego aparecen cuatro aviones aleatorios (Tipo1, Tipo2, Tipo3 o Tipo4), cada uno de ellos en un lugar aleatorio de la parte superior del espacio aereo, esto es, en una columna aleatoria de la parte superior de la matriz. Los cuatro tipos de aviones son representados en la matriz por un número que indica su longitud. Avion Tipo1 1
Avion Tipo2
2 2
Avion Tipo3
3 3 3
Avion Tipo4
4 4 4 4
Un ejemplo de un espacio aereo al inicio del juego es el siguiente: 4
2
0
1
3
0
0
4
2
0
0
3
0
0
4
0
0
0
3
0
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
A continuación comienza el juego que se realiza por turnos. Por cada turno el jugador puede realizar un disparo en una posición (fila,columna), para tratar de derribar un avión. Las celdas vacías y las de los aviones derribados contienen un 0. En cada turno los aviones avanzan una posición hacia abajo y si alguno llega al final de la matriz el juego termina. Ud. Debe implementar: 1. La función [EA]=espacioAereo( ) que permita generar el espacio aéreo del juego (EA) con la matriz mxn, de dimensiones aleatorias en un rango de 10 a 15 cada una de ellas, llena de ceros. 2. La función [EA,colocado]=nuevoAvion(EA,tipo,col) que permita colocar un avión dado su tipo y una columna del espacio aéreo. El avión no puede utilizar ninguno de los espacios ya ocupados. La función retorna el espacio aéreo (EA) y si ha logrado colocar el avión en la posición indicada (colocado será verdadero o falso). 3. La función [EA,puntos]=disparar(EA,fil,col) que permita disparar a un avión. Cuando el disparo se realiza: • Si cae en una posición vacía, el jugador no gana puntos. • Si la posición atacada contenía un avión se lo debe derribar actualizando todas las posiciones de ese avión con cero. Los puntos ganados son iguales a la longitud del avión. 4. Un programa que simule el juego y USE las funciones implementadas anteriormente. En cada turno del jugador se deberá mostrar por pantalla. 1. El espacio aéreo con los nuevos aviones generados. 2. El espacio aéreo con los aviones en el tablero que avanzaron una casilla. 3. El mensaje que indique si un avión ha sido derribado. Nota: El programa finaliza, cuando: 1) Un avión llegue a la última fila del espacio aéreo; 2) el jugador destruya a todos los aviones. Al finalizar se muestran los puntos ganados.
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN I TÉRMINO 2012-2013
Nombre:__________________ ___________ Matrícula:________________ ___________ TEMA 1 (25 puntos)
‐ La función CESPED dibuja un pequeño césped de 9 puntas. ‐ La función TALLO dibuja el tallo completo de una flor. ‐La función CUADRADO recibe como parámetro el diámetro del cuadrado que la tortuga debe dibujar. 1. Complete el procedimiento llamado FLORCUADRADA :LADO que dibuja cuadrados consecutivos. La función cada vez que empieza a dibujar un cuadrado nuevo lo hace desviándose un cierto ángulo respecto al anterior, para llegar a formar una figura con aspecto de flor como la de la ilustración siguiente. Para este dibujo en particular dibuja 18 cuadrados. Use la función CUADRADO. 2. Implemente el código de la función JARDIN que dibuje la siguiente figura en Logo. USE las funciones definidas
TO CESPED rt 45 REPEAT 4[RIGHT 90 FORWARD 25 LEFT 90 FORWARD 25] END TO TALLO FD 40 LT 45 FD 30 lt 135 fd 20 lt 90 fd 20 lt 45 fd 30 rt 135 fd 20 rt 90 fd 20 rt 90 fd 80 END TO CUADRADO :LADO REPEAT 4 [ FORWARD LADO RIGHT 90 ] END TO FLORCUADRADA:LADO END
TEMA 2 (30 puntos) Una ferretería tiene una banda sin fin por donde se desplazan tornillos asimétricos y al final de la banda existe un recolector con algunas perforaciones en donde se clasifican los tornillos dependiendo del tamaño. La banda es un arreglo de 20 celdas que contiene números entre 1 y 7, que representan los diferentes tamaños de tornillos. El recolector es un arreglo de 7 celdas que contiene para cada tipo de tornillo, cuántos existen de cada uno. Ud. Debe implementar en Scilab: 1. La función [AT]= generarArreglo( ); que devuelve el arreglo que representa la banda (AT) lleno con números aleatorios entre 1 y 7. 2. La función [AR]= clasificarTornillos(AT); que recibe el arreglo de tornillos y devuelve el arreglo recolector lleno con las cantidades existentes de cada tipo de tornillo. Por ejemplo, con este arreglo de tornillos: 1 1 3 4 5 4 6 7 3 2 1 3 5 5 2 2 4 4 7 7 La salida de la función clasificarTornillos es la siguiente: 3 3 3 4 3 1 3 1 2 3 4 5 6 7
Elaborado por: V. Cedeño, C. Falcones, C. Mera, J. Moreno, J. Tibau
TEMA 3 (45 puntos) Una compañía desea implementar la versión electrónica del juego de naipes “Quita Montón”. El juego consiste en obtener cartas de un mazo de 52 cartas (13 cartas por cada palo) y se rige de acuerdo a las siguientes reglas: 1. Al iniciar el juego se baraja el naipe y se obtiene una carta del mazo. Esta carta será la base del montón. 2. El primer turno siempre lo tiene el usuario y el siguiente turno la computadora. a. El usuario tiene opción de sacar una carta o pasar su turno. b. La computadora siempre saca carta. 3. Al sacar una carta del mazo se la coloca sobre el montón. 4. Si la carta que se está colocando es de igual valor a la que se encuentra sobre el montón, el jugador que la coloca se lleva todas las cartas (Llevarse todas las cartas significa acumular un punto por cada carta del montón y dejar el montón con 0 cartas). A continuación la computadora obtiene una carta del mazo, la misma que será la nueva base del montón. 5. El juego continúa y el turno lo tiene el siguiente jugador. 6. El juego se repite a partir del paso 3 y termina cuando no hay más cartas en el mazo. 7. Gana el juego el jugador que más puntos tenga. 8. Al finalizar el juego, el programa debe mostrar que jugador ganó y el número de puntos acumulados por dicho jugador. Usted debe implementar: 1. La función [topeMonton, nCartasMonton, puntos] = colocarCarta(carta, topeMonton, nCartasMonton), que recibe: La carta a colocar, la carta que se encuentra en el tope del montón y cuantas cartas se encuentran en el montón. Retorna: la carta que se encuentra en el nuevo montón, el número de cartas existentes en el nuevo montón, la cantidad de puntos resultantes de la jugada. 2. Un programa que implemente el juego “Quita montón” • Utilizando la función implementada anteriormente y las disponibles en Nota*. • En cada turno del jugador, se deberá mostrar por pantalla: o La carta que se encuentra sobre el montón. o La cantidad de cartas que se encuentran actualmente en el montón. La cantidad de cartas en el mazo. o Los puntos de los dos jugadores. o Nota: Asuma que posee las siguientes funciones, si usted desea implementarlas cada una tendrá un valor de 5 puntos extra: • [carta] = obtenerCarta(mazo), que recibe el mazo y remueve la carta que se encuentra sobre el mazo. En el caso de que el mazo esté vacío, retorna 0. • [mazo] = barajar(mazo), que recibe un mazo de cartas y lo desordena.
Elaborado por: V. Cedeño, C. Falcones, C. Mera, J. Moreno, J. Tibau
!"#$ G 'J) *+,-./0 ;<# C%>)#/B# '.?.# 2>)".>.<@#& "# G.&?25< .".C@&5<2C# '. :< b:.A%, !" b:.A% C%2?@. .< I:. ." ).&?%<#b. U%"2 V&%? '.$.&H #@G.?#& :< "#&A% C#>2<% '. [[ c> )# &.?C#@#& # :<# )&2
)#? '. ?:? .<.>2A%? X #)&%G.Cd#& "%? #@#b%? I:. ". ).&>2@2&H< "".A#& &H)2'%, U# &.C%&&.& .?@. C#>2<%0 U%"2 :@2"26#&H :<# <:$. I:. F::.?@ G#"%&.? .<@&. Q X S #" #6#&0 "# '2?@#
O2 "%? C#?C#$.".? >:.?@< :< <=>.&% )#& X %@&% 2>)#&0 ?. ?:>#< ?:? &.?:"@#'%?, O2 #>$%? C#?C#$.".? >:.?@< <=>.&%? )#&.?0 ?. &.?@# ." >#X%& C%< ." >.<%& O2 #>$%? C#?C#$.".? >:.?@< <=>.&%? 2>)#&.?0 ?. &.?@# ." >#X%& C%< ." >.<%&,
4%? C#?C#$.".? ?%"% ):.'.< ?.& "#<6#'%? J\ G.C.? C#'# :<%0 #<@.? '. I:. ?: )%"G% >HA2C% ?. @.&>2<. X ?. &%>)# ." . E] d#X :< @=<." I:. ". ).&>2@. # U%"2 A#<#& E[ c> .< ?: $=?I:.'# '. "# )&2.@&%? Q\ % [\ ?. C#. .< :<# @>)# I:. &.@&%C.'.&H # U%"2 :<%? e>?0 )# %$@.<.& C:#<@%? e2"5>.@&%? '.$. &.@&%C.'.& ?. #)"2C# :< #".#@%&2% .<@&. "%? ?2A:2.<@.? G#"%&.? T0 EE0 ET, 9.<2.<'% .< C:.<@# I:. "# )&%$#$2"2'#' '. I:. ?#"A# ." T .? Z\L0 ." EE .? [\L X ET .? J\L, !< "%? e2"5>.@&%? QE0 Q[ X [E d#X (-)!+'" I:. ).&>2@.< 2.<@#& .< E ." "#<6#>2.<@% '. "%? C#?C#$.".?, 6/-27 72:2 =3*4232,->;5 E, 4# F:,I>;L>/@>:242/'0 I:. &.@%&<# ." <=>.&% '. e2"5>.@&%? # #G#<6#&, J, 4# F:7.DE-.3>;#.,27>'K30 I:. &.C2$. C%>% )#&H>.@&%? ." e2"5>.@&% #C@:#" X &.@%&<# :< E ?2 C%2.@&%? '%<'. .?@H< "#? >%<.'#?0 '. "% C%<@#&2% &.@%&<# \, Z, 4# F:->1./!;>3*>/'K30 I:. '#'% ." e2"5>.@&% #C@:#" &.@%&<# "# C#<@2'#' '. e2"5>.@&%? # #G#<6#& % &.@&%C.'.&0 '.).<'2.<'% '. C#'# C#?%, Q, 4# F:3=,.'K30 I:. '#'% ." e2"5>.@&% #C@:#"0 2>)&2>. '%<'. ?. .)#, [, ;< )&%A># I:. ?2>:". ." b:.A% X 6?" "#? F:)".>.<@#'#? #<@.&2%&>.<@., !< C#'# @:&<% '." b:A#'%&0 ?. '.$.&H >%?@& )%& )#<@#""#* !" G#"%& '. "%? C#?C#$.".?, 4# C#<@2'#' '. e2"5>.@&%? #G#<6#'#, O2 ?. .2.<@%? I:. ". I:.'#<, O2 d# F2<#"26#'% ." b:.A% X ." b:A#'%& d# &.?C#@#'% # "# )&2
!"#$ J ') *+,-./0 3<#"2C. X '2$:b. "% I:. &.#"26# ." ?2A:2.<@. C5'2A% '%<'. ?. '.F2<. )&.G2#>.<@. :<# F:#'# MNO6P$ 9f ghi;13 &@ Q[ F' Z\ $e Z\ &@ Q[ F' E\\ "@ Q[ F' Z\ ): d%>. )' !aN ghi;13 F' E\\ ghi;13 ): &@ ^\ F' E\\ "@ ^\ )' F' E\\ ):
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN - I TÉRMINO 2013-2014
Nombre:________________________________ Matrícula:______________________ "#$% & '() *+,-./0 89 ,1234. 5+63,37 .2 79 .9:.&% )%24:4;% <7. .2 79 =7$% ).&>.=:%0 '. :#" ?#9. <7. "# 27?# '. 272 '@A4:%2 '.=4?#".2 .2 4A7#" # "# @B =C$4=# '." 9C?.&%, 8.4 3932*:.0 "%2 24A74.9:.2 9C?.&%2* !! !" !"#!$ !
!
!
! !! !!! !" !"#!$ !
!
! !! !!
!
!"# !"#$ !"#
%$! !
!
!
!" !!" !!" ! !" !"#!$ !"
!"!!" !!"! !" !"#!$ !"
!
!
!!! !! !!
!!!!!!!!!
82:.' '.$. 4?)".?.9:#& .9 D=4"#$* E, F# >79=4G9 ;/+2<= > /+2<45?@?-./',+234.00 "# =7#" =#"=7"#&H "# 27?# '. "%2 '@A4:%2 '." 9C?.&%, I, F# >79=4G9 ;3/5+63,37= > 3/A+234.5+63,37',+234.00 "# =7#" &.:%&9#&H ;.&'#'.&% JK:L % >#"2% JK>L .9 ." =#2% <7. ." 9C?.&% 2.# M7'.9.N % 9%, 82. "# >79=4G9 27?#&M4A4:%2, "#$% ( '() *+,-./0 O" :$#P#& =%9 4?HA.9.20 79# %).=4G9 =%?C9 .2 "# '. #A '#& "# ?#:&4B <7. &.)&.2.9:# "# 4?#A.9, !2:% .20 "#2 '4?.924%9.2 '. "# ?#:&4B =&.=.9 N "%2 ;#"%&.2 '. =."'# %&4A49#" 2. =%)4#9 # "#2 #'N#=.9:.2 )# "".9#& "%2 .2)#=4%2 .9 $"#9=%,
!9 "# 4?#A.9 ).<7./#* • •
!" )4Q." JR0IL 2. ;. &.)"4=#'% .9 "%2 )4Q.".2 JS0RL0 JS0TL0 JU0RL N JU0TL '. "# 4?#A.9 A '., !" )4Q." JT0IL 2. =%)4# V#=4# "%2 )4Q.".2 JW0RL0 JW0TL0 JX0RL N JX0TL,
!2=&4$# 79# >79=4G9 2<-4?B( > <@4<,6<4'2<-4?B&00 <7.* E, I, R,
3.=4$. "# 4?#A.9 ).<7./# 2<-4?B&, -#"=7"# "#2 '4?.924%9.2 '. 2<-4?B& N =&.# 79# ?#:&4B 2<-4?B( '." !"#$% '. :#?#/%0 "".9# '. =.&%2 494=4#"?.9:., 3.=%&&. "# ?#:&4B 2<-4?B& =%"%=#9'% "#2 =%)4#2 '. 272 )4Q.".2 .9 "%2 "7A#&.2 #)&%)4#'%2 '. 2<-4?B(,
"#$% C ')D *+,-./0 !" P7.A% Y!Q).'4=4G9 #" Z%9'% '." 5#&[ =%9242:. .9 '4&4A4& # 79 $7B% )%& '42:49:#2 )#&:.2 '." >%9'% '." ?#& .9 27 $C2<7.'# '. .2).=@?.9.2 )# 49;.2:4A#=4G9, \?)".?.9:. "# ;.&24G9 .".=:&G94=# '." P7.A% =%9 "%2 24A74.9:.2 &.<7.&4?4.9:%2, !" $7B% '.$. &.=%&&.&0 =%9 79 :#9<7. '. E] "4:&%20 I] ?.:&%2 '. '42:#9=4# .9 79 #?$4.9:. =%9 :.?).:7 ;#&4#9:.2 N .9 =4.&:%2 ?.:&%2 '. )&%>79'4'#' )7.'. .9=%9:&2. =%9 .2).=@?.9.2 $7.9%2 % ".:#".2, F# >%&?# '. &.)"4=#& ." '.2=.92% '." $7B% .2 =%9 ." 72%0 .9 =#'# :7&9%0 '. 79 :#9<7. '. A#2 <7. ". ).&?4:. 4?)7"2#&2. #" $#P#& .9 ." #A7#, !9 =#'# :7&9% 2. 4?)7"2# =%9 ." :#9<7. N "%2 ?.:&%2 <7. #;#9B# '.).9'.9 '. "# >G&?7"#* ?.:&%2 ^ S_6_J`a],RL_Jba],IL0 =%9 ." &.27":#'% &.'%9'.#'% )# #&&4$#, 6^ F# :.?).:7 .9 27 )%24=4G9 J"# =7#" .2 79 9C?.&% #".#:%&4% .9:&. _E N _RL, `^ !" 9C?.&% '. .2).=@?.9.2 <7. =#&A#, b^ !" A#2 .9 27 :#9<7. J." =7#" '42?497N. E "4:&% .9 =#'# :7&9%L, • • •
!9 =#'# P7.A% # "% "#&A% '. "%2 I] ?.:&%2 #)#&.=.&H9 W .2).=@?.9.2 .9 )%24=4%9.2 #".#:%&4#20 2.42 $7.9%2 N 79% ".:#", D4 ." $7B% =#. .9 79 .2).=4?.9 $7.9% "% &.=%A.0 24 =#. .9 79% ".:#" )4.&'. ." P7.A%, b#9# ." P7.A% 2G"% 24 &.=%&&. "%2 I] ?.:&%2 =%9 27>4=4.9:. A#2 N V# &.=%A4'% ?@94?% 79 .2)c=4?.9 )# 27 49;.2:4A#=4G9, O27?# <7. )%2.. "# >79=4G9 ;$=>,+234./E?,F3*3-?4'0G <7. '.;7.";. 79 #&&.A"% 5 =%9 W 9C?.&%2 #".#:%&4%2 .9:&. E N I] 249 &.).:4&, !" )&4?.&% &.)&.2.9:# ." ?.:&% '%9'. 2. .9=7.9: ." .2)c=4?.9 ".:#" N ." &.2:% "%2 ?.:&%2 '. "%2 .2).=@?.9.2 $7.9%2, H/-36 63I3 ?2*:323,-<4J E, F# >79=4G9 ;23-4./=>I<9<4',#/*3K?23,3/GK<,-?6<6L0 <7. &.=4$. ." 9C?.&% '. .2).=@?.9.2 <7. =#&A#0 "# =#9:4'#' '. A#2 .9 27 :#9<7. N &.:%&9# ." 9C?.&% '. ?.:&%2 <7. $#P#, I, F# >79=4G9 ;3/*3K?23,=>.I-3,34#/*3K?23,'23-4.G $0 <7. '#'% ." ?.:&% N 79# ?#:&4B 5 A.9.'# )%& "# >79=4G9 ,+234./E?,F3*3-?4G &.:%&9# E 24 =#NG .9 79 ?.:&% =%9 79 .2)c=4?.9 $7.9%0 ] 24 =#NG .9 79 ?.:&% =%9 79 .2).=4?.9 ".:#" N _E 24 9% V#N 9#'# .9 .2. ?.:&%, R, F# >79=4G9 23,/<93/'23-4./G3/*3K?23,0 <7. '#'% ." ?.:&% #=:7#" N .2)c=4?.9 JE $7.9%0 ] ".:#" N _E 249 .2)c=4?.9L0 4?)&4?. .9 )#9:#""# ." ?.:&% '%9'. 2. .9=7.9: ." $7B% N #'.?H2 24 V# .9=%9:'% % 9% 79 .2)c=4?.9, T, 89 )&%A?# <7. 24?7". ." P7.A% N HE# "#2 >79=4%9.2 4?)".?.9:#'#2 #9:.&4%&?.9:., !9 =#'# :7&9% '." P7A#'%&0 2. '.$.&H ?%2:& )%& )#9:#""#* F# =#9:4'#' '. ?.:&%2 # $#P#&, !" ?.:&% '%9'. 2. .9=7.9:, D4 V# .9=%9:'% 79 .2)c=4?.9, F# =#9:4'#' '. %[email protected]% <7. ". <7.'#, D4 V# >49#"4B#'% ." P7.A%, D4 V# A#9#'% ." P7.A%, • • • • • •
M 8HA"NE #O"F%E ') *+,-./0 \?)".?.9:. "# >79=4G9 ,+234./E?,F3*3-?4,
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN - II TÉRMINO 2014 Nombre: ________________________________________ Matrícula: ____________________
Tema 1 (25%) En matemáticas, el triángulo de Floyd es un triángulo rectángulo alineado a la izquierda y formado por números naturales. Para crear un triángulo de Floyd se comienza con un 1 en la esquina superior izquierda y se continúa escribiendo la secuencia de los números naturales, de manera que cada línea contenga un número más que la línea anterior. Por ejemplo, un triángulo de 5 líneas sería: 1 2 4 7 11
3 5 6 8 9 10 12 13 14 15
A usted se le solicita implementar en Scilab: 1. La función [] = generarTrianguloFloyd (lineas), la cual recibe como parámetro un número que representa el número de líneas que el triángulo debe tener y genera el triángulo de Floyd correspondiente.
Tema 2 (25%) El solitario de los quince es un juego que se desarrolla en un tablero de 4x4 en el que los números del 1 al 15 son colocados al azar en las casillas. Al haber dieciséis casillas, siempre una queda libre. Por ejemplo: 1 2 3 4 4
10
2
15
3
3
6
7
5
11
2
9
1
8
12
1
13
14
4
El objetivo del juego es ordenar completamente los números del tablero. El único movimiento posible en el juego es mover un número al único casillero libre que, en cada momento, tiene el tablero. En el ejemplo del tablero anterior, el 1 2 puede pasar abajo, luego el 8 a la derecha, el 4 arriba, hasta que se llegue a la solución, es decir, a un tablero con los números ordenados. Se le solicita a usted implementar en Scilab: 1. La función [T] = llenarTablero (T) , en donde T es una matriz de 4x4 que representa el tablero. La función deberá llenar el tablero con los números del 1 al 15, dejando un casillero libre. [15%] 2. La función [T] = moverNumero (T, fila, columna) , en donde T representa el tablero y fila y columna las coordenadas válidas de un número que es posible mover al casillero vacío. La función realiza el movimiento del número al casillero vacío y retorna el tablero actualizado. [10%]
Página 1 de 3
Tema 3 (40%) El Triplete es un juego en un tablero de 8x8 que consiste en eliminar tres casil leros, adyacentes en forma horizontal (triplete), que contengan el mismo número. El juego se desarrolla de la siguiente manera: 1.
El tablero se encuentra inicializado con -1 en todos sus casilleros.
2.
Se colocan 10 valores al azar entre 1 y 5, en posiciones aleatorias.
3.
Se genera aleatoriamente un nuevo número entre 1 y 5, el cual será colocado en el tablero de acuerdo a la posición (fila y columna) especificada por el jugador, siempre y cuando esa posición se encuentre disponible.
4.
Si la posición especificada forma un triplete, éste es eliminado colocando ceros. En una posición que contiene un cero, no puede volver a colocarse un número.
5.
El puntaje por cada triplete corresponde a la suma de los tres números eliminados.
6.
El juego continúa hasta que ya no exista posibilidad de generar tripletes en el tablero.
Ejemplo de una secuencia posible de salida del programa: 1 2
4
4
5 6
4
4 2
8 1
2
3 3
4
3
5
4
2 6
7
4 2
5
7
2
8
8
5
6
7
2
5
5
5
6
7
1
3
5
5
2
5
2
1
3
5
1
5
2
1
3 4
1
5
1
0 0
0
4
2
4
5
3
2 6
7
2
8
8
1
0
0
0
4
2
3
4
5
2 6
Número a jugar: 3 Puntaje: 0
Número a jugar: 5 Puntaje: 9
Número a jugar: 3 Puntaje: 9
Ingrese fila: 8 Ingrese columna: 2
Ingrese fila: 3 Ingrese columna: 5
Ingrese fila: 1 Ingrese columna: 1
7
Nota: Usted cuenta con una función [tablero] = inicializarTablero (tablero) que inicializa el tablero con 1 en todas sus casillas y retorna el tablero. A usted se le solicita implementar en Scilab: 1. 2. 3. 4.
La función [tablero] = generarTableroAleatorio (tablero) que recibe el tablero inicializado, genera los 10 números aleatorios y los coloca en el tablero en posiciones al azar [05%] La función [tablero] = colocarNumero (tablero, numero, fila, columna) que dada la posición de fila y columna, coloque el número en el tablero [05%] La función [tablero, puntos] = verificarTriplete (tablero, numero, fila, columna) que verifique si hay triplete, acumule el puntaje, y coloque ceros en las posiciones correspondientes. [15%] Un programa que simule el juego y USE las funciones implementadas anteriormente [15%] En cada turno del jugador, se debe mostrar por pantalla:
Un nuevo tablero con los cambios, y el nuevo número a jugar. Puntaje acumulado en el juego.
Página 2 de 3
8
Tema 4 (10%) Analice el código fuente de los programa s que se muestran a continuación. Seleccione la r espuesta correcta y justifique brevemente su respuesta. a)
¿Cuál será la salida del siguiente programa? a = -1325061 d = 0
A. B. C. D.
w = 0 z = 0
El valor de w es 1 y el valor de z es 1 El valor de w es 2 y el valor de z es 5 El valor de w es 7 y el valor de z es 2 El valor de w es 0 y el valor de z es 0
while(modulo(a,10) <> 0) d = modulo(a,10) if modulo(d,2) == 0
then
w = w + 1 else z = z + 1 end a = int(a/10) end disp(w,z)
b)
¿Cuál será la salida del siguiente programa?
function [x, if
x>=0
y]=mifuncion(x, y)
then
x
=
x-1
y
=
x+1
x
=
x+1
y
=
x-1
else
A. B.
a: 1, b: 0 Error por número incorrecto de parámetros de entrada.
C. D.
a: -1, b: 0 Error por número incorrecto de parámetros de salida
end endfunction
[a, b] = mifuncion(mifuncion(mifuncion(-2)))
mprintf("a: %i, b: %i", a, b)
Página 3 de 3
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN - I TÉRMINO 2015 Nombre: ________________________________________ Matrícula: ____________________
Tema 1 La persistencia aditiva de un número entero se calcula sumando sus dígitos y en caso que esta sumatoria tenga más de un dígito, se repetirá el proceso sobre esta, hasta alcanzar un único dígito. La cantidad de veces que se requiera realizar la sumatoria hasta obtener un único dígito se denomina persistencia aditiva. Por ejemplo: El número 1234 tiene una persistencia aditiva de 2 (la primera suma de dígitos es 10, luego la segunda suma es 1). El número 5978 tiene una persistencia aditiva de 3 (5978 →29→11→2). El número 9 tiene una persistencia aditiva de 0. A usted se le solicita implementar en Python: 1. La función calcularPersistenciaAditiva , la cual recibe como parámetro un número entero [25%] positivo denominado número y retorna su persistencia aditiva.
Tema 2 A usted se le solicita implementar en Python: 1. La función dibujarEspejo que recibe un número n y dibuja el siguiente patrón:
[20%]
Nota: Asuma que n es siempre un número par. dibujarEspejo(8)
dibujarEspejo(6)
Página 1 de 3
Tema 3
[45%]
El acumula-tesoros es un juego de tablero en el que dos jugadores deben atravesar una ciudad avanzando y retrocediendo por un corredor de 50 metros de largo. Mientras atraviesan la ciudad, a cada jugador se le asigna, aleatoriamente, al llegar a cada posición uno de los siguientes estados : fortaleza (-1), hambre (2) y súper-héroe (-3). Algunos metros pueden tener asignados uno de los siguientes elementos : armas (1), víveres (2) o tesoros (3), elementos que podrán ser recogidos si el jugador está en el estado adecuado:
Para recoger armas, el jugador debe estar en el estado de fortaleza.
Para recoger víveres, el jugador debe estar en el estado de hambre.
Para recoger tesoros, el jugador debe estar en el estado de súper-héroe.
Cada jugador avanza usando un dado de 6 caras y en cada movimiento se verifica:
Si la ubicación ya ha sido visitada primero por el otro jugador, entonces se debe retroceder 10 metros o volver al inicio si estuviera a menos de 10 metros del mismo. En caso que el jugador desee evitar el retroceso, puede evitarlo deshaciéndose de un tesoro de los que haya recogido.
Si la ubicación no ha sido visitada aún, el jugador puede recoger algún elemento dependiendo del estado en el que se encuentre.
Al inicio del juego, usted debe distribuir aleatoriamente 8 armas, 8 víveres y 8 tesoros a lo largo del corredor, excepto en la posición 1, en donde se ubican ambos jugadores al iniciar la partida. El juego termina cuando uno de los jugadores llega exactamente al final del corredor. Se declara ganador al jugador que obtenga mayor riqueza, la misma que depende de los elementos recogidos a lo largo del juego y se calcula mediante la siguiente fórmula: Riqueza = (armas/2+1)*100 + víveres*0.5 + tesoros
A usted se le solicita implementar en Python: 1.
La función asignarPosicionElementos que retorna una colección que contiene 3 listas, cada una representando las posiciones en el corredor de las 8 armas, víveres y tesoros, respectivamente.
2.
La función lanzarDado que retorna aleatoriamente el valor de una de las caras del dado.
3.
La función generarEstado que retorna aleatoriamente uno de los posibles estados.
4.
La función mostrarElemento que dada una posición y la colección de posiciones de los elementos imprime en pantalla el tipo de elemento que existe en esa posición.
5.
La función recogerElemento que dada una posición, el estado de un jugador y la colección de posiciones de los elementos retorna el tipo de elemento que se ha recogido (1, 2 ó 3) o 0 si no
ha sido posible. 6.
La función mostrarMensaje , la cual recibe como parámetro un jugador , el estado del mismo y su posición para imprimirlos en pantalla.
7.
La función calcularRiqueza que dada una cantidad de armas, víveres y tesoros retorna la riqueza obtenida.
8.
Un programa que simule el juego y use las funciones implementadas anteriormente.
Al finalizar el juego, se debe declarar al ganador y la riqueza de cada uno. En el turno de cada jugador, se deberá mostrar por pantalla:
El jugador al que corresponde el turno actual
El resultado del lanzamiento del dado y la nueva posición del jugador
Si hay un retroceso
Página 2 de 3
Tema 4
[10%]
Analice el código fuente de los programas que se muestran a continuación. Seleccione la respuesta correcta y justifique brevemente su respuesta. a.
Determine la salida por pantalla del siguiente código: X = 2 y = 5 z = x + z print("La suma es ,z" )
a) Error: La variable z no ha sido definida b) La suma es ,z c)
Error: La variable z no se ha inicializado
d) La suma es 7
b.
Dado el siguiente segmento de código y las listas A y B, seleccione correctamente la salida por pantalla:
A = [3, 2, 7, 5] B = [31, 5, 4, 8, 12, 3, -9, 6] C = 0 N = 3 for i in range(0, 4) : B[A[i]] = B[A[i]] + N C += B[A[i]] print(C)
a) 27 b) 33 c)
6
d) Ninguna de las anteriores
Página 3 de 3
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN FUNDAMENTOS DE PROGRAMACIÓN PRIMERA EVALUACIÓN - II TÉRMINO 2015 Nombre: ________________________________________ Matrícula: ____________________
Tema 1 Un número Krapekar es todo entero no negativo n que cuando se eleva al cuadrado, el número resultante puede ser dividido en 2 partes a y b donde a + b = n. Por ejemplo, 9 y 297 son números Krapekar: 9^2 = 81 o 8+1=9 297^2 = 88209 o 8820 + 9 = 8829 o 882 + 09 = 891 o 88 + 209 = 297
En cambio 143 no es un número Krapekar: 143^2 = 20449 o 2 + 0449 = 551 o 20 + 449 = 469 o 204 + 49 = 253 o 2044 + 9 = 2053
A usted se le solicita implementar en Python: 1. La función esKrapekar , la cual recibe como parámetro un número entero no negativo [25%] denominado numero y determina si el número es Krapekar o no.
Tema 2 A usted se le solicita implementar en Python: 1. La función dibujarReloj que recibe como parámetros un número n y un caracter c , y dibuje un [20%] reloj de arena de la siguiente forma: Si n = 7 y c = ‘.’, se dibujará: ******* *...* *.* * * * * * *******
Página 1 de 3
Tema 3
[45%]
El programa “Conoce Guayaquil” le ayudará a escoger una opción para recorrer los principales atractivos
turísticos de la ciudad durante un día. Hay 8 actividades disponibles, pero solo es posible realizar 4 de ellas durante el día. Código
1 2 3 4 5 6 7 8
Actividad
Malecón 2000 Las Peñas Barco Pirata Morgan Recorrido Panorámico Museos Parque Histórico Mall del Sol IMAX
Tiempo requerido en horas
Costo en $
2 3 2 2 3 4 3 3
6.50 6 12.25 12 10 10 6 8.15
Para iniciar el programa se debe especificar una colección de listas llamada catalogo, que contenga la información de cada actividad: nombre, tiempo y costo. Luego, el programa debe seleccionar aleatoriamente 4 actividades para formar un tour, que es una lista con los códigos de 4 actividades diferentes a realizarse. El tour debe satisfacer las siguientes especificaciones:
El recorrido deberá empezar exactamente a las 10:00 El tiempo total no debe ser mayor a 12 horas La visita al Parque Histórico debe iniciarse máximo a las 14:00 porque cierran a las 18:00 El recorrido por el Río Guayas en el Pirata Morgan debe iniciarse a partir de las 14:00 La función de cine en el IMAX puede ser a las 12:00, 15:00 ó 18:00 Al museo se puede entrar hasta las 18:00 Las demás actividades pueden realizarse en cualquier horario
A usted se le solicita implementar en Python: 1. 2. 3. 4.
5. 6. 7. 8.
La función generarCatalogo que llena una lista con el nombre, tiempo y costo de todas las actividades disponibles, y la retorna. La función generarTour que llena una lista con 4 números aleatorios diferentes entre 1 y 8, correspondientes a las actividades a realizarse. La función duracionActividad que recibe el catalogo y el código que se desea consultar, devolviendo la duración de la actividad a la que pertenece el código dado. La función inicioActividad que recibe el código de la actividad y la hora actual (en formato hh) y devuelva la hora de inicio más cercana para la actividad especificada. Si dado el código y la hora actual no es posible iniciar la actividad requerida, retorne -1. La función verificarTour que recibe el catálogo y el tour generado y determina si es posible realizar esa combinación de actividades de acuerdo a las condiciones explicadas arriba. La función calcularCostoTotal que recibe el catálogo y el tour generado, y devuelve el costo total de las actividades a realizar. La función calcularTiempoTotal que recibe el catálogo y el tour generado y devuelve la cantidad de horas utilizadas para las 4 actividades. Un programa que use las funciones implementadas anteriormente para: 1. Generar el catálogo 2. Generar un tour válido 3. Mostrar por pantalla el tour generado: sus actividades, horarios, tiempo total de recorrido y costo total, por ejemplo:
Página 2 de 3
10:00 14:00 16:00 18:00
Visita a Museos Río Guayas en el Pirata Morgan Recorrido Panorámico Compras en Mall del Sol
El tour comenzará a las 10:00 horas y terminará a las 21:00 horas. Tiempo total de recorrido: 11 horas Costo total: $ 40.25
Tema 4
[10%]
Analice el código fuente de los programas que se muestran a continuación. Seleccione la respuesta correcta y justifique brevemente su respuesta. a.
Determine la salida por pantalla del siguiente código: A=[12,23,14,50,30] for i in range(0, len(A)): if A[i] % 2 == 0: A.pop(i) print(A)
a) b) c) d)
Error: El símbolo pop no ha sido definido Error: Índice de la lista fuera de rango [23] [23, 50]
b. Determine la salida por pantalla del siguiente código:
a=[5,4,3,2,1,0]
print(a[0], a[a[0]], a[a[-1]], a[a[a[a[2]+1]]])
a) b) c) d)
5555 5051 5414 Ninguna de las anteriores
Página 3 de 3
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN
PRIMERA EVALUACIÓN II TÉRMINO 2009 – 2010
Nombre: ___________________________________ Matrícula : ____________ Paralelo : ______
TEMA 1 (20 pun tos )
Escriba una función que dado el valor de n, retorne el resultado de la sumatoria representada por la expresión:
Ejemplo: Si n=3, la función retorna - 0.375 obtenido a partir de:
TEMA 2 (35 puntos)
a.) Escriba el procedimiento cuadrado que recibe el tamaño del lado de un cuadrado y lo presente vacío en la pantalla. Ejemplo : si el lado enviado es 4, se imprime: 4 4 4 4 4 4 4 4
4 4 4 4
b.) Escriba un procedimiento que reciba un número entero e imprima un cuadrado por cada dígito del número usando el procedimiento escrito en el literal anterior. Ejemplo: si el numero enviado es 423, se imprime: 3 3 3 3 3 3 3 3 2 2 2 2 4 4 4 4 4 4 4 4
4 4 4 4
Elaborado por los profesores de Fundamentos de Programación: Carmen Vaca, Cruz María Falcones, Jorge Fernández y Ana Teresa Tapia
TEMA 3 (45 puntos)
Se desea implementar un juego de DOMINÓ en el cual se utilizan 28 fichas y participan dos jugadores por turnos. El objetivo del juego es obtener al final de la partida el menor número de puntos en las fichas del jugador. Las fichas de domi nó se representan con n úmeros del 1 al 28.
Cada ficha tiene dos extremos y en cada extremo se encuentran valores entre 0 y 6 como se muestra: 0-0 0-1 0-2 0-3 1-1 1-2 1-3 2-2 2-3 3-3
0-4 1-4 2-4 3-4 4-4
0-5 1-5 2-5 3-5 4-5 5-5
0-6 1-6 2-6 3-6 4-6 5-6 6-6
A las fichas cuyos dos extremos suman siete (3-4, 5-2, 6-1) y a la doble 0 se las llama “matadoras”.
La forma en la que se desarrolla el juego es a través de los pasos siguientes: 1. 2. 3. 4.
Formar un arreglo que represente a las fichas de dominó. Repartir aleatoriamente a cada jugador siete fichas. Seleccionar aleatoriamente una ficha y colocarla sobre la mesa. El jugador que posea el siguiente turno, debe colocar en la mesa una ficha que: - sume siete con el extremo derecho de la ficha previamente ubicada sobre la mesa. - “matadora” en el caso que el extremo derecho de la ficha sobre la mesa sea un 0. Si el jugador no ti ene fichas que cumpl an lo anterior, la partida queda cerrada. Por ejemplo , si el extremo derecho de la ficha en la mesa es un 3, la ficha que puede colocarse es la 4-0, el
4-1, el 4-2, el 4-3, el 4-4, el 4-5 o el 4-6, porque únicamente el cuatro es el que sumado al tres da siete. Las fichas denominadas matadoras pueden ubicarse a la derecha de una ficha con el valor de 0, evitando así que la partida quede cerrada. 5. En pantalla se debe mostrar los valores del extremo izquierdo y derecho de la ficha jugada. 6. Se repite desde el paso 4. El juego termina cuando hay un ganador. Ganará aquel jugador que, en una partida cerrada, tenga la menor suma de valores de los extremos de sus fichas. Un jugador resultará igualmente ganador, si logra colocar todas sus fichas antes que el contrincante. 7. Mostrar en pantalla el jugador que resulte ganador.
Sumando el tres del extremo derecho d e la última fic ha colocada en la mesa con el cuatro del extremo i zquierdo de la fich a seleccionada por el jugador obtendremos un siete; por tanto, el lanzamiento es correcto.
NOTA : Se encuentran implementadas las funciones eIzq y eDer las cuales reciben un valor entero que representa a
una ficha y retorna el valor del extremo izquierdo y derecho respectivamente. Si la ficha enviada como parámetro no es válida se retorna -1. Ud. deberá implementar:
a) El procedimiento repartir (int domino [ ], int jugador[ ]), el cual coloca de forma aleatoria siete fichas en el arreglo jugador. Cuando se escoge una ficha de domino esta posición queda con el valor de -1. b) La función int ficha(int jugador[ ], int ultima), la cual retorna el índice de la ficha que será colocada en la mesa. Recibe el arreglo de fichas del jugador y el valor del extremo derecho de la última ficha que fue colocada. Si ninguna ficha pudiera ser colocada esta función retorna -1. c) La función int puntosJugador (int jugador[ ]), la cual retorna el número de puntos de las fichas del arreglo jugador. d) El programa principal que simule el juego DOMINÓ y además: - Defina y use las constantes TAMDOMINO de valor 28 y NUMFICHAS de valor 7 - Use repartir, puntosJugador , ficha Elaborado por los profesores de Fundamentos de Programación: Carmen Vaca, Cruz María Falcones, Jorge Fernández y Ana Teresa Tapia
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN EL ECTRICIDAD Y COMPUTACIÓN
PRIMERA EVALUACIÓN I TÉRMINO 2010 – 2011
Nombre : ________________________________________ Matrícula: ___________
TEMA 1 (20 puntos) Implemente la función long rusa(long n1, long n2) que retorna el producto de n1 por n2 utilizando el método de multiplicación rusa. Para hallar el producto de n1 por n2, hay que sumar el valor de n1 cuando su respectivo n2 es impar. Luego n1 se duplica a la vez que n2 se reduce a su mitad entera. El algoritmo continúa hasta que n2 se convierta en 1. Por ejemplo: Para multiplicar 35 por 23 se tiene la siguiente prueba de escritorio. n1 35 70 140 280 560
n2 23 11 5 2 1
suma 35 105 245 245 n2 es par, no se suma el 280 805 el resultado es 805
Nota: Asuma que n1 y n2 son mayores a cero. TEMA 2 (40 puntos) Implemente la función bool cedulaValida ( int ced[ ] ); donde el arreglo ced es de tamaño 10 y contiene en cada posición un dígito de la cédula. Esta función retornatrue si la cédula es válida sino retorna false. Para que una cédula sea válida debe cumplir TODAS las condiciones siguientes: Las 2 primeras posiciones corresponden a la provincia donde fue expedida. Estos dos primeros dígitos forman un número que no será mayor que 24 ni menor a 1. El tercer dígito es menor que 6. El último dígito (verificador) debe ser igual a result (número obtenido aplicando la fórmula del registro civil). •
• •
Fórmula del registro civil 1. Usa un arreglo de coeficientes A. A
2
1
2
1
2
1
2
1
2
0
2. Multiplica las posiciones del arreglo A, por las correspondientes posiciones del arreglo ced. Si el resultado de alguna multiplicación es mayor que 9 se suman sus dígitos. A
2
1
2
1
2
1
2
1
2
0
ced
1
7
1
0
0
3
4
0
6
5
A*ced
2
7
2
0
0
3
8
0
12 3
0
Si el resultado de la multiplicación es mayor que 9 se suman sus dígitos.
3. Se suman los resultados de las multiplicaciones parciales. A este resultado le llamaremos sum. Para el ejemplo: 2+7+2+0+0+3+8+0+3+0=25. 4. Se obtiene el residuo de dividir sum para 10. A este valor le llamaremos residuo. Para el ejemplo, residuo es 5. 5. Finalmente, se obtiene result. Si residuo es 0, result es 0; caso contrario result es 10 – residuo.
Elaborado por : CVaca, V.Cedeño, C.Falcones, F.Rosero, J.Rodríguez, E.Ricaurte, A.López,E.Ortiz y A.Tapia
TEMA 3 (40 puntos) Una compañía desea implementar la versión electrónica del JUEGO DE LA OCA para 2 jugadores. El juego de la oca se realiza utilizando un tablero con 63 posiciones y 2 dados. Este juego se realiza por turnos. Inicia el jugador 1. Las posiciones del tablero están numeradas del 1 al 63 y en algunas de ellas hay un dibujo. Oca: en las posiciones múltiplo de 7 aparece el dibujo de una oca. Cuando se cae en una oca, se debe avanzar hasta la siguiente posición en la que hay una oca. Laberinto: si el jugador cae en la posición 43, está obligado a retroceder a la posición 30 donde está dibujado un laberinto. En cada turno se debe: -
Mostrar por pantalla el mensaje “De oca a oca y tiro porque me toca” para mantener la tradición del juego original. Lanzar los dados y avanzar sobre el tablero el número de posiciones que sea igual a la suma de los dados. Esto se realiza para el jugador que tiene el turno. Mostrar por pantalla la posición actual del jugador. Una vez que el jugador ha caído en una posición, realizar lo indicado de acuerdo al dibujo del tablero, su turno termina y pasa el turno al siguiente jugador.
La partida continúa con los jugadores avanzando en el tablero, como se ha descrito, hasta que un jugador llega a la última posición o al lanzar los dados su ubicación sobrepasa la última posición; en esta situación se dice que ese jugador llegó al “Jardín de la Oca " con lo cual ese jugador gana la partida. Al finalizar se muestra el ganador y para cada jugador: las posiciones en el tablero y el número de lanzamientos realizados. Ud. deberá implementar: a) La función int juega (int posJugador); recibe la posición actual y retorna la nueva posición del jugador según las reglas. b) El procedimiento posicionJugador(int posJugador); el cual muestra en pantalla un mensaje que indica la posición en la que se encuentra el jugador. Si la posición en el tablero tiene un dibujo (oca, laberinto) el mensaje también lo indicará. c) La función int sigteOca(int posicion); la cual retorna el número de la posición de la siguiente oca del tablero. Si no hay más ocas retorna -1. d) El programa principal que simule el juego de la oca. Use las funciones y procedimientos anteriores.
Elaborado por : CVaca, V.Cedeño, C.Falcones, F.Rosero, J.Rodríguez, E.Ricaurte, A.López,E.Ortiz y A.Tapia
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN
PRIMERA EVALUACIÓN II TÉRMINO 2010 – 2011
Nombre: _____________________________________________ Matrícula: __________________ TEMA 1 (25 pun tos) Implemente el procedimiento loteria (long n, long b, float *premio); el cual compara n que representa el número ganador de la lotería con b que representa al boleto del jugador y actualiza el valor ganado en la variable premio de la siguiente forma: Si no hay coincidencias entre n y b, premio es 0. Si n y b sólo coinciden en el último dígito, premio es el reintegro del boleto equivalente a 1 dólar. Si n y b son iguales, el premio es 1000 dólares. Si coinciden en 2 o más dígitos en la misma posición, premio corresponde a la suma de los dígitos de n dividida para el número de coincidencias. Por ejemplo: • • • •
Para n=56770 y b=56126 el premio es de 25/2 12.50 Para n=4231 y b=7231 el premio es de 10/3 3.33
NOTA: Asuma que n y b tienen la misma cantidad de dígitos. TEMA 2 (30 punto s) Una tienda virtual requiere comprobar que el número de tarjeta de crédito utilizado por un cliente sea auténtico. El número de una tarjeta de crédito está compuesto por dígitos y el primer dígito de la izquierda identifica a la tarjeta: Si es un 3 la tarjeta es American Express Si es un 4 la tarjeta es Visa Si es un 5 la tarjeta es Mastercard Existen otros dígitos para identificar a otras tarjetas, pero la tienda sólo acepta las tarjetas American Express, Visa y Mastercard. • • • •
Para comprobar la validez del número, se consideran las posiciones de sus dígitos, de izquierda a derecha, de la siguiente forma: A cada uno de los dígitos que ocupa una posición impar, se le multiplica por dos. Si este valor es menor que nueve se deja tal cual, sino se le resta nueve. Este es el nuevo número obtenido. Se suman entre sí todos los dígitos del nuevo número. Si esta suma es múltiplo de 10 y también menor o igual que 150, es un número de tarjeta válido. •
•
A continuación, un ejemplo de una tarjeta Visa válida: T
4
x2
8
Nuevo Número
8
5
5
1
10 5
1
7
2
14 1
5
0
4
0 2
0
1
2
2 4
2
3
4
6 2
6
5
6
10 4
1
7
8
14 6
5
8
Suma de dígitos: 8 + 5 + 1 + 2 + 5 + 2 + 0 + 4 + 2 + 2 + 6 + 4 + 1 + 6 + 5 + 8 = 60 Implemente la función boo l tarjetaValida (int T[ ], int tam, char tipo ); que recibe el número de la tarjeta en el arreglo T, el tamaño del arreglo dado por tam y un caracter que identifica a la primera letra del tipo de tarjeta ( A por American Express, V por Visa y M por Mastercard). La función retorna verdadero si el número de la tarjeta es válido para el tipo de tarjeta que se especifica en el parámetro, caso contrario retorna falso.
Elaborado por: E. Ortiz, Á. López, V. Cedeño, J. Moreno, C. Falcones, J. Rodríguez y A. Tapia
TEMA 3 (45 punto s) Se desea implementar el juego DAYQUITA donde participan dos jugadores. El objetivo del juego es dejar al oponente sin fichas. Este juego utiliza un dado especial de cuatro lados y 50 fichas repartidas en partes iguales para cada jugador. A las fichas de cada jugador se les denomina “montón”. Para iniciar el juego, ambos jugadores lanzan el dado y el jugador con el valor más alto iniciará el juego. El juego se desarrolla en turnos de la siguiente forma: Cada jugador coloca una de sus fichas en la “mesa” y lanza el dado. Según el número que obtenga el jugador en el dado, sucede lo siguiente: 1. Todo: Quita todas las fichas de la mesa y las agrega a su montón 2. Pone: Coloca una de sus fichas en la mesa 3. Quita: Toma una de las fichas del otro jugador y las agrega a su montón 4. Mitad: Coloca la mitad de sus fichas en la mesa Cada vez que la mesa se quede sin fichas, ambos jugadores deben colocar una ficha de su montón como al inicio del juego, y continuar jugando en turnos. El ju ego ter mi na cuando sucede alguno de los siguientes eventos: Uno de los jugadores resulta ganador. En este juego, hay un ganador cuando su oponente se queda sin fichas. Se ha cumplido el número máximo de 25 lanzamientos. • •
Al finalizar el juego se mostrará el jugador que resultó ganador, el número de fichas en su montón, el número de fichas que hayan quedado en la mesa y el número de lanzamientos realizados. Ud. deberá implementar: a) La función int mitad (int fic has); la cual recibe el número de fichas del jugador y retorna la mitad. Si el número de fichas es impar devuelve la mitad redondeada hacia arriba. b) El procedimiento dado (int n); el cual muestra en pantalla el significado del valor del dado enviado como parámetro (Todo, Pone, Quita, Nada). c) Un programa que simule el juego y en cada turno del jugador muestre por pantalla: ● Jugador que tiene el turno (jugador 1 ó jugador 2) El número que salió en el dado y su significado. ● ● El número de fichas ubicadas en la mesa. ● El número de fichas del montón de cada jugador.
NOTA: En el programa principal USE las funciones y procedimientos implementados anteriormente.
Elaborado por: E. Ortiz, Á. López, V. Cedeño, J. Moreno, C. Falcones, J. Rodríguez y A. Tapia