Ir ao conteúdo
  • Cadastre-se

programa em C


nilton_sr
Ir à solução Resolvido por Massita,

Posts recomendados

Bom dia pessoal!!!

 

Estou fazendo um programa onde ele deve ler os dados de um arquivo, contendo NOME, ALTURA, PESO e IDADE:

 

exemplo:

 

Maria Bonita 1.70 49.0 20

 

e tenha a seguinte saída baseado nos seguintes critérios:

 

ALTURA: de 1.70 a 1.85 m

PESO: de 48.0 a 60.0 Kg

IDADE: de 17 a 21 anos

 

 

Saída esperada na tela

 

 

Maria Bonita 1.60 49.0 20

 

 

Altura fora dos padrões

Peso dentro dos padrões

Idade dentro dos padrões

Candidata reprovada

 

 

 

Criei este código só que  esta reprovando todas as candidatas, segue abaixo o código se alguem puder me apontar onde estou errando:

#include <conio.h>#include <stdio.h>#include <string.h>int main(){char nome[40];float altura,peso;int idade, i=0;FILE *arq = fopen("Modelos.dat","r");if (arq == NULL){printf("\nArquivo não encontrado");return 1;}printf("\nVeja os resultados das modelos aprovadas.");while(fgets(nome,40,arq)!=NULL){fscanf(arq, "%.2f %.2f %i ",&altura,&peso,&idade);printf("\nModelo: %s",nome);if(altura>=1.70 && altura<=1.85)printf("\nEstatura dentro dos padroes.");elseprintf("\nEstatura fora dos padroes.");if(peso>=48.0 && peso<=60.0)printf("\nPeso dentro dos padroes.");elseprintf("\nPeso fora dos padroes.");if(idade>=17 && idade<=21)printf("\nIdade dentro dos padroes.");elseprintf("\nIdade fora dos padroes.");if(altura>=1.70 && altura<=1,85 && peso>=48.0 && peso<=60.0 && idade>=17 && idade<=21)printf("\nModelo aprovada!!!.");elseprintf("\nModelo reprovada.");}fclose(arq);getch();return 1;}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá!

Tennte organizar esses if..else.

 

Crie uma variável boolean(em C vamos tratar como 0 e 1) para mostrar somente o resultado final(aprovada/reprovada).

int aprovada = 1;

Dentro desses else, coloque ele como falso:

if(altura>=1.70 && altura<=1.85)  printf("\nEstatura dentro dos padroes.");else{  printf("\nEstatura fora dos padroes.");  aprovada = 0;}

Faça isso nos outros if..else

 

No final, só altere esse if:

if(aprovada)printf("\nModelo aprovada!!!.");elseprintf("\nModelo reprovada.");}
Link para o comentário
Compartilhar em outros sites

Boa tarde meu caro, fiz como voce me pediu, assim como mostra o codigo abaixo. Mas ainda todas as candidatas estão tendo suas saídas fora dos padrões e sucessivamente sendo reprovada:

#include <conio.h>#include <stdio.h>#include <string.h>int main(){    char nome[40];    float altura,peso;    int idade, aprovada = 1;    FILE *arq = fopen("Modelos.dat","r");    if (arq == NULL)    {            printf("\nArquivo nao encontrado");            return 1;    }    printf("\nVeja os resultados das modelos aprovadas.");        while(fgets(nome,40,arq)!=NULL)    {          fscanf(arq, "%.2f %.2f %i ",&altura,&peso,&idade);          printf("\nModelo: %s",nome);                    if(altura>=1.70 && altura<=1.85)             printf("\nEstatura dentro dos padroes.");          else           {          printf("\nEstatura fora dos padroes.");            aprovada = 0;          }                    if(peso>=48.0 && peso<=60.0)             printf("\nPeso dentro dos padroes."); else {  printf("\nPeso fora dos padroes.");  aprovada = 0; }                              if(idade>=17 && idade<=21)             printf("\nIdade dentro dos padroes.");          else          {            printf("\nIdade fora dos padroes.");            aprovada = 0;          }                     if(aprovada)             printf("\nModelo aprovada!!!.");          else             printf("\nModelo reprovada!!!");    }    fclose(arq);getch();return 1;}

veja foto do resultado ao executar.

 

https://www.dropbox.com/s/x1n32crehg6e31p/Captura%20de%20tela%202014-05-06%2015.26.39.png

Link para o comentário
Compartilhar em outros sites

Bom dia meu caro

 

Sou leigo ainda na linguagem C, estou aprendendo, e me embananei com sua resposta, onde no meu código devo colocar este printf. Me perdoe por estar enchendo o saco. Mas preciso muito que este programa de certo..

 

Nilton

 

OBS: Entendi o que voce quis dizer, fiz aqui e é verdade ele nao esta conseguindo pegar os valores dentro o arquivo, como posso fazer que ele pegue os valores, e faça a comparação.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não tenho muita experiência com arquivos em C, mas verifique se o arquivo está abrindo. Exemplo:

FILE *arquivo;if((arquivo = fopen("teste","w")) == NULL)  {    printf("Erro ao abrir arquivo!!!\n");    exit(1);  }

fonte: http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tutoriais/c_int/arquivos.htm

Link para o comentário
Compartilhar em outros sites

Nilton,

 

O problema é mesmo o que eu te disse...

A altura, o peso e a idade estão salvos no arquivo como string.

Você está lendo tudo e colocando na variável nome, já que você está lendo 40 posições fixas.

Recomendo, ao gravar seu arquivo .dat, escrever o nome com os 40 caracteres, ou escrever um final de string, para saber quando terminou o nome, ou ainda, antes de escrever o nome, gravar um inteiro com o numero de caracteres que o nome tem, para fazer a leitura apenas do nome.

Depois, para gravar os outros dados, salve-os como float, int ou como for necessário, para não ter problemas com a leitura do arquivo depois.

 

Espero ter ajudado

Qualquer problema ou erro(inclusive meu), pode comentar, tá meio corrido aqui, mas vou dar uma olhada quando puder.

Link para o comentário
Compartilhar em outros sites

Caro Thiago ajudou sim entendi o que você quis me dizer. 

 

Consegui fazer o que voce me disse agora esta mostrando quem esta fora dos padrões e dentro como CANDIDATA APROVADA, mudei de 40 para 16 no nome, SEGUE UM PRINT COMO EXEMPLO

 

https://www.dropbox.com/s/v5ia7rnjdp2exom/Captura%20de%20tela%202014-05-07%2015.30.44.png

 

SEGUE CÓDIGOpra voce dar uma olhada:

#include <conio.h>#include <stdio.h>#include <string.h>int main(){    char nome[16];    float altura,peso;    int idade;    int aprovada = 1;    FILE *arq;    arq = fopen("Modelos.dat","r");    if (arq == NULL)    {            printf("\nArquivo nao encontrado");            return 1;    }    printf("\nResultados de acordo com os padroes se estão aprovadas ou nao.\n\n");    while(fgets(nome,16,arq)!=NULL)    {          fscanf(arq, "%f %f %i ",&altura,&peso,&idade);          printf("\nCandidata: %s\n",nome);          if(altura>=1.70 && altura<=1.85)             printf("\nEstatura dentro dos padroes.");          else          {          printf("\nEstatura fora dos padroes.");            aprovada = 0;          }          if(peso>=48.0 && peso<=60.0)             printf("\nPeso dentro dos padroes."); else {  printf("\nPeso fora dos padroes.");  aprovada = 0; }          if(idade>=17 && idade<=21)             printf("\nIdade dentro dos padroes.");          else          {            printf("\nIdade fora dos padroes.");            aprovada = 0;          }          if(aprovada == 0)// AQUI EU COLOQUEI APROVADA  == 0 ACHO QUE O ERRO ESTA AQUI!!!             printf("\nCandidata aprovada!!!.\n\n");          else             printf("\nCandidata reprovada!!!\n\n");    }fclose(arq);getch();return 0;} 
Link para o comentário
Compartilhar em outros sites

Fiz uma alteração no código caro thiago ou Math.PI, agora ele esta mostrando quem esta com os 3 critérios no padrão como aprovada e 3 critérios fora do padrão como reprovada. Só que se 2 esta no padrão e um não ele esta aprovando e eu queria que reprovasse. Segue código modificado abaixo se puderem ver uma solução estarei grato.

#include <conio.h>#include <stdio.h>#include <string.h>int main(){    char nome[16];    float altura,peso;    int idade;    int aprovada = 1;    FILE *arq;    arq = fopen("Modelos.dat","r");    if (arq == NULL)    {            printf("\nArquivo nao encontrado");            return 1;    }    printf("\nClassificacao das Modelos.\n\n");    while(fgets(nome,16,arq)!=NULL)    {          fscanf(arq, "%f %f %i ",&altura,&peso,&idade);          printf("\nCandidata: %s\n",nome);          if(altura>=1.70 && altura<=1.85) {  printf("\nEstatura dentro dos padroes.");  aprovada = 1;       }          else          {          printf("\nEstatura fora dos padroes.");            aprovada = 0;          }          if(peso>=48.0 && peso<=60.0) {             printf("\nPeso dentro dos padroes.");             aprovada = 1;          } else {  printf("\nPeso fora dos padroes.");  aprovada = 0; }          if(idade>=17 && idade<=21) {             printf("\nIdade dentro dos padroes.");             aprovada = 1;          }          else          {            printf("\nIdade fora dos padroes.");            aprovada = 0;          }          if(aprovada == 1 )             printf("\nCandidata aprovada!!!.\n\n");          else             printf("\nCandidata reprovada!!!\n\n");    }fclose(arq);getch();return 0;} 
Link para o comentário
Compartilhar em outros sites

  • Solução

Certo, o problema da aprovação é que... se no último item ela for aprovada, você vai setar o "aprovado" para 1... E ai é como se ignorasse os outros pontos...

Você pode resolver isso utilizando uma variavel para cada ponto... por exemplo

aprovado_altura

aprovado_peso

aprovado_idade

e no final verificar se os tres pontos foram aprovados...

ou então fazer uma soma.. um contador...

aprovado começa com zero.. cada topico q for aprovada, acrescenta 1... se no final o aprovado for 3, então ela passou nos 3 testes...

 

outra recomendação, falando numa boa,

recomendo estudar um pouco de lógica matematica... é tão importante quanto, se não mais, do que aprender programação =)

 

até mais

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

Visitante
Este tópico está impedido de receber novas respostas.

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...