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

Problema com o codigo...


Dobrowolsky

Pergunta

O programa deve fazer o seguinte:

Ler do teclado um conjunto de dados contendo a altura e o sexo (“F” para feminino e “M” para masculino) de 10 pessoas. Gravar em um arquivo do tipo texto:

• A maior altura do grupo

• A menor altura do grupo

• A média de altura das mulheres

So que o programa esta lendo os dados das 10 pssoas. So que depois q é efetuada a leitura ele tipo trava, ele não finaliza nem cria o arquivo. se alguém puder ajudar adescobrir o problema, o codigo segue abaixo.

#include <fstream.h>
#include <iostream>
using namespace std;

struct t_Dados
{
       float Altura;
       char Sexo;
};
struct t_ops
{
       t_Dados ops;
};
       
int main(void)
{
    int i, x, y, w=0, a=0;
    float z=0, r;
    fstream arq;
    t_ops vet[10];
    
    arq.open("Dados.txt", ios::out);
    for(i=0; i<10; i++)
    {
             a++;
             cout<<"\nDigite o sexo da pessoa( M ou F)\n";
             cin>>vet[i].ops.Sexo;
             arq<<a<<"\tSexo"<<vet[i].ops.Sexo;
             cout<<"\nDigite a altura.\n";
             cin>>vet[i].ops.Altura;
             arq<<"\tAltura"<<vet[i].ops.Altura;
    }
    for(i=0; i<10; i++)
    {
             if(vet[i].ops.Altura < vet[i+1].ops.Altura)
             {
                    x=vet[i+1].ops.Altura;
             }
             else
             {
                    x=vet[i].ops.Altura;
             }
             i=i-1;
    }
    for(i=0; i<10; i++)
    {
             if(vet[i].ops.Altura < vet[i+1].ops.Altura)
             {
                    y=vet[i].ops.Altura;
             }
             else
             {
                    y=vet[i+1].ops.Altura;
             }
             i=i-1;
    }
    for(i=0; i<10; i++)
    {
             if(vet[i].ops.Sexo=='F')
             {
                      z=z+vet[i].ops.Altura;
                      w++;
             }
             
    }
    r=z/w;
    arq<<"\nA media de altura das mulheres e: "<<r;                                           
    arq.close();
    system("pause");
    return 0;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

O que eu faria inicialmente é o seguinte: ao invés de ter vários for eu faria tudo dentro do primeiro que lê os dados. Para salvar o maior bastaria inicializar a variável com zero e, cada vez que o usuário digitar um valor, verificar se ele é maior que o já salvo como maior. Assim você não precisa percorrer tudo no final. Siga a mesma lógica para todos.

Outra coisa que você deve ter muito cuidado é ao realizar divisões. Note que você faz a divisão r=z/w sendo que o w é o número de mulheres correto? Se não existir nenhuma mulher w terá zero, não é? Nesta situação ocorrerá uma divisão por zero. Sempre que for usar uma variável em uma divisão faça o teste para saber se ela será zero.

Outra coisa é que seu vetor possui dez posições e o for é de 0 a 9. Isso está correto porém você usa dentro do for o acesso ao item atual e também ao próximo com i+1. Quando você já está no último elemento do vetor você estará acessando um elemento após o final do vetor, ou seja, estará acessando uma área que não poderia.

Quanto a estar travando: coloque alguns cout no meio do código para saber onde está travando. Assim você verá até que texto aparece e saberá onde está travando!

Aparentemente está ok mas pode ser até algum problema com o estouro do vetor que eu citei acima...

Link para o comentário
Compartilhar em outros sites

  • 0

descobri o problema

loop infinito no 2º for

for(i=0; i<10; i++)
    {
             if(vet[i].ops.Altura < vet[i+1].ops.Altura)
             {
                    x=vet[i+1].ops.Altura;
             }
             else
             {
                    x=vet[i].ops.Altura;
             }
             i=i-1;
    }

hehe

esse i=i-1 ta me avacalhando hehe

vou fazer como você disse essa parte do teste

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