Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/04/2015, 19:23
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
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. }