Download Desarrollo de algoritmos

Document related concepts

Análisis numérico wikipedia , lookup

Problema de la suma de subconjuntos wikipedia , lookup

Cálculo simbólico wikipedia , lookup

Algoritmo cuántico para sistemas de ecuaciones lineales wikipedia , lookup

Algoritmo HITS wikipedia , lookup

Transcript
Computación para ingenieros
Ing. Jaime Alfonso Reyes Cortés
Serie 5. Diseño de programas
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 diseñará sus
correspondientes algoritmos, en pseudocódigo y en diagrama de flujo, y deberá
realizar, también, las correspondientes pruebas de escritorio.
Nota importante: En los casos que se requiera revise la correspondiente teoría
matemática.
Algoritmos con estructura secuencial
1. Truco matemático. He aquí un truco matemático para planteárselo a un amigo. Dígale:
Piense en un número (entero).
Súmele 3.
Multiplique el resultado por 2.
Al resultado réstele 4.
Divídalo entre 2.
f. Réstele el número que pensó.
Sea cual sea el número en que se piense, al seguir correctamente las instrucciones el
resultado final siempre es igual 1.
Este truco puede explicarse por medio del simbolismo algebraico o mediante figuras, como a
continuaci6n se expone en la figura 1.
a.
b.
c.
d.
e.
Figura 1
Diseñar un algoritmo que simule que la computadora juegue con el usuario, mostrando en
pantalla solamente los pasos que debe hacer el usuario.
2.
Distancia entre dos puntos. Diseñar un algoritmo que calcule la distancia entre dos puntos.
Considere que se le deben pedir al usuario los puntos
y
. Use la distancia
euclidiana y muestre en pantalla el resultado.
3.
Conversión de coordenadas polares a rectangulares. Diseñar un algoritmo que realice la
conversión de coordenadas polares a coordenadas rectangulares. Las coordenadas polares se
pedirán al usuario por vía teclado y las coordenadas rectangulares se mostrarán en pantalla.
4.
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.
5.
Consumo de luz. Para una lámpara incandescente de x Watts (W ) que al día se prende
durante y horas (h) , se puede obtener su consumo diario de la siguiente manera:
 x
 h  x * y  kWh 
kWh  y


 1000
 día  1000  día 
Considere un precio de $0.635 por cada kWh. Realice un algoritmo que pida al usuario por vía
teclado la cantidad de Watts que consume la residencia del usuario y la cantidad de horas durante las
cuáles se hace uso de esos Watts. Con base en ésto calcule el costo diario que realiza el usuario y lo
muestre en pantalla. Deduzca también el costo mensual y complete el algoritmo para que también
devuelva el costo mensual del usuario (Consumo de luz).
6.
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 2,
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 3
Paso 2
Resultado
Figura 2
7.
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.
Después realice las pruebas de escritorio para resolver los incisos a y b.
a.
b.
La suma de los primeros 80, números consecutivos.
La suma de los primeros 200 números consecutivos.
8. Suma de enteros pares e impares. Realice un análisis similar al del ejercicio 7 y determine
una fórmula para la suma de:
a.
b.
los n primeros números pares,es decir, 2 + 4 + 6 + ... + (2n - 4)+ (2n -2) +2n.
los n primeros números impares (es decir, 1 + 3 + 5 + ... + (2n - 3) + (2n - 1)).
Diseñe el respectivo algoritmo que le pida al usuario el valor de n y devuelva la
correspondiente suma de números pares o impares. Según corresponda realice como pruebas
de escritorio:



La suma de todos los números impares desde 1 hasta 49.
La suma de todos los números impares desde 1 hasta 199.
La suma de todos los números pares desde 2 hasta 400.
Algoritmos con decisiones
1.
Coordenadas rectangulares a polares. Diseñar un algoritmo que realice la conversión de
coordenadas rectangulares a coordenadas polares. Se deben de pedir al usuario por vía teclado las
coordenadas rectangulares y mostrar en pantalla sus correspondientes coordenadas polares.
2. 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.
3.
Caracteres numéricos. Diseña un algoritmo que le pida al usuario un carácter por vía teclado y en
caso de que el carácter sea numérico muestre en pantalla el valor entero equivalente que le
corresponda. En caso de cualquier otro carácter indicar que ha habido un error.
4.
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.
5.
La 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. Después pedir
al usuario por vía teclado un valor de la abscisa para obtener su correspondiente ordenada y
mostrarla en pantalla.
6.
Triángulos. Diseñar un algoritmo que dados tres puntos,
,
y
, que
definen un triangulo en el plano coordenado x-y. Indique en pantalla si se trata de un triángulo o no
lo es. En caso de que sea un triángulo deberá mostrar en pantalla el tipo de triángulo al que se refiere
(isósceles, equilátero, escaleno) y también determine los ángulos de cada triangulo usando la ley de
cosenos.
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).
Realiza como pruebas de escritorio los siguientes incisos.
7.
a.
Prueba con los puntos (0,0), (2,4) y (6,0)
b.
Prueba con los puntos (1,2), (4,5) y (7,2)
c.
Prueba con los puntos (0,0), (3,5.196152) y (6,0)
d.
Define tres puntos que no formen un triángulo.
Operaciones con racionales. Diseñe un algoritmo que me permita elegir el tipo de operación
a realizar entre dos números racionales. Las operaciones que pueden realizarse son: suma,
resta, multiplicación o división.
Algoritmos que emplean ciclos
9. 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 (  ) se le deberá pedir al usuario por vía teclado.
10. Tabular la función sinc. Diseñar un algoritmo que tabule la función
en el
intervalo de    x   Considera que el valor del incremento (  ) se le deberá pedir al
usuario por vía teclado.para cada valor de
, que 
es fracción de

(p.ej  

32
) y que
.
11. Cronómetro digital. Diseñar un algoritmo que se comporte como un cronómetro que sólo
cuente minutos y segundos, es decir, mm:ss.
12. Suma de enteros con ciclos. Diseñar los respectivos algoritmos que, mediante ciclos,
obtengan las respectivas sumatorias y las muestren en pantalla para:
a.
la suma de los n primeros enteros consecutivos.
b.
la suma de los n primeros enteros pares.
c.
la suma de los n primeros enteros impares.
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.
13. Pirámide numérica. Realice un algoritmo que le pida un número entero al usuario y muestre
en pantalla la pirámide correspondiente. Por ejemplo, para el número 5 se tiene la siguiente
salida:
1
121
12321
1234321
123454321
Figura 4
14. Serie numérica. Estudie el modelo de la figura 5. Observe que se expresa el cuadrado de un
número entero como una suma de números consecutivos.
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
15. Trucos con el número 9. En la figura 6 se muestra un modelo matemático relacionado con el
número 9. Verificar, si se desea, que cada una de las siguientes igualdades es correcta:
1*9+2
12 * 9 + 3
123 * 9 + 4
1234 * 9 + 5
12345 * 9 + 6
=
=
=
=
=
11
111
1111
11111
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.
Realice las siguientes operaciones como prueba de escritorio:
a.
123456 * 9 + 7 = ?
b.
1234567 * 9 + 8 = ?
16. El gato. Un gato está en el sótano de un edificio de 30 pisos. Por el día sube tres pisos y por la
noche baja dos. ¿Cuánto tiempo tardará en llegar a la azotea del edificio?
Realizar un algoritmo que simule los pisos que el gato sube de día y baja por la noche hasta
llegar a su destino. Üselo para contestar a la pregunta anterior. Considere a la planta baja
como un piso también.
17. Número perfecto. Se llama número perfecto al que es igual a la suma de sus divisores, no
incluido el númeral mismo. El 6 es número perfecto dado que 6 = 1 + 2 + 3. A la fecha nadie
ha determinado un número perfecto impar, pero nadie ha demostrado que todo número
perfecto es par. ¿Puede usted determinar el siguiente número perfecto que sigue al 6?
Algoritmos con arreglos
1. Determinar si un número natural es capícula, es decir, se lee igual de derecha a izquierda que
de izquierda a derecha.
2. Estudie cada una de las igualdades mostradas en la figura 7.
152= 1 * 200 + 25 = 225
252 = 2 * 300 + 25 = 625
352 = 3 * 400 + 25 = 1225
452 = 4 * 500 + 25 = 2025
Figura 7
Enuncie un método abreviado para elevar al cuadrado un número de dos dígitos de los
cuales el de las unidades sea 5.
Realice un algoritmo que le pida al usuario un número que desee elevar al cuadrado, como el
lado izquierdo de las igualdades y a partir de ése número determine el renglón restante con base en el
método enunciado.
Nota: Alamacene el número pedido como una cadena y tome los primeros caracteres para
determinar la operación a realizar..
3.
Después de estudiar el modelo matemático de la figura 8, desarrolla un algoritmo que le pida
al usuario el número de unos y que permita construir dicho modelo.
l*l
11 * 11
111 * 111
1111 * 1111
11111 * 11111
=
=
=
=
=
1
121
12321
1 234 321
123454321
Figura 8
Considera que el modelo expuesto continúa hasta que el usuario decida terminarlo.
Use como prueba de escritorio al producto de 1111111111 * 1111111111..
4.
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.
Diseñar un algoritmo que cree una tabla de sumas para un reloj de 12 horas como la
a.
siguiente:
+
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
2
3
4
5
6
7
·8
9
10
11
12
b.
1
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
5. 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.
6. 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.