/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Diferencias en Broland y DEV. AYUDA

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
ezequielzybert



Registrado: 25 Nov 2011
Mensajes: 8

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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 * aWink 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com