Desarrollodealgoritmos SLT
Desarrollodealgoritmos SLT
Academia de Informática
sem. 2019-1
Problemas
En las secciones siguientes se presentan una serie de problemas para los cuáles el
alumno tendrá que leer cuidadosamente cada uno de ellos; después realizará el análisis
y diseñará sus correspondientes algoritmos, tanto en pseudocódigo como en diagrama
de flujo, así como sus respectivas pruebas de escritorio.
Una vez realizado el diseño, se procederá a la implementación correspondiente de cada
problema en lenguaje C.
Notas importantes:
• En los casos que se requiera revise la correspondiente teoría matemática.
• Los algoritmos deben revisarse en forma exhaustiva para garantizar que la
solución a cada problema es la indicada, es decir, se deben de evaluar los casos
críticos en las pruebas de escritorio para evitar que se llegue a resultados no
deseados.
Tabla 1. Prefijos usados en el SI, así como sus correspondientes símbolos y valores multiplicativos.
Tabla 1
2. Prisma poligonal. Diseñar un algoritmo que calcule el volumen de un prisma poligonal cuya
base es de lado n. Se debe de pedir al usuario la dimensión del lado, la cantidad de lados, su
apotema y la altura del prisma. Se debe de mostrar en pantalla el volumen resultante.
3. Complejo conjugado. Realizar el algoritmo que le pida al usuario un número complejo que
esté en forma binómica y que muestre en pantalla su correspondiente complejo conjugado.
5. Error absoluto. Diseñar un algoritmo que calcule el error absoluto. Pida al usuario por vía teclado los
valores del valor real y el valor leído. Muestre en pantalla el error obtenido.
6. Cálculo de área. En la figura 1, A y B son los centros de los dos círculos y el segmento AB de longitud
variable, entonces el área de la parte sombreada en la figura1 es de ______ cm
Figura 1
Elaborar el algoritmo que permita resolver el problema para un valor del segmento AB que se
le pida al usuario por vía teclado.
8. Suma de enteros. Gauss, famoso matemático alemán, siendo joven, encontró la suma de los
primeros 100 números consecutivos por él siguiente procedimiento:
Dedujo que había 50 parejas de números, cada una de las cuales sumaría 101, como se observa
en la figura 3.
Figura 3
Por consiguiente la suma total sería 50 * 101 es decir, 5050. Con base en esto se puede saber
que la suma de los n primeros números enteros consecutivos es:
n
(n + 1)
2
Diseñe el algoritmo que le pida al usuario el número n de enteros que se desean sumar y que
muestre en pantalla la suma obtenida por la ecuación anterior.
9. Suma de enteros pares e impares. Realice un análisis similar al del ejercicio anterior y
determine una fórmula para la suma de:
a. los n primeros números pares, es decir, 2 + 4 + 6 + ... + (2n - 4)+ (2n -2) +2n.
b. los n primeros números impares (es decir, 1 + 3 + 5 + ... + (2n - 3) + (2n - 1)).
10. Dobleces y agujeros. Paso 1. Tómese una hoja de papel y dóblese a la mitad.
Paso 2. Dóblese de nuevo a la mitad y córtese la esquina en la que han concurrido los dobleces.
Al desdoblar la hoja tendrá un aspecto como el que se, muestra en el resultado de la figura 4, es
decir, con dos dobleces y el corte hemos obtenido un agujero. Repita el mismo proceso, pero
esta vez haciendo tres dobleces antes de cortar la esquina. Trate de predecir el número de
agujeros que se obtendrán. ¿Cuántos agujeros se obtendrán con cuatro dobleces? ¿Con n
dobleces? Obtenga una fórmula que represente el número de agujeros que se obtendrán con base
en el número de dobleces. Diseñe un algoritmo que le pida al usuario el número de dobleces y
que muestre en pantalla la cantidad de agujeros que se obtendrán.
Paso 2
Resultado
Paso 1
Figura 4
Algoritmos con decisiones
1. Error relativo. Diseñar un algoritmo que calcule el error relativo. Pida al usuario por vía teclado los
valores del valor real y el valor leído. Muestre en pantalla el error obtenido.
2. Valor absoluto. Diseñar un algoritmo que calcule el valor absoluto de un número real sin usar
funciones matemáticas de los lenguajes de programación.
3. Función logaritmo. El logaritmo base n de un número se determina mediante la siguiente ecuación:
ln(x )
log n ( x) =
ln(n )
Nota: Para ver si dos lados son iguales considere que podría existir un error de redondeo, es decir,
asuma que dos lados son iguales si la diferencia entre sus longitudes es menor de 0.00001 (error
absoluto <= 0.00001 o error relativo <= 0.001).
La obesidad y el sobrepeso caracterizan a los rangos de peso que exceden lo que se considera saludable
para una determinada estatura, el bajo peso describe al peso corporal inferior a lo que se considera
saludable. De acuerdo con la siguiente tabla se puede saber la condición en la que se encuentra una
persona.
Tabla 2
a. Elabore el algoritmo que le pida al usuario por vía teclado los valores del peso y de la estatura
de una persona y con base en ellos calcule el IMC. Después, muestre en pantalla el índice
obtenido. Contemple las restricciones
b. Elabore un nuevo algoritmo en el que además del IMC se le indique al usuario la condición
de salud en la que se encuentra y, si es el caso, el riesgo de salud que tiene dicha persona.
Algoritmos que emplean ciclos
1. Tabular la función logaritmo base n. Diseñar un algoritmo que tabule la función
ln(x )
log n ( x) =
ln(n )
en un intervalo que se le pida definir al usuario por vía teclado Considera las restricciones
asociadas al logn y que el valor del incremento ( D ) que se usará para tabular se le deberá pedir al
usuario por vía teclado.
2. Tabular una línea recta. Diseñar un algoritmo que dados dos puntos, 𝑝" 𝑥" , 𝑦" y 𝑝& (𝑥& , 𝑦& ), de una
recta calcule la ecuación que define dicha recta. Muestre en pantalla la ecuación obtenida. Tabule en
pantalla los valores de 𝑦 con respecto a 𝑥 desde 𝑝" hasta 𝑝& . Considera que el valor del incremento (
D ) se le deberá pedir al usuario por vía teclado. Considere los casos válidos y no válidos para la
ecuación de la recta.
3. Suma de enteros con ciclos. Diseñar los respectivos algoritmos que, mediante ciclos, obtengan
las respectivas sumatorias y las muestren en pantalla para:
En cada caso el valor de n se le deberá pedir al usuario y se deberá comparar las sumas obtenidas con
la expresiones obtenidas por Gauss para comprobar que se cumplen.
4. Pirámide numérica. Realice un algoritmo que le pida un número entero al usuario y muestre
en pantalla la pirámide correspondiente, como se muestra en la figura 4. Por ejemplo, para el
número 5 se tiene la siguiente salida:
1
121
12321
1234321
123454321
Figura 4
Diseñe el algoritmo que pida el número entero al usuario que se desea y muestre en pantalla su
correspondiente renglón. Realice las pruebas de escritorio para expresar los cuadrados de 6, 7
y 8 del mismo modo.
12 = 1
22 = 1 + 2 + 1
32 = 1 + 2 + 3 + 2 + 1
42 = 1 + 2 + 3 + 4 + 3 + 2 + 1
52 = 1 + 2 + 3 + 4 + 5 + 4 + 3 + 2 + 1
Figura 5
1*9+2 = 11
12 * 9 + 3 = 111
123 * 9 + 4 = 1111
1234 * 9 + 5 = 11111
12345 * 9 + 6 = 111111
Figura 6
Trate de determinar una correspondencia entre el número de unos que componen al número de
la derecha y uno de los números que se utilizan a la izquierda. Ahora desarrolle el algoritmo
que sin efectuar el cálculo, obtenga los unos indicados en el resultado de la operación. Pida al
usuario el número de unos que se quieren obtener y despliegue en pantalla todos los renglones
anteriores hasta llegar a la operación deseada.
a. 123456 * 9 + 7 = ?
b. 1234567 * 9 + 8 = ?
l*l = 1
11 * 11 = 121
111 * 111 = 12321
1111 * 1111 = 1234321
11111 * 11111 = 123454321
Figura 7
Nota: Se debe de tomar en cuenta solamente los 1’s que se encuentran antes del
símbolo *.
Considera que el modelo expuesto continúa hasta que el usuario decida terminarlo. Use como
prueba de escritorio al producto de 1111111111 * 1111111111.
8. Dominó. En la figura 8 se han acomodado las fichas de un juego de domino de cierta manera.
Observe que los puntos que debería mostrar cada ficha se han sustituido por la cantidad
correspondiente. Elabore el algoritmo que pida al usuario por vía teclado el valor de un renglón
y que con base en ello se muestre en pantalla solamente la secuencia de valores que vaya desde
el primer renglón hasta el renglón indicado.
Figura 8
9. Calculadora maizoro. Extienda el algoritmo de la calculadora maizoro, vista en clase, para que
se realice mientras el usuario no elija la opción de salir. En caso de que el usuario haya elegido
dicha opción, se le debe pedir al usuario que confirme su solicitud. En el caso de que el usuario
la confirme, se deberá terminar el algoritmo, y en el caso de que no confirme, se volverá a
mostrar el menú principal y preguntar por la opción nuevamente.
10. Índice de masa corporal de un adulto o IMC 2. Extender el algoritmo de cálculo de índice de
masa corporal e indicación del estado de salud de la persona para que se repita mientras el
usuario lo desee.
Algoritmos con arreglos
1. Conversión decimal a hexadecimal. Elaborar el algoritmo que realice la conversión de
números decimales a hexadecimales. Se debe pedir al usuario una entero correspondiente al
número decimal y se debe de regresar una cadena correspondiente al valor hexadecimal del
número original.
2. Reloj. Consideremos los números del 1 al 12 de un reloj de 12 horas. Se sabe que la suma, en
dicho reloj, se basa en el conteo según la dirección de sus manecillas. Así por ejemplo, para
determinar la suma de 9 + 5, empezamos en las 9 y contamos 5 unidades en la dirección de las
manecillas del reloj obteniéndose 2 como resultado.
a. Diseñar un algoritmo que cree una tabla de sumas para un reloj de 12 horas como la
tabla 1.
b. Haciendo uso de la tabla anterior diseñe un algoritmo que obtenga la suma de dos horas
dadas por el usuario. Por ejemplo:
8+7=3
5 + 12 = 5
3 + 11 =2
Tabla 2
+ 1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12 1
2 3 4 5 6 7 8 9 10 11 12 1 2
3 4 5 6 7 8 9 10 11 12 1 2 3
4 5 6 7 8 9 10 11 12 1 2 3 4
5 6 7 8 9 10 11 12 1 2 3 4 5
6 7 8 9 10 11 12 1 2 3 4 5 6
7 8 9 10 11 12 1 2 3 4 5 6 7
8 9 10 11 12 1 2 3 4 5 6 7 8
9 10 11 12 1 2 3 4 5 6. 7 8 9
10 11 12 1 2 3 4 5 6 7 8 9 10
11 12 1 2 3 4 5 6 7 8 9 10 11
12 1 2 3 4 5 6 7 ·8 9 10 11 12
3. Una matriz escasamente poblada es aquella cuyos elementos son en su mayoría cero. Diseñe un
algoritmo para determinar si una matriz de m*n es escasamente poblada o no lo es. Los valores
de dicha matriz se le deberán pedir al usuario y después determinar si es escasamente poblada
o no lo es.
4. Podemos dar una aproximación de una matriz de n*n es positiva definida si todos sus elementos
son mayores que cero. Una matriz de n*n es positiva semidefinida si todos sus elementos son
mayores o iguales que cero. Una matriz de n*n es negativa definida si todos sus elementos son
menores que cero. Diseñe un algoritmo que le pida al usuario el valor de n y los valores de la
matriz cuadrada. Después determine si la matriz dada es positiva definida, positiva semidefinida
o ninguna de las dos.
5. Divirtiéndose con binarios. Muchos aspectos divertidos están basados en el sistema binario.
Consideremos, por ejemplo, las tablas que a continuación se exponen, dentro de las cuales se
disponen los números del 1 al 15 de acuerdo al siguiente esquema.
D C B A
8 4 2 1
9 5 3 3
10 6 6 5
11 7 7 7
12 12 10 9
13 13 11 11
14 14 14 13
15 15 15 15
Ahora dígale a alguien que piense en un número del 1 al 15 y que le diga en qué tabla o tablas
se encuentra. Entonces usted puede indicarle en qué números pensó sumando los primeros
números de las tablas que ha mencionado. Así por ejemplo, si el número en que pensó es el
11, le mencionará las tablas A, B y D. Sumando entonces 1 + 2 + 8 se determina el número en
cuestión.
Con el uso de funciones, diseña un algoritmo que haga que la máquina deduzca el número en
el que estaba pensando el usuario. Dicho algoritmo deberá presentar en pantalla las tablas
correspondientes y realizar las preguntas correspondientes para deducir el número pensado.
Las tablas deben ser definidas por arreglos. Los cuatro arreglos se deberán llenar mediante un
solo ciclo y después se deberán imprimir en pantalla.