Los siguientes ejercicios corregidos se relacionan con estructuras algorítmicas, estructuras de control y estructuras de datos. El objetivo es proponer las estructuras más adecuadas al enunciado.
Ejercicio 1
Esta técnica de multiplicación, utilizada en el antiguo Egipto, no requiere conocer todas las tablas de multiplicar hasta el 10 sino solo la suma y la multiplicación por 2.
Aquí está por ejemplo la multiplicación de 13 por 78. Primero debes escribir la tabla de potencias de 2 menor o igual a 13. Luego, escribe la tabla de dobles del número 78.
Luego, tienes que marcar las mayores potencias de 2 descomponiendo el número 13 (es decir, que el bit binario es igual a 1). En otras palabras, marque las potencias de 2 ingresando la conversión binaria del número 13 = 1101
La suma es 78+312+624=1014.
a – Calcula el producto de tu elección utilizando el algoritmo de la división egipcia.
b – ¿Es más fácil calcular el producto de 78 por 13? Por qué ?
c – Escribe el algoritmo de multiplicación egipcio (¡según tu respuesta de b!). ¡Intenta optimizarlo lo mejor que puedas!
Lo más fácil es elegir el número más pequeño para la potencia de 2 y por lo tanto el número más grande a duplicar. Efectivamente, el número de iteraciones es igual al número de veces que es necesario multiplicar 2 por sí mismo para que sea mayor que el número menos una iteración (solo mantenemos lo estrictamente inferior. Tendremos por tanto un número d iteración n tal que 2no > a (número descrito). Deducimos que n>log2(a) de ahí el interés de que a sea el más pequeño.
Primero recordamos la transformación binaria de un número decimal.
Aquí hay una idea del algoritmo: puedes escribirlo de una manera menos formal porque el algo también incluye la transformación de decimal a binario, aquí el algo ha sido muy bien pensado y optimizado 🙂
Ejercicio 2
a – Escribe un algoritmo cuyos parámetros son tres variables reales y que permuta circularmente sus valores.
b – Escribir un algoritmo cuyos parámetros sean tres variables reales y devuelva el valor máximo entre estos tres valores.
c – Escribir un algoritmo que permita los valores de dos variables sin utilizar una variable adicional.
d – Escriba un algoritmo que devuelva verdadero si dos números enteros a y b tienen el mismo signo, de lo contrario falso
posee - Las variables a, b y c son variables definidas fuera del algoritmo. Estos valores se modifican aunque no se devuelva nada. ¡Presta atención al orden de tus operaciones!
También puede hacer esto sin tomar una variable adicional. En este caso tendremos al principio (a,b,c). Por ejemplo, a y b se intercambian mediante las siguientes operaciones:
un ← un + b
b ← a–b
a ← a–b
Tenemos por tanto el triple de valores (b,a,c). Resta intercambiar a y c para obtener el triple (b,c,a).
O también puedes intercambiar los tres valores usando una serie de cálculos.
a ← a + b + c;
c ← a–b–c;
b ← a–b–c;
a ← a–b–c;
b- Aquí el algoritmo debe devolver un valor, por lo que hay entradas y salidas. Hay muchas formas de hacer las cosas, depende de ti encontrar variantes (con varias condiciones en la rama, por ejemplo).
La idea sería devolver el máximo sin usar variables adicionales.
Tampoco es muy bonito allí, por lo que intentaremos devolver el máximo solo una vez sin usar nuevas variables. Permutaremos los valores para almacenar el máximo en x (ojo, dependiendo de los idiomas puedes tener un impacto real en los valores en xy y z, ¡así que utilízalo con precaución!)
vs- Lo acabamos de hacer varias veces... para aquellos que no han seguido.
d- Vamos a pensar en un algoritmo bien optimizado para evitar hacer muchas ramificaciones. ¡Dos enteros con el mismo signo tendrán su producto positivo!
Ejercicio 3
Una copistería cobra 2 euros por las diez primeras fotocopias, 1,50 euros por las siguientes veinte y 1 euro más allá. Escriba un algoritmo que le pregunte al usuario la cantidad de fotocopias realizadas y luego muestre la cantidad correspondiente.
Es posible poner las ramas en secuencia, pero eso es menos eficiente en el tiempo de cálculo.
Ejercicio 4
Escribe un algoritmo para mostrar la estación introduciendo el número del mes.
Ejercicio 5
Escriba un algoritmo para resolver cada uno de los siguientes problemas: (pruebe con diferentes estructuras de control FOR, WHILE, DO… WHILE, etc.).
1- Cálculo de la suma de los primeros N enteros.
2- Encontrar el mínimo y el máximo en un conjunto de N números.
3- Cálculo del cociente y resto de la división de dos enteros A y B sin utilizar la operación de división.
4- El cálculo del producto de dos números enteros utilizando únicamente la operación de suma '+'.
5- Determinación si A es divisible por B. Con A y B enteros positivos.
6- Determinar todos los divisores de un entero X dado.
7- Determinar si un entero X es primo o no.
8- Calcular la suma de las cifras que forman un número natural N.