Foros del Web » Programación para mayores de 30 ;) » C/C++ »

codificacion en ansi c

Estas en el tema de codificacion en ansi c en el foro de C/C++ en Foros del Web. chicos ayudenme porfa tengo un problema programe esto y no me da ningun encontrar se ejecuta pero al momento que sale para ejecutarse boom se ...
  #1 (permalink)  
Antiguo 08/04/2015, 16:06
 
Fecha de Ingreso: abril-2015
Mensajes: 1
Antigüedad: 9 años, 7 meses
Puntos: 0
Mensaje codificacion en ansi c

chicos ayudenme porfa tengo un problema programe esto y no me da ningun encontrar se ejecuta pero al momento que sale para ejecutarse boom se cuelga ayudenme porfa.. en mi programa esto realizando un ejercicio de saber si un numero ingresado es numero perfecto http://es.wikipedia.org/wiki/N%C3%BAmero_perfecto
mi codigo es este les agradeceria mucho por su ayuda....
utilizo dev-c++ 5.2.0.1


Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. main()
  5. {
  6.     int numero,div,suma=0,t,j,factorial=1,sf=0,i,h,cont=0,k;       
  7.     char n[10],fact[numero],m[10],t1[10];                          
  8.     printf("ingrese numero:");
  9.     scanf("%s",&n);        
  10.     numero=atoi(n);     //convierto entero         
  11.  
  12.     for (i=1;i<=numero-1;i++)          
  13.     {
  14.         if (numero%i==0)        //busco divisores          
  15.         {                                  
  16.             fact[i-1]=i;           
  17.             cont=cont+1;           
  18.             printf("numero divisible de %d es %d", numero,i);
  19.         }
  20.     }
  21.     //funcion  
  22.     for (t=0;t<=cont;t++)
  23.     {                               //tomo los numeros divisibles y los sumo            //2n+1
  24.         m[0]=fact[t];              
  25.         k=atoi(m);                         
  26.         suma+=k;
  27.     }
  28.     if (suma==numero)          
  29.     {
  30.         for (h=0;h<=cont;h++)                  
  31.         {
  32.             t1[0]=fact[h];  //tomo numeros divisibles y convierto a entero         
  33.             k=atoi(t1);
  34.             for (j=1;j<=k;i++)          //hallo factorial                  
  35.             {
  36.                 factorial*=j;              
  37.             }
  38.             sf+=factorial;          //sumo factorial
  39.             factorial=1;
  40.         }
  41.         printf("%d es un numero perfecto\n",numero);
  42.         printf("la suma de los factoriales de los numeros divisores es %d:",sf);
  43.     }
  44.     else
  45.         printf("%d NO ES UN NUMERO PERFECTO\n",numero);
  46.  
  47.     system("PAUSE");
  48.     return 0;
  49. }

Última edición por razpeitia; 08/04/2015 a las 16:24
  #2 (permalink)  
Antiguo 08/04/2015, 19:23
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: codificacion en ansi c

Error numero 1 y muy chungo:
si declaras:
int numero,...
...¿¿¿Como es que luego haces la declaracion: int fact[numero] sin antes dar un valor a la variable numero???Esto es un disparate ya que numero puede contener residuos de memoria que puede ser cualquier valor o incluso un cero. ¡¡¡Cuidado con eso!!!

Error numero 2:
Si vas a guardar una cadena es scanf ( "%s", n ); no debes poner el & delante de n ya que el propio nombre de una cadena de caracteres ya es considerado un puntero a la primera posición de la cadena, que es lo que se pide con el especificador %s. En realidad se pide en que posición de la cadena se va iniciar a escribir... Como si quieres empezar de la mitad en delante &n[4] que entonces si lleva el & ya que se trata de una posición concreta de la cadena, y no n que indica el inicio de la cadena. Pero ojo con eso que si escribes desde la mitad ya no dispones de 10 chars sino 5-1, el -1 es el nulo. XDD

En esto me has conseguido liarme hasta a mi jajaj: for ( i = 1; i <= numero - 1; i++ ).
A ver... ¿Con lo anterior has querido hacer que i sea menor o igual que numero menos uno? ¿¿No es lo mismo: for ( i = 1; i<numero; i++ )??

otra cosilla que veo: En el 1º bucle debes usar en fact[] el cont y no i para el indice.

De todas formas no entiendo muy bien tu lógica pero mire a ver si ese ejemplo te sirve:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 100
  4.  
  5. int main() {
  6.     int i = 0;
  7.     int contador = 0;
  8.     int perfecto = 0;
  9.     int fact[TAM] = {0};
  10.     char n[10];
  11.     int numero = 0;
  12.    
  13.     printf ( "ingrese numero:" );
  14.     scanf ( "%9[^\n]%*c", n );
  15.     numero = atoi ( n );
  16.    
  17.     for ( i = 1; i < numero; i++ ) {
  18.         if ( numero % i == 0 ) {
  19.             fact[contador] = i;
  20.             perfecto += fact[contador]; //aqui ya obtengo el resultado ;)
  21.             contador++;
  22.         }
  23.        
  24.     }
  25.     if ( perfecto != numero ) {
  26.         printf ( "\nEl numero NO es perfecto\n" );
  27.         return 1;
  28.     } else {
  29.    
  30.         i = 0;
  31.         printf ( "\n\n%d", fact[i] );
  32.         for ( i++ ; i < contador; i++ ) {
  33.             printf ( "+%d", fact[i] );
  34.            
  35.         }
  36.        
  37.         printf ( "=%d\n\n", perfecto );
  38.         printf ( "\nEl numero es perfecto: %d\n", perfecto );
  39.        
  40.     }
  41.     getchar();
  42.     return 0;
  43. }

Etiquetas: ansi, programador-web, programadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:59.