Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ripper

[Resolvido] Problema com cadastro

Recommended Posts

Bom pessoal tenho que fazer isso:

 

1. Escreva um programa que leia uma lista de nomes (maximo 30 caracteres),

idade (inteira), sexo (M ou F), peso e altura (reais).

Prepare um arquivo com os dados a serem lidos, com no máximo 100 registros.

Apresente as informações lidas na tela no formato de tabela, na ordem

alfabetica.

2. Apresente as informações lidas na tela no formato de tabela, ordenadas por

peso (crescente).

3. Apresente as informações lidas na tela no formato de tabela, ordenadas por

altura (decrescente).

4. Apresente as informações lidas na tela no formato de tabela, ordenadas por

IMC (crescente) e sua respectiva classificação.

Cálculo de IMC

O Índice de Massa Corporal (IMC) é uma medida do grau de obesidade

de uma pessoa. Através do cálculo de IMC é possível saber se alguém

está acima ou abaixo dos parâmetros ideais de peso para sua estatura.

 

Calcular IMC requer a aplicação de uma fórmula:

 

IMC= PESO (Kg) / (ALTURA (m)*ALTURA (m)). IMC é Kg por metro quadrado

Tabela da Associação Brasileira para o Estudo da Obesidade,

para saber como está seu índice:

 

Tabela IMC

Abaixo de 18,5 Você está abaixo do peso ideal

Entre 18,5 e 24,9 Parabéns — você está em seu peso normal!

Entre 25,0 e 29,9 Você está acima de seu peso (sobrepeso)

Entre 30,0 e 34,9 Obesidade grau I

Entre 35,0 e 39,9 Obesidade grau II

Maior ou igual a 40,0 Obesidade grau III

Fiz isso:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MAX 2

struct registro {
       char nome[30];
       int idade;
       float altura, peso;
       char sexo;
       };
struct registro r[MAX];
       
void ORDEM_1()
{
     int i;
     struct registro r[MAX];
     for(i=0;i<MAX;i++){
     char letra = 'A';
     if((toupper(nome[0]) == letra ))  {  printf("%s",nome[31]);}
     else 
     { 
         letra = letra+1;
         if((toupper(nome[0]) == letra )) {printf("%s",nome[31]);}
         else { letra = letra+1;}
     }
   }
}

int main ()
{
   float b,c;
   int i,a,j;
   struct registro r[MAX];
   for(i=0;i<MAX;i++)
   {
       printf("Digite o nome da %d pessoa: ",i+1);
       scanf("%s",&nome[30]);
       printf("\nDigite a idade da %d pessoa: ",i+1);
       scanf("%d",&idade);
       printf("\nDigite o sexo da %d pessoa: ",i+1);
       scanf("%c",&sexo);
       printf("\nDigite a altura da %d pessoa: ",i+1);
       scanf("%f",&altura);
       printf("\nDigite o peso da %d pessoa: ",i+1);
       scanf("%f",&peso);
   }
   printf("Digite como deseja exibir a tabela: \n");
   printf(" \n\t 1- Por ordem alfabetica \n\t 2- Por ordem crescente de peso \n\t 3- Por ordem decrescente de altura \n\t 4- Por altura crescente de altura\n");
   scanf("%d", a);
   if(a!=1 && a!=2 && a!=3 && a!=4) 
   { printf("Digitou um numero invalido. Por favor digite novamente.");}
   switch(a)
    {
       case 1:
         ORDEM_1();
         break;
       case 2:
       
       case 3:
            break;
       case 4:
            break;
    }
   return 0;  
}

Bom não sei muito de structs e queria saber se pelo menos essa parte esta certa. Queria tambem saber como ordenar por ordem crescente e decrescente e porque quando tenho que colocar o sexo da pessoa o programa pula. A parte do imc ja tenho feita (so não sei ordenar). Outra dúvida: quando armazeno dados em r[1], ficam armazenados peso, idade, nome, etc..., ou tenho que coloca-los em forma de vetor ? Agradeço pela atenção e desculpem pelas muitas dúvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise sobre strcoll!

e sobre o programa n fazer todas as leituras acrescente um token na hora que você faz a leitura, assim:

scanf("%s%*c", var);

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só acrescentando o que o QuiZAUMMM disse, se tiver dúvidas a respeito desse token ("%*c"),

procure por um tópico chamado "Porque não usar fflush(stdin) e system("pause")" no laboratório de códigos fontes, o subfórum de C/C++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, novamente venho pedir ajuda. Seguinte consegui fazer a ordem alfabetica e as ordens crescente e decrescente e o que eu queria saber agora e se depois que eu entrar com os dados (nome, sexo, altura etc) eu organizar por ordem alfabetica e "levar os outros dados" junto com o nome, tipo eu organizava os nomes e ao lado aparecesse a respectiva idade, sexo, altura etc referentes aquele nome ignorando as outras ordens (crescente e decrescente). Agradeço pela ajuda.

Edit: Outra coisa: tem como eu colocar o nome completo da pessoa mesmo com o espaço e o programa funcionar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use algo + avançado da STL ele faz a ordenação para você.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.