Jump to content
Fórum Script Brasil
  • 0

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


brunnorodrigues

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...