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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  que esta mal ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: que esta mal ?  (Leído 1,739 veces)
MarSalem

Desconectado Desconectado

Mensajes: 6


Ver Perfil
que esta mal ?
« en: 13 Septiembre 2019, 21:54 pm »

construir una funcion que reciba dos numeros enteros positivos y retorne un 1 si estos constituyen un par de numeros amigos y 0 si no lo son.

Código
  1. #include <stdio.h>
  2.  
  3. int amigos (int , int);
  4. int main(void){
  5.  
  6. int A, B;
  7. scanf("%d %d", &A, &B);
  8. printf("son amigos si es 1, si es 0 no lo son == %d", amigos(A,B));
  9. }
  10.  
  11. int amigos (int A , int B) {
  12. int j;
  13. int i;
  14. int contA=0;
  15. int contB=0;
  16. for (i=1; i<1000; i++)
  17. if(A%i==0){
  18. contA = contA + i;
  19. }
  20. for (j=1; i<1000; i++){
  21. if(B%i==0){
  22. contB = contB + i;
  23. }
  24. if (contA==B && contB==A)
  25. return 1;
  26.  
  27. else return 0;
  28. }
  29. }


el mio retorna el valor ingresado en la variable A

Mod: Usa etiquetas GeSHi para que tu codigo sea legible


« Última modificación: 13 Septiembre 2019, 22:08 pm por engel lex » En línea

insta @marsquarepants
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: que esta mal ?
« Respuesta #1 en: 13 Septiembre 2019, 22:10 pm »

No me he parado a comprobar qué son dos números amigos pero en el bucle de la B has mezclado la <i> y la <j>. Seguramente eso esté mal.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.067



Ver Perfil
Re: que esta mal ?
« Respuesta #2 en: 14 Septiembre 2019, 03:09 am »

Saludos,

- Es lo malo de no planificar bien el algoritmo XD. Y un buen IDE también se da cuenta de cosas extrañas, primero lo formateo con Ctrl + Alt + L ya que si vas evitar poner las llaves para los bucles for tienes que formatear bien tu código usando las identaciones o usar siempre llaves, formateando se puede ver un error de concepto bien feo al final:



-- Dice, esa variable j nunca se usa, esa variable i++ no tiene sentido, y que es posible que la función termine no devolviendo nada, tu bucle for está inestable.

- Puedes ver el algoritmo en C++ en este vídeo:



- Yo lo terminaría así:

Código
  1. #include <stdio.h>
  2.  
  3. int amigos(int, int);
  4.  
  5. int main(void) {
  6.  int A, B;
  7.  scanf("%d %d", &A, &B);
  8.  printf("son amigos si es 1, si es 0 no lo son == %d", amigos(A, B));
  9. }
  10.  
  11. int amigos(int A, int B) {
  12.  int i;
  13.  int j;
  14.  int contA = 0;
  15.  int contB = 0;
  16.  for (i = 1; i <= A / 2; i++)
  17.    if (A % i == 0) {
  18.      contA = contA + i;
  19.    }
  20.  for (j = 1; j <= B / 2; j++) {
  21.    if (B % j == 0) {
  22.      contB = contB + j;
  23.    }
  24.  }
  25.  if (contA == B && contB == A)
  26.    return 1;
  27.  else return 0;
  28. }

Citar
C:\Users\EdSon\CLionProjects\untitled\cmake-build-debug\untitled.exe
220 284
son amigos si es 1, si es 0 no lo son == 1
Process finished with exit code 0
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines