PROBLEMAS DEL TEMA 7 SUBPROGRAMAS Y MODULARIDAD

Anuncio
Fundamentos de Informática
Problemas Tema 7
PROBLEMAS DEL TEMA 7
SUBPROGRAMAS Y MODULARIDAD
EJERCICIOS RESUELTOS
1. Escribe una función que calcule el factorial de un número, dado como parámetro. A
continuación realizar un programa que lea por teclado un número entero n y muestre por
pantalla los factoriales de los números de 1 a n. El programa debe usar la función factorial
previamente definida.
#include <stdio.h>
#include <stdlib.h>
float factorial(int n); /* prototipo de funcion */
int main(void) {
int i, n;
do {
system("cls");
printf("Introduce un nº positivo (maximo 25): ");
scanf("%d", &n);
} while (n < 1 || n > 25);
for(i = 1; i <= n; i++) {
printf("%d! = ", i);
printf("%.0f \n", factorial(i)); // llamada a la funcion
}
printf("Pulse una tecla para terminar");
getch();
return 0;
}
/* dado un numero n devuelve su factorial */
float factorial(int n) {
int i;
float fact = 1;
for(i = 1; i <= n; i++)
fact = fact * i;
return fact;
}
2. Realizar un programa que calcule el número e, utilizando el siguiente desarrollo en serie:
e = 1 + 1/1! + 1/2!+ …+ 1/10! + …
Departamento de Ingeniería Electrónica, de Sistemas Informáticos y Automática
1/5
Fundamentos de Informática
Problemas Tema 7
El programa debe usar la función factorial definida en el ejercicio anterior.
#include <stdio.h>
#include <stdlib.h>
float factorial(int n); /* prototipo de funcion */
int main(void) {
int i, j, n;
float e;
do {
system("cls");
printf("Programa que calcula el valor del nº e segun la formula: \n\n");
printf("e = 1 + 1/1! + 1/2! + ... + 1/10! + ... \n\n");
printf("Introduce el nº de terminos a usar para calcular el nº e (max 10):");
scanf("%i", &n);
} while (n < 1 || n > 10);
e = 1;
printf("\nFormula: e = 1");
for(i = 1; i <= n - 1; i++) {
printf(" + 1/%d!", i);
e = e + 1 / factorial(i);
}
printf("\n\nEl numero e vale %f \n\n", e);
printf("Pulsa una tecla para terminar");
getch();
return 0;
}
/* dado un numero n devuelve su factorial */
float factorial(int n) {
int i;
float fact = 1;
for(i = 1; i <= n; i++)
fact = fact * i;
return fact;
}
Departamento de Ingeniería Electrónica, de Sistemas Informáticos y Automática
2/5
Fundamentos de Informática
Problemas Tema 7
3. Dos números son amigos, si cada uno de ellos es igual a la suma de los divisores del otro.
Por ejemplo, 220 y 284 son amigos, ya que:
Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220
Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Hacer una función que determine si dos números dados como parámetros son amigos o no.
A continuación realizar un programa que muestre todas las parejas de números amigos
menores o iguales que n, siendo n un número introducido por teclado. El programa debe usar la
función amigo previamente definida.
#include <stdio.h>
#include <stdlib.h>
int amigo(int x, int y); /* prototipo de funcion */
int main(void) {
int n, n1, n2;
system("cls");
printf("Introduce un numero: "); scanf("%i", &n);
for(n1 = 1; n1 <= n; n1++) {
for(n2 = 1; n2 <= n; n2++) {
if (amigo(n1, n2))
printf("%i y %i son numeros amigos \n", n1, n2);
}
}
system("pause");
return 0;
}
/* dados dos nº x y devuelve un 1 si son amigos y 0 si no lo son */
int amigo(int x, int y) {
int sumax, sumay, n;
sumax = 1; sumay = 1;
for(n = 2; n < x; n++)
if (x % n == 0) /* es divisible */
sumax = sumax + n;
for(n = 2; n < y; n++)
if (y % n == 0) /* es divisible */
sumay = sumay + n;
return(sumax == y && sumay == x);
}
Departamento de Ingeniería Electrónica, de Sistemas Informáticos y Automática
3/5
Fundamentos de Informática
Problemas Tema 7
EJERCICIOS PROPUESTOS:
1. Realizar una función llamada ordena3 que reciba tres parámetros enteros a, b, c, y los
intercambie, en caso necesario, para que se cumpla a<=b<=c.
2. Basándose en la función anterior, escribir un programa que pida los 3 lados de un triángulo
y a continuación muestre los siguientes datos:
•
Cuanto vale la hipotenusa,
•
cuanto el cateto mayor y cuanto el cateto menor, y
•
si el triángulo es equilátero, isósceles o escaleno.
3. Escribe una función que resuelva una ecuación de 2º grado según la fórmula
x=
− b ± b 2 − 4ac
2a
según el siguiente prototipo:
void ecuacion(int a; int b; int c; float *r1; float *r2; int *hay);
siendo a, b, c los coeficientes de la ecuación, r1 y r2 las dos soluciones de la ecuación.
La función devolverá en hay un 0 para indicar que el sistema no tiene solución y un 1 para
indicar que si tiene solución.
4. Realizar un programa que pida por teclado los 3 coeficientes de una ecuación de 2º grado y
a continuación muestre en pantalla la solución de dicha ecuación. Si la ecuación no tuviera
solución deberá mostrar un mensaje en pantalla advirtiendo de tal circunstancia.
El programa deberá preguntarnos si deseamos hallar la solución de otra ecuación, en caso
afirmativo deberá volver a preguntarnos los coeficientes de otra ecuación y así
sucesivamente hasta que alguna vez digamos que no; en ese caso el programa terminará.
Para realizar el programa debemos basarnos en la función ecuacion implementada en el
ejercicio anterior.
Departamento de Ingeniería Electrónica, de Sistemas Informáticos y Automática
4/5
Fundamentos de Informática
Problemas Tema 7
5. Realizar un programa que muestre por pantalla el siguiente menú:
1.- Calcular el factorial de un número.
2.- Calcular el nº e:
3.- Hallar si dos números son amigos
4.- Resolver ecuación de 2º grado
5.- Salir del programa
El usuario podrá elegir cada una de las opciones del menú. Si la opción pulsada no es
ninguna de las anteriores el programa debe mostrar un mensaje informando de tal error.
Para cada opción el programa mostrará en pantalla la solución y esperará a que se pulse una
tecla. Una vez pulsada volverá a mostrar el menú anterior.
6. Encontrar dónde están los errores en el siguiente programa:
#include <stdio.h>
#include <stdlib.h>
void ordena(int *a, int *b) {
int c;
c = a;
if (a > b)
*a = *b;
*b = c;
}
int main(void)
{
int a = 5, b = 2, c;
c = invierte(a, b);
printf("El valor mas pequeño es %i", c);
printf("El valor mas grande es %i", *b);
system("pause");
return 0;
}
Departamento de Ingeniería Electrónica, de Sistemas Informáticos y Automática
5/5
Descargar