Ir ao conteúdo
  • Cadastre-se

C Teste do programa e sugestões


NhemonF
Ir à solução Resolvido por GBMelkor,

Posts recomendados

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

// Uso das funções para inserção de cabeçários e tabela
void imprime_bemvindo(void){
		printf("==============================================================\n");
		printf("========BEM-VINDO AO RNE - RÓTULO NUTRITIVO ELETRÔNICO========\n");
		printf("==============================================================\n");
	}

void inserir_dados(void){
        printf("=================INSERÇÃO DE DADOS==================\n");
}

void imprime_dados(void){
        printf("=======================IMPRESSÃO DE DADOS=======================\n");
}

void imprime_tabelanutritiva(void){
        printf("====================================================\n");
        printf("=======TABELA REFERENCIAL - QUANTIDADE MÁXIMA=======\n");
        printf("====================================================\n");
        printf("| Nutriente             || Quantidade Máxima       |\n");
        printf("|==================================================|\n");
        printf("| Proteínas             || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Carboidratos          || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Lipídios              || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Gorduras Totais       || 100 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Gorduras Saturadas    || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Sódio                 || 2400 miligramas         |\n");
        printf("|==================================================|\n");
        printf("| Ferro                 || 14 gramas               |\n");
        printf("|==================================================|\n");
        printf("| Cálcio                || 800 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Energia               || 2000 caloria            |\n");
        printf("|==================================================|\n");
        printf("| Colesterol            || 30 gramas               |\n");
        printf("|==================================================|\n");
        printf("| Fibras                || 30 gramas               |\n");
        printf("|==================================================|\n");
}

void imprime_fichanutritiva(void){
        printf("=====================================================\n");
        printf("==================FICHA NUTRITIVA====================\n");
        printf("=====================================================\n");
}

void imprime_diagnutritivo(void){
        printf("=====================================================\n");
        printf("================DIAGNÓSTICO NUTRITIVO================\n");
        printf("=====================================================\n");
}



//*Função principal do programa*
// Atribuição e inserção de dados
int main(){
	setlocale(LC_ALL, "Portuguese");

	// Definição
    const int maxproteina=150, maxlipidios=150, maxcarboidratros=150, maxenergia=2000, maxgordurasT=100;
    const int maxgordurasS=25, maxcolesterol=150, maxfibra=30, maxcalcio=800, maxferro=14, maxsodio=2400;

    // Variação
	char nome_nutriente[20];
	int maxnutriente, quant_nutriente, i = 1, valor_diario;
	int proteinas, lipidios, carboidratos, energia, gordurasT, gordurasS, colesterol, fibra, ferro, sodio, calcio;
	int vdproteinas, vdlipidios, vdcarboidratos, vdenergia, vdgordurasT, vdgordurasS, vdcolesterol, vdfibra, vdferro, vdsodio, vdcalcio;
    int resposta;
    int opcao = 0;

	// Estrutura do Programa
	//- Deve inserir os dados de cada nutriente, incluindo a quantidade máxima deste elemento.
	imprime_bemvindo();
	imprime_tabelanutritiva();
	printf("\n");
	inserir_dados();
	for(i=1;i<5;i++){
		printf("Digite o %iº nutriente: ", i);
		setbuf(stdin, NULL);
		scanf("%49[^\n]s", nome_nutriente);

		printf("Digite a quantidade máxima de %s: ", nome_nutriente);
		scanf("%i", &maxnutriente);

		printf("Digite a quantidade apresentada de %s : ", nome_nutriente);
		scanf("%i", &quant_nutriente);

		valor_diario = ((quant_nutriente/maxnutriente)*100);
		printf("\n");
	}

    system("cls");
	system("Color A");

    // Impressão de dados
    imprime_dados();
    printf("\n");
    imprime_fichanutritiva();

    for(i=1;i<5;i++){
            printf("| Nutriente: %s. || Valor diário do nutriente (porc.): %i.\n", nome_nutriente, valor_diario);
            printf("=====================================================\n");
        }

    printf("*Observações: para sódio = mg.\n");
    printf("\t      para energia = cal.\n");
    printf("\n\n\n");

    // Análise de quantidades e impressão do prontuário nutritivo
    //- Deve inserir o número da opção para realizar o diagnóstico, e, posteriormente, inserir a quantidade
    //presente no produto novamente.
    imprime_diagnutritivo();

    do{
        printf("Escolha uma das opções a seguir: \n");
        printf("[1] - Energia\n");
        printf("[2] - Gorduras e Colesterol\n");
        printf("[3] - Minerais e Fibra\n");
        printf("[4] - Sódio\n");
        printf("\n");
        scanf("%i", &opcao);


        switch(opcao){


            case 1: printf("Você escolheu a opção 1 - Energia\n\n");
                    printf("Digite novamente a quantidade de Energia (em cal): ");
                    scanf("%i", &energia);

                    vdenergia = (energia/maxenergia)*100;
                    printf("\n");


                    if (vdenergia >= 90){
                        printf("O(A) paciente obteve aumento do peso.\n");
                        printf("Recomendação: é necessário que o paciente realize exercícios físicos\n");
                        printf("a fim de diminuir para o peso ideal.\n\n");
                    }

                    else if ((vdenergia < 90) && (vdenergia >= 60)){
                        printf("O(A) paciente não apresenta ganho ou perda de peso.\n\n");
                    }

                    else {
                        printf("O(A) paciente obteve diminuição do peso.\n");
                        printf("Recomendação: é necessário que o paciente se alimente de nutrientes ricos em carboidratos\n");
                        printf("para chegar ao peso ideal. \n\n");
                    }
                    break;
                    printf("\n");




            case 2: printf("Você escolheu a opção 2 - Gorduras e Colesterol\n\n");
                    printf("Digite novamente a quantidade de Gorduras Totais (em g): ");
                    scanf("%i", &gordurasT);
                    printf("Digite novamente a quantidade de Gorduras Saturadas (em g): ");
                    scanf("%i", &gordurasS);
                    printf("Digite novamente a quantidade de Coelsterol (em g): ");
                    scanf("%i", &colesterol);

                    vdgordurasT = (gordurasT/maxgordurasT)*100;
                    vdgordurasS = (gordurasS/maxgordurasS)*100;
                    vdcolesterol = (colesterol/maxcolesterol)*100;
                    printf("\n");


                    if ((vdgordurasT >= 90) || (vdgordurasS >= 90) || (colesterol >= 90)){
                        printf("O(A) paciente apresenta quantidades diárias dos nutrientes acima da média.\n");
                        printf("Quando ultrapassar, pode ocasionar uma série de problemas de saúde, \n");
                        printf("como problemas cardíacos, entupimento das veias, ou\n");
                        printf("uma possível parada cardíaca.\n");
                        printf("Recomendação: É necessário que o(a) paciente realize atividades físicas \n");
                        printf("para reduzir as quantidades de alimento consumidas.\n\n");
                    }

                    else if((vdgordurasT < 90) && (vdgordurasT >= 60) && (vdgordurasS < 90) && (vdgordurasS >= 60) && (colesterol < 90) && (colesterol >= 60)) {
                        printf("O(A) paciente apresenta quantidades diárias dos nutrientes dentro do valor permitido.\n");
                        printf("Ou seja, não apresenta problemas de saúde.\n\n");
                    }

                    else {
                        printf("O(A) paciente apresenta quantidades diárias dos nutrientes abaixo da média. \n");
                        printf("Quando for inferior em relação à média, pode ocasionar uma série de problemas de saúde, \n");
                        printf("como oxidação de carboidratos, exaustão precoce e carência de vitaminas lipossolúveis (A,D,E e K). \n");
                        printf("Recomendação: É necessário consumir alimentos que contenham \n");
                        printf("gorduras poli-insaturadas, como salmão, e/ou monoinsaturadas, como nozes, castanhas, amêndoas. \n\n");
                    }
                    break;
                    printf("\n");




            case 3: printf("Você escolheu a opção 3 - Minerais e Fibra\n\n");
                    printf("Digite novamente a quantidade de Ferro (em g): ");
                    scanf("%i", &ferro);
                    printf("Digite novamente a quantidade de Cálcio (em g): ");
                    scanf("%i", &calcio);
                    printf("Digite novamente a quantidade de Fibras (em g): ");
                    scanf("%i", &fibra);

                    vdferro = (ferro/maxferro)*100;
                    vdcalcio = (calcio/maxcalcio)*100;
                    vdfibra = (fibra/maxfibra)*100;
                    printf("\n");


                    if ((vdferro >= 90) && (vdcalcio >= 90) && (vdfibra >= 90)){
                        printf("O(A) paciente pode apresentar uma quantidade de nutrientes acima da média. \n");
                        printf("O aumento da quantidade diária de nutrientes, pode ocasionar \n\n");
                        printf("problemas de saúde, como \n");
                    }

                    else if ((vdferro < 90) && (vdferro >= 60) || (vdcalcio < 90) && (vdcalcio >= 60) || (vdfibra < 90) && (vdfibra >= 60)){
                        printf("O(A) paciente apresenta uma quantidade de nutrientes dentro do solicitado. \n");
                        printf("O(A) paciente não apresentou problemas nutricionais\n\n.");
                    }

                    else {
                        printf("O(A) paciente pode apresentar uma quantidade de nutrientes abaixo da média. \n");
                        printf("A redução da quantidade de nutrientes consumida, pode ocasionar \n");
                        printf("problemas de saúde, como anemia, ospteoporose, \n\n");
                    }
                    break;
                    printf("\n");




            case 4: printf("Você escolheu a opção 4 - Sódio\n\n");
                    printf("Digite novamente a quantidade de Sódio (em mg): ");
                    scanf("%i", &sodio);

                    vdsodio = (sodio/maxsodio)*100;
                    printf("\n");


                    if (vdsodio >= 90){
                        printf("O(A) paciente pode apresentar pressão alta - excesso na quantidade de sódio ingerida no corpo.\n");
                        printf("Recomedação: O paciente deve consumir em quantidades menores do elemento.\n");
                        printf("Deve também consumir líquidos, como, por exemplo, água.\n\n");
                    }

                    else if ((vdsodio < 90) && (vdsodio >= 60)){
                        printf("O(A) paciente não apresenta nenhum problema de saúde a respeito da quantidade diária ingerida do sódio.\n");
                        printf("Recomendação: O paciente deve continuar mantendo a quantidade de sódio.\n\n");
                    }

                    else {
                        printf("O(A) paciente pode apresentar pressão baixa - carência de sódio ingerida no corpo.\n");
                        printf("Recomendação: O paciente deve consumir uma quantidade mínima do elemento.\n\n");
                    }
                    break;
                    printf("\n");




            default: printf("Opção inválida.\n");
                     printf("\n\n");


        }
        printf("Gostaria de inserir outra opção? [0/1]\n");
        printf("\n");
        scanf("%i", &resposta);

    }while (resposta == 1);

    system("cls");
    printf("Obrigado por usar o RNE\n");
    printf("Finalizando o programa. . . . . .\n");



    return 0;

}

Aqui está.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@NhemonF O programa está bem legal! Não olhei a fundo, então não verifiquei erros de lógica ou trechos que podem ser melhorados, mas as sugestões que te dou são relativas à legibilidade do programa.

-----------

Tente modularizar mais, isso vai deixar o programa mais "reutilizável". Por exemplo, você pode criar uma função só para imprimir as linhas:

// Função que imprime uma linha horizontal na tela, usando sinais de =
void imprime_Linha(void){
	printf("====================================================\n");
}

São boas práticas para obter maior legibilidade:

  • Modularizar as partes do programa (Inserção de dados / Cálculos / Menus)
  • Somente deixar na main a chamada de funções, ou criar um menu chamando as funções, e chamar este menu na main. Ex:
    • [1] Inserir dados;
    • [2] Calcular x quantidade; (...)
  • Comentar o que faz cada função, ex:
    • // Função usada para fazer tal coisa
  • Usar poucas variáveis, e com nomes pequenos.
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...