1 ¿Cuántas lıneas escribe este programa para n = 10, para n = 11 y

Anuncio
1 ¿Cuántas lı́neas escribe este programa para n = 10, para n = 11 y para
n = 0?
int main() {
int n;
cin >> n;
int i = 1;
while (i <= n) {
cout << i << endl;
i = i + 2;
}
}
2 ¿Cuántas estrellas escribe este programa para n = 0, para n = 10 y para
n = 6?
int main() {
int n;
cin >> n;
while (n > 0) {
cout << *;
n = n - 3;
}
cout << endl;
}
3 Vamos a comparar el algoritmo del producto de dos números de la página
5 del bloque de transparencias IP03 Loops con el algoritmo rápido del producto de la página 7 del mismo documento. Si introducimos los números x =
25 e y = 16. ¿Cuántas sumas del tipo p + x realiza el algoritmo de la página
5? ¿Cuántas multiplicaciones por dos, cuántas divisiones por dos y cuántas
sumas p + x realiza el algoritmo rápido del producto para x = 25 e y = 16?
Calculad lo mismo para x = 16 e y = 25. ¿Qué operación es en general más
costosa, multiplicar por 2 o sumar dos números distintos?
El algoritmo del producto rápido es uno de los ’algoritmos fundamentales’
de este curso.
1
4 En la página 11 del bloque de transparencias IP03 Loops hay un ejemplo
de programa cuya entrada es una secuencia de caracteres terminada con el
carácter ’.’. Tomando este programa como ejemplo, escribid un programa que
lea una secuencia no vacı́a de números enteros positivos terminada en 0, y
escriba la suma y el producto de todos los números de la secuencia.
5 En la página 13 del bloque de transparencias IP03 Loops hay un programa que cuenta las cifras de un número. Tomándolo como ejemplo construid
un programa que, dado un número n de k cifras y un número i entre 1 y k,
escriba la i-ésima cifra de n comenzando por la derecha. Por ejemplo, dados
n = 1963584 e i = 3 escribe 5, y dados n = 0 e i = 1 escribe 0.
6 En las páginas 14 a 18 del bloque de transparencias IP03 Loops se muestran dos versiones del algoritmo de Euclides para el cálculo del máximo
común divisor de dos números enteros positivos. De acuerdo con el resultado
de (Lamé, 1844) ¿Cuántas iteraciones realizarı́a como máximo el algoritmo
más rápido de Euclides de las transparencias para calcular el máximo común
divisor de 571 y 13? ¿Cuántas iteraciones utiliza cada uno de los dos algoritmos para calcularlo? Podéis modificar los programas de manera que cuenten
el número de iteraciones que realizan para cada entrada.
7 Construid un programa que lea un número natural n y escriba el número
harmónico n-ésimo Hn con cuatro cifras decimales (ver página 9 de Normes
de Programació). La definición de Hn es la siguiente: si n = 0, entonces
Hn = 0; en otro caso, Hn = 1/1 + 1/2 + . . . + 1/n.
8 En la página 20 del bloque de transparencias IP03 Loops se muestra un
ejemplo en el que se pide calcular el máximo común divisor de una secuencia
de pares de números enteros positivos. La diferencia con el ejemplo de contar
a’s es que en este caso no hay un valor especial (e.g. el carácter ’.’) que marque
el final de la secuencia. La forma de leer secuencias que terminan cuando
los datos se acaban, es decir que no usan un valor especial para marcar el
final de la secuencia, se explica en la página 5 del bloque de transparencias
IP06 Sequences Invariants.
Construid un programa que lea una secuencia de dı́gitos (como los que
forman un número de DNI, por ejemplo) y escriba la secuencia de enteros
formada por los cuadrados de cada dı́gito. Por ejemplo, si la secuencia de
2
entrada es 17238854 el programa debe escribir la secuencia de enteros 1, 49,
4, 9, 64, 64, 25, 16. Tened en cuenta que si introducı́s la secuencia 17238854
a través del teclado, no es necesario que separéis los dı́gitos con espacios en
blanco entre ellos, pero después del 4 debéis presionar a la vez las teclas Ctrl
y D para marcar el final de la entrada.
¿En qué se diferencia este ejercicio del problema de la lista 2 que pide
escribir los dı́gitos de un número al revés?
9 Escribid un programa que utilice la onstrucción ’for’ y que dado un número natural n escriba en una lı́nea n veces el número n. Por ejemplo, si n = 7
el programa debe escribir
7777777
y si n = 4
4444
10 Modificad el programa anterior para que dado un natural n escriba un
triángulo de n filas donde la primera fila contiene n veces el número n, la
segunda fila n − 1 veces el número n − 1, y ası́ sucesivamente hasta la fila 1.
Extended el programa anterior para que en lugar de leer un solo natural
lea una secuencia de naturales, y el lugar de escribir un solo triángulo escriba
una secuencia de triángulos separados por una lı́nea en blanco.
11 En la página 24 de IP03 Loops se hace una observación que va a ser
muy importante en este curso: ser capaz de distinguir los problemas de R...
de los problemas de B... Reescribid el algoritmo que determina si un número
es primo de manera que dicha obervación pueda apreciarse.
12 Un problema relacionado con determinar si un número es primo es el
de escribir la descomposición de un número dado en factores primos. ¿En
qué bloque de transparencias hay un algoritmo que resuelve este último problema?
3
13 El algoritmo que determina si un número es perfecto en IP03 Loops
podrı́a mejorarse utilizando la idea del algoritmo rápido para determinar si
un número es primo. Construid un algoritmo más eficiente utilizando esa idea
y responded a la pregunta de la página 38 sobre el algoritmo que aparece en
las transparencias.
4
Descargar