Cita de: do-while en 29 Junio 2012, 04:52 AMMuchas 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:
¡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!
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int suma(int n);
int main(int argc, char *argv[])
{
int n;
printf("Programa que devuelve la suma de todos los divisores de un numero n, sin incluirlo\n");
printf("Introduce el numero\n");
scanf("%d",&n);
printf("El resuldado es: %d\n",suma(n));
system("PAUSE");
return 0;
}
int suma(int n){
int i;
int d;
int c;
c=0;
for(i=1;i<n;i++){
if(n%i==0){
d=i;
c+=d;
}
}
return c;
}