Autor
|
Tema: Ayuda progrma numeros amigos (Leído 4,577 veces)
|
skatres
Desconectado
Mensajes: 18
|
Hola, pues siguiendo con mi intento de adentrarme en este mundo de la programacion, esta vez me ha tocado con los llamados subprogramas o funciones, bueno el caso esque he estado intentando realizar el siguiente ejercicio, no está terminado, pero esque el programa me ignora toda la parte de las funciones unsigned /* Se piden dos numeros naturales m y n. El progrma mostrará todas las parejas de numeros amigos que hay en el intervalo [m,n]. Dos numeros son amigos si la suma de los divisores del primero (sin contarse el mismo) coincide con el segundo y viceversa.Nota: usa una funcion que, dado un numero, devuelva la suma de sus divisores (sin contarse el mismo)*/
# include <stdio.h> # include <stdlib.h>
unsigned amigos (unsigned am, unsigned an, unsigned m, unsigned n); int main() { int m,n,amigos;
printf("\nIntroduce m:"); scanf("%d",&m); printf("\nIntroduce n:"); scanf("%d",&n); system("pause"); return 0; }
unsigned amigos (unsigned am, unsigned an, unsigned m, unsigned n) { for(am=0;am<m;am++)
{ if(m%am==0) m+=am; } if(am==n) printf("Son numeros amigos");
} ¿Como puedo solucionarlo?, gracias.
|
|
|
En línea
|
|
|
|
DickGumshoe
|
Me parece que es porque "unsigned amigos" (y el resto), va dentro de int main().
|
|
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
Y los tipos? Donde están los tipos de la variables? y la del prototipo?: unsigned amigos (unsigned am, unsigned an, unsigned m, unsigned n);
Más bien sería: void amigos (unsigned int am, unsigned int an, unsigned int m, unsigned int n);
Lo mismo cuando implementas la función, pone los tipos que faltan. O le cambias el tipo de la función a otra cosa que no sea void si es que piensas retornar un entero o algo. Saludos
|
|
« Última modificación: 25 Noviembre 2011, 20:36 pm por RyogiShiki »
|
En línea
|
|
|
|
skatres
Desconectado
Mensajes: 18
|
El caso esque cambio la funcion usnsigned por la que no retorna nada es decir, la funcion void, pero sigue ignorandome todo la funcion, no entiendo
|
|
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
El caso esque cambio la funcion usnsigned por la que no retorna nada es decir, la funcion void, pero sigue ignorandome todo la funcion, no entiendo
Jejej. no me habia fijado en eso. El caso es que tienes que llamar a la función desde main(); en alguna parte en el main después de que pides los datos debes llamar a la función, te doy un ejemplo: #include <stdio.h> void print_number(int); int main() { int num = 0; print_number(num); return 0; } void print_number(int n) { printf("Imprimiendo numero: %d desde la funcion print_number\n", n ); }
Saludos
|
|
|
En línea
|
|
|
|
skatres
Desconectado
Mensajes: 18
|
Ok, creo que mas o menos lo he pillado, osea sería declarar una funcion(la del void) dentro de la funcion int main(), lo he probado pero ahora el programa me lo compila, pero me sale un mensaje de error y se cierra. Algo así me ha quedado: /* Se piden dos numeros naturales m y n. El progrma mostrará todas las parejas de numeros amigos que hay en el intervalo [m,n]. Dos numeros son amigos si la suma de los divisores del primero (sin contarse el mismo) coincide con el segundo y viceversa.Nota: usa una funcion que, dado un numero, devuelva la suma de sus divisores (sin contarse el mismo)*/
# include <stdio.h> # include <stdlib.h>
void amigos (int am, int n , int m);
int main() { int m,n,am;
printf("\nIntroduce m:"); scanf("%d",&m); printf("\nIntroduce n:"); scanf("%d",&n); amigos(am,n,m); system("pause"); return 0; }
void amigos (int am, int n, int m) { for(am=0;am<m;am++)
{ if(m%am==0) m+=am; } if(am==n) printf("Son numeros amigos");
}
|
|
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
Fíjate muy bien lo que estas haciendo, analisa el ciclo for de la función: for(am=0;am<m;am++) { if(m%am==0)
Cuando el primer ciclo se ejecute el estado de las variable am es am = 0, momentos después haces m% am, lo que implica hacer una división, en este caso sería m/0 lo que es un error, no puedes dividir por 0. Mi sugerencia es que te replantees el problema de los números amigos, soluciónalo primero en el papel, observa los pasos que tienes que dar para solucionarlo y cuando tengas eso entonces pásalo al computador. Saludos
|
|
|
En línea
|
|
|
|
skatres
Desconectado
Mensajes: 18
|
Fíjate muy bien lo que estas haciendo, analisa el ciclo for de la función: for(am=0;am<m;am++) { if(m%am==0)
Cuando el primer ciclo se ejecute el estado de las variable am es am = 0, momentos después haces m% am, lo que implica hacer una división, en este caso sería m/0 lo que es un error, no puedes dividir por 0. Mi sugerencia es que te replantees el problema de los números amigos, soluciónalo primero en el papel, observa los pasos que tienes que dar para solucionarlo y cuando tengas eso entonces pásalo al computador. Saludos Madre mia!!! tengo que estar ciego, porque es verdad que no me habia dado cuenta de ese error, bueno voy a replantearlo en papel y haber que sale. Muchas gracias compi!!
|
|
|
En línea
|
|
|
|
skatres
Desconectado
Mensajes: 18
|
Hola, bueno sigo intentando que me salga este programa, lo volví a empezar en papel, y ahora lo paso al compilador pero me da estos dos errores: Practicas Programacion\Ensayo numeros amigos.cpp In function `unsigned int son_amigos(unsigned int, unsigned int, unsigned int, unsigned int)':
29 Practicas Programacion\Ensayo numeros amigos.cpp invalid conversion from `unsigned int (*)(unsigned int, unsigned int, unsigned int, unsigned int)' to `unsigned int' En teoria el programa me ha quedado así: /* Se piden dos numeros naturales m y n. El progrma mostrará todas las parejas de numeros amigos que hay en el intervalo [m,n]. Dos numeros son amigos si la suma de los divisores del primero (sin contarse el mismo) coincide con el segundo y viceversa.Nota: usa una funcion que, dado un numero, devuelva la suma de sus divisores (sin contarse el mismo)*/
# include <stdio.h> # include <stdlib.h>
unsigned son_amigos(unsigned a , unsigned b , unsigned num1 , unsigned num2);
int main()
{ int num1,num2; printf("\nIntroduce el pimer numero:"); scanf("%d",&num1); printf("\nIntroduce el segundo numero:"); scanf("%d",&num2); system("pause"); return 0; }
unsigned son_amigos(unsigned a , unsigned b , unsigned num1 , unsigned num2) { for(a==1;a<num1;a++) if(num1%a==0) num1+=a; { for(b==1;b<num2;b++) if(num2%b==0) num2+=b; } if(a=b) printf("Son numeros amigos"); else printf("No son numeros amigos"); return son_amigos;
|
|
« Última modificación: 26 Noviembre 2011, 18:21 pm por skatres »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Amigos necesito ayuda con un background para un logo de una web ayuda.
Diseño Gráfico
|
™Carlos.®
|
2
|
3,694
|
14 Agosto 2004, 00:23 am
por ™Carlos.®
|
|
|
Programa para hallar números amigos
« 1 2 »
Programación General
|
Charderak
|
14
|
23,193
|
27 Junio 2010, 19:26 pm
por Charderak
|
|
|
Hallar numeros amigos
Scripting
|
franncc22
|
3
|
6,733
|
7 Mayo 2011, 20:04 pm
por .:UND3R:.
|
|
|
ayuda progrma c++
Programación C/C++
|
sabar
|
1
|
1,738
|
27 Octubre 2014, 00:51 am
por engel lex
|
|
|
(Consulta)Ejercicio de numeros amigos en C - Ayuda!
Programación C/C++
|
palacio29
|
1
|
3,156
|
24 Julio 2016, 19:23 pm
por palacio29
|
|