elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa que devuelve la suma de todos los divisores de un número excepto n
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa que devuelve la suma de todos los divisores de un número excepto n  (Leído 4,013 veces)
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Programa que devuelve la suma de todos los divisores de un número excepto n
« en: 29 Junio 2012, 04:01 am »

Hola, esta semana he estado haciendo muchos programas y ocupo mucho de la ayuda de esta excelente comunidad; esta vez ocupo hacer una función en un programa(es importante que sea una función) que lo que haga es sumar todos los divisores de un número n, sin incluir al número n en la sumatoria. He desarrollado la función, pero lamentablemente me marca error en la condición de un "if" que se encuentra en la función. Espero que me puedan orientar para arreglar este problema y me dijeran ¿Porqué no se puede hacer lo que intento? ya que considero que no hay errores de sintaxis, y al menos para mí tiene lógica lo que se pretende. Gracias de antemano; les dejo el código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int suma(int n);
  4. int main(int argc, char *argv[])
  5. {
  6.    int n;
  7.  
  8.    printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
  9.    printf("Introduce el numero\n");
  10.    scanf("%d",&n);
  11.    printf("El resuldado es: %d\n",suma(n));
  12.  
  13.    system("PAUSE");
  14.    return 0;
  15. }  
  16.   int suma(int n){
  17.       int i;
  18.       int c;
  19.       int *d;
  20.       for(i=1;i<n;i++){
  21.                        if(n%i=0){
  22.                                   d[i]=i;
  23.                                   }
  24.                        }
  25.       c=0;
  26.       for(i=1;i<n;i++){
  27.                        c+=d[i];
  28.                        }
  29.       return c;
  30.       }
  31.  


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Programa que devuelve la suma de todos los divisores de un número excepto n
« Respuesta #1 en: 29 Junio 2012, 04:52 am »

¡Buenas!

El error de tu codigo es que declaras d como un puntero a entero.

Estas intentando utilizarlo como un vector, pero es un puntero que en principio apunta a cualquier parte de la memoria, por lo que estaras intentando escribir en alguna parte del programa en la que no tengas permiso para escribir, o estaras sobreescribiendo otros datos de tu programa.

Una solucion podria ser asignar dinamicamente una dimension para esta variable. No te lo aconsejo, porque en principio no sabes cuantos divisores va a tener tu numero, por lo que podria tener mayor cantidad de divisores que la dimension que le indiques.

Otra solucion seria ir aumentando la memoria cada vez que encuentres un divisor. Un coñazo y hay formas mas sencillas de resolverlo.

Mas alternativas... En lugar de utilizar punteros, declara un vector estatico con una dimension. (Volvemos al problema de dos parrafos mas arriba)

La mejor solucion, olvidate de los vectores y los punteros para este problema. No te hacen falta para nada. Si encuentras un divisor, lo acumulas en una variable y punto. Sencillo y rapido. (Esta era la solucion buena. XD)

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Programa que devuelve la suma de todos los divisores de un número excepto n
« Respuesta #2 en: 29 Junio 2012, 05:54 am »

¡Buenas!

El error de tu codigo es que declaras d como un puntero a entero.

Estas intentando utilizarlo como un vector, pero es un puntero que en principio apunta a cualquier parte de la memoria, por lo que estaras intentando escribir en alguna parte del programa en la que no tengas permiso para escribir, o estaras sobreescribiendo otros datos de tu programa.

Una solucion podria ser asignar dinamicamente una dimension para esta variable. No te lo aconsejo, porque en principio no sabes cuantos divisores va a tener tu numero, por lo que podria tener mayor cantidad de divisores que la dimension que le indiques.

Otra solucion seria ir aumentando la memoria cada vez que encuentres un divisor. Un coñazo y hay formas mas sencillas de resolverlo.

Mas alternativas... En lugar de utilizar punteros, declara un vector estatico con una dimension. (Volvemos al problema de dos parrafos mas arriba)

La mejor solucion, olvidate de los vectores y los punteros para este problema. No te hacen falta para nada. Si encuentras un divisor, lo acumulas en una variable y punto. Sencillo y rapido. (Esta era la solucion buena. XD)

¡Saludos!
Muchas gracias do-while no lo había visto de esa forma, ahora ya lo he resuelto y corre a la perfección, dejo el código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int suma(int n);
  4. int main(int argc, char *argv[])
  5. {
  6.    int n;
  7.  
  8.    printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
  9.    printf("Introduce el numero\n");
  10.    scanf("%d",&n);
  11.    printf("El resuldado es: %d\n",suma(n));
  12.  
  13.    system("PAUSE");
  14.    return 0;
  15. }  
  16.   int suma(int n){
  17.       int i;
  18.       int d;
  19.       int c;
  20.       c=0;
  21.       for(i=1;i<n;i++){
  22.                        if(n%i==0){
  23.                                   d=i;
  24.                                   c+=d;
  25.                                   }
  26.                        }
  27.                        return c;
  28.       }
  29.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Suma divisores de un número
Programación C/C++
RON06 4 26,256 Último mensaje 12 Noviembre 2010, 00:20 am
por RON06
[Solucionado] Cerrar TODOS los procesos excepto el propio
.NET (C#, VB.NET, ASP)
Segurida 6 4,513 Último mensaje 24 Mayo 2011, 13:42 pm
por Segurida
Programa divisores en C++, Urgente!!
Programación C/C++
LauraD 2 1,513 Último mensaje 4 Septiembre 2014, 04:29 am
por rir3760
Cuando recorro un txt con un FOR la variable me devuelve el numero y no la palab
Scripting
mis4 0 1,198 Último mensaje 24 Noviembre 2016, 15:39 pm
por mis4
Función que devuelve número repeticiones
Programación C/C++
Palante 4 1,339 Último mensaje 13 Febrero 2017, 20:12 pm
por naidmen
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines