Ir para conteúdo
Fórum Script Brasil
  • 0

Matrizes Heterogêneas: printf no grupo de pessoas com altura desejada


brunnorodrigues

Pergunta

Estou há dias preso nesse exercício da lista de Matrizes Heterogêneas, acredito que por um detalhe, que não encontro solução. É o seguinte: o que não funciona bem é as opções de mostrar o grupo de pessoas com determinada altura (opções 2, 3 e 4 do menu). Eu cadastro todos corretamente, mas na hora de exibir só quem tem 1,5m ou menos, ele exibe todos os cadastrados, e assim acontece com quem tem 1,5m e com quem tem entre 1,5m e menos de 2m. Ao invés de filtrar a opção solicitada, ele me mostra tudo que cadastrei, entendeu? Segue abaixo código:

/*
4. Elaborar um programa que armazene o nome e a altura de 15 pessoas com o uso de
registros. O programa deve usar um menu que execute as seguintes etapas: 
a) Cadastrar os 15 registros. 
b) Apresentar os registros (nome e altura) das pessoas com 1.5m ou menores. 
c) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m. 
d) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m e menos de
2.0m. 
e) Apresentar todos os registros com a média extraída de todas as alturas armazenadas. 
f) Sair do programa de cadastro. 
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>
int opcao,encontrou=0;
typedef struct cadastro{
 char nome[41];
 float altura,media;
}Cadastro;
Cadastro cad[15];
int j=0;
float alturas=0;
void menu(){
 fflush(stdin);
 printf("Opções:\n");
 printf("1 - cadastrar as pessoas e suas alturas\n");
 printf("2 - relação das pessoas com 1,5m ou menores\n");
 printf("3 - relação das pessoas com 1,5m\n");
 printf("4 - relação das pessoas com mais de 1,5m e menos de 2m\n");
 printf("5 - exibir relação completa de todos os cadastrados\n");
 printf("6 - sair\n");
}
void cadastros(){
 for(j=0;j<3;j++){
  printf("Cadastro da %iª pessoa:\n",j+1);
  printf("Nome: ");
  fflush(stdin);fgets(cad[j].nome,41,stdin);
  printf("Altura: ");
  scanf("%f",&cad[j].altura);
  alturas=alturas+cad[j].altura;
  printf("\n");
  system("cls");
 }
}
void listaalturasmenos15(){
 if(cad[j].altura<=1,5){
  printf("Lista com a relação das pessoas com 1,5m ou menores:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
  if(!encontrou){
   printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n");
  }
 }
}
void listaalturascom15(){
 if(cad[j].altura=1,5){
  printf("Lista com a relação das pessoas com 1,5m:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com 1,5m!\n\n");
   }
 }
}
void listaalturasmais15(){
 if(2<=cad[j].altura>1,5){
  printf("Lista com a relação das pessoas com mais de 1,5m e menos de 2m:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com mais de 1,5m e menos de 2m!\n\n");
   }
  
 }
}
void exibe(){
 printf("Lista com a relação completa de todos os cadastrados e média das alturas:\n");
 for(j=0;j<3;j++){
  if(cad[j].nome[0]!='\0'){
   encontrou=1;
   printf("Registro %i:\n",j+1);
   printf("Nome: %s",cad[j].nome);
   printf("Altura: %.2f\n\n",cad[j].altura);
  }
 }
 cad[j].media=alturas/3;
 printf("Média: %.2f\n\n",cad[j].media);
  if(!encontrou){
   printf("Nada foi cadastrado ainda. Utilize a opção 1 do Menu e cadastre!\n\n");
  }
}
main(){
setlocale(LC_ALL,"Portuguese");
 while(opcao!=6){
      menu();
      printf("Escolha a opcão: ");
      scanf("%i",&opcao);
      system("cls");
      switch(opcao){
         case 1:cadastros();
   break;
         case 2:listaalturasmenos15();
   break;
         case 3:listaalturascom15();
   break;
         case 4:listaalturasmais15();
   break;
         case 5:exibe();
   break;
         case 6:exit(0);
   break;
         default: printf("A opção é inválida. Informe corretamente.\n\n");
         break;
      }
   }
 cadastros();
 listaalturasmenos15();
 listaalturascom15();
 listaalturasmais15();
 exibe();
return 0;
}

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa noite, comentei o que achei necessário e fiz algumas correções.

até mais.

/*
4. Elaborar um programa que armazene o nome e a altura de 15 pessoas com o uso de
registros. O programa deve usar um menu que execute as seguintes etapas: 
a) Cadastrar os 15 registros. 
b) Apresentar os registros (nome e altura) das pessoas com 1.5m ou menores. 
c) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m. 
d) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m e menos de
2.0m. 
e) Apresentar todos os registros com a média extraída de todas as alturas armazenadas. 
f) Sair do programa de cadastro. 
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>


int opcao,encontrou=0;
typedef struct cadastro{
 char nome[41];
 float altura; //,media; ->A média é apenas a soma de todas as alturas e divisão desse resultado pelo quantidade de itens, por isso não faz sentido algum o cadastro conter um campo média para cada indivíduo.
}Cadastro;




Cadastro cad[3]; //criar variaveis globais não e muito indicado nos patterns mais usuais no mercado.
int j=0;
float alturas=0;

void menu(){
 fflush(stdin);
 printf("Opções:\n");
 printf("1 - cadastrar as pessoas e suas alturas\n");
 printf("2 - relação das pessoas com 1,5m ou menores\n");
 printf("3 - relação das pessoas com 1,5m\n");
 printf("4 - relação das pessoas com mais de 1,5m e menos de 2m\n");
 printf("5 - exibir relação completa de todos os cadastrados\n");
 printf("6 - sair\n");
}
void cadastros(){
 for(j=0;j<3;j++){
  printf("Cadastro da %iª pessoa:\n",j+1);
  printf("Nome: ");
  fflush(stdin);fgets(cad[j].nome,41,stdin);
  printf("Altura: ");
  scanf("%f",&cad[j].altura);
  alturas=alturas+cad[j].altura;
  printf("\n");
  system("cls");
 }
}
void listaalturasmenos15(){
	/*
 if(cad[j].altura<=1,5){ ->isso deveria estar dentro do for e não fora ddele. E seria 1.5 e não 1,5 pois a linguagem obdece o padrão americano.
  printf("Lista com a relação das pessoas com 1,5m ou menores:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
  if(!encontrou){
   printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n");
  }
 }
 */
 encontrou=0;
 for(j=0; j<3; j++){
 	
 	if(cad[j].altura<1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
 if( !encontrou){
 	printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n");
 }
 
}
void listaalturascom15(){
	encontrou=0;
  for(j=0; j<3; j++){
 	
 	if(cad[j].altura==1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com 1,5m!\n\n");
   }
 
}
void listaalturasmais15(){
 /*if(2<=cad[j].altura>1,5){ Não sei se era a sua intenção criar uma expressão de programação funcional, mas de qualquer forma isso em c não vai rolar.
  printf("Lista com a relação das pessoas com mais de 1,5m e menos de 2m:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
   */
   encontrou=0;
     for(j=0; j<3; j++){
 	
 	if(cad[j].altura>1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com mais de 1,5m e menos de 2m!\n\n");
   }
  
}
void exibe(){
 printf("Lista com a relação completa de todos os cadastrados e média das alturas:\n");
 for(j=0;j<3;j++){
  if(cad[j].nome[0]!='\0'){
   encontrou=1;
   printf("Registro %i:\n",j+1);
   printf("Nome: %s",cad[j].nome);
   printf("Altura: %.2f\n\n",cad[j].altura);
  }
 }
 float media=alturas/(3*1.0);
 printf("Média: %.2f\n\n",media);
  if(!encontrou){
   printf("Nada foi cadastrado ainda. Utilize a opção 1 do Menu e cadastre!\n\n");
  }
}
main(){
setlocale(LC_ALL,"Portuguese");
 while(opcao!=6){
      menu();
      printf("Escolha a opcão: ");
      scanf("%i",&opcao);
      system("cls");
      switch(opcao){
         case 1:cadastros();
   break;
         case 2:listaalturasmenos15();
   break;
         case 3:listaalturascom15();
   break;
         case 4:listaalturasmais15();
   break;
         case 5:exibe();
   break;
         case 6:exit(0);
   break;
         default: printf("A opção é inválida. Informe corretamente.\n\n");
         break;
      }
   }
 cadastros();
 listaalturasmenos15();
 listaalturascom15();
 listaalturasmais15();
 exibe();
return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, rickayron disse:

Boa noite, comentei o que achei necessário e fiz algumas correções.

até mais.


/*
4. Elaborar um programa que armazene o nome e a altura de 15 pessoas com o uso de
registros. O programa deve usar um menu que execute as seguintes etapas: 
a) Cadastrar os 15 registros. 
b) Apresentar os registros (nome e altura) das pessoas com 1.5m ou menores. 
c) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m. 
d) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m e menos de
2.0m. 
e) Apresentar todos os registros com a média extraída de todas as alturas armazenadas. 
f) Sair do programa de cadastro. 
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>


int opcao,encontrou=0;
typedef struct cadastro{
 char nome[41];
 float altura; //,media; ->A média é apenas a soma de todas as alturas e divisão desse resultado pelo quantidade de itens, por isso não faz sentido algum o cadastro conter um campo média para cada indivíduo.
}Cadastro;




Cadastro cad[3]; //criar variaveis globais não e muito indicado nos patterns mais usuais no mercado.
int j=0;
float alturas=0;

void menu(){
 fflush(stdin);
 printf("Opções:\n");
 printf("1 - cadastrar as pessoas e suas alturas\n");
 printf("2 - relação das pessoas com 1,5m ou menores\n");
 printf("3 - relação das pessoas com 1,5m\n");
 printf("4 - relação das pessoas com mais de 1,5m e menos de 2m\n");
 printf("5 - exibir relação completa de todos os cadastrados\n");
 printf("6 - sair\n");
}
void cadastros(){
 for(j=0;j<3;j++){
  printf("Cadastro da %iª pessoa:\n",j+1);
  printf("Nome: ");
  fflush(stdin);fgets(cad[j].nome,41,stdin);
  printf("Altura: ");
  scanf("%f",&cad[j].altura);
  alturas=alturas+cad[j].altura;
  printf("\n");
  system("cls");
 }
}
void listaalturasmenos15(){
	/*
 if(cad[j].altura<=1,5){ ->isso deveria estar dentro do for e não fora ddele. E seria 1.5 e não 1,5 pois a linguagem obdece o padrão americano.
  printf("Lista com a relação das pessoas com 1,5m ou menores:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
  if(!encontrou){
   printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n");
  }
 }
 */
 encontrou=0;
 for(j=0; j<3; j++){
 	
 	if(cad[j].altura<1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
 if( !encontrou){
 	printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n");
 }
 
}
void listaalturascom15(){
	encontrou=0;
  for(j=0; j<3; j++){
 	
 	if(cad[j].altura==1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com 1,5m!\n\n");
   }
 
}
void listaalturasmais15(){
 /*if(2<=cad[j].altura>1,5){ Não sei se era a sua intenção criar uma expressão de programação funcional, mas de qualquer forma isso em c não vai rolar.
  printf("Lista com a relação das pessoas com mais de 1,5m e menos de 2m:\n\n");
  for(j=0;j<3;j++){
   if(cad[j].altura!='\0'){
    encontrou=1;
    printf("Registro %i:\n",j+1);
    printf("Nome: %s",cad[j].nome);
    printf("Altura: %.2f\n\n",cad[j].altura);
    }
   }
   */
   encontrou=0;
     for(j=0; j<3; j++){
 	
 	if(cad[j].altura>1.5){
 		printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura);
 		encontrou++;
	 }
 }
   if(!encontrou){
    printf("Não há, cadastradas nesta lista, pessoas com mais de 1,5m e menos de 2m!\n\n");
   }
  
}
void exibe(){
 printf("Lista com a relação completa de todos os cadastrados e média das alturas:\n");
 for(j=0;j<3;j++){
  if(cad[j].nome[0]!='\0'){
   encontrou=1;
   printf("Registro %i:\n",j+1);
   printf("Nome: %s",cad[j].nome);
   printf("Altura: %.2f\n\n",cad[j].altura);
  }
 }
 float media=alturas/(3*1.0);
 printf("Média: %.2f\n\n",media);
  if(!encontrou){
   printf("Nada foi cadastrado ainda. Utilize a opção 1 do Menu e cadastre!\n\n");
  }
}
main(){
setlocale(LC_ALL,"Portuguese");
 while(opcao!=6){
      menu();
      printf("Escolha a opcão: ");
      scanf("%i",&opcao);
      system("cls");
      switch(opcao){
         case 1:cadastros();
   break;
         case 2:listaalturasmenos15();
   break;
         case 3:listaalturascom15();
   break;
         case 4:listaalturasmais15();
   break;
         case 5:exibe();
   break;
         case 6:exit(0);
   break;
         default: printf("A opção é inválida. Informe corretamente.\n\n");
         break;
      }
   }
 cadastros();
 listaalturasmenos15();
 listaalturascom15();
 listaalturasmais15();
 exibe();
return 0;
}

 

Muito obrigado, rickayron, sem dúvidas sua colaboração me ajudou bastante.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...