RELACION 2 SUBALGORITMOS DPTO. LENGUAJES Y CIENCIAS DE LA COMPUTACIÓN ESCCUELA TÉCNICA SUPERIOR DE INGENIEROS EN TELECOMUNICACIONES UNIVERSIDAD DE MÁLAGA 1- Considera el siguiente procedimiento: Algoritmo escr(E C ch; E Z long) Inicio MIENTRAS long > 0 HACER Escribir(ch) long = long - 1 FINMIENTRAS Fin a) Si ch tiene el valor ‘X’ y numero el valor 5, ¿cuál sería el efecto de ejecutar cada una de las siguientes llamadas al procedimiento: escr(ch,4*numero-12) escr(ch,6) escr(‘/’,numero) escr(‘.’,6) escr(5,numero) escr(‘p’,-10) b) Escribe llamadas al procedimiento escr para que cuando se ejecuten produzcan las siguientes salidas: 35 guiones sucesivos 6 veces tantos espacios en blanco como el valor de numero el valor actual de ch 14 veces 2.- Ejecuta a mano el siguiente algoritmo, mostrando lo que saldría por la pantalla. Algoritmo uno Variables Z a,b,c Algoritmo dos(E Z x,y; ES Z z) Inicio z=x+y+z escribir(x,y,z) saltoLinea Fin Inicio a=5 b=8 c=3 dos(a,b,c) dos(7,a+b+c,a) dos(a*b,a DIV b,c) Fin 1/7 . 3.- Considera el siguiente programa: Algoritmo Ejercicio1 Variables Zi Algoritmo Proc1 Variables Zi Algoritmo Proc2 Inicio i = i+2 Fin Inicio i=0 Proc2 escribir(i) Fin Algoritmo Proc3 Algoritmo Proc4 Variables Zi Inicio i=4 Fin Inicio i = i+3 escribir(i) Proc4 escribir(i) Fin Inicio i = 12 Proc1 escribir(i) Proc3 escribir(i) Fin a) Determina el ámbito de cada una de las tres variables "i" declaradas en el programa. b) Muestra lo que ocurre cuando se ejecuta el programa. 3/7 . 4.- ¿ Qué salida produce la ejecución del siguiente algoritmo? Algoritmo Anidado Variables N a,b,c,x,y Algoritmo Primero Inicio a = 3*a c = c+4 escribir("Primero",a,b,c) saltoLinea Fin Algoritmo Segundo Variables Nb Inicio b=8 c = a+c+b DIV 3 escribir("Segundo",a,b,c) saltoLinea Fin Algoritmo Tercero(ES N x;E N y) Inicio x = x+4 y = y+1 escribir("Tercero",a,b,c,x,y) saltoLinea Fin Inicio a=3 b=2 c=1 x = 11 y = 22 Primero Segundo Tercero(a,b) escribir("Anidado",a,b,c,x,y) Fin 5.- Dadas las siguientes declaraciones en un determinado algoritmo: N a,b,c B si Algoritmo B uno(E N x,y) ...... Algoritmo dos(ES N x ;E N y) ...... 4/7 . Algoritmo N tres(E N x) : ¿ Cuáles de las siguientes llamadas a subalgoritmos en su cuerpo son válidas? a) SI uno(a,b) ENTONCES ... d) si = dos(c,5) g) SI tres(a) ENTONCES ... b) dos(a,b+3) e) dos(a,tres(a)) h) b = tres(dos(a,5)) c) si = uno(c,5) f) dos(tres(b),c) i) dos(4,c) 6.- Dado el siguiente algoritmo anidado, ¿qué identificadores serían accesibles desde cada uno de los 3 cuerpos existentes? Algoritmo ambitos Variables Z i,j Algoritmo uno Variables Ck Constantes I = 16 Algoritmo dos Variables Rj Inicio ..... (* cuerpo del dos *) Fin Inicio ....... (* cuerpo del uno *) Fin Inicio ....... (* cuerpo del ambitos *) Fin 7.- Dado el siguiente algoritmo anidado, ¿a qué algoritmos se puede llamar desde: A,B,C y D? Algoritmo A ....... Algoritmo B ....... Algoritmo C ...... Inicio ...... Fin Algoritmo D ...... Inicio ...... 5/7 . Fin Inicio ...... Fin Inicio ...... Fin 8.- Escribe una función que tome 3 parámetros: dos de tipo natural y uno de tipo carácter. La función deberá sumar, restar, multiplicar o dividir los valores de los dos primeros parámetros dependiendo del código indicado en el tercer parámetro, y devolver el resultado. 9.- Diseña un algoritmo que lea desde el dispositivo de entrada estándar una serie de caracteres que representan un número romano, lo convierta en arábigo, y lo escriba en la pantalla. Por ejemplo, si se lee desde el teclado XIV debe salir en la pantalla 14. 10.- Desarrollar un subalgoritmo que devuelva si su argumento es o no primo. 11.- Desarrollar un subalgoritmo que devuelva el n-símo número primo, recibiendo n como parámetro. 12.- Desarrollar un subalgoritmo que escriba los números primos hasta el número que se le pasa como parámetro. 13.- Euclides encontró que si a>b, entonces: mcd(a,b)=mcd(a-b,b) y que mcd(0,b)=b. Desarrollar un algoritmo que devuelva el máximo común divisor de sus dos argumentos: (a) mediante restas (b) mediante división modular 14.- Construir un subprograma que llame a los anteriores para calcular el mcd pero mediante la técnica práctica de: ”comunes con el menor exponente” de sus descomposiciones factoriales. Por ejemplo: 24=23x3 y 9=32, de modo que mcd(24,9)=3. 15.- Desarrollar un subalgoritmo que simplifique la fracción que se le pasa como parámetro en forma (numerador,denominador). Usar el subalgoritmo del ejercicio anterior. 16.- Escribir un subprograma que calcule el mínimo común múltiplo de sus dos argumentos. Buscar alguna propiedad relativa al mcd y el mcm Utilizar la técnica de los "comunes y no comunes con el mayor exponente" en la solución del ejercicio 14. 17.- Dos números a y b se dice que son amigos si la suma de los divisores de a (salvo él mismo) coincide con b y viceversa. Diseña un algoritmo que tenga como entrada dos números naturales n y m y que muestre en la pantalla todas las parejas de números amigos que existan en el intervalo determinado por n y m. 18.-Escribir un algoritmo que devuelva de un número n el total de dígitos necesarios para representarlo en base b. Ambos parámetros (n,b) se pasan como argumentos. Por ejemplo: NúmeroDígitos(25064,10)->5. 6/7 . 19.-Escriba un algoritmo que tome como entrada desde teclado dos números naturales "N" e "i", e imprima en pantalla el dígito que ocupa la posición i-ésima del número N. Si i es mayor que el número de dígitos de N, se escribirá en pantalla -1. Por ejemplo, para N = 25064 e i = 2, el resultado es el dígito 6, y para i = 7, el resultado es -1. 20.- Hacer un algoritmo que devuelva el i-ésimo dígito en base b de un número n. Los tres datos (n,b,i) se pasan como parámetros. Los dígitos se cuenta de menor a mayor peso, contando desde 1. Por ejemplo Dígito(25064,10,2)->6 ó Dígito(25064,10,10)->0. 21.- Escribe un algoritmo que acepte como entrada desde teclado un número entero positivo y dé como salida el resultado de sumar dos a dos los dígitos que aparecen en posiciones simétricas respecto al dígito central dentro del número dado como entrada. Por ejemplo : para el número: 2354869 la salida es: 2+9 = 11, 3 + 6 = 9, 5 + 8 = 13, 4 para el número : 6582 la salida es : 6 + 2 = 8, 5 + 8 = 13 22.- Escribe un algoritmo que lea 2 números enteros positivos y un carácter. En función de este carácter leído efectuará las siguientes operaciones: 'p' : calcula los números perfectos en el rango dado por los 2 números. 'm': calcula el mínimo común múltiplo de ambos números. 'd' : calcula el máximo común divisor de los mismos. '+', '*', '-', '/' : realiza la operación correspondiente con los números. 23.- Hacer todos los algoritmos de la relación anterior, utilizando procedimientos. 7/7