Ejercicios Tema 6. Funciones
Transcripción
Ejercicios Tema 6. Funciones
Tema 6. Funciones Ejercicios Tema 6. Funciones 1. Programa que calcule el cuadrado de todos los números comprendidos entre dos dados. Usar una función a la que se le pasa como parámetro un valor y retorna su cuadrado. 2. Escribir un programa que lea dos números enteros A y B, y obtenga los valores A/B, A%B, utilizando funciones. Escribir una función que dados A y B retorne la división de ambos y otra que retorne el resto. Repetir el ejercicio utilizando una única función que calcule tanto la división como el resto. 3. Escribir una función con dos parámetros enteros, que devuelva true (1) si el segundo es divisor del primero y false (0) en caso contrario. El programa principal solicitará al usuario 20 pares de valores y mostrará un mensaje indicando quien divide a quien. 4. Simular el funcionamiento de una calculadora de enteros. Para ello se presenta un menú por pantalla que muestre las opciones: sumar, restar, multiplicar, dividir, factorial, potencia y salir. Para cada opción se debe realizar una función a la que se le pasan los datos como parámetro, los valida y retorna el resultado a main, quien se encargará de mostrar el resultado. 5. Modificar el ejercicio anterior para que las operaciones se realicen considerando siempre un operando común que se mostrará en el menú. Este operando tendrá inicialmente el valor 0. Por ejemplo, si inicialmente se desea sumar, se solicitará un único valor y se sumará al valor general, que quedará modificado. Las siguientes operaciones se realizarán sobre el valor modificado. Cada operación modificará este valor. Hacer dos versiones, considerando este valor como global y definiéndolo como local en main y pasándolo como parámetro. 6. Escribir un programa que lea tres números enteros y emita un mensaje que indique si están o no en orden numérico. Usar una función que dados dos valores retorne true si el primero es mayor que el segundo y false en caso contrario. 7. Escribir un programa que calcule el máximo de 3 números enteros solicitados al usuario. Utilizar una función que dados dos valores enteros retorne el máximo de ambos. 8. Solicitar al usuario un rango [a..b] de valores enteros. Para cada valor en ese rango, calcular el factorial. Usar una función que dado un valor entero retorna su factorial. 9. Escribir un programa que solicite caracteres al usuario hasta que teclee un carácter no alfabético o un carácter alfabético en mayúsculas. El programa debe convertir cada carácter de minúscula a mayúscula. El valor en ASCII de la letra ‘A’ es 65 y de la ‘a’ es 97. Utilizar una función que dado un carácter en minúscula retorne el carácter correspondiente en mayúscula. 10. Escribir una función que permita intercambiar los contenidos de dos variables. 11. Escribir un programa que solicite un rango de valores [a..b] enteros por teclado y para cada uno de los valores en el intervalo diga si es primo o no. Utilizar una función que devuelva cierto si un número entero es primo y falso en caso contrario. 12. Suponiendo ya definida la función anterior, escribir un algoritmo que lea dos números enteros por teclado y los sume sólo si son primos. En caso contrario, debe decir cuál (o cuáles) de ellos no son primos. En el caso de que los sume, debe decir, además, si el resultado es un número primo. 13. Escribir una función que calcule xn, donde x es de tipo real y n es de tipo entero (no utilizar la función de pow). 14. Escribir una función que calcule xn, dados ambos como parámetro. Usar la función para mostrar el resultado de la siguiente expresión: (x4+ym)/2. Siendo x, y, y m tres números enteros introducidos por teclado. Realizar el mismo ejercicio sin utilizar la función y comparar ambos. Inma García 1/5 Tema 6. Funciones 15. Escribir un programa que calcule el más grande, el más pequeño y la media de N números enteros. El programa principal mostrará los resultados por pantalla. Escribir las siguientes funciones: • Función leer: lee los N valores enteros. Los números se solicitan al usuario. • Función mayor_menor: calcula y devuelve al programa principal, el valor mayor y menor de los N números. • Función media: calcula la media de los N valores. 16. Dados tres números enteros correspondientes a la hora, minutos y segundos actuales, calcular la hora (en el mismo formato) que será un segundo más tarde. El algoritmo debe leer la hora en formato HH, MM, SS, después transformarla a segundos, sumarle uno a dichos segundos y después volver a transformarla en HH, MM, SS. Para ello, se deben diseñar dos funciones: • Hora_a_Segundos: dados tres parámetros de entrada correspondientes a hora, minutos y segundos, devuelva la conversión de dicha hora a segundos. • Segundos_a_Horas: dado un parámetro de entrada correspondiente a una hora en segundos, la convierta en horas, minutos y segundos, y la devuelva. 17. Escribir un programa que calcule un número combinatorio. El programa solicita los valores enteros n y m y muestra el resultado. Utilizar una función que admita como parámetros m y n y devuelva el número combinatorio. Esta función utiliza a su vez una función para calcular el factorial. m m! = n n! (m − n)! 18. Se dice que un número N1 es interdependiente de otro N2 cuando la suma de las cifras de N1 es divisor de N2 y el producto de las cifras de N1 en múltiplo de N2. Dado un número N, calcular todos los números interdependientes de 1 menores a 1000. Utilizar una función que dado un número entero calcule la suma de sus cifras y otra que dado un número entero calcule el producto de sus cifras. 19. Escribir una función que acepte como parámetro un número entero positivo y cuente el número de dígitos distintos de que consta. Utilizar un vector de 10 enteros para contar el número de dígitos distintos. El programa principal lee el valor y muestra el resultado. 20. Escribir un programa que solicite al usuario dos números enteros y compruebe si son análogos. Dos números son análogos, si sus reducidos son idénticos. Un número se llama reducido de otro, cuando no contiene ningún dígito repetido a partir de la primera aparición por la izquierda. Escribir una función a la que se le pase como parámetro un valor entero y retorne su reducido. Valor 9331332 9993312 337624336 37336724 Reducido 9312 9312 37624 37624 ¿Análogo? Si Si 21. ¿Cuál es la salida del siguiente programa? void modificar (int a) { a=a *3; printf ("Valor desde la función %d\n", a); } void main () { int a=2; Inma García 2/5 Tema 6. Funciones printf ("Valor antes de llamar a la función %d\n", a); modificar (a); printf ("Valor después de llamar a la función %d", a); } 22. Escribir un algoritmo que lea 10 números reales por teclado y, para cada uno de ellos, diga si poseen o no parte fraccionaria. Escribir y utilizar una función denominada Es_fraccionario que devuelva cierto si un número real posee parte fraccionaria y falso en caso contrario. 23. Calcular el número de días entre dos fechas. Las fechas se introducen como dd mm aaaa. Utilizar una función que dadas dos fechas indique si la primera es menor que la segunda. Utilizar otra función que cuente el número de días entre las dos fechas. 24. Escribir un programa que lea un dígito D y genere una tabla de todos los números enteros del 1 al 100, tales que el valor, su cuadrado y su cubo, contengan todos el dígito D. Utilizar una función a la que se le pase como parámetro un número entero positivo y un dígito y determine si la representación del número entero contiene o no el dígito. 25. Escribir un programa que cuando el usuario escriba a la entrada una serie de valores mayores que 1, produzca a la salida el número primo más cercano de cada uno de ellos. En caso de que haya dos números primos equidistantes del número entero dado a la entrada, se desea conocer el valor de ambos. Utilizar una función que dado un valor, calcule si es primo. 26. Escribir un programa que cambie el formato de una fecha. El programa principal solicita una fecha en formato día, mes y año y muestra el resultado de la transformación. Utilizar una función que devuelva un número entero a partir de la fecha (2 de abril de 1997 sería 20497). 27. Una fracción puede reducirse a su forma más simple dividiendo el numerador y el denominador por los factores primos comunes a ambos (o directamente, por el MCD). Se trata de escribir un programa que lea sucesivas parejas de valores enteros no negativos, que serán el numerador y el denominador de la fracción respectivamente. Cada pareja de valores aparecerá en una línea. El programa reducirá la fracción a su expresión más simple y la imprimirá. La última línea de los datos, contendrá un valor negativo que marcará el final. Utilizar una función que dados dos números enteros (positivos) calcule su máximo común divisor. Datos 4 2 2 3 12423 12524 0 25 -1 Resultado 4/2 = 2/1 2/3 = 2/3 12423/12524 = 123 / 124 0/25=0/1 28. ¿Cuál es la salida de los siguientes programas? A int func (int x) { int y; y=x*x; return y; } void main () { int a, i; for (i=1;i<=5;i=i+1) { a= func (i); printf ("%d ", a); } } Inma García B int func (int x) { int i; i=pow (x,2); return (i); } void main () { int a, i; for (i=1;i<=5;i=i+1) { a= i*i+func (i); printf ("%d ", a); } } C int a=3; int func (int x) { a=a+x; return (a); } void main () { int cont; for (cont=1;cont<=5;cont=cont+1) { a= func (cont); printf ("%d ", a); } 3/5 Tema 6. Funciones } D int a= 100, b=200; int func1 (int x) { if (x < 100) return (a+x); else return b; } int func2 (int x) { int prod=1; prod=prod*x; return (prod); } void main () { int cont,c; for (cont=1;cont<=5;cont++) { c=func2 (cont); printf ("%d ", func1 (c)); } } E int a= 100, b=200; int func1 (int x) { int c; c=func2 (x); if (c < 100) return (a+c); else return b; } int func2 (int x) { int prod=1; prod=prod*x; return (prod); } void main () { int cont; for (cont=1;cont<=5;cont++) printf ("%d ", func1(cont)); } F int a= 100, b=200; char func2 (int x) { return x; } float func1 (int x) { char c; c=func2 (x); if (c < 100) return c*0.01; else return c*0.1; } void main () { int cont; for (cont=1;cont<=5;cont++) printf ("%f ", func1 (cont)); } G int a= 0, b=1; int func1 (int a) { b= func2 (a+1) +1; eturn b; } int func2 (int a) { return (b+a); } void main () { int cont; for (cont=1;cont<=5;cont++) { b= b+ func1 (a+1) + 1; printf ("%d ",b); } } Inma García 4/5 Tema 6. Funciones H int a= 0, b=1; int func1 (int a) { int b; b= func2 (a+1) +1; return b; } int func2 (int a) { return (b+a); } void main () { int cont; for (cont=1;cont<=5;cont++) { b= b+ func1 (a+1) + 1; printf ("%d ",b); } } J void eleva (int a) { a = a * a; } void main() { int a; for (a = 0; a < 10; a = a + 2) { eleva(a); printf(“ %d”,a); } } I int a; int modificar (int a) { a *= 3; } void main () { a = 2; modificar(a); printf(“%d”, a); } K #define N 5 int b=2, a=3; int funcion (int b) { int c; c = b + a; b++; return c; } void main () { int i; for (i = 0; i < N; i++) b = funcion(i); printf(“%d”,b); } L int a = 0, b = 3; int func1 (int a) { b = b + func2(a) + 1; return b; } int func2 (int a) { return (b + a + 1); } void main() { int cont; for (cont = 1; cont <= 5; cont++) { b = func1(cont + a + b) + 1; printf(“%d\n”, b); } } Inma García 5/5