Jump to content

Manipulação de Arrays


viny3314

Recommended Posts

Posted

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;


}

 

Posted

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

Posted
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;
}
Posted

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

Posted

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

Posted
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 

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

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...