Jump to content
viny3314

Manipulação de Arrays

 Read less than a minute

Recommended Posts

 Read less than a minute

Criei um programa que o usuário informa seu nome, sexo e peso. E o resultado é retornar o nome da mulher com o menor peso e o nome do homem com maior peso,  porém preciso de ajuda para que na saída fale o nome tanto dessa mulher quanto o homem, mas não tô conseguindo fazer isso. Só conseguir comparar os pesos.

#include <stdio.h>
#include <string.h>


int main(){

int pessoas, i;
float peso; 
float resultado = 0;
float resultado2 = 0;
char sexo;   
char nome[20];

printf("Digite o numero de pessoas: ");   // quantas vezes o programa vai rodar para coletar os dados
scanf("%i",&pessoas);

for(i=0;i<pessoas;i++){

printf("Digite o nome da pessoa: ");    
scanf("%s", nome);

printf("Digite seu peso: ");    
scanf("%f",&peso);    

printf("Digite [M] para Sexo Masculino ou [F] para Sexo Feminino: ");    
scanf("%s",&sexo);

if(sexo == 'm' || sexo == 'M'){
    while(peso > resultado){
      resultado = peso;
    }
}
else if(sexo == 'f' || sexo == 'F'){
  while(resultado2 == 0){
      resultado2 = peso;    
  } if (peso < resultado2){
    resultado2 = peso;
  }
}

}


printf("A Mulher de menor peso: %.2f kg", resultado2);

printf("\nO Homem de maior peso: %.2f kg", resultado);
printf(" %s ", nome);

return 0;


}

 

Share this post


Link to post
Share on other sites
 Read less than a minute

Os nomes das pessoas com maior e menor peso não estão sendo exibidos porque vc não armazenou em nenhum lugar como fez com os pesos.

char mulher_menor_peso[21];
char homem_maior_peso[21];


// pra salvar o nome da mulher com menor peso vc pode fazer o seguinte quando encontrar esse menor peso

strncpy(mulher_menor_peso, nome, 20);
mulher_menor_peso[20] = '\0';


//de forma semelhante, pode fazer o seguinte quando encontrar o homem com maior peso

strncpy(homem_maior_peso, nome, 20);
homem_maior_peso[20] = '\0';

 

você pode encontrar os pesos da seguinte forma:
 

#include <float.h>
  
  
float peso_homem = 0;
float peso_mulher = FLT_MAX
float temp_peso; //vai armazenar temporiamente o peso inserido pelo usuário, independente do sexo
  
  //especificamente para ver o peso, vc poderia fazer desta forma.
  char sexo;
  sexo = getchar();

switch(sexo) {
  case 'm':
  case 'M':
    if ( temp_peso < peso_muher) 
      peso_mulher = temp_peso;
     //mais a rotina pra copiar o nome sugerida anteriormente
    break;
  case 'h':
  case 'H':
    if (temp_peso > peso_homem)
      peso_homem = temp_peso;
    //mais a rotina pra copiar o nome 
    break;
  default:
    fprintf(stderr, "não sei de que sexo vc é\n\n");
    break; //redundante de certa forma
}

Adicionalmente, tem esse artigo que fala um pouco sobre entrada de dados em C
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html

Share this post


Link to post
Share on other sites
 Read 1 minute
6 horas atrás, diego.rax disse:

Os nomes das pessoas com maior e menor peso não estão sendo exibidos porque vc não armazenou em nenhum lugar como fez com os pesos.


char mulher_menor_peso[21];
char homem_maior_peso[21];


// pra salvar o nome da mulher com menor peso vc pode fazer o seguinte quando encontrar esse menor peso

strncpy(mulher_menor_peso, nome, 20);
mulher_menor_peso[20] = '\0';


//de forma semelhante, pode fazer o seguinte quando encontrar o homem com maior peso

strncpy(homem_maior_peso, nome, 20);
homem_maior_peso[20] = '\0';

 

você pode encontrar os pesos da seguinte forma:
 


#include <float.h>
  
  
float peso_homem = 0;
float peso_mulher = FLT_MAX
float temp_peso; //vai armazenar temporiamente o peso inserido pelo usuário, independente do sexo
  
  //especificamente para ver o peso, vc poderia fazer desta forma.
  char sexo;
  sexo = getchar();

switch(sexo) {
  case 'm':
  case 'M':
    if ( temp_peso < peso_muher) 
      peso_mulher = temp_peso;
     //mais a rotina pra copiar o nome sugerida anteriormente
    break;
  case 'h':
  case 'H':
    if (temp_peso > peso_homem)
      peso_homem = temp_peso;
    //mais a rotina pra copiar o nome 
    break;
  default:
    fprintf(stderr, "não sei de que sexo vc é\n\n");
    break; //redundante de certa forma
}

Adicionalmente, tem esse artigo que fala um pouco sobre entrada de dados em C
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html

Adicionei no meu código e ficou assim:

#include <stdio.h>
#include <string.h>
 
int main(){
 
int pessoas, i;
float peso,altura;
float resultado = 0;
float resultado2 = 0;
char sexo;
char nome[20];
 
char ela[21];
char ele[21];
 
char novoele[23];
char novoela[23];
 
printf("Digite o numero de pessoas: ");
scanf("%i",&pessoas);
 
for(i=0;i<pessoas;i++){
 
printf("Digite o nome da pessoa: ");
scanf("%s", nome);
 
printf("Digite seu peso: ");
scanf("%f",&peso);
 
printf("Digite 'M' para Sexo Masculino ou 'F' para Sexo Feminino: ");
scanf("%s",&sexo);
 
if(sexo == 'm' || sexo == 'M'){
while(peso > resultado){
resultado = peso;
strncpy(ele, nome, 20);
ele[20] = '\0';
}
if(peso==resultado){
strncpy(novoele, nome, 20);
novoele[20] = '\0';
}}
else if(sexo == 'f' || sexo == 'F'){
while (peso > resultado2){
resultado2 = peso;
strncpy(ela, nome, 20);
ela[20] = '\0';
 
}
if(peso == resultado2){
strncpy(novoela, nome, 20);
novoela[20] = '\0';
}}}
 
printf("A(s) Mulher(es) de menor peso: %.2f kg", resultado2);
printf(" %s ", ela);
printf(" %s ", novoela);

printf("\nO(s) Homem(ns) de maior peso: %.2f kg", resultado);
printf(" %s ", ele);
printf(" %s ", novoele);
 
return 0;
}

Share this post


Link to post
Share on other sites
 Read less than a minute

Tá quase pronto, mas o nome das pessoas sai repetido, tem como não acontecer isso?? desde já agradeço, você tem me ajudado muito!!

Share this post


Link to post
Share on other sites
 Read less than a minute

sai repetido pq vc está printando 2 vezes ué '-'

 

image.png.d9672afe63cdde36d427630ce610126f.png

 

não tem necessidade desses IFs todos, veja o que sugeri pra parte de comparação e separação dos nomes com maior e menor peso

Share this post


Link to post
Share on other sites
 Read less than a minute
6 horas atrás, diego.rax disse:

sai repetido pq vc está printando 2 vezes ué '-'

 

image.png.d9672afe63cdde36d427630ce610126f.png

 

não tem necessidade desses IFs todos, veja o que sugeri pra parte de comparação e separação dos nomes com maior e menor peso

O código que você mandou tá dando erro 

Share this post


Link to post
Share on other sites
 Read less than a minute
21 horas atrás, viny3314 disse:

O código que você mandou tá dando erro 

o que sugeri foram pedaços isolados de código apenas para exemplificar o que estava dizendo. Não é pra vc copiar e colar...

 

Mas o problem da duplicidade é simplesmente o fato de vc estar chamando o printf duas vezes...

Share this post


Link to post
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
Reply to this topic...

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


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...