| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
hipno_12
Registrado: 10 Oct 2007 Mensajes: 5
| Publicado: 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 | |  | guimel
Registrado: 17 Oct 2007 Mensajes: 11
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |