/
Inicio :: Foros

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

problemas de un programa en dev c++

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
hipno_12



Registrado: 10 Oct 2007
Mensajes: 5

MensajePublicado: 21/10/2007 8:16 am
Título: problemas de un programa en dev c++

no se cual es le problema no se ejecuta el programa es en c++ y me lo marca en

#include <stdio.h>
#include <conio.h>

int factorial(int n2);
main()
{
int n,x,z;
do
{
printf("Introduzca numero: ");
scanf("%d",&n);
x=factorial(n);
printf("el factorial de %d es: %d",n,x);
printf("Introduzca si quiere volver a realizar el programa\n 1)si\n 2)no ");
scanf("%d",&z);
getch();
}

int factorial(int n2)
{
int i,s;
s=1;
if (n2!=0)
{
for (i=n2;i>=1;i--)
{
s=s*i;
}
}
while(z==1);
return(s);
}
Volver arriba
Dirección AIM
guimel



Registrado: 17 Oct 2007
Mensajes: 11

MensajePublicado: 21/10/2007 10:03 am
Título:

El problema parece radicar en un error al editar el fuente. El programa correcto sería:
Código:

#include <stdio.h>
#include <conio.h>

int factorial(int n2);

int main( int argc, char *argv[])
{
   int n,x,z;
   do
   {
      printf("Introduzca numero: ");
      scanf("%d",&n);
      x=factorial(n);
      printf("el factorial de %d es: %d\n",n,x);
      printf("Introduzca si quiere volver a realizar el programa\n 1)si\n 2)no \n");
      scanf("%d",&z);
      /* getch(); */
   } while(z==1);
}

int factorial(int n2)
{
   int i,s;
   s=1;
   if (n2!=0)
   {
      for (i=n2;i>=1;i--)
      {
         s=s*i;
      }
   }
   return(s);
}


Si lo comparas con el que has publicado en tu post, verás que hay dos diferencias:
1- La definición de la función main engloba a la función factorial. Has puesto el código de una función dentro de la otra, y eso no está permitido por el lenguaje. Indentando adecuadamente el texto del programa es más facil descubrir este tipo de errores.

2- la palabra while que correspondía a la sentencia do para recoger la entrada del usuario, ha ido a parar a la función factorial. La sentencia do debe tener la forma:

Código:
do
<sentencia>
while(<expresion>);


Además, he quitado la llamada a getch, que pausaba el programa después de que el usuario escoge si sigue o no. También he incluido un par de caracteres de nueva línea (\n) en los printf, para que los mensajes del programa sean más legibles.
Una cosa que queda pendiente es controlar que el usuario inserte sólo números enteros positivos.
Saludos
_________________
Las ciencias de la computación están tan poco relacionadas con las computadoras como la astronomía con los telescopios

Edsger Dijkstra
Volver arriba
v0x1



Registrado: 20 Oct 2007
Mensajes: 13

MensajePublicado: 21/10/2007 10:03 am
Título:

Código:

#include <stdio.h>
#include <stdlib.h>
int factorial(int n2);
int main()
{

int n,x,z;

do
{
printf("Introduzca numero: ");
scanf("%d",&n);
x = factorial(n);
printf("\nel factorial de %d es: %d",n,x);
getchar();
printf("\nIntroduzca si quiere volver a realizar el programa\n 1)si\n 2)no ");
printf("\n - Respuesta: ");
scanf("%d",&z);
system("cls");
}

while(z==1);

return 0;
}


int factorial(int n2)
{
int i;
int s = 1;

  if (n2!=0)
  {
      for (i=n2;i>=1;i--)
      {
       s=s*i;
      }
  }

return(s);
}



Saludos
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 240
Ubicación: Cono Sur

MensajePublicado: 21/10/2007 1:10 pm
Título:

La función factorial puede arrojar como resultado números naturales grandes, por eso es conveniente declararla como de tipo entero largo para que por lo menos no se produzca un error de desbordamiento al sobrepasar el tipo int común.

Entonces sería más seguro así:

Código:
long factorial(int n2);


Un saludo
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
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