| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 05/01/2012 5:32 pm | | | Título: Diferencias en Broland y DEV. AYUDA |
| Buenas, estuve haciendo un programa que calcule el factorial de un numero. lo hice en DEV y no funcionaba y depsues se me ocurrio pasarlo al broland y ahi lo compilé y funciono bien. Alguien me explica que es lo que no entiende el DEV?
| Código: | #include <stdio.h> #include <conio.h>
int factorial(int a, int f){ f=f*a; a=a-1; if(a>1){ factorial(a,f); } else return f; }
int main(){ int a,f=1,fact; printf("Ingresa un numero: "); scanf("%d",&a); printf("%d",factorial(a,f)); getch(); return 0; } |
|
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 6586 Ubicación: Mexico
| Publicado: 05/01/2012 6:28 pm | | | Título: |
| Tendrías que explicar en detalle a que te refieres con "no funcionaba".
Una posible causa es la biblioteca conio de Borland ya que su soporte depende del compilador utilizado (para ello en Dev-C++ se debe instalar aparte).
Y para el calculo del factorial no necesitas una función con dos parámetros. Otras formas mas cortas las puedes revisar utilizando el motor de búsqueda de los foros.
Un saludo _________________ Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short. -- Mentat Handbook |
|
| Volver arriba | |
 |
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 05/01/2012 6:36 pm | | | Título: |
| | el problema es que cuando lo compilo con dev, el resultado del factorial da siempre -1 |
|
| Volver arriba | |
 |
|
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 05/01/2012 8:17 pm | | | Título: |
| | Cita: | | Una posible causa es la biblioteca conio de Borland ya que su soporte depende del compilador utilizado (para ello en Dev-C++ se debe instalar aparte). |
Ya esta instalada la libreria conio en dev.
| Cita: | | Y para el calculo del factorial no necesitas una función con dos parámetros. Otras formas mas cortas las puedes revisar utilizando el motor de búsqueda de los foros. |
la pregunta no era esa.[/quote] |
|
| Volver arriba | |
 |
LeViato
Registrado: 14 Dic 2006 Mensajes: 194
| Publicado: 06/01/2012 2:30 am | | | Título: |
| Hola. En primer lugar, te recomiendo que no emplees la libreria conio.h, porque no es estándar de C, principalmente. Y mucho menos para el uso que le das: getch() En su lugar, puedes utilizar getchar(), de la stdio.h.
En segundo lugar, es importante que a una función siempre le des la opción de devolver un valor de su tipo. Me explico: imagina que, por el motivo que sea, la sentencia return f; nunca se ejecuta. Algunos compiladores demasiado inteligentes pueden añadir un return al final de la función, para evitar este tipo de problema. En mi caso, el compilador me avisa y, aparentemente, añade un return f; al final. Haciendo una traza, se realizan las operaciones, pero el valor devuelto es el de la primera f (f = f * a que coincide con el valor de a. En tu caso, en función del compilador, parece que se añade return 1;, return -1;, etc.
Lo mejor es activar las opciones de aviso del compilador para adquirir buenos hábitos, sobretodo cuando estás aprendiendo. Y simplificar el código lo máximo posible también ayuda a entenderlo, encontrar y corregir errores.
| Código: | #include <stdio.h>
int factorial(int f){ if(f > 1) f = f * factorial(f - 1); return f; }
int main(){ int f; printf("Ingresa un numero: "); scanf("%d",&f); printf("%d\n", factorial(f)); getchar(); return 0; } |
Saludos. |
|
| Volver arriba | |
 |
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 06/01/2012 12:43 pm | | | Título: |
| | el codigo ese que me mandaste no hace nada, luego de ingresar el numero se cierra el programa, o tal vez el getchar() no cunmple la misma funcion que el getch() y el programa no se detiene al final. |
|
| Volver arriba | |
 |
|
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 06/01/2012 12:58 pm | | | Título: |
| Deja, ya lo solucioné. Te habias olvidado el fflush(stdin)
GRACIAS |
|
| Volver arriba | |
 |
ezequielzybert
Registrado: 25 Nov 2011 Mensajes: 8
| Publicado: 06/01/2012 1:05 pm | | | Título: |
| como haces para pensar esas soluciones? O.o no me salen asi tan sensillas |
|
| Volver arriba | |
 |
LeViato
Registrado: 14 Dic 2006 Mensajes: 194
| Publicado: 06/01/2012 2:53 pm | | | Título: |
| Hola. No emplees fflush en flujos de datos de entrada (stdin, en este caso), ya que su comportamiento sólo está definido para los de salida (stdout, por ejemplo) Se me escapó el detalle de que getchar() consumía de stdin el salto de línea que deja scanf tras leer el entero. En el foro está explicado y se dan varias soluciones. Te pongo una:
| Código: | while(getchar() != '\n'); getchar(); |
En cuanto a la recursividad, conviene seguir un curso, ver ejemplos y practicarlo. Sobre el factorial hay muchos: http://es.wikipedia.org/wiki/Algoritmo_recursivo La recursividad es muy limpia para escribir código, pero muy ineficiente. Una vez hayas afianzado más los conocimientos, te recomiendo aprender a traducir funciones recursivas en no recursivas. Por ejemplo, el factorial puede calcularse con un bucle. Para funciones más complejas, ya es necesaria la reserva de memoria para almacenamiento de los resultados parciales y algunas técnicas más elaboradas.
Saludos. |
|
| Volver arriba | |
 |
|
|