Decrease the code

Asked

Viewed 79 times

0

I’m new at programming, I’m doing a project, but it’s getting really big, I was wondering if someone could help me narrow it down. Goes below:

#include <iostream>
#include <locale.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

void MostraMedia (){
    FILE *a;
    if((a = fopen ("media.txt", "wb+")) == NULL){
    printf ("O arquivo nao existe.");
    exit(1);
}

    int ano [] = {2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,2017};
    int mortes [] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144, 10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};
    
    
    int n, i, anos, soma;
    float media;
    
    soma = 0;
    media = 0;
    for (i = 0; i <= 5; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2000 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    for (i = 6; i <= 11; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    media = soma/6;
    printf ("A media de mortes do ano 2001 é: %.2f\n", media); 
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 12; i <= 17; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2002 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 18; i <= 23; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2003 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 24; i <= 29; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2004 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 30; i <= 35; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2005 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 36; i <= 41; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2006 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 42; i <= 47; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2007 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 48; i <= 53; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2008 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 54; i <= 59; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2009 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 60; i <= 65; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2010 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 66; i <= 71; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2011 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 72; i <= 77; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2012 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 78; i <= 83; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2013 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 84; i <= 89; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2014 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 90; i <= 95; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2015 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 96; i <= 101; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2016 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
    soma = 0;
    media = 0;
    
    for (i = 102; i <= 107; i++){
        soma = soma + mortes[i];
        media = soma/6;
    }
    printf ("A media de mortes do ano 2017 é: %.2f\n", media);
    fprintf(a,"\n%d", media);
    
   
}

void CasoAno (){
    
    int ano [] = {2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,2017};
    int mortes [] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144,10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};
    
    int n, i, anos, soma;
    
    soma = 0;
    for (i = 0; i <= 5; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2000 é: %d\n", soma);
    
    soma = 0;

    for (i = 6; i <= 11; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2001 é: %d\n", soma); 
    
    soma = 0;
    
    
    for (i = 12; i <= 17; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2002 é: %d\n", soma);
    
    soma = 0;

    
    for (i = 18; i <= 23; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2003 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 24; i <= 29; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2004 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 30; i <= 35; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2005 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 36; i <= 41; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2006 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 42; i <= 47; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2007 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 48; i <= 53; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2008 é: %d\n", soma);
    
    soma = 0;

    
    for (i = 54; i <= 59; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2009 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 60; i <= 65; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2010 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 66; i <= 71; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2011 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 72; i <= 77; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2012 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 78; i <= 83; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2013 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 84; i <= 89; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2014 é: %d\n", soma);
    
    soma = 0;
    
    for (i = 90; i <= 95; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2015 é: %d\n", soma);

    soma = 0;
    
    for (i = 96; i <= 101; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2016 é: %d\n", soma);

    
    soma = 0;
    
    for (i = 102; i <= 107; i++){
        soma = soma + mortes[i];
    }
    printf ("O total de mortes do ano 2017 é: %d\n", soma);

    
    
}

void MostraMediana(){
    float mediana;
    int i, j, aux;

    int ano [] = {2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,2017};
    int mortes [] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144,10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};
    
    for (i = 0; i <= 5; i++){
        for (j = i+1; j <= 6; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[3] + mortes[4]) / 2;
    printf ("A mediana do ano 2000 é: %.2f\n", mediana);
    
    for (i = 6; i <= 11; i++){
        for (j = i+1; j <= 12; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[9] + mortes[10]) / 2;
    printf ("A mediana do ano 2001 é: %.2f\n", mediana);
    
    for (i = 12; i <= 17; i++){
        for (j = i + 1; j <= 18; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[15] + mortes[16]) / 2;
    printf ("A mediana do ano 2002 é: %.2f\n", mediana);
    
    for (i = 18; i <= 23; i++){
        for (j = i + 1; j <= 24; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[21] + mortes[22]) / 2;
    printf ("A mediana do ano 2003 é: %.2f\n", mediana);
    
    for (i = 24; i <= 29; i++){
        for (j = i + 1; j <= 30; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[27] + mortes[28]) / 2;
    printf ("A mediana do ano 2004 é: %.2f\n", mediana);
    
    for (i = 30; i <= 35; i++){
        for (j = i + 1; j <= 36; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[33] + mortes[34]) / 2;
    printf ("A mediana do ano 2005 é: %.2f\n", mediana);
    
    for (i = 36; i <= 41; i++){
        for (j = i + 1; j <= 42; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[39] + mortes[40]) / 2;
    printf ("A mediana do ano 2006 é: %.2f\n", mediana);
    
    for (i = 42; i <= 47; i++){
        for (j = i + 1; j <= 48; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[45] + mortes[46]) / 2;
    printf ("A mediana do ano 2007 é: %.2f\n", mediana);
    
    for (i = 48; i <= 53; i++){
        for (j = i + 1; j <= 54; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[51] + mortes[52]) / 2;
    printf ("A mediana do ano 2008 é: %.2f\n", mediana);
    
    for (i = 54 ; i <= 59; i++){
        for (j = i + 1; j <= 60; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[57] + mortes[58]) / 2;
    printf ("A mediana do ano 2009 é: %.2f\n", mediana);
    
    for (i = 60 ; i <= 65; i++){
        for (j = i + 1; j <= 66; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[63] + mortes[64]) / 2;
    printf ("A mediana do ano 2010 é: %.2f\n", mediana);
    
    for (i = 66 ; i <= 71; i++){
        for (j = i + 1; j <= 72; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[69] + mortes[70]) / 2;
    printf ("A mediana do ano 2011 é: %.2f\n", mediana);
    
    for (i = 72 ; i <= 77; i++){
        for (j = i + 1; j <= 78; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[77] + mortes[78]) / 2;
    printf ("A mediana do ano 2012 é: %.2f\n", mediana);
    
    for (i = 78 ; i <= 83; i++){
        for (j = i + 1; j <= 84; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[81] + mortes[82]) / 2;
    printf ("A mediana do ano 2013 é: %.2f\n", mediana);
    
    for (i = 84 ; i <= 89; i++){
        for (j = i + 1; j <= 90; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[87] + mortes[88]) / 2;
    printf ("A mediana do ano 2014 é: %.2f\n", mediana);
    
    for (i = 90 ; i <= 95; i++){
        for (j = i + 1; j <= 91; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[93] + mortes[94]) / 2;
    printf ("A mediana do ano 2015 é: %.2f\n", mediana);
    
    for (i = 96 ; i <= 101; i++){
        for (j = i + 1; j <= 102; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[99] + mortes[100]) / 2;
    printf ("A mediana do ano 2016 é: %.2f\n", mediana);
    
    for (i = 102 ; i <= 107; i++){
        for (j = i + 1; j <= 109; j++){
            if (mortes[i] > mortes[j]);
            aux = mortes[i];
            mortes[i] = mortes[j];
            mortes[j] = aux;
        }
    }
    
    mediana = (mortes[106] + mortes[107]) / 2;
    printf ("A mediana do ano 2017 é: %.2f\n", mediana);
}

void MostraModa(){
    float moda,v_conta;
    int i, j, v_moda[i];

    int ano [] = {2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,2017};
    int mortes [] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144,10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};
    
    for (i = 0; i <= 5; i++){
        for (j = 0 + 1; i <= 6; j++){
            if (mortes[i] == mortes[j]){
                    v_moda[i]++;
                    if (v_moda[i] > v_conta){
                        v_conta = v_moda[i];
                        moda = mortes[i];
                } 
            }
        }
    }
    printf ("A moda do ano 2000 eh: %.2f", moda);
    
    for (i = 6; i <= 11; i++){
        for (j = 0 + 1; i <= 12; j++){
            if (mortes[i] == mortes[j]){
                    v_moda[i]++;
                    if (v_moda[i] > v_conta){
                        v_conta = v_moda[i];
                        moda = mortes[i];
                } 
            }
        }
    }
    printf ("A moda do ano 2001 eh: %.2f", moda);
    
}

int main(int argc, char** argv) {
    setlocale (LC_ALL, "Portuguese");

    float media;
    int i,soma,n,anos;

    int ano [] = {2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,2017};
    int mortes [] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144,10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};
    int op;

    //Fazer o menu de opções;
    printf ("Ola!\nEsse programa mostra as opções disponiveis para visualizar esses dados!");

    do{
        printf ("\nEscolha:\n1- Ver o total de mortes por ano:");
        printf ("\n2- Ver a média de mortes por ano: ");
        printf ("\n3- Ver a mediana de mortes por ano: ");
        printf ("\n4- Ver a moda de mortes por ano: ");
        printf ("\n5- Ver a variancia de mortes por ano: ");
        printf ("\n6- Ver o desvio padrao de mortes por ano: ");
        printf ("\nOpcao: ");
        scanf ("%d", &op);

        while ((op!=1)&&(op!=2)&&(op!=3)&&(op!=4)&&(op!=5)&&(op!=6)){
            printf ("\nPor favor digite uma das opcoes!!\n");
            scanf ("%d", &op);
        }

    switch (op){
        case 1: //Mostra a o total de mortes
        CasoAno();
        break;
        case 2:  //Mostra a média
        MostraMedia();
        break;
        case 3:
        MostraMediana(); //Mostra mediana
        break;
        case 4:
        MostraModa();
        break;
    }
    

    }while (op!=0);





    //Fazer as funções com moda, variância e desvio padrão;
    //Fazer a manipulação de arquivos;
    //Fazer a ordenação;
    



    return 0;
}
  • 1

    There is, but it would be interesting for you to at least explain what the code should do.

  • Have you evaluated the use of two-dimensional array? To calculate an average it is better to add inside the loop and split after the loop is finished. This command if (mortes[i] > mortes[j]); does not seem to be right (execute the null command if the condition is true). For what reason you keep declaring and assigning values to local variables (e.g. year), it would not be better to pass as parameter?

3 answers

0

Hello, I saw that you have many "for" the same throughout your code, have you thought about creating a function that "excludes"? You can pass the data by parameter to a function with only 1 for. Example:

   float calculaMedia(int a, int b, int [] mortes) {

      int i, soma=0;
      float media=0;

         for (i = a; i <= b; i++){
            soma = soma + mortes[i];
            media = soma/6;
          }
         return media;
   }

        
  • So, I would be able to put one for inside another for, in a way that he would average 6 out of 6 numbers. Type it starts at 0 and goes to the vector of Indice 6, then calculates the average, shows the result and then continues only starting at Indice 7 and so on. Sorry if you got confused, I’m new at this :/

  • @Joaolochini that same... only use different names for the content of each tie for underlying

0

In function MostraMedia can be:

for (i=0; i<18; i++) {
    soma = 0;
    for (j=0; j<6; j++)
        soma += mortes[i*6+j];
    media = soma /6;
    printf ("A media de mortes do ano %d é: %.2f\n", ano[i], media);
    fprintf(a,"%d\n", media);
}

In the others do similarly.
But reinforcement that the use of a two-dimensional array would facilitate.

0

use for loops to iterate the years as well, pass the data by parameters, rather than declaring duplicates, or by global (less advised), refactoring the code by applying such ideas:

#include <iostream>
#include <locale.h>


struct DadosAnos {
    DadosAnos() {}
    int inicio, fim;
    int *valores;
};

void mostraMedia (DadosAnos dados, FILE* arquivo){
    for (int ano = dados.inicio; ano <= dados.fim; ano++) {
        float media = 0;
        //indice onde começa os dado do respectivo ano
        int index_ano = (ano-dados.inicio)*6;
        int i = index_ano;
        int e = index_ano + 6;
        for (; i < e; i++) {
            media += (float)dados.valores[i];
        }
        media /= 6.0f;
        printf ("A media de mortes do ano %d é: %.2f\n", ano, media);
        //se um arquivo for passada como parametro, o resultado é impresso nele
        if (arquivo)
            fprintf(arquivo,"%d: %.2f\n", ano, media);
    }
}

void casosAno (DadosAnos dados, FILE* arquivo){
    for (int ano = dados.inicio; ano <= dados.fim; ano++) {
        int soma = 0;
        //indice onde começa os dado do respectivo ano
        int index_ano = (ano-dados.inicio)*6;
        int i = index_ano;
        int e = index_ano + 6;
        for (; i < e; i++) {
            soma += dados.valores[i];
        }

        printf ("A total de mortes do ano %d é: %d\n", ano, soma);
        //se um arquivo for passada como parametro, o resultado é impresso nele
        if (arquivo)
            fprintf(arquivo,"%d: %d\n", ano, soma);
    }
}
void ordenar(int* casos) {
    bool ordenado = true;
    do {
        ordenado = true;
        for (int i = 0;i<5;i++) {
            if (casos[i]>casos[i+1]) {
                //inverter
                int temp = casos[i];
                casos[i] = casos[i+1];
                casos[i+1] = temp;
                //===
                ordenado = false;
            }
        }
    } while (!ordenado);
}
void mostraMediana(DadosAnos dados, FILE* arquivo){
    for (int ano = dados.inicio; ano <= dados.fim; ano++) {
        float soma = 0;
        //indice onde começa os dado do respectivo ano
        int index_ano = (ano-dados.inicio)*6;

        //reordenar em ordem crescente
        ordenar(&(dados.valores[index_ano]));
        
        float mediana = (float)(dados.valores[index_ano+2] + dados.valores[index_ano+3]) / 2.0f;

        printf ("A mediana de mortes do ano %d é: %.2f\n", ano, mediana);
        //se um arquivo for passada como parametro, o resultado é impresso nele
        if (arquivo)
            fprintf(arquivo,"%d: %.2f\n", ano, mediana);
    }
}

void mostraModa(DadosAnos dados, FILE* arquivo){
    for (int ano = dados.inicio; ano <= dados.fim; ano++) {
        float soma = 0;
        //indice onde começa os dado do respectivo ano
        int index_ano = (ano-dados.inicio)*6;
        int contador[] = {1,1,1,1,1,1};

        for (int i = 0; i < 6; i++) {
            for (int i2 = 0; i2 < 6; i2++) {
                if(i != i2 &&
                    dados.valores[index_ano+i] == dados.valores[index_ano+i2])
                    contador[i]++;
            }
        }
        int maior_valor = 0;
        int moda = 0;
        for (int i = 0; i < 6; i++) {
            if (contador[i]>maior_valor) {
                maior_valor = contador[i];
                moda = dados.valores[index_ano+i];
            }
        }
        printf ("A moda das mortes do ano %d é: %d\n", ano, moda);
        //se um arquivo for passada como parametro, o resultado é impresso nele
        if (arquivo)
            fprintf(arquivo,"%d: %d\n", ano, moda);
    }
}

int main(int argc, char** argv) {
    //carregar dados de um arquivo, ou preenchelos...
    int mortes[] = {1028, 18, 172, 2, 340, 97, 1075, 13, 150, 0, 338, 113, 1090, 6, 140, 1, 354, 118, 1124, 8, 116, 0, 423, 136, 1144, 10, 115, 1, 407, 176, 1178, 7, 108, 1, 500, 173, 1139, 10, 151,3, 526, 148, 1151, 6, 151, 3, 566, 153, 1205, 7, 139, 3, 625, 166 , 1202, 7, 139, 3, 625, 166, 1212, 6, 137, 1, 678, 169, 1280, 7, 113, 2, 733, 187, 1220, 9, 116, 2, 769, 188, 1285, 8, 126, 3, 835, 169, 1288, 8, 103, 6, 900, 202, 1227, 11, 106, 2, 838, 194, 1317, 9, 113, 2, 959, 201, 1266, 8, 78, 2, 975, 215};

    DadosAnos valores;
    valores.inicio = 2000;
    valores.fim = 2017;
    valores.valores = &(mortes[0]);

    setlocale (LC_ALL, "Portuguese");
    printf ("Ola!\nEsse programa mostra as opções disponiveis para visualizar esses dados!");

    FILE* arquivo = 0;
    int op;
    do {
        printf ("\nEscolha:\n1- Ver o total de mortes por ano:");
        printf ("\n2- Ver a média de mortes por ano: ");
        printf ("\n3- Ver a mediana de mortes por ano: ");
        printf ("\n4- Ver a moda de mortes por ano: ");
        printf ("\n5- Ver a variancia de mortes por ano: ");
        printf ("\n6- Ver o desvio padrao de mortes por ano: ");
        printf ("\nOpcao: ");
        scanf ("%d", &op);

        //mais prático, verificar se está fora da faixa...
        while (op < 1 || op > 6){
            printf ("\nPor favor digite uma das opcoes!!\n");
            scanf ("%d", &op);
        }

        switch (op){
        case 1:
            arquivo = fopen ("casos.txt", "wb+");
            casosAno(valores,arquivo);
            fclose(arquivo);
            break;
        case 2:
            arquivo = fopen ("media.txt", "wb+");
            mostraMedia(valores,arquivo);
            fclose(arquivo);
            break;
        case 3:
            arquivo = fopen ("mediana.txt", "wb+");
            mostraMediana(valores,arquivo);
            fclose(arquivo);
            break;
        case 4:
            arquivo = fopen ("moda.txt", "wb+");
            mostraModa(valores,arquivo);
            fclose(arquivo);
            break;
        }
    } while (op!=0);
    return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.