Duda en código con arreglos.

Foro para los que usan Dev-C++.
Responder
Mensaje
Autor
mrbrionez
Mensajes: 1
Registrado: 19/03/2018 9:25 am

Duda en código con arreglos.

#1 Mensaje por mrbrionez » 19/03/2018 9:30 am

Buen día.

Compañeros(as), tengo una duda sobre un código que estuve realizando, la verdad soy nuevo en esto del lenguaje C, y sobre todo con los arreglos no me queda todo muy claro,
el problema con el código es esta parte "for(C=1;C<=4;C++)
{
porcentaje[C]=(((float)acumulado[C])/Total)*100.0;
printf("\nEl candidato %c acumulo %i votos y obtuvo un %0.2f%% de los votos totales",Candidato[C],acumulado[C],porcentaje[C]);
}"
El 4to resultado que me arroja contiene "basura" y no muestra correctamente los nombres de los cantidatos ABCD, pero no logro encontrar como arreglarlo, creo yo que es lo único que me falta para que funcione correctamente, espero que alguno de ustedes me pueda ayudar a clarificar mi error.
gracias.
ESTE ES EL CODIGO COMPLETO.

Código: Seleccionar todo

#include <stdio.h>
#include <conio.h>

int main()
{
    int matriz[4][5],acumulado[4],distrito[5];
    int C,D,masvotos=0;
    float Total=0;
    float porcentaje[5];
    char Candidato[]=" ABCD";
 
    //Inicializo mis tablas    
    for(C=1;C<=5;C++)
    {
       acumulado[C]=0;
       distrito[C]=0;
       porcentaje[C]=0.0;
    }

    //Pregunto la cantidad de Votos
    for(C=1;C<=4;C++)
    {
       printf("Ingresar la cantidad de votos del Candidato %c\n",Candidato[C]);             
       for(D=1;D<=5;D++)
       {
          printf("Distrito %i: ",D);
          scanf("%i",&matriz[C][D]);
          acumulado[C]=acumulado[C]+matriz[C][D];                           //aprovecho este FOR para realizar las suma de CANDIDATOS                
       }
    }
    
    //Imprimo la tabla
    printf("\nLos datos anteriormente ingresados por el IFE fueron los siguientes: \n");
    printf("\n     %c  %c  %c  %c",65,66,67,68,Candidato[1],Candidato[2],Candidato[3],Candidato[4]);
    for(D=1;D<=5;D++)
    {
        printf("\n%i -> ",D);
        for(C=1;C<=4;C++)
        {
            printf("%i  ",matriz[C][D]);                                  
            distrito[D] = distrito[D] + matriz [C][D];                      //aprovecho este FOR para realizar las suma de DISTRITO
            Total = Total + ((float)matriz[C][D]);                          //aprovecho este FOR para sumar todos los votos
        }      
    }
    
    //Cantidad de votos por CANDIDATO
    printf("\n\nEl resultado por candidatos se muestra a continuacion: ");
    for(C=1;C<=4;C++)
    {
         porcentaje[C]=(((float)acumulado[C])/Total)*100.0;               
         printf("\nEl candidato %c acumulo %i votos y obtuvo un %0.2f%% de los votos totales",Candidato[C],acumulado[C],porcentaje[C]);     
    }
    
    //Defino al men con mas votos
    for(C=1;C<=4	;C++)
    {
         if(masvotos<acumulado[C])                                         //Usando el array de votos por candidato pregunto por el valor mas alto  
         {
              masvotos=acumulado[C];                                       //El dato lo guardo en masvotos
              D=C;                                                         //y en D guardo la posicion
         }                                                                                           
    }
    printf("\n\nEl men mas corrupto fue el candidato %c\n",Candidato[D]);    //Una vez definida la posicion del candidato lo imprimo
     
    //Cantidad de votos por DISTRITO
    printf("\nEl resultado por distrito se muestra a continuacion: ");
    for(D=1;D<=5;D++)
    {
         porcentaje[D] = (((float)distrito[D])/Total)*100.0;
         printf("\nEl distrito %i capturo %i votos y equivale a un %0.2f%% de los votos totales",D,distrito[D],porcentaje[D]);     
    }
    
    getch();
    return 0;    
}
EDITADO: Encierra el código entre etiquetas 'code', botón </>
MODERADOR: mollok

mollok
Mensajes: 526
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Duda en código con arreglos.

#2 Mensaje por mollok » 19/03/2018 2:31 pm

Los arrays empiezan a contar desde 0 y terminan en un valor anterior en una unidad al límite máximo que le has puesto.

Supongamos el siguiente:

Código: Seleccionar todo

int array[5];
Para recorrerlo debe ser así:

Código: Seleccionar todo

for(i=0; i<5; ++i)
El error es recurrente en tu código.

Además tienes otro igual de grave:
Has dimensionado acumulado de esta forma:

Código: Seleccionar todo

int acumulado[4];
Pero lo inicializas a 0 mucho más allá de su dimensión admisible:

Código: Seleccionar todo

for(C=1;C<=5;C++)
{
   acumulado[C]=0;
   distrito[C]=0;
   porcentaje[C]=0.0;
}
La variable C supera los límites del array y por consiguiente escribe en una zona desconocida de la memoria. De igual forma C empieza 1 y termina en 5, cuando debería empezar en 0 y terminar en 4, o 3 para acumulado.

Por otra parte para inicializar un array a 0 C ofrece una forma directa de hacerlo:

Código: Seleccionar todo

int array[5] = {0};
Esta es una forma de inicializar los arrays, los primeros elementos tomarán el valor que hay en la lista encerrada entre corchetes, los demás se pondrán a 0 hasta completar. Por tanto si se inicializa un array con un simple 0, C dará ese valor al primer elemento y el resto lo rellenará de 0, así todo el array tendrá 0.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados