Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No se como hacer este algoritmo

Estas en el tema de No se como hacer este algoritmo en el foro de C/C++ en Foros del Web. holas soy nuevo en este foro, soy estudiante de ingenieria en informatica y hoy tuve mi primera clase de algoritmica y programacion y me mandaron ...
  #1 (permalink)  
Antiguo 14/04/2010, 17:14
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
No se como hacer este algoritmo

holas soy nuevo en este foro, soy estudiante de ingenieria en informatica y hoy tuve mi primera clase de algoritmica y programacion y me mandaron a hacer un algoritmo en psudocodigo y lenguaje c si alguien me puede ayudar se le agradece el enunciado dice asi. hacer un algoritmo en pseudocodigo y en lenguaje c que lea 2 numeros y calcule si los numeros son amigos. Por favor agradezco su ayuda.
  #2 (permalink)  
Antiguo 15/04/2010, 08:33
 
Fecha de Ingreso: abril-2010
Mensajes: 11
Antigüedad: 14 años
Puntos: 0
Respuesta: No se como hacer este algoritmo

El código está en c++, pero creo que te puede ayudar.

Por supuesto se puede complicar hasta el infinito, pero es una solución a lo que pides.

Código C++:
Ver original
  1. /* Programa que calcula si dos numeros naturales dados son amigos
  2.    --------------------------------------------------------------
  3.    Dos números amigos son dos enteros positivos a y b tales que a es la suma
  4.    de los divisores propios de b y b es la suma de los divisores propios de a.
  5.    La unidad se considera divisor propio, pero no el propio número. */
  6.  
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. int main (void)
  12. {
  13.     unsigned int numeroA = 0, numeroB = 0;
  14.     bool sonAmigos = false;
  15.  
  16.     cout << "--- Programa que calcula si dos numeros naturales dados son amigos ---\n\n";
  17.  
  18.     cout << "Introduce el valor del primer numero (> 1): ";
  19.     while (numeroA <= 1)
  20.     {
  21.         cin >> numeroA;
  22.         fflush (stdin);
  23.     }
  24.  
  25.     cout << "Introduce el valor del segundo numero (> 1): ";
  26.     while (numeroB <= 1)
  27.     {
  28.         cin >> numeroB;
  29.         fflush (stdin);
  30.     }
  31.  
  32.     unsigned int sumaDivisoresA = 0, sumaDivisoresB = 0;
  33.  
  34.     for (int i = 1; i < (numeroA / 2); i++)
  35.     {
  36.         if (numeroA % i == 0)
  37.             sumaDivisoresA += i;
  38.     }
  39.  
  40.     for (int i = 1; i < (numeroB / 2); i++)
  41.     {
  42.         if (numeroB % i == 0)
  43.             sumaDivisoresB += i;
  44.     }
  45.  
  46.  
  47.     if (numeroA == sumaDivisoresB)
  48.     {
  49.         if (numeroB == sumaDivisoresA)
  50.             sonAmigos = true;
  51.     }
  52.  
  53.     cout << "\nLa suma de los divisores propios de " << numeroA << " es " << sumaDivisoresA << ".";
  54.     cout << "\nLa suma de los divisores propios de " << numeroB << " es " << sumaDivisoresB << ".";
  55.  
  56.     if (sonAmigos)
  57.         cout << "\n\n" << numeroA << " y " << numeroB << " SON amigos.";
  58.     else
  59.         cout << "\n\n" << numeroA << " y " << numeroB << " NO son amigos.";
  60.  
  61.     return 0;
  62. }
  #3 (permalink)  
Antiguo 15/04/2010, 10:44
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: No se como hacer este algoritmo

Creo que los ciclos debieran llegar hasta la raiz cuadrada del numero, no hasta la mitad del numero y sumar no solo el divisor, sino su "contraparte" ( divisor y n / divisor. si son distintos).

Si parece complicado, los ciclos podrian llegar hasta n-1 y sumar todos los divisores.
  #4 (permalink)  
Antiguo 15/04/2010, 21:57
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: No se como hacer este algoritmo

Mira en la Wikipedia tienes una explicacion de cuando dos numeros son amigos. Y su respectiva implementacion en varios lenguajes de programacion(incluido el C).

http://es.wikipedia.org/wiki/N%C3%BAmeros_amigos


Solo te faltaria hacer el pseudocodigo.
  #5 (permalink)  
Antiguo 16/04/2010, 01:46
 
Fecha de Ingreso: abril-2010
Mensajes: 11
Antigüedad: 14 años
Puntos: 0
Respuesta: No se como hacer este algoritmo

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Creo que los ciclos debieran llegar hasta la raiz cuadrada del numero, no hasta la mitad del numero y sumar no solo el divisor, sino su "contraparte" ( divisor y n / divisor. si son distintos).
Muy buen apunte Calgary, he tenido que hacer varias cuentas para darme cuenta y sí, es totalmente correcto (y mucho más eficiente).

Una duda, cuando dices:
Cita:
Iniciado por CalgaryCorpus Ver Mensaje
y sumar no solo el divisor, sino su "contraparte" ( divisor y n / divisor. si son distintos).
¿puedes poner un ejemplo en el que sean iguales?

Me lo apunto
  #6 (permalink)  
Antiguo 16/04/2010, 05:10
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: No se como hacer este algoritmo

Cita:
¿puedes poner un ejemplo en el que sean iguales?
divisor y n / divisor son iguales cuando n es un cuadrado perfecto ( 4, 9, 16, 25, etc), en ese caso, solo hay que sumar el divisor y no su contraparte.
  #7 (permalink)  
Antiguo 16/04/2010, 06:13
 
Fecha de Ingreso: abril-2010
Mensajes: 11
Antigüedad: 14 años
Puntos: 0
Respuesta: No se como hacer este algoritmo

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
divisor y n / divisor son iguales cuando n es un cuadrado perfecto ( 4, 9, 16, 25, etc), en ese caso, solo hay que sumar el divisor y no su contraparte.
Perfecto, gracias

Etiquetas: algoritmos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:54.