Autor Tema: porque no funciona  (Leído 3922 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tomario

  • PIC10
  • *
  • Mensajes: 22
porque no funciona
« en: 08 de Noviembre de 2010, 14:53:49 »
pq no me funciona?? soy novato en funciones y punteros si me pueden ayudar, gracias
ESTE ES SIN FUNCIONES
Código: C
  1. # #include<stdio.h>
  2. # #include <stdlib.h>
  3. # #include <math.h>
  4. #  
  5. # main()
  6. # {
  7. #    
  8. #     int partidos=0;
  9. #        
  10. #     printf("\n\n Bienvenido al sistema de calculo de escanos.\n por favor siga las instrucciones, gracias\n");
  11. #  
  12. #     while ( partidos <2 || partidos>16){
  13. #         printf("\n eliga el numero de partidos politicos que desea (numero entre 2 y 16)\t");
  14. #         scanf("%d",&partidos);
  15. #     }
  16. #     /*system('clear');*/
  17. #     int mpartidos[17][50];
  18. #    
  19. #     float votos;
  20. #    
  21. #     int i;
  22. #     int f;
  23. #     int c;
  24. #    
  25. #     for (f=0;f<partidos;f++){
  26. #         for (c=0;c<50;c++){
  27. #  
  28. #             mpartidos[f][c]=0;
  29. #         }
  30. #     }
  31. #     int escanos=0;
  32. #         while (escanos<7 || escanos>100){
  33. #         printf("\n numero de escanos:(numero entre 7 y 100)\t");
  34. #         scanf("%d",&escanos);
  35. #     }
  36. #     /*system('clear');*/
  37. #     int a=0;
  38. #     printf("\n A continuacion meta los votos recibidos por cada partido:\n");
  39. #     for (i=0;i<partidos;i++){
  40. #         a=i+1;
  41. #         printf("\n partido(%d)=\t",a);
  42. #         scanf("%f",&votos);
  43. #         mpartidos[i][0]=votos;
  44. #     }
  45. #    
  46. #     printf("\n\n Ahora el programa calculara los escanos segun estos 4 metodos:\n \n HAMILTON \n \n D'HONT \n \n LAGUE \n \n HILL-HUNTINGTON \n \n");
  47. #      
  48. #      int TAM=100;
  49. #    
  50. #     /*METODO DHONT*/
  51. #     float mdhont[17][1000];
  52. #     float aq;
  53. #     int fil;
  54. #     int col;
  55. #     float cl;
  56. #     for (fil=0;fil<partidos;fil++){
  57. #         cl=0;
  58. #         for (col=0;col<TAM;col++){
  59. #             aq=(mpartidos[fil][0])/(cl+1);
  60. #             mdhont[fil][col]=(aq);
  61. #             cl++;
  62. #         }
  63. #         printf("\n");
  64. #     }
  65. #     printf("\n");
  66. #    
  67. #    
  68. #     float mx=0;
  69. #     int aa,bb;
  70. #     for(i=0;i<escanos;i++){
  71. #         for (fil=0;fil<partidos;fil++){
  72. #             for (col=0;col<TAM;col++){
  73. #                 if (mdhont[fil][col]>mx){
  74. #                     mx=mdhont[fil][col];
  75. #                     aa=fil;
  76. #                     bb=col;
  77. #                 }
  78. #             }
  79. #         }
  80. #         mdhont[aa][bb]=0;
  81. #        
  82. #         mx=0;
  83. #         mpartidos[aa][1]=mpartidos[aa][1]+1;
  84. #     }
  85. #            
  86. #     /*system("clear");*/
  87. #    
  88. #     /*fin metodo DHONT*/
  89. #    
  90. #     int z;
  91. #     for (i=0; i<partidos; i++) {
  92. #                     z=i+1;
  93. #                     printf("\n partido%d  %d",z,mpartidos[i][1]);
  94. #                 }
  95. #    
  96. #    
  97. #     printf("\n");
  98. # }
  99. #

Y ESTE ES CON FUNCIONES

Código: C
  1. # #include<stdio.h>
  2. # #include <stdlib.h>
  3. # #include <math.h>
  4. #  
  5. #     void traspaso(float *metodo1,float aux,int p,int T){
  6. #    
  7. #         int fil;
  8. #         int col;
  9. #         float cl=0;
  10. #         for (fil=0;fil<p;fil++){
  11. #             cl=0;
  12. #             for (col=0;col<T;col++){
  13. #                 *metodo1=(aux);
  14. #                 cl++;
  15. #             }
  16. #             printf("\n");
  17. #         }
  18. #     return ;
  19. #     }
  20. #    
  21. #     void max_escans(float *metodo2,float mpart,int esca,int p,int T){
  22. #         int fil;
  23. #         int col;
  24. #         int i;
  25. #         float mx=0;
  26. #         int aa,bb;
  27. #         for(i=0;i<esca;i++){
  28. #             for (fil=0;fil<p;fil++){
  29. #                 for (col=0;col<T;col++){
  30. #                     if (*metodo2>mx){
  31. #                         mx=*metodo2;
  32. #                         aa=fil;
  33. #                         bb=col;
  34. #                     }
  35. #                 }
  36. #             }
  37. #             metodo2=0;
  38. #        
  39. #             mx=0;
  40. #             mpart=mpart+1;
  41. #         }
  42. #    
  43. #     }
  44. #    
  45. # main()
  46. # {
  47. #     int partidos=0;
  48. #     printf("\n\n Bienvenido al sistema de calculo de escanos.\n por favor siga las instrucciones, gracias\n");
  49. #  
  50. #     while ( partidos <2 || partidos>16){
  51. #         printf("\n eliga el numero de partidos politicos que desea (numero entre 2 y 16)\t");
  52. #         scanf("%d",&partidos);
  53. #     }
  54. #     /*system('clear');*/
  55. #     int mpartidos[17][50];
  56. #     float votos;
  57. #     int i;
  58. #     int f;
  59. #     int c;
  60. #    
  61. #     for (f=0;f<partidos;f++){
  62. #         for (c=0;c<50;c++){
  63. #             mpartidos[f][c]=0;
  64. #         }
  65. #     }
  66. #     int escanos=0;
  67. #         while (escanos<7 || escanos>100){
  68. #         printf("\n numero de escanos:(numero entre 7 y 100)\t");
  69. #         scanf("%d",&escanos);
  70. #     }
  71. #     /*system('clear');*/
  72. #     int a=0;
  73. #     printf("\n A continuacion meta los votos recibidos por cada partido:\n");
  74. #     for (i=0;i<partidos;i++){
  75. #         a=i+1;
  76. #         printf("\n partido(%d)=\t",a);
  77. #         scanf("%f",&votos);
  78. #         mpartidos[i][0]=votos;
  79. #     }
  80. #     printf("\n\n Ahora el programa calculara los escanos segun este metodo:\n \n D'HONT \n ");
  81. #      
  82. #      int TAM=100;
  83. #     /*METODO DHONT*/
  84. #     float mdhont[17][1000];
  85. #     float cl;
  86. #     float aux1;
  87. #     int fil;
  88. #     int col;
  89. #     int aa;
  90. #     int cc;
  91. #     cc=1;
  92. #     aux1=(mpartidos[fil][0])/(cl+1);
  93. #     traspaso(*mdhont,aux1,partidos,TAM);
  94. #     printf("\n");
  95. #     max_escans(*mdhont,mpartidos[aa][cc],escanos,partidos,TAM);
  96. #    
  97. #     /*system("clear");*/
  98. #    
  99. #     /*fin metodo DHONT*/
  100. #     /*system("clear");*/
  101. #    
  102. #     int z;
  103. #     for (i=0; i<partidos; i++) {
  104. #                     z=i+1;
  105. #                     printf("\n partido%d  %d",z,mpartidos[i][1]);
  106. #                 }
  107. #    
  108. #    
  109. #     printf("\n");
  110. # }
« Última modificación: 09 de Noviembre de 2010, 16:16:10 por tomario »

Desconectado pablo_z

  • PIC10
  • *
  • Mensajes: 2
Re: porque no funciona
« Respuesta #1 en: 09 de Noviembre de 2010, 23:37:33 »
hola tomario, que es lo que tiene que hacer el programa, y que es lo que no te funciona, te muestra una error o no hace lo que vos querés?, comentame mejora a ver si te puedo ayudar.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: porque no funciona
« Respuesta #2 en: 10 de Noviembre de 2010, 00:28:57 »
En la llamada
Código: C
  1. max_escans(*mdhont,mpartidos[aa][cc],escanos,partidos,TAM);
Donde dice *mdhont, para pasar un puntero a mdhont, debería decir &mdhont.

No sé si será solo eso, como dice pablo_z, deberías comentar mejor el problema.

Parece que creaste dos hilos para el mismo tema amigo  :shock:
@fabianjsm is on twitter

Desconectado tomario

  • PIC10
  • *
  • Mensajes: 22
Re: porque no funciona
« Respuesta #3 en: 10 de Noviembre de 2010, 10:40:16 »
hola el programa calcula el numero de escaños de varios partidos, tu introduces el numero de partidos, los ecaaños totales y el numero de votos de cada partido, el programa calcula los escaños de cada partido y lo muestra por pantalla.
el programa sin funciones va bien, por si lo quieren compilar y ven lo que hacen, el segundo con funciones se para solo y pone violacion de segmento,
muchas gracias

Desconectado tomario

  • PIC10
  • *
  • Mensajes: 22
Re: porque no funciona
« Respuesta #4 en: 11 de Noviembre de 2010, 20:17:13 »
hola esto es lo mejor que he hecho despues de dos dias y no compila, donde esta el fallo, que hago mal, ya no se que mas hacer, ayuda porfavor, gracias
Código: C
  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void funci( float *metod, int *vector, int n, int escanos, int partidos );
  6.  
  7.        
  8. main()
  9. {
  10.        
  11.     int partidos=0;
  12.     int mpartidos[17][50];
  13.         float votos;
  14.         int i;
  15.         int f;
  16.         int c;
  17.         int a=0;
  18.         int TAM=100;
  19.         float metod[17];
  20.         int fil;
  21.         int vector[18];
  22.         int x=1;
  23.         int z;
  24.     printf("\n\n Bienvenido al sistema de calculo de escanos.\n por favor siga las instrucciones, gracias\n");
  25.  
  26.     while ( partidos <2 || partidos>16){
  27.         printf("\n eliga el numero de partidos politicos que desea (numero entre 2 y 16)\t");
  28.         scanf("%d",&partidos);
  29.     }
  30.         for (f=0;f<partidos;f++){
  31.                 for (c=0;c<50;c++){
  32.  
  33.                         mpartidos[f][c]=0;
  34.         }
  35.     }
  36.         int escanos=0;
  37.                 while (escanos<7 || escanos>100){
  38.                 printf("\n numero de escanos:(numero entre 7 y 100)\t");
  39.                 scanf("%d",&escanos);
  40.     }
  41.                
  42.         printf("\n A continuacion meta los votos recibidos por cada partido:\n");
  43.         for (i=0;i<partidos;i++){
  44.                 a=i+1;
  45.                 printf("\n partido(%d)=\t",a);
  46.                 scanf("%f",&votos);
  47.                 mpartidos[i][0]=votos;
  48.         }
  49.        
  50.         printf("\n\n Ahora el programa calculara los escanos segun estos 4 metodos:\n \n HAMILTON \n \n D'HONT \n \n LAGUE \n \n HILL-HUNTINGTON \n \n");
  51.      
  52.                 /*METODO DHONT*/
  53.        
  54.         for (fil=0;fil<partidos;fil++){
  55.                         metod[fil]=mpartidos[fil][0];
  56.                         vector[fil]=mpartidos[fil][1];
  57.         }
  58.        
  59.         funci (metod,vector, x, escanos, partidos );
  60.        
  61.         for (fil=0;fil<partidos;fil++){
  62.                 mpartidos[fil][1]=vector[fil];
  63.         }
  64.                        
  65.        
  66.         /*fin metodo DHONT*/
  67.        
  68.         printf("\n\t\tDHONT \t\tHAMILTON \t\t LEAGUE \t HILL-HUNTINGTON\n");
  69.        
  70.         for (i=0; i<partidos; i++) {
  71.                                         z=i+1;
  72.                                         printf("\n partido%d \t%d  \t\t  %d \t\t\t %d \t\t\t %d\n",z,mpartidos[i][1],mpartidos[i][2],mpartidos[i][3],mpartidos[i][4]);
  73.                                 }
  74.         printf("\n");
  75.         return 0;
  76. }      
  77.                         /*FUNCION*/
  78.                
  79.                 void funci( float *metod, int *vector, int n, int escanos, int partidos ){
  80.                 float metodo[17][1000];
  81.                 float aq;
  82.                 int fil;
  83.                 int col;
  84.                 float cl;
  85.                 int TAM=100;
  86.                 float d;
  87.                 float mx=0;
  88.                 int aa,bb;
  89.                 int i;
  90.                 for (fil=0;fil<partidos;fil++){
  91.                         cl=0;
  92.                         for (col=0;col<TAM;col++){
  93.                                 if (n==1){
  94.                                         d=cl+1;
  95.                                         }
  96.                                 if (n==2){
  97.                                         d=(2*cl)+1;
  98.                                 }
  99.                                 if (n==3){
  100.                                         d=sqrt(cl*(cl+1));
  101.                                 }
  102.                                 aq=metod(fil)/(d);
  103.                                 metodo[fil][col]=(aq);
  104.                                 cl++;
  105.                         }
  106.                        
  107.                 }
  108.                        
  109.                 for(i=0;i<escanos;i++){
  110.                         for (fil=0;fil<partidos;fil++){
  111.                                 for (col=0;col<TAM;col++){
  112.                                         if (metodo[fil][col]>mx){
  113.                                                 mx=metodo[fil][col];
  114.                                                 aa=fil;
  115.                                                 bb=col;
  116.                                         }
  117.                                 }
  118.                         }
  119.                         metodo[aa][bb]=0;
  120.                
  121.                         mx=0;
  122.                         vector(aa)=vector(aa)+1;
  123.                 }
  124.  
  125.         }

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: porque no funciona
« Respuesta #5 en: 11 de Noviembre de 2010, 20:27:10 »
¿Que es un escaño o un ecaaño?  :undecided:
No contesto mensajes privados, las consultas en el foro

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: porque no funciona
« Respuesta #6 en: 11 de Noviembre de 2010, 23:20:13 »
yo me preguntaba lo mismo, pero no me he atrevido a hacerlo público  :oops:

Un escaño se refiere a una banca de la cámara de diputados o senadores, por eso el tema del programa es la de contar los votos, estoy en lo correcto?  ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: porque no funciona
« Respuesta #7 en: 12 de Noviembre de 2010, 05:17:10 »
Leíste lo que te escribí?
Independientemente de lo que sea un escaño, no estas pasando correctamente el primer argumento a la función max_escans.
@fabianjsm is on twitter

Desconectado tomario

  • PIC10
  • *
  • Mensajes: 22
Re: porque no funciona
« Respuesta #8 en: 12 de Noviembre de 2010, 14:12:56 »
ya lo solucione, muchas gracias!!!!