PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad

Anuncio
I.T. Industrial
Fundamentos de Informática
Ejercicios de Teoría
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 realiza
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( )
{ 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 función */
}
system("pause");
return 0;
}
float factorial(int n)
/* dado un numero n devuelve su factorial
*/
{ int i;
float fact=1;
for(i=1; i<=n; i++)
fact=fact*i;
return fact;
}
11/20
I.T. Industrial
Fundamentos de Informática
Ejercicios de Teoría
2. Realizar un programa que calcule el número e, utilizando el siguiente desarrollo en serie:
e = 1 + 1/1! + 1/2!+ …+ 1/10! + …
El programa debe usar la función factorial definida en el ejercicio anterior.
#include <stdio.h>
#include <stdlib.h>
float factorial(int n);
int main()
{ int i,j,n;
float e =1;
do
{ system("cls");
printf("Cálculo 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 (max 10):");
scanf("%d",&n);
} while (n<1 || n>10);
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);
system("pause");
return 0;
}
float factorial(int n)
{ int i;
float fact=1;
for(i=1; i<=n; i++)
fact=fact*i;
return(fact);
}
12/20
I.T. Industrial
Fundamentos de Informática
Ejercicios de Teoría
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>
bool amigo(int x, int y);
/* prototipo de funcion
*/
int main()
{ int n,n1,n2;
system("cls");
printf("Introduce un numero: ");
scanf("%d",&n);
for(n1=1; n1<=n; n1++)
for(n2=1; n2<=n; n2++)
if (amigo(n1,n2))
printf("%d y %d 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 */
bool amigo(int x, int y)
{ int sumax, sumay, n;
sumax=1; sumay=1;
for(n=2; n<x; n++)
if (x%n==0)
sumax=sumax+n;
for(n=2; n<y; n++)
if (y%n==0)
sumay=sumay+n;
return (sumax==y && sumay==x);
}
13/20
I.T. Industrial
Fundamentos de Informática
Ejercicios de Teoría
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 *OK);
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 OK 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.
14/20
I.T. Industrial
Fundamentos de Informática
Ejercicios de Teoría
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 %d", c);
printf("El valor mas grande es %d", *b);
system("pause");
return 0;
}
15/20
Descargar