Está en la página 1de 5

//calcula el numero combinatorio //calcula e elevado a x

//n sobre m #include<stdio.h>


#include<stdio.h> float ex(float x, float precision, int maxiter)
int main() {
{ int n=0;
//fn factorial de n float e_x=0,t_n=1,t_n_1;
//fm factorial de m //mientras no se alcance la precision
//fnm factorial de n−m //y mientras no se superen el maximo
//c numero combinatorio //numero de iteraciones
int n,m,fn,fm,fnm,i,c; while(t_n>precision&&n<maxiter)
printf("\nIntroduce n y m:"); {
scanf("%d%d",&n,&m); //suma del termino actual
//calculo del factorial de n e_x=e_x+t_n;
fn=1; //actualizacion de n
for (i=2;i<=n;i++) n++;
fn=fn*i; //actualizacion del termino anterior
//calculo del factorial de m t_n_1=t_n;
fm=1; //calculo del siguiente en base al anterior
for (i=2;i<=m;i++) t_n=t_n_1*x/n;
fm=fm*i; }
//calculo del factorial de n−m return e_x;
fnm=1; }
for (i=2;i<=n−m;i++)
fnm=fnm*i; int main()
//calculo del numero combinatorio {
c=fn/fm/fnm; float x,p;
printf("\n(%d,%d)=%d",n,m,c); int iteraciones;
} printf("\nIntroduce x, precision, iteraciones:");
scanf("%f%f%d",&x,&p,&iteraciones);
//calculal el numero combinatorio printf("\ne elevado a %f, con precision %f e iteraciones %d=%f",
//n sobre m con funciones x,p,iteraciones,ex(x,p,iteraciones));
#include<stdio.h> }
//devuelve el factorial de n
int factorial(int n)
{
int f=1,i;
for (i=2;i<=n;i++)
f=f*i;
return f;
}
//devuelve el numero combinatorio n sobre m
int combina(int n, int m)
{
return factorial(n)/factorial(m)/factorial(n−m);
}
int main()
{
int n,m;
printf("\nIntroduce n y m:");
scanf("%d%d",&n,&m);
printf("\n%d sobre %d=%d",n,m,combina(n,m));
}
//n primeros capicuas //esto es un ejemplo de paso
#include<stdio.h> //por referencia, con printf dentro de
//devuelve un numero con las cifras //las funciones, para seguir el programa
//en orden inverso //y ver como cambian las variables
int reves(int n) #include<stdio.h>
{ //esta funcion esta mal. Como se pasan
//inicialmente el numero del reves es cero //los parametros por valor, se intercambian
int r=0; //las copias, no las variables de la llamada
//mientras queden cifras en el original void intercambia_mal(int a, int b)
while(n!=0) {
{ int tmp;
//muevo (multiplico por 10) las cifras printf("\nDentro de intercambia_mal:");
//que hay en el numero del reves a la izquierda printf("\nValores antes de intercambiar %d %d",a,b);
//y añado la nueva cifra tmp=a;
r=r*10+n%10; a=b;
//siguiente cifra b=tmp;
n=n/10; printf("\nDentro de intercambia_mal:");
} printf("\nValores despues de intercambiar %d %d",a,b);
return r; printf("\nSalgo de la funcion");
} }
//devuelve 1 si es capicua
//cero en caso contrario //esta esta bien, se usa paso por referencia
int capicua(int n) //se intercambian los valores de las variables
{ //de la llamada
int es_capicua; void intercambia_bien(int *pa, int *pb)
//si el numero es igual que el mismo al reves {
if (n==reves(n)) int tmp;
//es capicua = 1 printf("\nDentro de intercambia_bien:");
es_capicua=1; printf("\nValores antes de intercambiar %d %d",*pa,*pb);
else tmp=*pa;
es_capicua=0; *pa=*pb;
return es_capicua; *pb=tmp;
} printf("\nDentro de intercambia_bien:");
printf("\nValores despues de intercambiar %d %d",*pa,*pb);
int main() printf("\nSalgo de la funcion");
{ }
int n,conta=0,num=0;
printf("\nCuantos:"); int main()
scanf("%d",&n); {
//mientras no se contabilicen n capicuas int x=1,y=2;
while(conta<n) printf("\nAntes de llamar a intercambia_mal");
{ printf("\nValores %d %d",x,y);
//Si el numero actual es capicua //llamada a intercambia_mal
if(capicua(num)) intercambia_mal(x,y);
{ printf("\nDespues de llamar a intercambia_mal");
//lo muestro printf("\nValores %d %d",x,y);
printf("\n%d",num); //llamada a intercambia_bien, notar los &
//lo cuento //&x es un puntero a x, &y es un puntero a y
conta++; intercambia_bien(&x,&y);
} printf("\nDespues de llamar a intercambia_bien");
//siguiente numero printf("\nValores %d %d",x,y);
num++; }
}

}
//salida del programa
// Antes de llamar a intercambia_mal int main()
// Valores 1 2 {
// Dentro de intercambia_mal: float x,p;
// Valores antes de intercambiar 1 2 int iteraciones,condicion_salida;
// Dentro de intercambia_mal: printf("\nIntroduce x, precision, iteraciones:");
// Valores despues de intercambiar 2 1 scanf("%f%f%d",&x,&p,&iteraciones);
// Salgo de la funcion printf("\ne elevado a %f, con precision %f e iteraciones %d=%f",
// Despues de llamar a intercambia_mal x,p,iteraciones,ex(x,p,iteraciones,&condicion_salida
// Valores 1 2 ));
// Dentro de intercambia_bien: if (condicion_salida)
// Valores antes de intercambiar 1 2 printf("\nHa parado por precision");
// Dentro de intercambia_bien: else
// Valores despues de intercambiar 2 1 printf("\nHa parado por iteraciones");
// Salgo de la funcion }
// Despues de llamar a intercambia_bien
// Valores 2 1 //ejemplos de ejecucion
//para por iteraciones
// Introduce x, precision, iteraciones:2 .000001 4
// e elevado a 2.000000, con precision 0.000001 e iteracion
es 4=6.333333
//e elevado a x con parametro adicional para informar // Ha parado por iteraciones
//sobre la condicion de terminacion //para por precision
#include<stdio.h> // Introduce x, precision, iteraciones:2 .001 100
float ex(float x, float precision, int maxiter, int *estado // e elevado a 2.000000, con precision 0.001000 e iteracion
) es 100=7.388713
{ // Ha parado por precision
int n=0;
float e_x=0,t_n=1,t_n_1;
//mientras no se alcance la precision #include<stdio.h>
//y mientras no se superen el maximo //separa un float en parte entera y decimal
//numero de iteraciones //ejemplo en el que se producen dos resultados
while(t_n>precision&&n<maxiter) //no pueden devolverse con un unico return
{ //se pueden devolver en dos parametros por referencia
//suma del termino actual void separa(float n, float *pentera,float *pdecimal)
e_x=e_x+t_n; {
//actualizacion de n //asigno n como entero a *pentera, se pierden los
n++; //decimales
//actualizacion del termino anterior *pentera=(int)n;
t_n_1=t_n; //la parte decimal es el original
//calculo del siguiente en base al anterior //menos la parte entera
t_n=t_n_1*x/n; *pdecimal=n−*pentera;
} }
//si t_n es <= precision, ha parado
//por esa condicion int main()
if (t_n<=precision) {
*estado=1; float a=7.3,b,c;
//en caso contrario por alcanzar separa(a,&b,&c);
//el maximo numero de iteraciones printf("%f %f %f",a,b,c);
//considero que no se van a dar las }
//dos condiciones simultaneamente //salida del programa
else //7.300000 7.000000 0.300000
*estado=0;
return e_x;
}
//escribir una funcion que calcule //devuelve la media de los n
//la media de los n primeros numeros //primeros numeros tales que
//mayores o iguales que 1 //...
//tales que la suma de la primera float media_rara(int n,int c)
//de sus cifras con la ultima {
//es divisible entre una cifra recibida int conta=0,num=1;
//como parametro y que además no float suma=0;
//contienen a ese digito while(conta<n)
#include<stdio.h> {
if(suma_primera_ultima(num)%c==0&&
//devuelve la primera cifra !contienex(num,c))
int primera(int n) {
{ conta++;
return n%10; suma=suma+num;
} }
num++;
//devuelve la ultima cifra }
int ultima(int n) return suma/n;
{ }
int cifra=0; //devuelve una cifra != 0
while(n!=0) int pide_cifra_no_cero(void)
{ {
cifra=n%10; int cifra;
n=n/10; do{
} printf("\nIntroduce una cifra:");
return cifra; scanf("%d",&cifra);
} }while(cifra<=0||cifra>9);
return cifra;
//devuelva la suma de la }
//primera y la ultima //devuelve una cifra > 0
int suma_primera_ultima(int n) int pide_mayor_cero(void)
{ {
return primera(n)+ultima(n); int num;
} do{
printf("\nIntroduce un numero mayor que cero:");
//devuelve 1 si n contiene a cifra scanf("%d",&num);
//0 en caso contrario }while(num<=0);
int contienex(int n,int cifra) return num;
{ }
while(n!=0) int main()
{ {
if (n%10==cifra) int cantidad,cifra;
return 1; float m;
n=n/10; cantidad=pide_mayor_cero();
} cifra=pide_cifra_no_cero();
return 0; m=media_rara(cantidad,cifra);
} printf("\n%f",m);
}
//mostrar los n primeros numeros
//tales que la suma de la mayor //devuelve una cifra distinta
//de sus cifras con la menor de //de cero
//sus cifras sea divisible por int pide_cifra_no_cero(void)
//un digito mayor que cero {
//introducido por el teclado int cifra;
#include<stdio.h> do{
printf("\nIntroduce una cifra:");
//devuelve la mayor de las scanf("%d",&cifra);
//cifras de n }while(cifra<=0||cifra>9);
int mayor(int n) return cifra;
{ }
int cifra=n%10,mayor=cifra;
n=n/10; //devuelve un numero mayor
while(n!=0) //que cero
{ int pide_mayor_cero(void)
cifra=n%10; {
if (cifra>mayor) int num;
mayor=cifra; do{
n=n/10; printf("\nIntroduce un numero mayor que cero:");
} scanf("%d",&num);
return mayor; }while(num<=0);
} return num;
}
//devuelve la menor de las
//cifras de n //en el main el esquema
int menor(int n) //comentado en clase
{ int main()
int cifra=n%10,menor=cifra; {
n=n/10; int num=0,n,conta=0,c;
while(n!=0) n=pide_mayor_cero();
{ c=pide_cifra_no_cero();
cifra=n%10; //mientras no encuentre n
if (cifra<menor) //numeros que cumplan la
menor=cifra; //condicion
n=n/10; while(conta<n)
} {
return menor; //si se cumple la condicion
} if(suma_mayor_menor(num)%c==0)
{
//devuelve la suma de la //lo cuento
//mayor y de la menor de las conta++;
//cifras //lo muestro
int suma_mayor_menor(int n) printf("\n%d",num);
{ }
return mayor(n)+menor(n); //siguiente numero
} num++;
}
}

También podría gustarte