Download Ejercicios - ALUMNOS FISI

Document related concepts

Divisibilidad wikipedia , lookup

Máximo común divisor wikipedia , lookup

Teorema fundamental de la aritmética wikipedia , lookup

Algoritmo de multiplicación wikipedia , lookup

Mínimo común múltiplo wikipedia , lookup

Transcript
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
E.A.P. de Ingeniería de Sistemas
Algorítmica I
GUIA DE EJERCICIOS Nº 03
Estructuras Repetitivas
A continuación se presentan 20 ejercicios, los cuales deben ser desarrollados
creando ALGORITMOS en PSEUDOCODIGO, C++ y DIAGRAMA DE FLUJO.
EJERCICIO 1:
Calcular el cociente y resto de dos números enteros positivos a y b mediante restas
sucesivas.
EJERCICIO 2:
Introducir dos números enteros positivos n y k, luego hallar el múltiplo de k que
este mas cerca de n.
Ejemplo:
Si n=7 y k=3 => El múltiplo mas cercano de 3 respecto a 7 es 6.
Si n=14 y k=5 => El múltiplo mas cercano de 5 respecto a 14 es 15.
Si n=10 y k=4 => El múltiplo mas cercano de 5 respecto a 13 es 8 (ó 12).
EJERCICIO 3:
Los términos de la serie de Fibonacci se calculan así:
a1 = 1
a2 = 2
an = an-1 + an-2
Diseñar una función que calcule el n-ésimo término de la serie de Fibonacci.
EJERCICIO 4:
La exponencial de un número real a se puede aproximar con la serie:
a) Escribir una función que calcule la exponencial de a según dicha fórmula,
utilizando k=10 y luego k=20. Se obtiene el mismo resultado?
b) Modificar la función de manera que el número k sea un parámetro elegido por el
usuario.
c) Modificar la función de manera que aproxime el resultado hasta que para algún k
se cumpla la condición ak/k! <= 10-5.
d) Modificar de nuevo la función de manera que aproxime el resultado hasta que
ak/k! sea menor que cierto valor infinitesimal e que se pasará como dato a la
función. Visualizar el número de términos k necesarios para obtener el resultado
requerido.
EJERCICIO 5:
Imprima todos los primos gemelos entre A y B. Los primos gemelos son parejas de
números primos con una diferencia entre sí de exactamente dos. Por ejemplo, tres
y cinco son primos gemelos, al igual que 11 y 13.
Algorítmica I
Guía de Ejercicios Nº 03 - Estructuras Repetitivas
EJERCICIO 6:
En una Central Telefónica se procesan los llamados realizados en la siguiente
forma:
Por cada llamada se ingresa:
Código de llamada: 3 dígitos (0 al finalizar el proceso)
Tipo de día: “1” hábil, “2” feriado
Duración de la llamada: entero > 0.
Siendo los importes Primeros 3’ Minuto Adicional
Días hábiles
a 10
a2
Feriados
a 15
a3
Se deberá emitir:
a) El importe a abonar por cada llamada (código - importe).
b) La cantidad de llamadas que superen los 3’
c) El % de llamados que superan los 3’ (sobre el total de llamadas informadas).
EJERCICIO 7:
Escriba un programa que diga si un número ingresado N es divisible por 11 e
indicar la suma de sus cifras de lugar par y la suma de sus cifras de lugar impar.
Utilizar: Si la suma de sus cifras de lugar par menos la suma de sus cifras de lugar
impar es divisible por 11 entonces el número N es divisible por 11.
EJERCICIO 8:
Dado un número n se desea mostrar todos los números no primos anteriores a n.
EJERCICIO 9:
El algoritmo de la multiplicación rusa es una forma “distinta” de calcular la
multiplicación de dos números enteros n x m. Para ello este algoritmo va
multiplicando por 2 el multiplicador m y dividiendo (sin decimales) por dos el
multiplicando n hasta que n tome el valor de 1. Después suma todos aquellos
multiplicadores cuyos multiplicandos sean impares. Por ejemplo, para multiplicar 37
y 12 se harían las siguientes iteraciones:
Iteración
Multiplicando
Multiplicador
1
37
12
2
18
24
3
9
48
4
4
96
5
2
192
6
1
384
Con lo que el resultado de multiplicar 37 y 12 sería la suma de los multiplicadores
correspondientes a los multiplicandos impares (en negrita), es decir 37 x 12 = 12 +
48 +384 = 444.
EJERCICIO 10:
Realizar un programa tal que, recibiendo un número primo, devuelva el número
primo inmediatamente siguiente y superior a dicho número primo. Por ejemplo, si
se ingresa el primo 7, el programa devolverá el primo 11. Hacer el programa para
números del intervalos [a,b] donde a<b (a y b son números naturales). Determinar
primero si el número ingresado es primo o no y luego el siguiente primo.
EJERCICIO 11:
Se ingresan los resultados de la evaluación de un curso de Programación; por cada
alumno se informa:
Prof. Arón Elías Herrera Ponte
Pág. 2
Algorítmica I
Guía de Ejercicios Nº 03 - Estructuras Repetitivas
Número de matricula: 4 dígitos (1-9999)
Asistencia: 1, presente; o, ausente
Calificación: 2 dígitos (0-10).
A partir de esta información se debe calcular e informar:
a) Cantidad y % de alumnos presentes.
b) Promedio de calificaciones de alumnos presentes.
c) % de alumnos aprobados (sobre el total de alumnos presentes).
d) Numero de matricula del alumno de mayor calificación. (Si hay varios alumnos
con esa calificación: numero de matricula y cantidad de alumnos en esa situación).
EJERCICIO 12:
Dado un número natural N, calculamos la raíz digital de N sumando los dígitos que
lo componen. El proceso se repite sobre el nuevo número hasta que el resultado
obtenido tiene un solo dígito. Este último número es la raíz digital del número N.
Ejemplo: 347  3 + 4 + 7 = 14  1 + 4 = 5  raizdigital(347) = 5
Escribir un programa que, dado un número entero positivo, devuelva su raíz digital.
EJERCICIO 13:
Cuando consideramos dos números enteros, n y m, decimos que m divide a n,
cuando existe otro entero k tal que: n = m x k.
En tal caso, decimos que n es un múltiplo de m y que m es un divisor de n.
Decimos que un número p es primo si y sólo si p es distinto de 1 y de -1 y los
únicos divisores de p son: 1, -1, p y -p.
Escribir un programa que, para cualquier entero positivo n, dé una lista de todos los
enteros positivos primos menores o iguales que n.
EJERCICIO 14:
Dados dos enteros, m y n, un número entero d es el máximo común divisor (o el
mayor divisor común) si y sólo si:
- d divide a m y d divide a n.
- si k divide a m y k divide a n entonces k < d.
El algoritmo de Euclides es un método eficaz para calcular el máximo común divisor
(mcd) entre dos números enteros. El algoritmo consiste en varias divisiones
euclidianas sucesivas. En la primera división, se toma como dividendo el mayor de
los números y como divisor el otro (se ahorra así un paso). Luego, el divisor y el
resto sirven respectivamente de dividendo y divisor de la siguiente división. El
proceso termina cuando se obtiene un resto nulo. El mcd es entonces el penúltimo
resto del algoritmo.
Ejemplo: Se busca el máximo común divisor de a = 945 y b = 651, números
escogidos al azar:
945 =
1 x 651 + 294
651 =
2 x 294 + 63
294 =
4 x 63 + 42
63 =
1 x 42 + 21
42 =
2 x 21 + 0
Entonces mcd(945,651) = 21 (el último resto no nulo).
EJERCICIO 15:
Sea P(x) = -x4 - x3 + 1, observemos que:
P(-1) = -1 + 1 + 1 = 1 > 0
P(1) = -1 - 1 + 1 = -1 < 0
Prof. Arón Elías Herrera Ponte
Pág. 3
Algorítmica I
Guía de Ejercicios Nº 03 - Estructuras Repetitivas
Los matemáticos, mediante el llamado "Teorema del Valor Intermedio" han probado
que entre -1 y 1 debe existir una raíz de P, o sea, un número c tal que P(c) = 0.
Escribir un programa de manera de determinar c con un error menor que 10 -3.
Comentario: El teorema a que hacemos referencia vale en un contexto más
general, pues afirma que:
si f:[a,b] --> R es una función continua y f(a) < f(b) o bien f(a) > f(b), dado
cualquier valor d entre f(a) y f(b), existe c entre a y b tal que f(c) = d.
EJERCICIO 16:
Escriba un programa que imprima la tabla de multiplicar de un número que se leerá
de la entrada estándar. El funcionamiento del programa se muestra en el siguiente
ejemplo de ejecución (en negrita, el número introducido por el usuario):
Introduzca un número: 5
La tabla de multiplicar del 5 es:
5x1=5
5 x 2 = 10
...
5 x 10 = 50
EJERCICIO 17:
Recuerde el programa de cálculo de superficies del tema anterior. Se desea
modificar este programa para que su ejecución se repita indefinidamente hasta que
el usuario decida salir del programa. El menú queda ahora de la siguiente forma:
==========================================
CÁLCULO DE SUPERFICIES (versión 2.0)
==========================================
1. Cuadrado lado*lado
2. Círculo pi*radio*radio
3. Rectángulo base*altura
A. Trapecio (base1+base2)*altura/2
5. Triángulo (base*altura)/2
0. Salir del programa
==========================================
Cuando el usuario introduzca una opción del 1 al 5, el programa se comportará de
la forma que se vio. Cuando introduzca la opción 0, el programa terminará
mostrando el mensaje "Gracias por usar este programa. Que tenga un buen día".
EJERCICIO 18:
Escriba un programa que lea de la entrada estándar valores que representan años e
indique si son o no años bisiestos. El programa seguirá leyendo años hasta un
máximo de 10 o hasta que haya leído 3 años bisiestos.
Recuerde, una vez más, la regla:
"Un año es bisiesto si es divisible por 400, o bien si es divisible por 4 pero no por
100"
Por ejemplo, el año 2000 es bisiesto (es divisible por 400), el año 1992 es bisiesto
(es divisible por 4 y no por 100), y el año 2100 no es bisiesto (es divisible por 4 y
también por 100).
EJERCICIO 19:
Escriba un algoritmo que, para un n menor que 10 facilitado por teclado, escriba en
la pantalla un triángulo como el siguiente (suponiendo n=5)
2
23
235
2357
2 3 5 7 11
Prof. Arón Elías Herrera Ponte
Pág. 4
Algorítmica I
Guía de Ejercicios Nº 03 - Estructuras Repetitivas
EJERCICIO 20:
Generar un número aleatorio comprendido entre 1 y el valor de la constante
MAXIMO y posteriormente pedir al usuario a que lo adivine. Para ello utiliza las
siguientes funciones de la biblioteca stdlib:
int rand (void); Genera un número aleatorio comprendido entre 0 y
RAND_MAX.(Mirar en la ayuda cuánto vale RAND_MAX).
srand((unsigned)time(NULL)); Inicializa la secuencia de números aleatorios con un
valor inicial (denominado semilla) obtenido a partir de la hora del reloj interno del
ordenador (de ahí la necesidad de incluir el fichero de cabecera time.h).
“El fracaso no me sobrecogerá si mi determinación para
alcanzar el éxito es lo suficientemente poderosa” … Og Mandino
______________________
Arón Elías Herrera Ponte
Profesor
Prof. Arón Elías Herrera Ponte
Pág. 5