Vous êtes sur la page 1sur 84

64 ejercicios de programacin

Francisco Javier Zaragoza Martnez


Departamento de Sistemas Divisin de Ciencias Bsicas e Ingeniera Universidad Autnoma MetropolitanaUnidad Azcapotzalco

Este documento es una coleccin de ejercicios de programacin que el autor considera adecuados para la UEA Programacin Estructurada del Tronco General de Asignaturas de los planes de licenciatura en ingeniera de la UAM Azcapotzalco. Todos estos ejercicios han sido utilizados, con muy buenos resultados, por el autor y tambin por otros colegas suyos del Departamento de Sistemas cuando han impartido UEA similares. Por lo tanto, estamos convencidos de que esta coleccin ser de utilidad a otros profesores y alumnos en el futuro.

64 ejercicios de programacin

64 ejercicios de programacin Este material fue dictaminado y aprobado para su publicacin por el Consejo Editorial de la Divisin de Ciencias Bsicas e Ingeniera de la Universidad Autnoma Metropolitana Unidad Azcapotzalco, en su sesin del da 26 de octubre de 2010.

64 ejercicios de programacin
Francisco Javier Zaragoza Martnez

Departamento de Sistemas Divisin de Ciencias Bsicas e Ingeniera Universidad Autnoma MetropolitanaUnidad Azcapotzalco 2011

UNIVERSIDAD AUTNOMA METROPOLITANA Dr. Enrique Fernndez Fassnacht R ECTOR G ENERAL Mtra. Iris Santacruz Fabila S ECRETARIA G ENERAL UNIDAD AZCAPOTZALCO Mtra. Paloma Gabriela Ibez Villalobos R ECTORA Ing. Daro Eduardo Guaycochea Guglielmi S ECRETARIO A CADMICO Dr. Emilio Sordo Zabay D IRECTOR DE LA D IVISIN DE C IENCIAS B SICAS E I NGENIERA C. P. Rosa Mara Bentez Mendoza J EFA DE LA O FICINA DE P RODUCCIN E DITORIAL Y D IFUSIN D. C. G. Juan Manuel Galindo Medina D ISEO G RFICO Mtra. en Ed. Concepcin Asuar C ORRECCIN DE E STILO Y E DITORIAL 64 ejercicios de programacin Primera edicin, 2011 D. R. 2011 Universidad Autnoma MetropolitanaUnidad Azcapotzalco Av. San Pablo 180, Col. Reynosa Tamaulipas Del. Azcapotzalco, C.P. 02200, Mxico, D.F. Ocina de Produccin Editorial y Difusin de la DCBI Tel. 53189580 cbi-comunicacion@correo.azc.uam.mx D. R. 2011 Dr. Francisco Javier Zaragoza Martnez Av. San Pablo 180, Col. Reynosa Tamaulipas Del. Azcapotzalco, C.P. 02200, Mxico, D.F. ISBN xxx-xx-xxxx-x Impreso en Mxico/Printed in Mexico

ndice general

Introduccin 1. Operadores
1.1. 1.2. 1.3. 1.4. 1.5. 1.6. La medida del tiempo . . . . . . Unidades britnicas de longitud Unidades britnicas de volumen El calendario de la cuenta larga . Conversin de temperaturas . . Agua fra y caliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 3
3 4 5 6 7 8

2. Decisiones
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. Un algoritmo de Gauss poco conocido El caracol . . . . . . . . . . . . . . . . . . Interseccin de segmentos . . . . . . . Rectngulos dentro de rectngulos . . . Da de la semana . . . . . . . . . . . . . Tipo de tringulo . . . . . . . . . . . . . Mayor y menor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
9 11 12 13 14 15 16

3. Ciclos
3.1. 3.2. 3.3. 3.4. 3.5. 3.6. Divisores . . . . . . . . . . El problema de Collatz . . El problema de Pitgoras Los tringulos . . . . . . . Tringulos issceles . . . . Tringulos acutngulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17
17 18 19 20 21 22

VII

VIII

ndice general
23 24

3.7. Placas de bicicletas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8. Tablas de mltiplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Funciones
4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. Factorizando factoriales . Suma de primos . . . . . . Primos gemelos . . . . . . Suma de muchos primos . Parejas disparejas . . . . . Primos escondidos . . . . Sucesiones de primos . . Suma de potencias . . . . Hidrocarburos lineales . Fracciones continuas . . Secuencias saltarinas . . Producto circular . . . . Mezcla de nmeros . . . Centro de un vector . . . Alrededor de la mediana Polinomio al cuadrado . Girando un vector . . . . Matriz serpentina . . . . Matriz en diagonal . . . Matrices giradas . . . . . Matrices estocsticas . . Peones atorados . . . . . Buscaminas . . . . . . . Torres al ataque . . . . . Cuadrado mgico impar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25
25 26 27 28 29 30 31 32

5. Vectores

33
33 35 36 37 38 39 40 41 42

6. Matrices

43
43 44 45 46 47 48 49 50

7. Cadenas
7.1. Consonantes y vocales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Inversiones e intercalaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51
51 52

Francisco Javier Zaragoza Martnez

ndice general
7.3. Palabras similares . . . . . . . . 7.4. Cdigo telefnico . . . . . . . . 7.5. Sopa de letras . . . . . . . . . . 7.6. Mquina descompuesta . . . . 7.7. Genes dominantes y recesivos 7.8. Letras en el espejo . . . . . . . 7.9. Clave de usuario . . . . . . . . . 7.10.Cdigo del Csar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

IX

53 54 55 56 57 58 59 60

8. Archivos
8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 8.8. Eligiendo representantes Identicadores . . . . . . Calicacin de tareas . . . Correccin de espacios . . Varias claves de usuario . Cdigo de Vigenre . . . . Buscando nmeros . . . . Jurado de clavados . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61
61 63 64 65 67 68 69 70

Bibliografa

71

64 ejercicios de programacin

ndice general

Francisco Javier Zaragoza Martnez

Introduccin
Este documento es una coleccin de ejercicios de programacin que el autor considera adecuados para la UEA Programacin Estructurada del Tronco General de Asignaturas de los planes de licenciatura en ingeniera de la UAM Azcapotzalco. Todos estos ejercicios han sido utilizados, con muy buenos resultados, por el autor y tambin por otros colegas suyos del Departamento de Sistemas cuando han impartido UEA similares. Por lo tanto, estamos convencidos de que esta coleccin ser de utilidad a otros profesores y alumnos en el futuro. Los ejercicios estn agrupados en ocho temas generales y cada uno de ellos forma un captulo del presente volumen. stos son: 1. Operadores: para realizar estos ejercicios, es preciso contar con el conocimiento de los operadores elementales de nmeros enteros y de punto otante y de las instrucciones bsicas de lectura y escritura. 2. Decisiones: para este otro conjunto, se requiere del conocimiento adicional de las estructuras bsicas de toma de decisiones. 3. Ciclos: para lo cual, se requiere adems de la comprensin de las estructuras bsicas de repeticin. 4. Funciones: estos ejercicios sirven para fomentar el uso de funciones. 5. Vectores: para este captulo, se requiere de la lectura, el procesamiento y la escritura de informacin almacenada en arreglos numricos de una dimensin. 6. Matrices: en esta parte, es preciso dominar la lectura, el procesamiento y la escritura de informacin almacenada en arreglos numricos de dos dimensiones.

ndice general
7. Cadenas: en estos ejercicios se requiere de la lectura, el procesamiento y la escritura de informacin almacenada en arreglos alfanumricos de una dimensin. 8. Archivos: captulo nal que requiere de la lectura, el procesamiento y la escritura de informacin almacenada en archivos.

Por supuesto, la UEA Programacin Estructurada incluye algunos otros temas, pero ellos estn ms all del alcance de esta coleccin de ejercicios. Aunque los captulos van suponiendo la adquisicin de conceptos nuevos, adems de los que se hayan usado anteriormente, los ejercicios dentro de cada captulo no estn organizados necesariamente de forma temtica ni por nivel aparente de dicultad. Es indudable que, lo que a un alumno o profesor le puede parecer fcil, a otro le puede parecer difcil y viceversa. Incluso hay ejercicios que, aunque en la descripcin son muy parecidos entre s, el mtodo de solucin puede ser muy distinto para cada uno de ellos. Cada ejercicio consta de una descripcin general del problema por resolver (generalmente acompaada de la descripcin de un ejemplo), seguida de una breve descripcin tcnica que indica cmo debe esperar la entrada el programa escrito y cmo debe entregar su salida (detalle que, cuando el alumno lo sigue elmente, ha sido muy til al autor para implementar un tipo rudimentario de evaluacin automtica) y nalmente incluye al menos un ejemplo de cmo se ver la entrada y la salida en una ejecucin real del programa escrito por el alumno. El lector notar que no se hace mencin de ningn lenguaje de programacin en particular. El programa de la UEA Programacin Estructurada indica que se debe ensear el lenguaje de programacin C. Sin embargo, el autor cree que el lenguaje especco que se utilice para llevar a cabo estos ejercicios no cambia el objetivo: que el alumno practique la programacin, es decir, que piense cmo resolver un problema de forma algortmica y que sea capaz de describir su solucin sin ambigedad mediante un programa. Opina adems que si se viera obligado a escoger un lenguaje de programacin que sirva para introducir a un alumno al tema, entonces escogera en denitiva un lenguaje imperativo, casi con toda seguridad C o alguno de sus descendientes ms modernos (compilados como C++ o interpretados como PHP o Python). En cualquier caso, el lector encontrar al nal una bibliografa relativa a ejercicios y lenguajes de programacin. El autor desea agradecer a Concepcin Asuar, Tonatihu Daz Alegra, scar Herrera Alcntara, Sergio Luis Prez Prez y Germn Tllez Castillo, quienes pacientemente revisaron versiones preliminares de este documento. A Este documento fue escrito en LTEX 2 usando nicamente software libre.

Francisco Javier Zaragoza Martnez

Captulo 1

Operadores
1.1. La medida del tiempo
Te has preguntado alguna vez cuntos segundos han pasado desde que naciste? Desde que aprendiste a contar? Desde que entraste a la universidad? O bien, te has preguntado cunto tiempo son un milln de segundos? Como todo el mundo sabe, un minuto tiene 60 segundos, una hora tiene 60 minutos, un da tiene 24 horas y un ao tiene 365 das. Bueno, eso no siempre es cierto, pero lo consideraremos as para este ejercicio. Dada una cantidad de segundos s, debers determinar cuntos aos a, das d , horas h y minutos m completos representan, adems de cuntos segundos q quedan. Por ejemplo, si s = 40 000 000, entonces a = 1, d = 97, h = 23, m = 6, q = 40.

Especicacin
La entrada consiste de un nmero entero s que tendr un valor entre 0 y 2 000 000 000. La salida consiste de cinco nmeros enteros, a, d , h, m, q, separados por espacios.

Ejemplo Entrada 4 Salida 1 97 23 6 4

Operadores

1.2.

Unidades britnicas de longitud

Con toda seguridad te has enfrentado a las unidades britnicas de longitud. Lo que no todo el mundo sabe es cmo se relacionan unas con las otras. Una milla son 8 furlongs, un furlong son 220 yardas, una yarda son 3 pies, un pie son 12 pulgadas y una pulgada son... bueno, mejor all lo dejamos (como vern, los britnicos se complicaron demasiado la vida y, no conformes, inventaron otras unidades de longitud extraas como el rod que mide 5.5 yardas y el fathom que mide 6 pies). Dada una cierta cantidad de pulgadas u, debers determinar cuntas millas m, furlongs f , yardas y, pies p y pulgadas q completas representan. Por ejemplo, si se tiene que u = 40 000 000, entonces m = 631, f = 2, y = 111, p = 0, q = 4.

Especicacin
La entrada consiste de un nmero entero u que tendr un valor entre 0 y 2 000 000 000. La salida consiste de cinco nmeros enteros, m, f , y, p, q, separados por espacios.

Ejemplo Entrada 4 Salida 631 2 111 4

Francisco Javier Zaragoza Martnez

1.3. Unidades britnicas de volumen

1.3. Unidades britnicas de volumen


Con toda seguridad te has enfrentado a las unidades britnicas de volumen. Lo que no todo el mundo sabe es cmo se relacionan unas con otras. Un galn es igual a 4 cuartas, una cuarta es igual a 2 pintas, una pinta es igual a 2 tazas y una taza es igual a 8 onzas. Dada una cierta cantidad g 1 de galones, c 1 de cuartas, p 1 de pintas, t 1 de tazas y o 1 de onzas, debers determinar cuntos galones g 2 , cuartas c 2 , pintas p 2 , tazas t 2 y onzas o 2 completas representan. Por ejemplo, si g 1 = 31, c 1 = 41, p 1 = 59, t 1 = 26, o 1 = 57, entonces g 2 = 50, c 2 = 2, p 2 = 1, t 2 = 1, o 2 = 1.

Especicacin
La entrada consiste de cinco nmeros enteros, g 1 , c 1 , p 1 , t 1 , o 1 , separados por espacios; cada uno tendr un valor entre 0 y 1 000. La salida consiste de cinco nmeros enteros, g 2 , c 2 , p 2 , t 2 , o 2 , separados por espacios.

Ejemplo Entrada 31 41 59 26 57 Salida 5 2 1 1 1

64 ejercicios de programacin

Operadores

1.4.

El calendario de la cuenta larga

Los mayas usaban tres calendarios, pero en este ejercicio nos concentraremos solamente en el calendario choltn, o calendario de la cuenta larga. En ste, un da se llama kin, 20 kines forman un uinal, 18 uinales forman un tun, 20 tunes forman un katn y 20 katunes forman un baktn (tambin existen periodos de tiempo ms grandes, pero no nos ocuparemos de ellos). Una fecha se especica como el nmero b de baktunes, seguido del nmero k de katunes, el nmero t de tunes, el nmero u de uinales y el nmero d de kines ocurridos a partir de una fecha inicial llamada 0.0.0.0.0 que corresponde al 11 de agosto del ao 3113 antes de nuestra era, segn el calendario gregoriano. Si sabemos el nmero n de das transcurridos a partir de esa fecha, se puede calcular fcilmente la fecha correspondiente del calendario choltn. Por ejemplo, si han transcurrido 314 159 265 das a partir de la fecha inicial, entonces la fecha correspondiente es 2181.13.4.11.5, es decir b = 2 181, k = 13, t = 4, u = 11, d = 5.

Especicacin
La entrada consiste de un nmero entero n que tendr un valor entre 0 y 2 000 000 000. La salida consiste de cinco nmeros enteros, b, k, t , u, d , separados por espacios.

Ejemplo Entrada 314159265 Salida 2181 13 4 11 5

Francisco Javier Zaragoza Martnez

1.5. Conversin de temperaturas

1.5. Conversin de temperaturas


A pesar de que Mxico utiliza el sistema internacional de unidades (SI), as como los smbolos internacionales de ese sistema, seguimos indicando la temperatura en grados centgrados ( C). Adems de los Kelvin (K), en algunas partes del mundo se indica la temperatura en grados Fahrenheit ( F) o en grados Raumur ( R). Como existen frmulas de conversin para todos estos tipos de grados, si sabemos la temperatura C en grados centgrados, entonces podemos calcular la temperatura aproximada K en Kelvin, F en grados Fahrenheit y R en grados Raumur. Por ejemplo, si la temperatura es de 0 C, entonces es aproximadamente de 273 K, 32 F y 0 R (redondeadas al entero ms cercano).

Especicacin
La entrada consiste de un nmero entero C que tendr un valor entre 273 y 1 000. La salida consiste de tres nmeros enteros, K , F , R, separados por espacios.

Ejemplo Entrada Salida 273 32

64 ejercicios de programacin

Operadores

1.6.

Agua fra y caliente

Escribe un programa que lea una temperatura F en grados Fahrenheit y que escriba la temperatura equivalente C en grados centgrados. Recuerda que 9C = 5(F 32). Adems, tu programa debe decir si a esa temperatura el agua estara fra (si C 36) o caliente (si C > 36).

Especicacin
La entrada consiste de un nmero entero F que tendr un valor entre 450 y 1 000. La salida consiste de dos nmeros enteros, C , E , separados por un espacio, donde E = 0, si el agua est fra y E = 1, si est caliente.

Ejemplo Entrada 41 Salida 5

Francisco Javier Zaragoza Martnez

Captulo 2

Decisiones
2.1. Un algoritmo de Gauss poco conocido
La Pascua cae en el primer domingo que sigue a la primera luna llena que ocurra el 21 de marzo o despus. El siguiente algoritmo, propuesto por Gauss, calcular, dado un ao A 1583, un nmero que representa la fecha de la Pascua de la siguiente forma: si J 31, entonces la Pascua ser el J de marzo; en otro caso la Pascua ser el J 31 de abril. 1. Haz B = A/100 + 1. 2. Haz C = 3B /4 12. 3. Haz E = (A mod 19) + 1. 4. Haz F = (8B + 5)/25 (5 +C ). 5. Haz G = 5A/4 (C + 10). 6. Haz H = (11E + 20 + F ) mod 30. 7. Si H no vale 25, entonces v al paso 9. 8. Si E es mayor que 11, entonces suma 1 a H . 9. Si H vale 24, entonces suma 1 a H . 10. Haz I = 44 H . 11. Si I es menor que 21, entonces suma 30 a I .

10
12. Haz J = I + 7 [(G + I ) mod 7].

Decisiones

En este algoritmo todas las divisiones son enteras y mod es el residuo de la divisin. Dado un ao A, debers calcular el da D y el mes M en el que cae la Pascua en el ao A.

Especicacin
La entrada consiste de un nmero entero A que tendr un valor entre 1 583 y 9 999. La salida consiste de dos nmeros enteros, D, M , separados por un espacio (M = 3 signica marzo y M = 4 signica abril).

Ejemplo Entrada 2 6 Salida 16 4

Francisco Javier Zaragoza Martnez

2.2. El caracol

11

2.2. El caracol
Un caracol ha cado en un agujero de p metros de profundidad. En su intento de salir del agujero, el caracol sube s metros cada da, pero se resbala r metros cada noche. Si s es mayor que r , el caracol lograr salir nalmente del agujero. Por ejemplo, si el agujero tiene 10 metros de profundidad y el caracol sube 5 metros cada da y se resbala 2 metros cada noche, entonces el caracol lograr salir al tercer da. Dados los nmeros p, s, r , debers determinar el nmero d de das que tardar en salir el caracol.

Especicacin
La entrada consiste de tres nmeros enteros, p, s, r (con s > r ), separados por espacios, que tendrn un valor entre 1 y 1 000 000. La salida consiste de un nmero entero d .

Ejemplo Entrada 1 5 2 Salida 3

64 ejercicios de programacin

12

Decisiones

2.3.

Interseccin de segmentos

Recordars que dos puntos distintos en el plano determinan una nica recta. Similarmente dos puntos en el plano determinan un segmento, el cual consiste nicamente de los puntos en la recta que los une y que se encuentran entre ellos (incluyndolos). Tambin recordars que dos rectas en el plano o bien son paralelas, o bien se intersectan en un nico punto. Con los segmentos ocurre algo distinto, pues es posible que no se intersecten aun sin ser paralelos. Considera por ejemplo tres segmentos: P determinado por los puntos extremos (2, 1) y (3, 2), Q determinado por los puntos extremos (1, 3) y (3, 4), as como R determinado por los puntos extremos (4, 1) y (1, 4). Observa que P y Q no se intersectan, 5 P y R se intersectan en (3, 2) y Q y R se intersectan en ( 3 , 10 ) = (1.666666..., 3.333333...). 3 Dados dos segmentos cualesquiera (que no sean paralelos y ninguno de los cuales sea horizontal ni vertical) determinados por sus puntos extremos, debers descubrir si stos se intersectan o no y, en su caso, debers calcular las coordenadas del punto de interseccin.

Especicacin
La entrada consiste de ocho nmeros positivos de punto otante, x 1 , y 1 , x 2 , y 2 , x 3 , y 3 , x 4 , y 4 , separados por espacios. Los extremos del segmento P son los puntos de coordenadas (x 1 , y 1 ) y (x 2 , y 2 ). Los extremos del segmento Q son los puntos de coordenadas (x 3 , y 3 ) y (x 4 , y 4 ). La salida consiste de dos nmeros x, y de punto otante separados por un espacio. Si P y Q se intersectan, entonces (x, y) son las coordenadas del punto de interseccin. En caso contrario, x = y = 1.

Ejemplos Entrada 2 1 3 2 1 3 3 4 2 1 3 2 4 1 1 4 4 1 1 4 1 3 3 4 Salida -1 -1 3. 2. 1.666667 3.333333

Francisco Javier Zaragoza Martnez

2.4. Rectngulos dentro de rectngulos

13

2.4. Rectngulos dentro de rectngulos


Un nio tiene un juego que consta de diferentes piezas rectangulares, algunas de las cuales se pueden meter dentro de otras (tal vez girndolas 90 grados). Por ejemplo, si el nio tiene en sus manos un rectngulo que mide 2 por 3 unidades (donde la primera medida es la base y la segunda es la altura) y otro que mide 4 por 1 unidades, entonces no puede meter ninguno dentro del otro; pero si el nio tiene en sus manos un rectngulo que mide 5 por 3 unidades y otro que mide 1 por 4 unidades, entonces s puede meter el segundo dentro del primero, aunque antes deber girarlo 90 grados. Finalmente, si el nio tiene un rectngulo que mide 2 por 3 unidades y otro que mide 5 por 3 unidades, entonces puede meter el primero dentro del segundo sin girarlo. Dadas las medidas de dos rectngulos, A por B unidades las del primero y C por D unidades las del segundo, debers determinar si alguno de ellos se puede meter dentro del otro y, en este caso, si es necesario girarlos.

Especicacin
La entrada consiste de cuatro nmeros enteros, A, B , C , D, separados por espacios, que tendrn un valor cada uno entre 1 y 2 000 000 000. La salida consiste de dos nmeros enteros, S, G, separados por un espacio. El valor de S ser como sigue: 0 si ninguno de los dos rectngulos se puede meter dentro del otro, 1 si el primer rectngulo se puede meter dentro del segundo y 2 si el segundo rectngulo se puede meter dentro del primero (y no ocurre ninguno de los dos casos anteriores). El valor de G ser 1 solamente si para meter un rectngulo dentro del otro se debe hacer un giro de 90 grados y el valor ser 0 en cualquier otro caso.

Ejemplos Entrada 2 3 4 1 5 3 1 4 2 3 5 3 Salida 2 1 1

64 ejercicios de programacin

14

Decisiones

2.5.

Da de la semana

Uno de los problemas que se tiene que resolver al escribir un programa que trabaje con fechas es el de decir qu da de la semana corresponde con una cierta fecha dada. Por ejemplo, el 23 de mayo de 2005 es lunes, el da anterior domingo y el siguiente martes. Dada una fecha como tres nmeros enteros, a, m, d (donde a es el ao, m el mes y d el da), el da de la semana se puede encontrar con el siguiente algoritmo: 1. Si m > 2, entonces v al paso 3. 2. Haz m = m + 10; a = a 1 y v al paso 4. 3. Haz m = m 2.
a 4. Haz c = 100 ; e = a mod 100. e c 5. Haz b = (13m1) + 4 + 4 . 5

6. Haz f = (b + e + d 2c) mod 7. En este algoritmo todas las divisiones son enteras, mod es el residuo de la divisin y f = 0 signica domingo, f = 1 signica lunes, etc. Dada una fecha, debers determinar qu da de la semana fue el da anterior ( f 1 ), ese da ( f 2 ) y el da siguiente ( f 3 ).

Especicacin
La entrada consiste de tres nmeros enteros, a, m, d , separados por espacios y donde 0 a 10 000, 1 m 12 y 1 d 31, adems de que a, m, d representan una fecha vlida. La salida consiste de tres nmeros enteros, f 1 , f 2 , f 3 , separados por espacios.

Ejemplo Entrada 2 5 5 23 Salida 1 2

Francisco Javier Zaragoza Martnez

2.6. Tipo de tringulo

15

2.6. Tipo de tringulo


Tres nmeros enteros a, b, c son las longitudes de los lados de un tringulo si son positivos y satisfacen las tres desigualdades del tringulo: a + b > c; b + c > a; c + a > b. En este ejercicio nos interesan tres tipos de tringulos: los equilteros, los issceles y los escalenos. Dados tres nmeros enteros, a, b, c, se desea saber si ellos son las longitudes de los lados de un tringulo. Si lo son, se desea saber de qu tipo es el tringulo. Si no lo son, se desea calcular el mnimo nmero entero d tal que a +d , b +d , c +d sean las longitudes de los lados de un tringulo. Por ejemplo, si a = 3, b = 4, c = 5, entonces estamos hablando de un tringulo escaleno; pero si a = 3, b = 1, c = 2, entonces no tenemos un tringulo y necesitamos sumar d = 1 para obtener un tringulo de lados a +d = 4, b +d = 2, c +d = 3.

Especicacin
La entrada consiste de tres nmeros enteros, a, b, c, separados por espacios, que tendrn valores cada uno entre 1 000 000 000 y 1 000 000 000. La salida consiste de dos nmeros enteros, t , d , separados por un espacio. El valor de t ser 0 si no es tringulo, 1 si es equiltero, 2 si es issceles y 3 si es escaleno. El valor de d ser 0 (salvo que t = 0).

Ejemplos Entrada 3 4 5 3 1 2 Salida 3 1

64 ejercicios de programacin

16

Decisiones

2.7.

Mayor y menor

Escribe un programa que lea cinco nmeros enteros A, B , C , D, E y que escriba al menor de ellos P seguido del mayor de ellos Q. Por ejemplo, si los cinco nmeros ledos son A = 3, B = 1, C = 4, D = 1, E = 5, entonces P = 1, Q = 5.

Especicacin
La entrada consiste de cinco nmeros enteros, A, B , C , D, E , separados por espacios, que tendrn un valor entre 1 000 y 1 000. La salida consiste de dos nmeros enteros, P , Q, separados por un espacio.

Ejemplo Entrada 3 1 4 1 5 Salida 1 5

Francisco Javier Zaragoza Martnez

Captulo 3

Ciclos
3.1. Divisores
Escribe un programa que lea un nmero entero positivo N y que escriba la cantidad D de divisores positivos de N . Por ejemplo, el 6 tiene 4 divisores (que son 1, 2, 3 y 6).

Especicacin
La entrada consiste de un nmero entero N que tendr un valor entre 1 y 1 000 000. La salida consiste de un nmero entero D.

Ejemplo Entrada 6 Salida 4

17

18

Ciclos

3.2.

El problema de Collatz

Considera el siguiente procedimiento: 1. Lee n. 2. Escribe n. 3. Si n = 1 termina. 4. Si n es impar, entonces haz n = 3n + 1. 5. Si no, entonces haz n = n . 2 6. V al paso 2. Si la entrada es n = 22, entonces se escribir la secuencia de nmeros 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Muchos matemticos creen que el procedimiento anterior termina para cualquier dato de entrada que sea un entero positivo. A este enunciado se le llama la conjetura de Collatz. A pesar de la simpleza del procedimiento, no se sabe si la conjetura es cierta o no. Sin embargo, se ha vericado para todos los enteros entre 1 y 1 000 000. Dada una entrada n, tambin es posible determinar la cantidad de nmeros que se escriben, a la que se le denomina la longitud del ciclo de n. En el ejemplo anterior, la longitud del ciclo de n = 22 es = 16 y el nmero ms grande que aparece en el ciclo es m = 52. Dado un nmero n, debers determinar su longitud de ciclo y el nmero ms grande m que aparezca.

Especicacin
La entrada consiste de un nmero entero n que tendr un valor entre 1 y 1 000 000. La salida consiste de dos nmeros enteros, , m, separados por un espacio.

Ejemplo Entrada 22 Salida 16 52

Francisco Javier Zaragoza Martnez

3.3. El problema de Pitgoras

19

3.3. El problema de Pitgoras


El ms famoso teorema de Pitgoras dice que si los catetos de un tringulo rectngulo miden a, b unidades, y la hipotenusa del tringulo rectngulo mide c unidades, entonces se cumple que a 2 + b 2 = c 2 . Se dice que tres nmeros naturales a, b, c forman una terna pitagrica si cumplen la relacin a 2 + b 2 = c 2 . La ms famosa es tal vez 32 + 42 = 52 . Antes de los griegos, los egipcios ya conocan varias ternas pitagricas, aunque slo para valores pequeos de a, b, c. Dados dos nmeros enteros, m, n, podramos encontrar todas las ternas pitagricas (a, b, c) tales que m a b c n. Por ejemplo, si m = 6, n = 20, entonces hay 4 ternas pitagricas en ese intervalo, que son (6, 8, 10), (8, 15, 17), (9, 12, 15) y (12, 16, 20).

Especicacin
La entrada consiste de dos nmeros enteros, m, n, separados por un espacio, que tendrn un valor entre 1 y 1 000 000. La salida consiste de un nmero entero p, esto es, la cantidad de ternas pitagricas con las propiedades deseadas.

Ejemplos Entrada 6 2 1 2 Salida 4 158

64 ejercicios de programacin

20

Ciclos

3.4.

Los tringulos

Para que tres nmeros naturales a, b, c sean las longitudes de los lados de un tringulo, deben cumplir ciertas condiciones llamadas las desigualdades del tringulo. Averigua cules son estas condiciones. Cuando a, b, c cumplan estas condiciones, diremos que (a, b, c) es una terna triangular. Dados dos nmeros enteros, m, n, podemos encontrar todas las ternas triangulares (a, b, c) tales que m a b c n. Por ejemplo, si m = 2, n = 5, entonces hay 17 ternas triangulares en ese intervalo, de hecho, las nicas que no cumplen son (2, 2, 4), (2, 2, 5) y (2, 3, 5).

Especicacin
La entrada consiste de dos nmeros enteros, m, n, separados por un espacio, que tendrn un valor entre 1 y 1 000. La salida consiste de un nmero entero t , esto es, la cantidad de ternas triangulares con las propiedades deseadas.

Ejemplo Entrada 2 5 Salida 17

Francisco Javier Zaragoza Martnez

3.5. Tringulos issceles

21

3.5. Tringulos issceles


Para que tres nmeros naturales a, b, c sean las longitudes de los lados de un tringulo, deben satisfacer las tres desigualdades a +b > c, b +c > a, c + a > b. Para que un tringulo sea issceles debe satisfacer que exactamente dos de sus lados tengan la misma longitud (pero el tercero debe ser distinto, si no sera un tringulo equiltero). Dados dos nmeros enteros, m, n, podemos encontrar todas las ternas de nmeros naturales (a, b, c) tales que m a b c n y que a, b, c sean las longitudes de los lados de un tringulo issceles. Por ejemplo, si m = 2, n = 5, entonces hay 10 ternas como las que esperamos hallar, que son (2, 2, 3), (2, 3, 3), (2, 4, 4), (2, 5, 5), (3, 3, 4), (3, 3, 5), (3, 4, 4), (3, 5, 5), (4, 4, 5) y (4, 5, 5).

Especicacin
La entrada consiste de dos nmeros enteros, m, n, separados por un espacio, que tendrn un valor entre 1 y 1 000. La salida consiste de un nmero entero t , esto es, la cantidad de ternas con las propiedades deseadas.

Ejemplo Entrada 2 5 Salida 1

64 ejercicios de programacin

22

Ciclos

3.6.

Tringulos acutngulos

Para que tres nmeros enteros a, b, c sean las longitudes de los lados de un tringulo deben satisfacer las tres desigualdades a +b > c, b +c > a, c + a > b. Para que un tringulo sea acutngulo debe satisfacer que cada uno de sus tres ngulos mida menos de 90 . Recuerda que cada ngulo de un tringulo se puede calcular usando la ley de cosenos: a 2 = b 2 + c 2 2bc cos . Dados dos nmeros enteros, m, n, podemos encontrar la cantidad t de ternas (a, b, c) tales que m a b c n y que a, b, c sean las longitudes de los lados de un tringulo acutngulo. Por ejemplo, si m = 3, n = 5, entonces hay t = 8 ternas como las descritas, que son (3, 3, 3), (3, 3, 4), (3, 4, 4), (3, 5, 5), (4, 4, 4), (4, 4, 5), (4, 5, 5) y (5, 5, 5).

Especicacin
La entrada consiste de dos nmeros enteros, m, n, separados por un espacio, con un valor entre 1 y 1 000. La salida consiste de un nmero entero t , es decir, la cantidad de ternas con las propiedades deseadas.

Ejemplos Entrada 3 5 9 99 Salida 8 22

Francisco Javier Zaragoza Martnez

3.7. Placas de bicicletas

23

3.7. Placas de bicicletas


En nuestra ciudad no mucha gente usa bicicletas, pero con tal de cobrar impuestos, se le ha ocurrido al gobierno obligar a los ciclistas a comprar una placa para su bicicleta. Las placas constan de tres dgitos (del 0 al 9) seguidos de dos letras (de la A a la Z sin contar la ni las letras con acento). Para facilitar la lectura de las placas, se ha decidido que ninguna placa puede tener nmeros ni letras repetidas. Por ejemplo, la placa 123AB es legal, pero no lo son las placas 121AB ni 123AA. Adems, se escoger un dgito mnimo a y un dgito mximo b, as como una letra mnima c y una letra mxima d que pueden aparecer en las placas (las letras se numerarn A = 1, . . . , Z = 26). Se desea saber cuntas placas se pueden generar cumpliendo todas estas condiciones. Por ejemplo, si slo se permiten los nmeros del a = 0 al b = 2 y las letras de la B a la C (c = 2, d = 3), entonces las placas vlidas tendrn los nmeros 012, 021, 102, 120, 201, 210 y las letras BC o CB, de modo que habr un total de n = 12 placas distintas.

Especicacin
La entrada consiste de cuatro nmeros enteros, a, b, c, d , separados por espacios, donde 0 a b 9 y 1 c d 26. La salida consiste de un nmero entero n.

Ejemplo Entrada 2 2 3 Salida 12

64 ejercicios de programacin

24

Ciclos

3.8.

Tablas de mltiplos

En la primaria habrs aprendido las tablas de multiplicar. Por ejemplo, la tabla del 7 comienza 7 1 = 7, 7 2 = 14, 7 3 = 21, etc. Los nmeros 7, 14, 21, etc. se llaman los mltiplos de 7. En general, los mltiplos de un nmero entero positivo A son los nmeros A, 2A, 3A, etc. Lo que seguramente no habrs aprendido en la primaria son las tablas de mltiplos de dos nmeros A, B , las cuales constan de todos los mltiplos distintos de A o de B hasta un cierto nmero N . Dados A, B , N se desea saber la cantidad T de nmeros de la que consta la tabla de mltiplos correspondiente y cul es el nmero M ms grande en esa tabla. Por ejemplo, la tabla de mltiplos de 2 y 3 hasta el 11 consta de los siete nmeros 2, 3, 4, 6, 8, 9 y 10 (es decir, T = 7, M = 10).

Especicacin
La entrada consiste de tres nmeros enteros, A, B , N , separados por espacios y donde 1 A B N 1 000 000. La salida consiste de dos nmeros enteros, T , M , separados por un espacio.

Ejemplo Entrada 2 3 11 Salida 7 1

Francisco Javier Zaragoza Martnez

Captulo 4

Funciones
4.1. Factorizando factoriales
El factorial de un nmero natural N se dene como el producto de todos los naturales menores o iguales a l, es decir, N ! = 1 2 . . . N . Por ejemplo, el factorial de 6 es 6! = 1 2 3 4 5 6 = 720. Un nmero primo P es un nmero que tiene exactamente dos divisores, es decir, 1 y P . Los nmeros primos ms pequeos son 2, 3, 5, 7, 11, etc. Todo nmero natural se puede factorizar en nmeros primos. Por ejemplo, 720 se puede factorizar como 24 32 51 . Observa que para factorizar N ! no necesitas calcular su valor. Averigua cmo calcular la funcin factor(n, p) que regresa el mximo exponente a para el cual p a divide a N !

Especicacin
La entrada consiste de un nmero entero N que tendr un valor entre 1 y 1 000 000. La salida consiste de la factorizacin de N ! escrita de la forma A^a B ^b . . . Z ^z, donde A, B, . . . , Z son nmeros primos en orden ascendente y donde a, b, . . . , z son los exponentes correspondientes, todos mayores o iguales a 1. Los trminos deben estar separados por espacios.

Ejemplos Entrada 6 12 Salida 2^4 3^2 5^1 2^1 3^5 5^2 7^1 11^1

25

26

Funciones

4.2.

Suma de primos

Un nmero entero p es primo si es positivo y sus nicos dos divisores positivos son 1 y p. Los nmeros primos ms pequeos son 2, 3, 5, 7 y 11. Algunos nmeros enteros positivos no son primos, pero son la suma de dos nmeros primos. Por ejemplo: 4 = 2+2, 8 = 5+3 y 9 = 7+2. Advierte que algunos nmeros se pueden escribir como suma de dos nmeros primos de ms de una forma (por ejemplo el 10 que puede escribirse 7 + 3 o 5 + 5) pero nos basta con una de ellas. Dado un nmero entero n, podemos decidir si es primo o no y, en caso negativo, decidir si es la suma de dos primos o no.

Especicacin
La entrada consiste de un nmero entero n que tendr un valor entre 1 y 1 000 000. La salida consiste de dos nmeros enteros, p, q, separados por un espacio, tales que: si n es primo, entonces p = n, q = 0; si n es suma de dos primos p, q, entonces p q; en caso contrario p = 0, q = 0.

Ejemplos Entrada 1 17 27 Salida 7 3 17

Francisco Javier Zaragoza Martnez

4.3. Primos gemelos

27

4.3. Primos gemelos


Se dice que un nmero entero positivo es primo si tiene exactamente dos divisores positivos distintos. Los nmeros primos ms pequeos son 2, 3, 5, 7 y 11. Dos nmeros primos se dicen gemelos si dieren en 2. Las parejas de nmeros primos gemelos ms pequeas son (3, 5), (5, 7), (11, 13) y (17, 19). Dado un nmero entero m podemos encontrar la pareja (p, q) de nmeros primos gemelos tal que m p < q y que p sea tan pequeo como sea posible. Por ejemplo, si m = 10, entonces p = 11, q = 13.

Especicacin
La entrada consiste de un nmero entero m que tendr un valor entre 1 y 1 000 000 000. La salida consiste de los dos nmeros enteros, p, q, separados por un espacio.

Ejemplo Entrada 1 Salida 11 13

64 ejercicios de programacin

28

Funciones

4.4.

Suma de muchos primos

Se dice que un nmero entero positivo es primo si tiene exactamente dos divisores positivos distintos. Los nmeros primos ms pequeos son 2, 3, 5, 7 y 11. Adems, y slo para este ejercicio, consideraremos que el nmero 1 tambin es primo. Dado un nmero entero m, podemos escribirlo como suma de primos tan grandes como sea posible. Por ejemplo, si m = 10, lo podemos escribir como 7 + 3 (porque 7 es el primo ms grande menor o igual a 10 y 3 es primo); y si m = 27, lo podemos escribir como 23 +3 +1 (porque 23 es el primo ms grande menor o igual a 27, 3 es el primo ms grande menor o igual al sobrante y nalmente sobra 1).

Especicacin
La entrada consiste de un nmero entero m que tendr un valor entre 1 y 2 000 000 000. La salida consiste de una lista de nmeros primos escritos en orden descendiente, que sumen m y estn separados por espacios.

Ejemplos Entrada 1 27 Salida 7 3 23 3 1

Francisco Javier Zaragoza Martnez

4.5. Parejas disparejas

29

4.5. Parejas disparejas


Si m, n son dos nmeros enteros positivos, decimos que m divide a n si n es un mltiplo de m. Por ejemplo, 1, 2, 3 y 6 dividen a 6, pero ni 4, ni 5, ni tampoco 7 dividen a 6. Denamos la funcin s(n) como la suma de todos los divisores de n (excepto n). Por ejemplo, s(6) = 1 + 2 + 3 = 6, s(9) = 1 + 3 = 4 y s(12) = 1 + 2 + 3 + 4 + 6 = 16. Sean m, n dos nmeros enteros positivos. Denimos cuatro tipos de parejas (m, n):

Tipo 0: Si s(m) = n, s(n) = m, decimos que (m, n) es una pareja perfecta. Tipo 1: Si s(m) n, s(n) m, decimos que (m, n) es una pareja defectuosa. Tipo 2: Si s(m) n, s(n) m, decimos que (m, n) es una pareja afectuosa. Tipo 3: De lo contrario, decimos que (m, n) es una pareja dispareja.
Dados dos nmeros m, n debes decidir qu tipos de parejas son (m, n), (m, m), (n, n). Por ejemplo, si m = 6, n = 12, entonces (6, 12) es una pareja dispareja, (6, 6) es una pareja perfecta y (12, 12) es una pareja afectuosa.

Especicacin
La entrada consiste de dos nmeros enteros positivos, m, n, separados por un espacio, donde m, n < 1 000 000. La salida consiste de tres nmeros enteros, p, q, r , separados por espacios, representando cada uno de ellos el tipo de las parejas (m, n), (m, m), (n, n), respectivamente.

Ejemplo Entrada 6 12 Salida 3 2

64 ejercicios de programacin

30

Funciones

4.6.

Primos escondidos

Un nmero entero es primo si es positivo y si tiene exactamente dos divisores positivos distintos. Los nmeros primos ms pequeos son 2, 3, 5, 7, 11, etc. Considera un nmero entero N , todos los nmeros que se forman al quitarle dgitos por la derecha y todos los nmeros que se forman al quitarle dgitos por la izquierda. Algunos de estos nmeros, que estaban escondidos originalmente, son nmeros primos. Por ejemplo, si N = 211, entonces los nmeros que se forman al quitarle dgitos por la derecha son 21 y 2 (de los cuales uno es primo) y los nmeros que se forman al quitarle dgitos por la izquierda son 11 y 1 (de los cuales uno es primo). Se desea saber si N es primo o no, cuntos primos D tiene por la derecha y cuntos primos I tiene por la izquierda.

Especicacin
La entrada consiste de un nmero entero N con 0 N 999, 999, 999. La salida consiste de tres nmeros enteros, P , D, I , separados por espacios, donde P = 1, si N es primo; P = 0, si N no es primo.

Ejemplo Entrada 211 Salida 1 1 1

Francisco Javier Zaragoza Martnez

4.7. Sucesiones de primos

31

4.7. Sucesiones de primos


Un nmero entero positivo P es primo si sus nicos divisores enteros positivos son 1 y P . Los nmeros primos ms pequeos son 2, 3, 5, 7, 11, 13, etc. Una sucesin aritmtica de tres trminos est formada por los tres nmeros (N , N + D, N + 2D) donde N , D son nmeros enteros positivos. Algunos nmeros primos forman sucesiones aritmticas de tres trminos, como por ejemplo (3, 5, 7) y (3, 7, 11). Dados dos nmeros enteros, A, B , se quiere saber la cantidad S de sucesiones aritmticas de tres trminos que estn formadas por tres nmeros primos, P , Q, R, tales que A P < Q < R B . Por ejemplo, si A = 2, B = 12, solamente existen S = 2 sucesiones con esas propiedades.

Especicacin
La entrada consiste de dos nmeros enteros, A, B , separados por un espacio, tales que 1 A B 1 000 000. La salida consiste de un nmero entero S.

Ejemplo Entrada 2 12 Salida 2

64 ejercicios de programacin

32

Funciones

4.8.

Suma de potencias

En tus cursos de clculo (o en cualquier otro curso donde te hayan hablado de la induccin matemtica) te habrs enfrentado a la necesidad de sumar las potencias de varios nmeros consecutivos. Por ejemplo, la suma de los cubos de los nmeros del 5 al 9 es igual a 53 + 63 + 73 + 83 + 93 = 125 + 216 + 343 + 512 + 729 = 1 925. Dados dos nmeros enteros a, b (con a < b) y un nmero entero positivo n, debes calcular la suma s de las potencias n-simas de los nmeros a, a + 1, . . . , b, es decir: s = a n + (a + 1)n + + b n .

Especicacin
La entrada consiste de tres nmeros enteros, a, b, n, separados por espacios, que cumplen 100 a < b 100 y 0 < n < 10. La salida consiste de un nmero entero s cuyo valor absoluto siempre ser menor que 2 000 000 000.

Ejemplo Entrada 5 9 3 Salida 1925

Francisco Javier Zaragoza Martnez

Captulo 5

Vectores
5.1. Hidrocarburos lineales
Un hidrocarburo lineal es una cadena de tomos de carbono (C) unidos entre s con enlaces sencillos, dobles o triples. Es posible que un cierto tomo de carbono no use todos sus enlaces posibles (un total de 4) para unirse a otros tomos de carbono. En este caso, los enlaces restantes se hacen con tomos de hidrgeno (H). Un hidrocarburo lineal se puede especicar por la secuencia de enlaces. Por ejemplo, si un hidrocarburo tiene secuencia de enlaces (simple, simple, doble, simple, triple, simple, doble), entonces su frmula semidesarrollada es: CH3 CH2 CH = CH C C CH = CH2 . Observa que se escribe H3 , H2 , H o nada, segn el carbono correspondiente est enlazado con tres, dos, uno o ningn hidrgeno. Por supuesto, si solamente damos una secuencia de enlaces, es posible que no corresponda con un hidrocarburo lineal. Por ejemplo, la secuencia (simple, doble, triple, simple, doble, triple) no corresponde con un hidrocarburo lineal, pues el tercer y sexto carbonos necesitaran tener al menos 5 enlaces. Finalmente, las frmulas semidesarrolladas de hidrocarburos se escriben al revs si eso hace que un enlace de mayor multiplicidad quede ms cerca del principio. En nuestro primer ejemplo, debimos haber escrito la frmula semidesarrollada como: CH2 = CH C C CH = CH CH2 CH3 , pues as queda un enlace doble entre los primeros dos carbonos, a diferencia de uno simple.

33

34 Especicacin

Vectores

La entrada consiste de un nmero entero N que tendr un valor entre 1 y 1 000, seguido de N enteros, separados por espacios, en el conjunto {1, 2, 3}. La salida consiste de la frmula semidesarrollada del hidrocarburo correspondiente (ordenada apropiadamente) o del mensaje ERROR EN seguido de la lista de todas las posiciones donde un carbono tiene ms enlaces de los posibles, ordenadas y separadas por espacios. En la salida del programa, usaremos el smbolo # en sustitucin de para indicar un enlace triple.

Ejemplos Entrada 7 1 1 2 1 3 1 2 4 1 3 1 1 6 1 2 3 1 2 3 Salida CH2=CH-C#C-CH=CH-CH2-CH3 CH3-C#C-CH2-CH3 ERROR EN 3 6

Francisco Javier Zaragoza Martnez

5.2. Fracciones continuas

35

5.2. Fracciones continuas


Considera el siguiente proceso: comienza con un nmero x que no sea negativo. Mientras x sea diferente de cero, calcula su parte entera z, rstasela a x y asgnale a x su inverso. Por ejemplo, si comienzas con x = 3.15 el anterior proceso producir, en orden, los siguientes valores de z: 3, 6, 1, 2. Ahora observa que: 3.15 = 3 + 1 6+
1 1 1+ 2

A esta expresin se le llama la fraccin continua de 3.15. Nosotros consideraremos el proceso inverso, es decir, comenzando con la sucesin de nmeros enteros que dene a una fraccin continua, queremos calcular el nmero original. Para ser ms precisos, dado un nmero entero positivo n y una sucesin z 1 , z 2 , . . . , z n de n enteros, calcula el valor del nmero x cuya fraccin continua est representada por: z1 + 1 z2 +
z3 + 1 1 + z n 1

Especicacin
La entrada consiste de un nmero entero n, que tendr un valor entre 1 y 1 000, seguido de n nmeros enteros, z 1 , z 2 , . . . , z n , separados por espacios, cada uno con valor entre 0 y 999. La salida consiste del nmero x de punto otante.

Ejemplo Entrada 4 3 6 1 2 Salida 3.15

64 ejercicios de programacin

36

Vectores

5.3.

Secuencias saltarinas

Una secuencia de N enteros se llama una secuencia saltarina si el valor absoluto de las diferencias entre elementos consecutivos toman todos los posibles valores desde 1 hasta N 1. Por ejemplo, la secuencia de 4 enteros 1, 4, 2, 3 es una secuencia saltarina porque las diferencias absolutas son 3, 2 y 1, respectivamente. Por otro lado, la secuencia de 5 enteros 3, 1, 5, 1, 2 no es una secuencia saltarina porque las diferencias absolutas son 2, 4, 4 y 1, respectivamente, es decir, falta el nmero 3. Dado un nmero N y una secuencia de N nmeros X 1 , X 2 , . . . , X N , podemos decidir si esta secuencia es saltarina o, si no lo es, podemos encontrar el nmero ms pequeo que no aparece en las diferencias.

Especicacin
La entrada consiste de un nmero entero N , que tendr un valor entre 2 y 1 000, seguido de N nmeros enteros, X 1 , X 2 , . . . , X N , separados por espacios, cada uno con valor entre 999 y 999. La salida consiste de un nmero entero M denido como sigue: M = 0 si la secuencia es saltarina; en otro caso, M debe ser el nmero ms pequeo que no aparece en las diferencias.

Ejemplos Entrada 4 1 4 2 3 5 3 1 5 1 2 Salida

Francisco Javier Zaragoza Martnez

5.4. Producto circular

37

5.4. Producto circular


Como habrs aprendido en algn curso de fsica, existen varios tipos de productos de vectores. Por ejemplo, existe el producto punto y el producto cruz. En este ejercicio trabajars con un tipo de producto nuevo llamado el producto circular de dos vectores. Sea n un entero positivo, sean a = (a 1 , a 2 , . . . , a n ), b = (b 1 , b 2 , . . . , b n ) dos vectores de dimensin n y sea k un entero positivo menor o igual a n. El producto circular p k de los vectores a, b es igual a: a 1 b k+1 + a 2 b k+2 + + a nk b n + a nk+1 b 1 + a nk+2 b 2 + + a n b k . Por ejemplo, si n = 4, k = 2, a = (3, 1, 4, 1), b = (2, 7, 1, 8), entonces el producto circular p 2 es igual a: a 1 b 3 + a 2 b 4 + a 3 b 1 + a 4 b 2 = 3 1 + 1 8 + 4 2 + 1 7 = 26. Observa que el producto circular depende del valor de k: en nuestro ejemplo p 1 = 56, p 2 = 26, p 3 = 55, p 4 = 25. Debers determinar el menor valor p mn y el mayor valor p m x a del producto p k (donde 1 k n). En nuestro ejemplo, esos valores son 25 y 56, respectivamente.

Especicacin
La entrada consiste de un nmero entero n (con 1 n 1 000) seguido de 2n nmeros enteros, a 1 , a 2 , . . . , a n , b 1 , b 2 , . . . , b n (con valores entre 100 y 100), separados por espacios. La salida consiste de dos nmeros enteros, p mn , p m x , separados por un espacio. a

Ejemplo Entrada 4 3 1 4 1 2 7 1 8 Salida 25 56

64 ejercicios de programacin

38

Vectores

5.5.

Mezcla de nmeros

Imagina que tienes dos pilas de exmenes ordenados por nmero de lista y que quieres obtener una sola pila con todos los exmenes ordenados por nmero de lista. Por ejemplo, una pila podra consistir de los cuatro exmenes con nmeros 1, 5, 6, 9 y la otra pila podra consistir de los tres exmenes con nmeros 2, 7, 11. Entonces, al mezclar los nmeros de lista de las dos pilas, obtendras una pila con los siete exmenes con nmeros 1, 2, 5, 6, 7, 9, 11. Se da una lista de N nmeros ordenados a 1 < a 2 < < a N y otra lista de M nmeros ordenados b 1 < b 2 < < b M y se desea obtener una lista con N + M nmeros ordenados c 1 < c 2 < < c N +M que contenga a los N + M nmeros dados.

Especicacin
La entrada consiste de dos nmeros enteros, N , M con 1 N , M 1 000, separados por un espacio, seguidos de una lista de N nmeros enteros 0 < a 1 < a 2 < < a N < 10 000, separados por espacios, y otra lista de M nmeros enteros 0 < b 1 < b 2 < < b M < 10 000, tambin separados por espacios. La salida consiste de una lista de N +M nmeros enteros c 1 < c 2 < < c N +M , separados por espacios.

Ejemplo Entrada 4 3 1 5 6 9 2 7 11 Salida 1 2 5 6 7 9 11

Francisco Javier Zaragoza Martnez

5.6. Centro de un vector

39

5.6. Centro de un vector


Considera un vector x cuyas coordenadas van de la 0 a la n y contienen valores enteros. A una coordenada c (entre 0 y n) se le dice el centro de x si cumple que la suma desde i = 0 hasta i = c 1 de (c i ) x i es igual a la suma desde i = c + 1 hasta n de (i c) x i . Observa que la entrada en la coordenada c no participa en ninguna de las dos sumas. Por ejemplo, si x es el vector (6, 2, 3, 0, 1), entonces c = 1 es un centro de x, pues la primera suma (1 0) 6 es igual a la segunda suma (2 1) 3 + (3 1) 0 + (4 1) 1 (ambas valen 6). No todos los vectores tienen centro. Por ejemplo, el vector (1, 2, 1, 1) no tiene centro porque ninguna de sus coordenadas cumple que las dos sumas son iguales. Advierte que el centro de un vector tiene interpretacin fsica: si se considera a los valores contenidos en el vector como pesos, entonces un centro del vector (si acaso existe) corresponde con el centro de gravedad.

Especicacin
La entrada consiste de un nmero entero n que tendr un valor entre 1 y 1 000 seguido de n + 1 nmeros enteros, x 0 , x 1 , . . . , x n , separados por espacios, cada uno con valor entre 1 y 1 000. La salida consiste de dos nmeros enteros, c, s, separados por un espacio. El primero es el centro de x y el segundo es el valor de la suma. Si x no tiene centro, entonces c = 1, s = 0.

Ejemplos Entrada Salida 4 1 6 6 2 3 1 3 -1 1 2 1 1

64 ejercicios de programacin

40

Vectores

5.7.

Alrededor de la mediana

Escribe un programa que lea un nmero entero positivo impar N y un vector X de N componentes enteras y que escriba los dos nmeros A y B alrededor de la mediana M de ese vector, es decir, el nmero que quedara justo a la mitad del vector si se ordenaran sus componentes. Por ejemplo, si N = 5, X = (3, 1, 4, 1, 5), entonces A = 1, M = 3, B = 4, porque al ordenar X queda (1, 1, 3, 4, 5).

Especicacin
La entrada consiste de un nmero entero impar N que tendr un valor entre 3 y 999, seguido de N nmeros enteros, separados por espacios, cada uno con valor entre 0 y 999. La salida consiste de dos nmeros enteros, A, B con A B , separados por un espacio.

Ejemplo Entrada 5 3 1 4 1 5 Salida 1 4

Francisco Javier Zaragoza Martnez

5.8. Polinomio al cuadrado

41

5.8. Polinomio al cuadrado


En la secundaria aprendiste a elevar un binomio (es decir, un polinomio de grado 2) al cuadrado: (ax +b)2 = a 2 x 2 +2abx +b 2 . En general, uno puede tomar cualquier polinomio p(x) de grado n y calcular el polinomio q(x) = p(x)2 , que resulta ser un polinomio de grado 2n. Si recordamos que el polinomio p(x) queda denido por su grado n y una lista de n + 1 coecientes, entonces el polinomio q(x) queda denido por su grado 2n y una lista de 2n + 1 coecientes. Por ejemplo, si p(x) = 1 2x + 3x 2 , entonces p(x) tiene grado 2 y adems q(x) = (1 2x + 3x 2 )2 = 1 4x + 10x 2 12x 3 + 9x 4 tiene grado 4.

Especicacin
La entrada consiste de un nmero entero N (con 1 N 99) seguido de una lista de N + 1 nmeros enteros, a 0 , a 1 , . . . , a N , separados por espacios, que denen el polinomio p(x) = a 0 + a 1 x + + a N x N . La salida consiste de una lista de 2N + 1 nmeros enteros, b 0 , b 1 , . . . , b 2N , separados por espacios, que denen el polinomio q(x) = p(x)2 = b 0 + b 1 x + + b 2N x 2N .

Ejemplo Entrada 2 1 -2 3 Salida 1 -4 1 -12 9

64 ejercicios de programacin

42

Vectores

5.9.

Girando un vector

Escribe un programa que lea dos nmeros enteros positivos N , G y un vector X de N componentes enteras y que escriba el vector Y de N componentes formado al girar G veces el vector X hacia la derecha. Al hacer esto, la componente ms a la derecha de X se debe colocar en la componente ms a la izquierda de Y . Por ejemplo, si N = 5, X = (3, 1, 4, 1, 5), al girarlo una vez (G = 1), se obtiene el vector Y = (5, 3, 1, 4, 1); y si se girara una vez ms (G = 2), se obtendra el vector Y = (1, 5, 3, 1, 4), etctera.

Especicacin
La entrada consiste de dos nmeros enteros, N , G, separados por un espacio, con valores entre 1 y 100, seguidos de N nmeros enteros, separados por espacios, cada uno con valor entre 0 y 9 (las componentes de X ). La salida consiste de N nmeros enteros separados por espacios (las componentes de Y ).

Ejemplo Entrada 5 2 3 1 4 1 5 Salida 1 5 3 1 4

Francisco Javier Zaragoza Martnez

Captulo 6

Matrices
6.1. Matriz serpentina
Escribe un programa que, dados dos nmeros enteros M , N , construya una matriz con M renglones y N columnas cuyas entradas sean los nmeros 1, 2, . . . , M N acomodados como una serpentina, comenzando con el 1 en la entrada (1, 1), siguiendo hacia la derecha, luego una posicin hacia abajo, siguiendo hacia la izquierda, luego una posicin hacia abajo y as sucesivamente.

Especicacin
La entrada consiste de dos nmeros enteros positivos, M , N (ambos menores que 20), separados por un espacio. La salida debe ser la matriz requerida, debiendo haber M renglones cada uno con N nmeros enteros separados por espacios.

Ejemplo Entrada 4 5 Salida 1 2 3 4 5 1 9 8 7 6 11 12 13 14 15 2 19 18 17 16

43

44

Matrices

6.2.

Matriz en diagonal

Escribe un programa que, dados dos nmeros enteros, M , N , construya una matriz con M renglones y N columnas cuyas entradas sean los nmeros 1, 2, . . . , M N acomodados en diagonales, comenzando con el 1 en la entrada (1, 1), siguiendo hacia la derecha, luego una posicin hacia abajo y a la izquierda y as sucesivamente.

Especicacin
La entrada consiste de dos nmeros enteros positivos, M , N (ambos menores que 20), separados por un espacio. La salida debe ser la matriz requerida, debiendo haber M renglones cada uno con N nmeros enteros separados por espacios.

Ejemplo Entrada 4 5 Salida 1 2 4 7 11 3 5 8 12 15 6 9 13 16 18 1 14 17 19 2

Francisco Javier Zaragoza Martnez

6.3. Matrices giradas

45

6.3. Matrices giradas


Dada una matriz cuadrada A de N N , se puede denir la operacin de giro a la derecha de A como sigue: el primer rengln de la matriz A se convierte en la ltima columna de la matriz girada, el segundo rengln de la matriz A se convierte en la penltima columna de la matriz girada, y as sucesivamente hasta que el ltimo rengln de la matriz A se convierte en la primera columna de la matriz girada. Por ejemplo, si N = 3 y A es la matriz 3 1 4 A = 1 5 9 ; 2 6 5 entonces al girar A a la derecha obtenemos la matriz 2 1 3 A = 6 5 1 . 5 9 4

Especicacin
La entrada consiste de un nmero entero N con 1 N 20, seguido de N renglones, cada uno de los cuales contiene N nmeros enteros entre 0 y 9, separados por espacios, describiendo a la matriz A. La salida consiste de N renglones, cada uno de los cuales contiene N nmeros enteros separados por espacios describiendo a la matriz A .

Ejemplo Entrada 3 3 1 4 1 5 9 2 6 5 Salida 2 1 3 6 5 1 5 9 4

64 ejercicios de programacin

46

Matrices

6.4.

Matrices estocsticas

Una matriz cuadrada se dice estocstica si las sumas de todos los elementos de cada rengln y las sumas de todos los elementos de cada columna son iguales. Normalmente, todas esas sumas deben ser iguales a 1, pero en este ejercicio supondremos que todas las sumas deben ser iguales a 100. Por ejemplo, la matriz A de 2 2 A= 31 41 59 26

no es estocstica, pero la siguiente matriz B de 3 3 s es estocstica: 31 41 28 B = 59 26 15 . 10 22 57 Ms an, observa que la matriz B se obtuvo de la matriz A completando cada rengln por la derecha y cada columna por abajo de modo que todas las sumas fueran iguales a 100. Dado un entero n y una matriz de n n, escribe un programa que obtenga una matriz de (n + 1) (n + 1) que sea estocstica.

Especicacin
La entrada consiste de un nmero entero n, que tendr un valor entre 1 y 100, seguido de n renglones, cada uno de ellos con n nmeros enteros entre 0 y 100, separados por espacios. Todas las sumas de renglones y columnas de esta matriz sern menores o iguales a 100. La salida consiste de dos renglones, cada uno de ellos con n + 1 nmeros enteros separados por espacios. El primer rengln de la salida debe ser la columna que se agreg a la derecha de la matriz y el segundo rengln de la salida debe ser el rengln que se agreg abajo de la matriz.

Ejemplo Entrada 2 31 41 59 26 Salida 28 15 57 1 33 57

Francisco Javier Zaragoza Martnez

6.5. Peones atorados

47

6.5. Peones atorados


En un tablero de ajedrez los peones avanzan de un lado del tablero al lado contrario. Ms an, slo pueden avanzar una casilla hacia adelante si no tienen a ninguna pieza en la casilla inmediata, o pueden avanzar una casilla en diagonal si en sta se encuentra una pieza del contrincante. Por supuesto, ningn pen puede moverse hacia afuera del tablero. Dado un tablero cuadrado de N N , en el cual solamente hay peones negros y blancos (los negros avanzando hacia arriba y los blancos avanzando hacia abajo), podemos determinar la cantidad de cada uno de ellos que no pueden avanzar. Por ejemplo, en el tablero que vemos en la siguiente gura ni los peones negros N1 , N2 , N4 , ni los peones blancos B 1 , B 2 pueden avanzar. B1 N1 N2 B2 N3 N4 B3

Especicacin
La entrada consiste de un nmero entero N , que tendr un valor entre 2 y 100, seguido de una matriz de N por N nmeros enteros en el conjunto {0, 1, 2}. Un 0 signica que no hay ninguna pieza en esa posicin, un 1 signica que hay un pen negro y un 2 signica que hay un pen blanco. La salida consiste de dos nmeros enteros, P , Q, separados por un espacio, donde P es el nmero de peones negros que no pueden avanzar y Q es el nmero de peones blancos que no pueden avanzar.

Ejemplo Entrada 4 2 1 1 2 2 1 1 Salida 3 2

64 ejercicios de programacin

48

Matrices

6.6.

Buscaminas

Has jugado alguna vez al buscaminas? ste es un juego que viene con cierto sistema operativo cuyo nombre no puedo recordar. El objetivo del juego es el de encontrar dnde estn localizadas todas las minas en un campo de M N . El siguiente campo de 4 4 contiene 2 minas:

El juego muestra un nmero en un cuadro que te dice cuntas minas hay adyacentes a ese cuadro. Cada cuadro tiene cuando mucho ocho cuadros adyacentes, por lo que usaremos el nmero 9 para indicar la presencia de una mina. 9 2 1 1 1 2 9 1 0 1 1 1 0 0 0 0

Especicacin
La entrada consiste de dos nmeros enteros, M , N , separados por un espacio y cada uno con un valor entre 1 y 20, seguidos de M lneas cada una con N enteros, 0 o 1, separados por espacios (un 1 indica la presencia de una mina en esa posicin, un 0 indica que no hay mina). La salida consiste de M lneas cada una con N enteros, del 0 al 9, separados por espacios.

Ejemplo Entrada 4 4 1 1 Salida 9 1 2 2 1 1 9 1 1 1 1

Francisco Javier Zaragoza Martnez

6.7. Torres al ataque

49

6.7. Torres al ataque


El juego del ajedrez se juega en un tablero cuadriculado de 8 por 8. En l, una torre (T) ataca todas las posiciones (A) en su mismo rengln o en su misma columna (incluyendo la posicin en donde est colocada). Dado un tablero de ajedrez de N por N con algunas torres en l, nos interesa saber cuntas posiciones son atacadas por las torres. Por ejemplo, las T = 3 torres del tablero de 4 por 4 de la izquierda atacan las A = 12 posiciones indicadas en el tablero de la derecha. T T T A A A A A A A A A A A A

Especicacin
La entrada consiste de un nmero entero N (con 1 N 10) seguido de una matriz de N por N de unos y ceros, separados por espacios, donde un 1 indica una torre y un 0 indica que la posicin est vaca. La salida consiste de dos nmeros enteros, T , A, separados por un espacio.

Ejemplo Entrada 4 1 Salida 3 12

1 1

64 ejercicios de programacin

50

Matrices

6.8.

Cuadrado mgico impar

Un cuadrado mgico es una matriz cuadrada que tiene la peculiaridad de que la suma de sus las, columnas y diagonales es la misma. A continuacin se presenta un cuadrado mgico de tres por tres cuya suma de las, columnas y diagonales es 15. 8 3 4 1 5 9 6 7 2

Para construir un cuadrado mgico de nn, en donde n es un nmero impar, se siguen los siguientes pasos: el nmero 1 se coloca en la casilla central de la primera la. Las casillas en que se colocan los nmeros 2, 3, ... se determinan de la siguiente manera: en primera instancia se elige la casilla que se encuentra arriba a la derecha (la la anterior y la columna siguiente). Cuando nos salimos de la matriz por la parte superior, nos regresamos a la ltima la (como si la misma matriz se encontrara repetida como un mosaico). En el ejemplo, el 1 se coloc en la casilla (0, 1); para colocar el 2 tenemos que ir arriba a la derecha, o sea a la casilla (1, 2), con lo que nos salimos de la matriz por la parte superior y nos vamos a la ltima la o sea a la casilla (2, 2), que es donde le toca al 2. Cuando nos pasamos de la ltima columna, nos regresamos a la primera columna. Si la casilla se encuentra libre, all colocamos el siguiente nmero, pero si est ya ocupada, entonces lo colocamos en la casilla que se encuentra por debajo. En el ejemplo, el 3 se encuentra en la casilla (1, 0) por lo que al siguiente nmero le corresponde la casilla (0, 1) que se encuentra ocupada por el 1; entonces el nmero 4 se coloca en la casilla inmediata inferior (2, 0).

Especicacin
La entrada consiste de un entero positivo impar n (con n 21) y la salida debe ser la matriz descrita, con n renglones cada uno con n enteros separados por espacios.

Ejemplo Entrada 3 Salida 8 1 6 3 5 7 4 9 2

Francisco Javier Zaragoza Martnez

Captulo 7

Cadenas
7.1. Consonantes y vocales
Escribe un programa que lea una palabra S formada exclusivamente por letras maysculas y que escriba el nmero C de consonantes y el nmero V de vocales que contiene. Por ejemplo, la palabra CONSONANTES contiene 7 consonantes y 4 vocales.

Especicacin
La entrada consiste de una cadena S formada por un mximo de 80 letras maysculas. La salida consiste de dos nmeros enteros, C , V , separados por un espacio.

Ejemplo Entrada CONSONANTES Salida 7 4

51

52

Cadenas

7.2.

Inversiones e intercalaciones

Existen una gran cantidad de operaciones con cadenas. El propsito de este ejercicio es que implementes dos de ellas. La primera operacin se llama inversin y consiste en intercambiar el primer carcter de una cadena con el ltimo, el segundo con el penltimo, y as sucesivamente, hasta que la cadena original quede invertida. Por ejemplo, la inversin de la cadena trimestre es la cadena ertsemirt. La segunda operacin se llama intercalacin y consiste en tomar dos cadenas e intercalar sus caracteres. Es ms fcil explicar esta operacin con algunos ejemplos: La intercalacin de adios y hola es la cadena ahdoiloas. La intercalacin de hola y adios es la cadena haodliaos. Observa que la cadena intercalada comienza con un carcter de la primera cadena, contina con un carcter de la segunda, y as sucesivamente, hasta que una de las dos cadenas se acaba y simplemente se pegan al nal los caracteres restantes de la otra. Sugerencia: escribe una funcin inversion(s, t) que ponga la inversin de s en t, y una funcin intercalacion(r, s, t) que ponga la intercalacin de r y s en t.

Especicacin
La entrada consiste de dos cadenas A, B , una en cada rengln y con un mximo de 100 caracteres cada una. La salida consiste de la inversin de A, la inversin de B , la intercalacin de A y B , la intercalacin de B y A, la intercalacin de A con la inversin de A, y la intercalacin de B con la inversin de B , cada una en un rengln.

Ejemplo Entrada hola adios Salida aloh soida haodliaos ahdoiloas haolloah asdoiiodsa

Francisco Javier Zaragoza Martnez

7.3. Palabras similares

53

7.3. Palabras similares


Una compaa te ha encargado un pequeo programa de revisin de ortografa para incorporar a su procesador de textos. Una parte fundamental de este programa es que cuando detecte que una palabra est escrita incorrectamente, debe proporcionar una lista de palabras similares tomadas de un diccionario. Para ello, el programa debe tomar la palabra escrita incorrectamente y debe compararla con otras palabras que estn escritas de forma correcta. Te han solicitado que tu programa slo sugiera palabras que sean muy similares, es decir, que solamente dieran en una letra (ya sea que la letra fue alterada, agregada o borrada). Por ejemplo, la palabra SEL es similar a las palabras SAL, SEUL, SE y EL pero no es similar a ninguna de las palabras PELO, SUELO, E ni REY.

Especicacin
La entrada consiste de dos cadenas distintas S, T (formadas por entre 1 y 100 letras maysculas) cada una en un rengln. La salida consiste de un nmero entero N , donde N = 0 si S y T no son similares, N = 1 si S y T tienen una letra alterada, N = 2 si T se obtiene de S agregando una letra y N = 3 si T se obtiene de S borrando una letra.

Ejemplos Entrada ROMA MORA SAL SOL PERA PERSA REY RE Salida

1 2 3

64 ejercicios de programacin

54

Cadenas

7.4.

Cdigo telefnico

Alguna vez habrs visto un telfono como el 1-8 -IFE-2 , el cual en realidad se debe marcar como 1-8 -433-2 . Muchas instituciones, empresas y personas quisieran disponer de un nmero telefnico que, al hacerlo corresponder con las letras que aparecen en los teclados telefnicos, se pueda hacer corresponder con su nombre. Si no tienes un telfono a la mano, al nmero 2 le corresponden las letras A, B, C; al 3 las letras D, E, F; al 4 las letras G, H, I; al 5 las letras J, K, L; al 6 las letras M, N, O; al 7 las letras P, Q, R, S; al 8 las letras T, U, V y al 9 las letras W, X, Y, Z. Observa que ni al 0 ni al 1 les corresponde ninguna letra. Algo que por supuesto puede ocurrir es que a dos compaas les corresponda el mismo nmero telefnico aun cuando tengan nombres distintos. Por ejemplo, a las empresas TODO-CABE y UNE-O-ABAD les correspondera el mismo nmero: 86-36-22-23. Escribe un programa que, dados dos nombres, decida si les tocan nmeros distintos. En ese caso, tu programa deber escribir los telfonos que corresponden a cada empresa.

Especicacin
La entrada consiste de dos cadenas de caracteres s y t de la misma longitud (mximo de 100 caracteres), cada una en un rengln y formada exclusivamente por letras maysculas (sin espacios, guiones, etc.). La salida consiste de dos cadenas p y q (ambas de la misma longitud que las de entrada), cada una en un rengln y formada exclusivamente por dgitos (sin espacios, guiones, etc.). En caso de que a s y a t les correspondan nmeros distintos, entonces p debe ser el nmero de s y q debe ser el nmero de t . En caso contrario, p debe ser una cadena de ceros y q debe ser una cadena de unos.

Ejemplos Entrada TODOCABE UNEOABAD MARIA PEREZ Salida 11111111 62742 73739

Francisco Javier Zaragoza Martnez

7.5. Sopa de letras

55

7.5. Sopa de letras


Aunque seas un fantico de resolver las sopas de letras, hay ocasiones en las que quisieras un poco de ayuda computacional para encontrar las palabras escondidas. Vamos a suponer que tienes una sola palabra P que quieres encontrar en otra cadena S. Como sabes, la palabra P puede aparecer escrita en S tanto al derecho como al revs. Por ejemplo, si buscas la palabra AVE en la cadena AAVEEEVAVEVAEVEVAVEVVVEAVE, la podrs encontrar al derecho (aAVEeevAVEvaevevAVEvvveAVE) y al revs (aaveeEVAvEVAevEVAvevvveave). Tu labor consiste en escribir un programa que, dadas la palabra P y la cadena S, determine si P aparece al derecho y al revs en S.

Especicacin
La entrada consiste de dos cadenas P y S, cada una en un rengln y formadas por entre 1 y 100 letras maysculas (de la A a la Z sin incluir los acentos ni la ). La salida consiste de dos nmeros enteros, D, R, separados por un espacio, donde D = 1 si P aparece al derecho en S, donde D = 0 en caso contrario, donde R = 1 si P aparece al revs en S y donde R = 0 en caso contrario.

Ejemplos Entrada AVE AAVEEEVAVEVAEVEVAVEVVVEAVE ERA TAREA CASA NO Salida 1 1 1

64 ejercicios de programacin

56

Cadenas

7.6.

Mquina descompuesta

En algn rincn de tu casa debe haber una mquina de escribir. Si la llegaras a usar, tal vez notaras que est descompuesta. En este caso, tenemos una mquina de escribir que cambia entre maysculas y minsculas de manera arbitraria. Por ejemplo, podras obtener el siguiente resultado:

hOLa. eStoY DesComPUEsta.


cuando en realidad deseabas teclear:

Hola. Estoy descompuesta.


Por supuesto, un lector que domine la gramtica podra saber cules letras deben ser maysculas y cules minsculas. Para este ejercicio consideraremos una regla simplicada de los casos de mayscula inicial: la primera letra de cada enunciado (que terminaremos con punto) debe ser mayscula, todas las dems letras deben ser minsculas.

Especicacin
La entrada consiste de una cadena S de longitud entre 1 y 80. Los caracteres de esa cadena podrn ser letras (sin acentos), dgitos, puntos y espacios. La salida consiste de una cadena T en la cual se han arreglado las maysculas y las minsculas de acuerdo a la regla simplicada.

Ejemplo Entrada Salida hOLa. eStoY DesComPUEsta. Hola. Estoy descompuesta.

Francisco Javier Zaragoza Martnez

7.7. Genes dominantes y recesivos

57

7.7. Genes dominantes y recesivos


Supn que el patrn gentico de cada individuo est codicado como una cadena de letras maysculas y minsculas. Por ejemplo, el patrn gentico de una madre podra estar codicado como la cadena JosEFIna y el de un padre como la cadena fiLOMeNo. Cada letra mayscula representa un gen dominante y cada letra minscula representa un gen recesivo. Imaginemos que al combinar los patrones genticos de la madre y del padre para obtener los de sus descendientes (una nia y un nio) ocurre lo siguiente: El primer gen de la madre se combina con el primer gen del padre para obtener el primer gen de los descendientes y as sucesivamente con el segundo, etctera. Si, al combinarse dos genes, uno es dominante y el otro es recesivo, entonces los dos descendientes adquieren el gen dominante. En caso contrario, la nia adquiere el de la madre y el nio adquiere el del padre. Continuando nuestro ejemplo, los patrones genticos resultantes de la nia y del nio seran JoLEFINa y JiLOMINo, respectivamente.

Especicacin
La entrada consiste de dos cadenas madre y padre (cada una en una lnea) cuyas longitudes estn entre 1 y 1 000. La salida consiste de dos cadenas hija e hijo (cada una en una lnea). Cada una de las cadenas corresponde con el cdigo gentico de uno de los individuos y todas tendrn la misma longitud.

Ejemplos Entrada JosEFIna fiLOMeNo TEre JuAn Salida JoLEFINa JiLOMINo TEAe JEAn

64 ejercicios de programacin

58

Cadenas

7.8.

Letras en el espejo

Leonardo da Vinci es famoso, entre muchas otras cosas, por su estilo peculiar de escritura: para que nadie le entendiera, l escriba de modo que los textos slo se pudieran leer con la ayuda de un espejo. En este ejercicio haremos algo similar. Observa que algunas letras se ven casi idnticas al reejarse en el espejo (A, H, I, i, l, M, m, n, O, o, T, t, U, u, V, v, W, w, X, x, Y), otras forman parejas al reejarse en el espejo (b con d, p con q, S con Z, s con z) y las dems no parecen letras al reejarse en el espejo. Dada una palabra, se puede obtener la palabra reejada en el espejo marcando las letras que no se reejan bien. Por ejemplo, la palabra prOgRAMAciOn se debe convertir en nOi*AMA**O*q al reejarse, donde los asteriscos signican que esas letras no se reejan bien.

Especicacin
La entrada consiste de una cadena S formada exclusivamente por letras y con una longitud mxima de 80 caracteres. La salida consiste de una cadena T que sea la imagen de espejo de S.

Ejemplo Entrada prOgRAMAciOn Salida nOi*AMA**O*q

Francisco Javier Zaragoza Martnez

7.9. Clave de usuario

59

7.9. Clave de usuario


Como alumno de esta universidad, la coordinacin de cmputo te puede otorgar una cuenta de correo electrnico cuya clave de usuario sera tu nmero de matrcula, y una cuenta de Unix cuya clave de usuario es de la forma ip-XX-NN. Puesto que no eres un simple nmero, un mejor sistema podra ser otorgarte una clave de usuario que se obtuviera directamente de tus iniciales. Por ejemplo, podramos convenir que tu clave de usuario consistiera de las iniciales de todos tus nombres seguidas de las iniciales de todos tus apellidos. Entonces la clave de usuario de Francisco Javier Mina debera ser fjm.

Especicacin
La entrada consiste de una cadena que puede contener letras minsculas, letras maysculas y espacios. Por supuesto, los espacios separan nombres y la primera letra de cada nombre es la inicial. La salida consiste de una cadena formada por las iniciales en minsculas en el mismo orden en el que aparecen.

Ejemplo Entrada frANCiscO JavieR mINa Salida fjm

64 ejercicios de programacin

60

Cadenas

7.10. Cdigo del Csar


En algunas aplicaciones es importante poder enviar un mensaje de una persona a otra sin que ningn tercero se pueda enterar del mensaje. En este caso se recurre a estrategias llamadas tcnicas de codicacin. Algunas de las tcnicas ms simples consisten en la simple sustitucin de un carcter por otro. Por ejemplo, uno podra pensar en sustituir todas las letras F del mensaje original por letras J en el mensaje codicado, todas las letras J del mensaje original por letras Z en el mensaje codicado, etc. En este ejercicio describiremos una de tales tcnicas: el cdigo del Csar. Consideraremos que el mensaje consiste nicamente de los caracteres @, A, B, ..., Z y que a stos se les asocian los valores 0, 1, 2, ..., 26, respectivamente. Recuerda que los cdigos ASCII de estos caracteres son 64, 65, 66, ..., 90, respectivamente. En este caso, se escoge un carcter de @, A, B, ..., Z (al que llamaremos llave) y este carcter se le suma a cada uno de los caracteres del mensaje (utilizando, claro est, el valor asociado a los caracteres). Si por alguna razn el valor de la suma es mayor que 26, entonces se vuelve a comenzar desde 0. Por ejemplo, si escogimos el carcter J como la llave y el mensaje original es TAREA@DE@PROGRAMACION, entonces el mensaje codicado ser CKAOKJTOJZAYQAKWKMSYX ya que: J + T = 10 + 20 = 30 = 3 = C, J + A = 10 + 1 = 11 = K, J + R = 10 + 18 = 28 = 1 = A, etctera.

Especicacin
La entrada consiste de una cadena (de 1 a 1 000 caracteres) que slo contiene letras maysculas y caracteres @. El primer carcter de esa cadena ser la llave y los dems caracteres formarn el mensaje. La salida consiste de una cadena: el mensaje codicado con la llave. Observa que la cadena de salida tiene un carcter menos que la cadena de entrada.

Ejemplo Entrada JTAREA@DE@PROGRAMACION Salida CKAOKJNOJZAYQAKWKMSYX

Francisco Javier Zaragoza Martnez

Captulo 8

Archivos
8.1. Eligiendo representantes
En determinadas fechas, como habrs notado por la cantidad de propaganda pegada a lo largo y ancho de la universidad, se eligen los representantes universitarios. Para evitar problemas a la hora del conteo, se te pidi que escribieras un programa que calcule cuntos votos recibi cada candidato y cuntos votos nulos hubo. Para ello, te dieron un archivo que contena la siguiente informacin: El nmero de candidatos y sus nombres. El nmero de votos y los nombres por los que se vot. Se ha decidido que un voto contar por un candidato solamente si su nombre est escrito correctamente, aunque se permite que las maysculas y las minsculas estn cambiadas. En caso contrario, se considerar un voto nulo. No hay candidatos con el mismo nombre y los nombres constan nicamente de letras (es decir, no contienen espacios, etc.). T debers entregar un archivo que contenga los nombres de los candidatos junto con el nmero de votos que recibieron, adems del nmero de votos nulos.

Especicacin
La entrada consiste del archivo de texto eleccion.txt que contiene en su primer rengln dos nmeros enteros, M , N (con 0 < M < 100, 0 < N < 1 000), separados por un espacio; en los siguientes M renglones los nombres de los M candidatos (uno en cada rengln) y en los siguientes N renglones los N votos registrados. Los nombres pueden constar de 1 a 10 letras maysculas o minsculas. La salida estar en el archivo de texto votos.txt y

61

62

Archivos

consiste de M lneas cada una con el nombre (en maysculas) y nmero de votos de cada candidato (separados por un espacio y en el mismo orden que aparecen en la entrada) seguida de una lnea indicando el nmero de votos nulos.

Ejemplo eleccion.txt 3 7 huGo PaCo LUis Hugo Luisa PACO juanito paco luIS Ninguno votos.txt HUGO 1 PACO 2 LUIS 1 NULOS 3

Francisco Javier Zaragoza Martnez

8.2. Identicadores

63

8.2. Identicadores
Una de las primeras cosas que aprendiste en el curso de programacin fue la denicin de lo que es un identicador. Una palabra es una cadena de caracteres formada exclusivamente por letras maysculas, minsculas, dgitos y el carcter de subrayado (guin bajo). Para simplicar las cosas, puedes suponer que las palabras estn separadas por cualquier carcter que no est en el conjunto anterior. Un identicador es una palabra que no comienza con un dgito. Como ejemplo, abc123, 1__a, a__1 y Dic2 4 son todas palabras, pero la segunda no es un identicador. Escribe un programa que, dado un archivo de texto, encuentre cuntas palabras y cuntos identicadores contiene.

Especicacin
La entrada consiste del archivo de texto programa.txt que consiste nicamente de caracteres ASCII. La salida estar en el archivo de texto analisis.txt y consiste de dos nmeros enteros, p, n, separados por un espacio, donde p es el nmero de palabras y n es el nmero de identicadores.

Ejemplo programa.txt Est e5 1 PrUeBa+de 1 progRAMA en C hecho el 7de diciembre de=2 4 analisis.txt 15 11

64 ejercicios de programacin

64

Archivos

8.3.

Calicacin de tareas

Un profesor muy cuidadoso elabora una lista de todos sus alumnos y las calicaciones de las tareas que le entregan. Cada uno de los alumnos puede entregar una misma tarea tantas veces como quiera y el profesor le asignar una calicacin a cada una. La lista del profesor contiene estos datos exactamente en el orden en el que los alumnos entregan sus tareas. La calicacin denitiva de cada tarea entregada por el alumno es la calicacin de la ltima vez que la entregue, o bien cero si no la entrega. La calicacin nal del alumno es simplemente la suma de las calicaciones denitivas de cada una de las tareas. Ayuda al profesor y escribe un programa que calcule las calicaciones de sus alumnos.

Especicacin
La entrada consiste del archivo de texto tareas.ent que contiene en su primer rengln tres nmeros enteros, M , N , T , separados por espacios, donde 1 M 50 es el nmero de alumnos en el curso, 1 N 10 es el nmero de tareas que el profesor encarg a los alumnos y 1 T 1 000 es el nmero de tareas entregadas por todos los alumnos. Cada uno de los siguientes T renglones contiene tres nmeros enteros, A, B , C , separados por espacios, donde 1 A M es el nmero del alumno, 1 B N es el nmero de tarea y 0 C 10 es la calicacin obtenida por el alumno A en esta entrega de la tarea B . La salida estar en el archivo de texto tareas.sal que contiene en su primer rengln dos nmeros enteros, M , N , separados por un espacio, seguido de M renglones; cada uno de ellos con N + 1 nmeros enteros separados por espacios: las calicaciones denitivas de las tareas 1, 2, . . . , N , seguidas de la calicacin nal del alumno. El primero de estos renglones corresponder al alumno 1, el segundo al 2, ..., y el ltimo al M .

Ejemplo tareas.ent 2 3 5 1 2 7 1 1 9 2 3 6 1 2 5 2 2 5 tareas.sal 2 3 9 5 14 5 6 11

Francisco Javier Zaragoza Martnez

8.4. Correccin de espacios

65

8.4. Correccin de espacios


Hoy en da hemos dejado las mquinas de escribir en el pasado y hemos empezado a usar procesadores de texto. El resultado es simple: como ya no estamos obligados a volver a escribir toda una pgina como cuando generbamos algunos errores en ella, ahora cada vez ponemos menos atencin en lo que escribimos y cada vez tenemos muchos ms errores. Algunos de los errores ms comunes (adems de los ortogrcos, gramaticales, de dedo, etc.) son el poner espacios antes de los signos de puntuacin (que para este ejercicio son: el punto, la coma, el punto y coma y los dos puntos), el no poner espacios despus de los signos de puntuacin (cuando no termina un prrafo), el poner espacios al principio o nal de una lnea o prrafo y el usar ms de un espacio para separar palabras. Tu labor es la de escribir un programa que lea un archivo de texto que posiblemente contenga errores de espaciado y que lo corrija.

Especicacin
La entrada consiste del archivo de texto correc.ent que contiene letras maysculas y minsculas sin acentos, nuevas lneas, espacios y signos de puntuacin. La salida deber quedar en el archivo de texto correc.sal el cual contendr las mismas letras, nuevas lneas y signos de puntuacin, pero con los espacios arreglados.

Ejemplo
correc.ent En un lugar de la Mancha , de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivia un hidalgo de los de lanza en astillero, adarga antigua, rocin flaco y galgo corredor . Una olla de algo mas vaca que carnero, salpicon las mas noches , duelos y quebrantos los sabados, lantejas los viernes, algun palomino de anadidura los domingos, consumian las tres partes de su hacienda. El resto della concluian sayo de velarte, calzas de velludo para las fiestas, con sus pantuflos de lo mesmo, y los dias de entresemana se honraba con su vellori de lo mas fino. Tenia en su casa una ama que pasaba de los cuarenta, y una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que asi ensillaba el rocin como tomaba la podadera.Frisaba la edad de nuestro hidalgo con los cincuenta anos; era de complexion recia, seco de carnes,enjuto de rostro, gran madrugador y amigo de la caza. Quieren decir que tenia el sobrenombre de Quijada.

64 ejercicios de programacin

66

Archivos
correc.sal En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivia un hidalgo de los de lanza en astillero, adarga antigua, rocin flaco y galgo corredor. Una olla de algo mas vaca que carnero, salpicon las mas noches, duelos y quebrantos los sabados, lantejas los viernes, algun palomino de anadidura los domingos, consumian las tres partes de su hacienda. El resto della concluian sayo de velarte, calzas de velludo para las fiestas, con sus pantuflos de lo mesmo, y los dias de entresemana se honraba con su vellori de lo mas fino. Tenia en su casa una ama que pasaba de los cuarenta, y una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que asi ensillaba el rocin como tomaba la podadera. Frisaba la edad de nuestro hidalgo con los cincuenta anos; era de complexion recia, seco de carnes, enjuto de rostro, gran madrugador y amigo de la caza. Quieren decir que tenia el sobrenombre de Quijada.

Francisco Javier Zaragoza Martnez

8.5. Varias claves de usuario

67

8.5. Varias claves de usuario


Como alumnos de esta universidad, la coordinacin de cmputo les puede otorgar una cuenta de correo electrnico cuya clave de usuario sera su nmero de matrcula, y una cuenta de Unix cuya clave de usuario es de la forma ip-XX-NN. Puesto que ustedes no son un simple nmero, un mejor sistema podra ser otorgarles una clave de usuario que se obtuviera directamente de sus iniciales. Por ejemplo, podramos convenir que una clave de usuario consistiera de las iniciales de todos los nombres seguidas de las iniciales de todos los apellidos del alumno de que se trate. Entonces, la clave de usuario de Francisco Javier Mina debera ser fjm.

Especicacin
La entrada estar contenida en un archivo llamado nombres.txt, el cual consistir de un nmero entero N seguido de N cadenas que pueden contener letras minsculas, letras maysculas y espacios (cada dato en un rengln). Por supuesto, los espacios separan nombres y la primera letra de cada nombre es la inicial. Ms an, cada nombre estar escrito completamente en minsculas o completamente en maysculas (en cuyo caso ser un apellido). La salida se deber escribir en un archivo llamado inicial.txt consistente del nmero entero N seguido de N cadenas formada por las iniciales en minsculas, poniendo primero todas las iniciales de nombres en el orden en que aparecen, seguidas de todas las iniciales de apellidos en el orden en que aparecen (de nuevo, cada dato en un rengln).

Ejemplo nombres.txt 5 GONZALEZ MARTINEZ jorge emilio SAHAGUN marta JIMENEZ carlos AHUMADA KURTZ ROBLES BERLANGA rosario LOPEZ andres OBRADOR manuel inicial.txt 5 jegm msj cak rrb amlo

64 ejercicios de programacin

68

Archivos

8.6.

Cdigo de Vigenre

En algunas aplicaciones es importante poder enviar un mensaje de una persona a otra sin que ningn tercero se pueda enterar del mensaje. En este caso se recurre a estrategias llamadas tcnicas de codicacin. Algunas de las tcnicas ms simples consisten en la simple sustitucin de un carcter por otro. Por ejemplo, uno podra pensar en sustituir todas las letras F del mensaje original por letras J en el mensaje codicado, todas las letras J del mensaje original por letras Z en el mensaje codicado, etc. En este ejercicio describiremos una de tales tcnicas: el cdigo de Vigenre. Consideraremos que el mensaje consiste nicamente de los caracteres @, A, B, ..., Z y que a estos se les asocian los valores 0, 1, 2, ..., 26, respectivamente. Recuerda que los cdigos ASCII de estos caracteres son 64, 65, 66, ..., 90, respectivamente. En este caso, se escoge una palabra formada con los caracteres @, A, B, ..., Z (a la que llamaremos llave) y los caracteres de la misma se le suman a cada uno de los caracteres del mensaje: se suma el primer carcter de la llave con el primero del mensaje, el segundo carcter de la llave con el segundo del mensaje, y as sucesivamente hasta que se terminan los caracteres de la llave y se vuelve a comenzar con el primero. Por ejemplo, si escogemos EVA como llave y el mensaje original es TAREA@DE@PROGRAMACION, entonces el mensaje codicado ser YWSJWAI@AUMPLMBRWDNJO ya que E + T = Y, V + A = W, A + R = S, E + E = J, etctera.

Especicacin
La entrada estar contenida en un archivo llamado vigenere.txt, el cual consistir de dos cadenas que slo contienen letras maysculas y caracteres @, cada una de 1 a 1 000 caracteres y en un rengln. La primera cadena ser la llave y la segunda el mensaje. La salida se deber escribir en un archivo llamado mensaje.txt consistente de una cadena: el mensaje codicado con la llave.

Ejemplo vigenere.txt EVA TAREA@DE@PROGRAMACION mensaje.txt YWSJWAI@AUMPLMBRWDNJO

Francisco Javier Zaragoza Martnez

8.7. Buscando nmeros

69

8.7. Buscando nmeros


Escribe un programa que lea un archivo y que diga cuntos nmeros contiene. Aqu, un nmero es una secuencia de caracteres consecutivos que comienza con un dgito y termina con un dgito. Ejemplos de nmeros son el 000, el 1 y el 12 345. Recuerda que los dgitos son los caracteres del 0 al 9. En el ejemplo de abajo hay 9 nmeros, los cuales aparecen en el orden 24, 2 006, 2 006, 12, 34, 46, 000, 1, 12 345.

Especicacin
La entrada estar en el archivo nume.ent y consistir de dgitos y otros caracteres. La salida deber estar en el archivo nume.sal y consistir de un nmero entero N , la cantidad de nmeros en el archivo de entrada.

Ejemplo nume.ent nume.sal Hoy 24 de marzo de 2 6 es 9 el ultimo dia de clases del trimestre 2 6i. Abajo hay numeros en diversas formas: 12+34=46, , 1 y 12345.

64 ejercicios de programacin

70

Archivos

8.8.

Jurado de clavados

En una competencia de clavados hay J jueces y C clavadistas. Cada uno de los clavadistas se tira un clavado y cada uno de los jueces le otorga una calicacin de 0 a 10. La calicacin nal que se le otorga al clavadista es simplemente la suma de las calicaciones otorgadas por todos los jueces, excepto por la calicacin ms alta y la calicacin ms baja. Ayuda a los jueces a determinar las calicaciones nales de todos los clavadistas.

Especicacin
La entrada estar en el archivo de texto jurado.ent que contiene en su primer rengln dos nmeros enteros, J , C , separados por un espacio, con 3 J 9; 1 C 99. Cada uno de los siguientes C renglones contiene las J calicaciones enteras, separadas por espacios, otorgadas por los jueces a cada uno de los clavadistas. La salida deber estar en el archivo jurado.sal y deber consistir de C renglones, cada uno de los cuales contendr tres nmeros enteros, F , A, B , separados por espacios, correspondientes a la calicacin nal del clavadista, as como a la calicacin ms alta y a la calicacin ms baja (que fueron eliminadas).

Ejemplo jurado.ent 5 3 1 2 3 4 5 3 1 4 1 5 2 2 2 2 2 jurado.sal 9 5 1 8 5 1 6 2 2

Francisco Javier Zaragoza Martnez

Bibliografa
[1] A RNOLD, K., G OSLING , J. Y H OLMES , D. El lenguaje de programacin Java, tercera ed. Pearson Educacin, Madrid, 2001. [2] B ENTLEY, J. Programming Pearls, segunda ed. Addison Wesley, Nueva York, 2000. [3] C HAPMAN , S. J. Fortran 95/2003 for Scientists and Engineers, tercera ed. McGrawHill, Boston, 2008. [4] D AHL , O.-J., D IJKSTRA , E. W. Y H OARE , C. A. R. Programacin estructurada. Tiempo Contemporneo, Buenos Aires, 1976. [5] F LANAGAN , D. Y M ATSUMOTO, Y. The Ruby Programming Language. OReilly, Sebastopol, 2008. [6] G REGORIO R ODRGUEZ , C., L LANA D AZ , L. F., M ARTNEZ U NANUE , R., PALAO G OS TANZA , P. Y PAREJA F LORES , C. Ejercicios de programacin creativos y recreativos en C++. Prentice Hall, Madrid, 2002. [7] G ROGONO, P. Programacin en Pascal. Addison-Wesley, Mxico, 1986. [8] K ERNIGHAN , B. W. Y P IKE , R. La prctica de la programacin. Prentice Hall, Mxico, 2000. [9] K ERNIGHAN , B. W. Y R ITCHIE , D. M. El lenguaje de programacin C, segunda ed. Prentice Hall, Mxico, 1991. [10] M AURER , H. A. Y W ILLIAMS , M. R. A Collection of Programming Problems and Techniques. Prentice Hall, Englewood Cliffs, 1972.

71

72

Bibliografa

[11] O LSON , P., Ed. PHP Manual. PHP Documentation Group, 2009. Disponible en www.php.net/manual/en/. [12] PARBERRY, I. Problems on Algorithms. Prentice Hall, Englewood Cliffs, 1995. [13] S KIENA , S. S. Y R EVILLA , M. A. Concursos internacionales de informtica y programacin: Manual de entrenamiento por Internet. Universidad de Valladolid, Valladolid, 2006. [14] S TROUSTRUP, B. El lenguaje de programacin C++. Addison Wesley, Madrid, 2002. [15] VAN R OSSUM , G. Y D RAKE , J R ., F. L. The Python Language Reference Manual. Network Theory Ltd, Bristol, 2006. [16] WALL , L., C HRISTIANSEN , T. Y O RWANT, J. Programming Perl, tercera ed. OReilly, Sebastopol, 2000. [17] W IRTH , N. Algoritmos + estructuras de datos = programas. Ediciones del Castillo, Madrid, 1988.

Francisco Javier Zaragoza Martnez