• Viernes 8 de Noviembre de 2024, 14:25

Autor Tema:  que pasa con el codigo!!!  (Leído 1120 veces)

Jesmi89

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
que pasa con el codigo!!!
« en: Martes 5 de Agosto de 2008, 23:29 »
0
quisiera saber si porfa me pueden ayudar con lo siguiente

Código: Text
  1. #include<iostream.h>
  2. #include<conio.h>
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. int valor[4][4],i,j,nump,numip,nprim;
  7.  
  8. void llenar();
  9. void mostrar();
  10. void diagonalp();
  11. void diagonals();
  12. void menu();
  13. void npares();
  14. void nimpares();
  15. void nprimos();
  16. void salir();
  17.  
  18. void main()
  19. {
  20.     menu();
  21. }
  22.  
  23. void menu()
  24. {
  25.     system("cls");
  26.     int op;
  27. cout<<"nnMENU PRINCIPALn";
  28. cout<<"------------------n";
  29. cout<<"(1) LLENARn";
  30. cout<<"(2) MOSTRARn";
  31. cout<<"(3) DIAGONAL PRINCIPALn";
  32. cout<<"(4) DIAGONAL SECUNDARIAn";
  33. cout<<"(5) NUMEROS PARESn";
  34. cout<<"(6) NUMEROS IMPARESn";
  35. cout<<"(7) NUMEROS PRIMOSn";
  36. cout<<"(8) SALIRn";
  37. cout<<"Escoja una opcion:[ ]bb";
  38. cin>>op;
  39. switch (op)
  40. {
  41. case 1: llenar(); break;
  42. case 2: mostrar (); break;
  43. case 3: diagonalp(); break;
  44. case 4: diagonals(); break;
  45. case 5: npares(); break;
  46. case 6: nimpares(); break;
  47. case 7: nprimos(); break;
  48. case 8: salir(); break;
  49. }
  50. getch();
  51. menu();
  52. }
  53.     void llenar()
  54.     {
  55.         system("cls");
  56.         cout<<"nIngrese 16 digitosnn";
  57.         for(i=0;i<=3;i++)
  58.         {
  59.             for(j=0;j<=3;j++)
  60.             {
  61.                 cin>>valor [i][j];
  62.             }
  63.  
  64.         }
  65.     }
  66.  
  67.     void mostrar ()
  68.     {
  69.         system("cls");
  70.         cout<<"nntLos datos de la Matriz son:n";
  71.         cout<<"t***************************nn";
  72.         for(i=0;i<=3;i++)
  73.         {
  74.             for(j=0;j<=3;j++)
  75.             {
  76.                 cout<<"t"<<valor[i][j];
  77.             }
  78.         cout<<endl;
  79.         }
  80.     }
  81.  
  82.  
  83.     void diagonalp()
  84.     {
  85.         system("cls");
  86.         cout<<"nnlos datos en diagonal principal son:n";
  87.         for(i=0;i<=3;i++)
  88.         {
  89.             for(j=0;j<=3;j++)
  90.             {
  91.                 if(i==j)
  92.                 {
  93.                   cout<<"n"<<valor[i][j];
  94.                 }
  95.         }
  96.         }
  97.     }
  98.  
  99. void diagonals()
  100. {
  101.     system("cls");
  102.     cout<<"nnlos datos en diagonal secundaria son:n";
  103.     for(i=0;i<=3;i++)
  104.     {
  105.         for(j=0;j<=3;j++)
  106.         {
  107.             if(i+j==3)
  108.             {
  109.                 cout<<"n"<<valor[i][j];
  110.            
  111.             }
  112.        
  113.         }
  114.     }
  115. }
  116.    
  117. void npares()
  118.     {
  119.     system("cls");  
  120.         cout<<"nnlos datos pares son:n";
  121.         for(i=0;i<=3;i++)
  122.         {
  123.             for(j=0;j<=3;j++)
  124.             {
  125.                 nump=valor[i][j]%2;
  126.                
  127.                 if(nump==0)
  128.                 {
  129.                     cout<<"n"<<valor[i][j];
  130.                 }
  131.             }
  132.        
  133.  
  134.         }
  135.     }
  136.  
  137.     void nimpares()
  138.     {
  139.         system("cls");
  140.         cout<<"nnlos datos impares son:n";
  141.         for(i=0;i<=3;i++)
  142.     {
  143.             for(j=0;j<=3;j++)
  144.             {
  145.                 numip=(valor[i][j]%2)-1;
  146.                
  147.                 if(numip==0)
  148.                 {
  149.                     cout<<"n"<<valor[i][j];
  150.                 }
  151.             }
  152.        
  153.        
  154.         }
  155.     }
  156.  
  157. void nprimos()
  158. {
  159.     system("cls");
  160.     cout<<"nnlos datos primos son:";
  161.     for(i=0;i<=3;i++)
  162.     {
  163.         for(j=0;j<=3;j++)
  164.         {
  165.             nprim=valor[i][j]%2;
  166.             if(nprim==1)
  167.             {
  168.                 cout<<"n"<<valor[i][j];
  169.             }
  170.         }
  171.  
  172.        
  173.     }
  174.     }
  175.  
  176. void salir()
  177. {
  178. exit(0);
  179. }
  180.        
  181.  
  182.        
  183.    
  184.    
  185.    
  186.  
  187.  

y al momento de ejecutarlo me doy cuenta que los datos que arroja en las ociones de impares y primos son exactamente los mismos. Cual sera la falla?

Gracias :comp:

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: que pasa con el codigo!!!
« Respuesta #1 en: Miércoles 6 de Agosto de 2008, 01:48 »
0
La falla esta en la forma que identificas si un numero es primo o no, en realidad la formula que ocupas identifica numeros impares.

Segun la definicion de numero primo, es aquel que solo se puede dividir entre uno, y si mismo. entonces lo que debes hacer, es dividir el numero entre todos los numeros anteriores, y si el residuo es diferente de cero, es primo, si algun residuo es cero, entonces no es primo.

Dicho con numeros, si quieres identificar si el 9 es primo o no, tendrias que hacer esto

9/2
9/3
9/4
9/5
9/6
9/7
9/8

en este caso, 9/3, la segunda division da a 3 y el residuo es cero, por lo tanto, no es primo.

si fuera el 7:
7/2
7/3
7/4
7/5
7/6

en este caso, ninguna division da un residuo igual a cero, por lo tanto, es primo

Con esta informacion ya podrias hacer una funcion para verificar si un numero es primo o no.
Pista: Podrias usar un ciclo for que vaya de 2 hasta N-1, donde N es el numero que quieres comprobar.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: que pasa con el codigo!!!
« Respuesta #2 en: Miércoles 6 de Agosto de 2008, 10:45 »
0
Cita de: "ProfesorX"
es dividir el numero entre todos los numeros anteriores

No hace falta dividirlo entre todos los anteriores. n jamás es divisible por un número mayor que su mitad (excepto sí mismo, claro). Si X es el número que intentamos averiguar si es primo, con que pruebes las divisiones que te ha comentado ProfesorX desde el 2 hasta X/2 te vale (si es impar, truncamos su mitad).

Además, en cuanto halles un divisor, ya está claro que no es primo, no hace falta probar los demás  :P. Esto es obvio, pero no habré visto yo errores de este tipo...  :bad: