Problemas Resueltos Parte II Algoritmica I 2013 - I
Problemas Resueltos Parte II Algoritmica I 2013 - I
Problemas Resueltos Parte II Algoritmica I 2013 - I
Programacin Estructurada:
Funciones y Procedimientos Arreglos Problemas
Problema 1
Escribir un algoritmo usando funciones y procedimientos que calcule la serie de Taylor de la funcin seno, sabiendo que la funcin seno desarrollada en serie de Taylor tiene la forma
DATOS DE ENTRADA: ngulo, n (numero de trminos de la sumatoria) DATOS DE SALIDA: suma DATOS INTERMEDIOS: factorial, pox (potencia de x), term (valor del trmino) Algoritmo calculo_serie_Taylor
var entero: n real: ang, suma, fac, pox, term inicio n Ingresar_n() escribir(Ingrese el ngulo: ) leer(ang) escribir(La serie de Taylor para el SENO de , ang, es : , Seno_Taylor (n, ang) fin
Problema 1
real funcion Seno_taylor (entero: nt, real: x) var Entero: i, j, suma inicio suma 0 para ( i = 1 hasta i = nt) hacer term potencia(x, 2*i-1)/factorial(2*i-1) si (i mod 2 = 0) entonces suma suma - term sino suma suma + term fin_si fin_para devolver (suma) Fin entero funcion Ingresar_n() var entero: num inicio repetir escribir(Ingrese numero de trminos: leer(num) hasta_que(num>0) devolver (num) Fin_funcin real funcion potencia(real: base, entero: exp) var real: pox entero: j inicio pox 1 para (j = 1 hasta j = exp) hacer pox pox*base fin_para devolver (pox) fin_funcion entero funcion factorial (entero: num) var entero: fac, j inicio fac 1 para (j = 1 hasta j = num) hacer fac fac *j fin_para devolver (fac) Fin_funcion
Problema 2
Escribir un algoritmo con funciones o procedimientos que determine si un nmero es palndromo (capicua). En matemticas, un nmero palndromo se refiere a cualquier nmero simtrico que, por ello, se lee igual de izquierda a derecha que de derecha a izquierda. Ejemplos: 121, 4554, etc.
DATOS DE ENTRADA: num (numero entero) , num1 DATOS INTERMEDIOS: numdig, dig Algoritmo Calculo_nmero_capicua
var entero: num, nd Inicio escribir(Ingrese numero: ) leer(num) nd numero_digitos (num) si ( numero_invertido(num, nd) = num) entonces escribir(El numero , num, es capicua) sino escribir(El numero , num, no es capicua) fin_si fin
inicio numdig 0 repetir n n/10 numdig numdig +1 hasta_que(n = 0) devolver (numdig) fin
funcin numero_invertido(entero: n, m) var entero: dig, numinv mm-1 mientras (n <>0) hacer dig n mod 10 n n/10 muminv numinv + dig*10 (m) mm-1 fin_mientras devolver (numinv) fin_funcion
Problema 3
Se pide realizar un programa que calcule el centro de masas de un sistema de n masas puntuales que se van almacenar en arreglos unidimensionales. Para ello el programa pedir conjuntos de tres nmeros reales: la coordenada x del punto, la coordenada y y su masa m. El nmero n de masas ser establecido por el usuario. El algoritmo visualizar como resultado las coordenadas xg y yg del centro de masas del conjunto de puntos que se han introducido. Las frmulas que dan la posicin del centro de gravedad son las siguientes:
DATOS DE ENTRADA: numero de masas, coordx, coordy, masa DATOS INTERMEDIOS: sumamx, sumamy, sumam DATOS DE SALIDA: cmx, cmy Algoritmo Calculo_centro_masas
tipo arreglo [1..M] de real: cm var entero: n real: coordx. coordy, masa real: sumamx, sumamy, sumam real: cmx, cmy cm: vectorm, vectorx, vectory
Problema 3
Inicio repetir escribir(Ingrese numero de masas: ) leer(n) hasta_que((n>1) y (n<=M) //ingreso de coordenadas y masas para (i = 1 hasta i = n) hacer escribir(Ingrese masa , i) leer (masa) vectorm[i] masa escribir(Ingrese coordenada X , i) leer (coordx) vectorx[i] coordx escribir(Ingrese coordenada Y , i) leer (coordy) vectory[i] coordy //Calculo de las sumatorias para (i = 1 hasta i = n) hacer sumam sumam + vectorm[i] sumamx sumamx + vectorm[i]* vectorx[i] sumamy sumamy + vectorm[i]* vectory[i] fin_para cmx sumamx/sumam cmy sumamy/sumam escribir(La coordenada del Centro de masa X es: cmx) escribir(La coordenada del Centro de masa Y es: cmy) fin
Problema 4
Hacer un algoritmo programa que lea los nombres, edades y tallas de N atletas. N es declarado como constante. El algoritmo debe calcular : a) El promedio de las edades y de las tallas. b) Determinar cuantos atletas son menores de edad ( menores de 18 aos) y cuantos atletas son mayores de edad. c) Determinar los nombres de los atletas que son mas altos que el promedio. Muestre este reporte:
DATOS DE ENTRADA: nombre, edad y talla de cada atleta DATOS INTERMEDIOS: sedad, stalla DATOS DE SALIDA: promedio de edad. Promedio de tallas, numero de atletas menores de edad, nmero de atletas mayores de edad
Algortmica I: John Ledgard Trujillo Trejo Ingeniera de Sistemas e Informtica
Problema 4
Algoritmo Calculo_Tallas
tipo arreglo [1..N] de cadena: vnombres arreglo [1..N] de entero: vedades arreglo [1..N] de real: vtallas var entero: edad, numamee, numamae real: talla, proedad, protalla, sedad, stalla cadena: nombre vnombres: nombres vedades: edades vtallas: tallas inicio //Ingreso de datos en los vectores para (i = 1 hasta i = N) hacer leer (nombres[i]) leer (edades[i]) leer (tallas[i]) fin_para para (i = 1 hasta i = N) hacer sedad sedad + edades[i] stalla stalla + tallas[i] si (edades[i] >=18) entonces numamae numamae + 1 sino numamee numamee + 1 fin_si fin_para proedad sedad/N protalla stalla/N //Mostrar reporte escribir(Nombre Edades Tallas ) para (i = 1 hasta i = N) hacer escribir(nombres[i], edades[i], tallas[i] ) fin_para escribir(Promedios , , proedad, , protalla) escribir(Numero de atletas menores de edad: , numamee) escribir(Numero de atletas mayores de edad: , numamae) escribir(Los atletas mas altos al promedio son: ) para (i = 1 hasta i = N) hacer si (edades[i] > proedad) entonces escribir (nombres[i]) fin_si fin_para
Problema 5
Desarrolle un programa para jugar al popular juego el ahorcado, el cual consiste en un personaje, el cual est a punto de ser ejecutado. Para salvarlo es necesario adivinar una palabra, de la cual slo se conoce su longitud. El jugador debe ir eligiendo letra por letra, de modo de ir completando la palabra. Si el jugador se equivoca en una letra, es decir, la letra seleccionada no pertenece a la palabra a adivinar, el personaje pierde alguna parte de su cuerpo (un brazo, una pierna, el tronco, etc). Se puede jugar hasta que el personaje pierda la cabeza, el ltimo resto de su trgica vida. Lea cada letra de la palabra que debe adivinarse en elementos sucesivos de un vector palabra. El jugador debe adivinar las letras que pertenecen a la palabra y el programa debe terminar cuando todas las letras se hayan adivinado, es decir, ganar el juego, o bien se haya cometido un nmero establecido de desaciertos, es decir, gana el computador. El programa debe realizarse utilizando funciones Considere las siguientes partes del cuerpo del ahorcado: pierna derecha pierna izquierda brazo derecho brazo izquierdo tronco Cabeza
DATOS DE ENTRADA: palabra DATOS INTERMEDIOS: falla DATOS DE SALIDA: promedio de edad. Promedio de tallas, numero de atletas menores de edad, nmero de atletas mayores de edad
Problema 5
Algoritmo Juego_Ahorcado tipo arreglo [1..N] de caracter: vpalabra var entero: numletras, repitel, falla caracter: letra vpalabra: palabra inicio //Ingreso de la palabra numletras entero funcion Ingreso_palabra() //Adivinar la palabra ingresada escribir (Comienza el juego!) repitel 0 mientras ((numletras <> 0) o (falla>6) hacer escribir(Ingrese letra:) leer (letra) para (i = 1 hasta i = numletras) hacer si (letra = palabra[i]) entonces repitel repitel +1 fin_si fin_para si (repitel = 0) falla falla + 1 fin_si segn_sea (falla) 1: escribir (Pierde "pierna derecha) 2: escribir (Pierde "pierna izquierda) 3: escribir (Pierde "brazo derecho) 4: escribir (Pierde "brazo izquierdo) 5: escribir (Pierde "tronco) 6: escribir (Pierde cabeza) fin_segun_sea fin_mientras fin
Algortmica I: John Ledgard Trujillo Trejo Ingeniera de Sistemas e Informtica
entero funcion Ingreso_palabra() var entero numl inicio numl 0 escribir (Ingrese la palabra: repetir leer (palabra[i]) ii+1 hasta_que(palabra[i] = ) numl i 1 devolver (numl) fin
Problema 6
Un mtodo clsico para identificar los nmeros primos existentes en una secuencia de nmeros que va desde 2 a N es la llamada Criba de Eratstenes. El algoritmo usado para este propsito va marcando (eliminando) todos los mtliplos de 2, 3, 4, 5 y as sucesivamente hasta que se encuentre el primer nmero no marcado que es mayor que la raz cuadrada de N. Ejemplo : suponga una secuencia de nmeros desde 2 a 20. a) Se toma el nmero 2, dado que es el primer nmero no marcado. b) Marcar todos los mltiplos de 2 a partir de 22 . c) Se toma al 3, dado que es el siguiente nmero no marcado. d) Marcar todos los mltiplos de 3 a partir de 32. e) Se toma el nmero 5 como el siguiente nmero. Pero 52 es mayor que 20. Entonces el algoritmo aqu se detiene y todos los nmeros no marcados son los nmeros primos. Escriba un algoritmo que permita solucionar el problema, para una secuencia que va desde 2 hasta cualquier N.
Bibliografa Fundamentos de programacin, Algoritmos y Estructura de datos y Objetos, Joyanes, Luis, Editorial McGraw Hill, 2003.
1.11
Preguntas ?
1.12