Les presento mi calculadora de ncr!!!(ahora si que si!!!)

Iniciado por flacc, 14 Mayo 2010, 22:38 PM

0 Miembros y 1 Visitante están viendo este tema.

flacc

hola, se preguntarán alguno que diablos es ncr, bueno mas especificamente es una parte del Teorema del binomio.

Mas especificamente es:


Entonces como en mis ratos libres y de oseo aprendo C, y dado que no tengo para comprarme una calculadora de esas Casio y que solo tengo una de esas chinas o japonesas, en fin, me hice mi propia calculadora para eso que entrega detalladamente los resultados para comprobarlos(si quieren a mano)...

Quiero agradecer al usuario dr.~ que se dio el trabajo de ayudarme con una duda... en  fin... y al foro.elhacker.net (que es genial ;-))
esta echa en c con el compilador dev c/c++, como dije antes no me resulta el [ code=c][/code ] asi que lo pongo de forma normal, si algun moderador lo puede arreglar se lo agradecería...
espero que a alguien le sirva tanto como a mi, saludos, gracias por la ayuda y si ven que le falta algo o quieren  aportar algo diganmelo y lo agrego.. (tengan en cuenta que tengo 17 y estoy aprendiendo asi que pongan el codigo para agregarlo)...

/* NCR Calculator v. 1.0.6 <versión estandar>*/
/* foro.elchacker.net */
#include <stdio.h>

int
main( void )
{
signed long n, k, nf, kf, resta, restaf, x, y;
char opcion;
int ch;

do
{
printf( "\nIngrese n y k: " );
fflush( stdout);
scanf( "%ld %ld", &n, &k );
while ( (ch = fgetc( stdin )) != EOF && ch != '\n' );

nf = 1;
kf = 1;
resta = n - k;
restaf = 1;

while ( n > 1 ) /* factorial de n */
{
nf *= n--;
}

while ( k > 1 ) /* factorial de k */
{
kf *= k--;
}

while ( resta > 1 ) /* factorial de (n - k) */
{
restaf *= resta--;
}

x = kf * restaf; /* k! * (n - k)! */
y = nf / x; /* n! / (k! * (n - k)!) */

/* resultados */
printf( "\nn! = %ld\n"
"k! = %ld\n"
"(n - k)! = %ld\n"
"k! * (n - k)! = %ld\n"
"n! / [k! (n - k)!] = %ld\n"
"--------------------------\n"
"Resultado final (ncr): %ld\n", nf, kf, restaf, x, y, y );

printf( "\nContinuar? S/n: " );
fflush( stdout );
scanf( "%c", &opcion );
while ( (ch = fgetc( stdin )) != EOF && ch != '\n' );
}
while ( opcion == 's' || opcion == 'S' );

return 0;
}



ya.. y aunque no entendi mucho acerca de limpiar el buffer y eso de la consola..
ya esta estandarizada gracias a nicolas_cof...
de todas fomas conservo la version antigua por seacaso... hasta le hice un icono.. pero en fin... todavia no he legado a esa parte del buffer... solo se pocas cosas.... y sigo quebrandome la cabesa con eso de los signos logicos y la tabla de verdad de los operdadores logicos que aparece en el libro introduccion a la programacion en c...

haci que ya esta... saludoss y gracias por tomarse la molestia de entrar  a ver mi post...

@synthesize


flacc


Gallu

Si le quitas las llamadas a System tu aplicación será multiplataforma  ;D
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

Horricreu

#4
Cita de: Didacso en 15 Mayo 2010, 13:27 PM
Si le quitas las llamadas a System tu aplicación será multiplataforma  ;D

+1. Estás haciendo:

Código (cpp) [Seleccionar]
system("pause>nul");

Esto no es standard, puedes utilizar getchar() de la librería stdio, que la estás utilizando en tu código.

Saludos  :P

Og.

Deberías de tener la variable y en punto flotante y hacer:
Código (cpp) [Seleccionar]
y = (float)nf/(float)x

Así tendrás mas presicion en tu solución.

Saludos.
|-

flacc

gracias por los consejos, y eso de los puntos flotantes no lo entendi mucho pero lo probaré..
ojala me pudieran explicar..
saludos y gracias..

Gallu

Lo que te dice Og. es que la variable que guarda el resultado la declares como float , te mostrara los decimales y será mas presiso ...
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

flacc

#8
gracias... voy a modificar el post con las mejoras que me han dicho...
hasta el momento tengo lo de float pero lo del getchar lo estoy investigando...
cuando lo tenga listo modifico el post..
saludoss y gracias

Horricreu

#9
Continua sin ser standard...  >:D

Te dije, que podías utilizar getchar() de la librería stdio y, así no hace falta que uses la maldita conio con su getche() :¬¬

Venga, que te falta un pequeño paso para ser multiplataforma...

Saludos :P

EDITO: también puedes quitar gotoxy() (también de conio) y usar tabuladores y saltos de línea... ahora sí, a por la multiplataforma :laugh: