Ayuda con este programa

Iniciado por daz08, 4 Diciembre 2014, 16:01 PM

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

daz08

Hola, tengo el problema que la variable por me arroja cero siempre, les dejo el código, podría ser una tontería, pero estoy en semestrales y entre tanto no veo el problema.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
float por,pg;
int f,s,i,o,l,x,y,z,may,p,t,v,tv,sup[10],m,ng,mv1,mv2;
void impr(int **dc);
void cal(int **dc);
void gana(int **dc);
main()
{
   int **dc;
   
   printf("\n\tCuantos distritos son? ");
   scanf("%d",&f);
   printf("\n\tCuantos votantes son? ");
   scanf("%d",&v);
   printf("\n\tCuantos candidatos son? ");
   scanf("%d",&s);
   int sup[s];
   char ca[s][50];
   dc=(int **) malloc(f *sizeof(int *));
   for(i=0;i<f;i++)
      {
                   *(dc+i)=(int *) malloc(s *sizeof(int));
                   
      }
      for(i=0;i<s;i++)
      {
                      printf("\n\tIngrese el nombre del candidato %d: ",i+1);
                      scanf("%s",&ca[i]);
      }
     
     for(l=0;l<s;l++)
          {          
                     printf("\n\n");
                     for(o=0;o<f;o++)
                        {
                                     printf("\n\tCuantos votos tuvo el candidato %s en el distrito %d: ",*(ca+l),(o+1));
                                     scanf("%d",(*(dc+o)+l));
                        }
               
          }
      clrscr();
      printf("\n\n");
      gotoxy(30,3);printf("Candidatos");
     gotoxy(3,3);printf("Distrito");  
      x=15;
      for(i=0;i<s;i++)
         {
                   gotoxy(x,5);printf("%s",ca[i]);
                   x=x+15;
                 
         }
      impr(dc);
      cal(dc);
      printf("\n\n\n\n");
      printf("\tEl candidato mas votado es: %s con %d",ca[p],t);
      gana(dc);
      printf("\n\n\n\n");
      printf("\tEl Candidato ganador es: %s",ca[m]);
      printf("\n\n\n\n");
      system("pause");
}
void impr(int **dc)
{
   
    x=15;
    y=7;
    z=7;
    for(o=0;o<f;o++)
          {          
                     printf("\n");
                     gotoxy(5,z);printf("%d",o+1);
                     z=z+2;
                     for(l=0;l<s;l++)
                        {  
                                    gotoxy(x,y); printf("%d",*(*(dc+o)+l));
                                    x=x+15;
                        }
                        y=y+2;
                        x=15;
           }
}
void cal(int **dc)
{  
    for(l=0;l<s;l++)
                        {  
                                    sup[l]=0;
                        }
    for(o=0;o<s;o++)
          {    
                     for(l=0;l<f;l++)
                        {  
                                    sup[o]+=(*(*(dc+l)+o));
                        }
                         tv+=sup[o];
           }
    gotoxy(3,z);printf("Total");
    for(i=0;i<s;i++)
           {  
               gotoxy(x,y);printf("%d",sup[i]);
               x=x+15;
           }
    may=sup[0]; p=0;
    for(i=1;i<s;i++)
           {  
               if(sup[i]>may)
               {
                  may=sup[i];
                  p=i;
               }
           }
  t=sup[p];
  //printf("%d %d ",tv,v);
  por=(tv/v)*100; //aquí esta el problema
  printf("\n\n\n\n\tEl porcentaje de las personas que votaron: %.2f %",por);

}
void gana(int **dc)
{
    for(i=0;i<f;i++)
    {
            pg=(sup[i]/tv)*100;
            if(pg>50)
            {
                      m=i;
                      ng=1;
            }
    }
    if(ng==0)
    {   may=sup[0];
        mv1=0;
        for(l=1;l<f;l++)
        {
             if(sup[l]>may)
             {
                 may=sup[l];
                 mv1=l;
             }
         }        
    }
}

Kherom

#1
1: Tu código es una chapuza ilegible.

2: No deberías usar variables globales, y menos con nombres de *****.

3: Da la información del fallo en el texto, no en un comentario que he visto de pura casualidad. Y explica antes qué has hecho para intentar solucionarlo, etc.

4: Estás usando C: tv/v, siendo tv y v de tipo int, es una división entera y produce valores enteros. Tienes que hacer un casting a float de alguna de las dos variables (preferiblemente ambas) para realizar una división con decimales. Tal que así:

Citarpor = (float)( tv ) / (float)( v );

daz08

Cita de: Kherom en  5 Diciembre 2014, 00:21 AM
1: Tu código es una chapuza ilegible.

2: No deberías usar variables globales, y menos con nombres de *****.

3: Da la información del fallo en el texto, no en un comentario que he visto de pura casualidad. Y explica antes qué has hecho para intentar solucionarlo, etc.

4: Estás usando C: tv/v, siendo tv y v de tipo int, es una división entera y produce valores enteros. Tienes que hacer un casting a float de alguna de las dos variables (preferiblemente ambas) para realizar una división con decimales. Tal que así:

Gracias por la ayuda, en comparación a ti, no te contestaré con aires de grandeza ni nada. Solo diré gracias: Gracias, Bill Gates.

leosansan

#3
Cita de: daz08 en  4 Diciembre 2014, 16:01 PM
Hola, tengo el problema que la variable por me arroja cero siempre, les dejo el código, podría ser una tontería, pero estoy en semestrales y entre tanto no veo el problema.


  por=(tv/v)*100; //aquí esta el problema
  printf("\n\n\n\n\tEl porcentaje de las personas que votaron: %.2f %",por);


O en vez del explícito cast sencillamente multiplica uno de los enteros por 1. :


Citar(
    (1.*
tv/v)*100; //ya no esta aquí esta el problema
    printf("\n\n\n\n\tEl porcentaje de las personas que votaron: %.2f %",por);



¡¡¡¡ Saluditos! ..... !!!!