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

Algoritmo de conversão metros para pés e polegadas


woogie

Pergunta

Eae, pessoal...

Tentei fazer um algoritmo em que o programa deve pedir uma determinada altura em metros e convertê-la para pes e polegadas, considerando pes : 30.48 e polegadas: 2.54.

A questão é que quando compilo ele simplesmente não roda, gostaria de saber se alguém aí tem alguma opnião de algum equivoco que eu possa ter cometido.

Segue o algoritmo abaixo:

#include <stdio.h>

#define pe 30.48
#define pol 2.54

float main (void)

{ 
    float metro,centimetro,resto,resto2,polegadas;
    int pes;
    
    printf ("Digite o valor em metros:\n");
    scanf ("%f", &metro);
    
    centimetro = metro * 100;
    scanf ("%f", centimetro);

    pes = centimetro / pe;
    scanf ("%d", &pes);
    
    resto = pes * pe;
    scanf ("%f", &resto);

    resto2 = centimetro - resto;
    scanf ("%f", &resto2);

    polegadas = resto2 / pol;
    scanf ("%f", &polegadas);
    
    printf( "Valor correspondente em pes: %f\n", pes );
    printf ("e em : %f\n", polegadas);
    
    return 0;

}

Grato WOogie.

Editado por Jonathan Queiroz
Adcionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Seguem meus comentários:

1) Ao invés de usar o #define para pes e polegadas, eu usaria const. fica mais fácil de entender o programa no meu ponto de vista. Além disso eu usaria outro nome, indicando ser o fator de conversão de centímetros para pés, por exemplo.

2) Como dito acima, o main SEMPRE é do tipo int. isso é o que a função main retorna, ou seja, o retorno do programa ao SO. Não misture isso com os dados utilizados pelo seu software.

3) Variáveis float armazenam números com ponto flutuante, ou seja, números com casas decimais. int são para números inteiros, sem a parte decimal. Assim pes deve ser float também.

4) scanf serve para ler um valor do usuário e printf enviar um texto para o console. No código abaixo:

centimetro = metro * 100;
scanf ("%f", centimetro);

você primeiro atribui um valor para a variável centímetro e depois lê um valor do usuário e salva em centimetro, ou seja, o valor anterior foi apagado. Se quisesse exibir este valor, troque scanf por printf

5) scanf precisa do operador & antes da variável pois a função precisa do endereço de memória onde vai salvar o valor. printf não usa o & pois precisa apenas do valor que será exibido.

Acho que isso já ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Não adiantou. Ele continua não rodando.

O enunciado pede para que eu capture o valor de uma altura em metros e converta para pés e polegadas, considerando os valores para pés:30.48 e polegadas:2.54.

Se alguém quiser tentar elaborar aí de uma outra forma para ver se funciona eu agradeço, não deve demorar muito.

obrigado pra quem tentou ajudar!

Abraços,

WOogie

Link para o comentário
Compartilhar em outros sites

  • 0

#include <stdio.h>

#define pe 30.48
#define pol 0.3937

int main () {
    float metro, polegadas, pes;
    
    printf ("Digite o valor em metros:\n");
    scanf ("%f", &metro);

    pes = (metro * 100) / pe;    
    polegadas = (metro * 100) * pol;
        
    printf( "Valor correspondente em pes: %f\n", pes );
    printf("e em polegadas: %f\n", polegadas);
    
    return 0;
}

Eu fui no google, procurei "1 centimeter in inch" (um centimetro em polegada) daí deu aquele valor lá em cima 0.3937. Então eu só multipliquei os centimetros por ele.

Editado por Mnemonic
Link para o comentário
Compartilhar em outros sites

  • 0

Vamos lá woogie, talvez isso solucione seu problema.

Acredito que seja um problema de faculdade estou certo?? Esse codigo funciona.

#include <stdio.h>
#include <math.h>
#define pe 30.48
#define pol 2.54
int main() {
    float metro,resto,polegadas,centimetro,pes;

    printf ("Digite o valor em metros:\n");
    scanf ("%f", &metro);

    centimetro = metro * 100;
    pes = centimetro / pe;
    polegadas = centimetro / pol;

    printf( "Valor correspondente em pes: %f\n", pes );
    printf ("e em polegadas : %f\n\n", polegadas);

   //Essa parte acredito que não precisa no seu programa, mas vale a pena entender o funcionamento;
    resto = fmod( (double )centimetro,  pe);
    polegadas = resto / pol;

    printf( "Valor correspondente: %d pes e %f polegadas ", (int)pes, polegadas );
    return 0;
}

Vamos aos comentários:

Quando você coloca pes = centimetro / pe esta dividindo um float por um double ( o pe é double quando declarado como #define ) e o resultado será float( acho que é isso, o cast é automatico para o menor tipo, estude um pouco de cast ) . Se a variavel que recebe o resultado da divisão for inteira, como você fez, o sistema despreza a parte decimal, ou seja, faz um cast para inteiro.

Colocando pes como float, você conserva a parte decimal ao fazer a divisão e com isso o resultado exibido é correto;

Para obter as polegadas basta dividir centimetros / pol.

Apenas lembre-se que esses valores do enunciado do problema são:

30,48 -> 1 pé = 30,48 cm, logo qualquer valor em cm dividido por 30,48 dá o resultado em pé.

2,54 -> 1 polegada = 2,54 cm, da mesma forma, qualquer valor em cm dividido por 2,54 dá o resultado em polegada.

A ultima parte que acho q você não precisava faz o resultado em pé e polegada, esse é o padrão de medida americano, perceba que na NBA colocam a altura do jogador como 6' e 5", ou seja, 6 pés + 5 polegadas +/- 1,92m.

O operador fmod que está na biblioteca math.h calcula o resto da divisão, logo, ele calcula o resto da divisao do valor digitado por 30,94, esse valor é dividiro por 2,54 para obter a quantidade de polegadas. na hora de escrever, printf() tem o (int)pes, isso apenas "separa" (cast) a parte inteira do pes.

O que o Mnemonic sugere, esse valor 0,3937, é apenas 1/2,54, ou seja, ao invés de você dividir os centimetros por 2,54, você multiplica por 0,3937..

beleza?

Acho q sua questao era mais de Matemática que de programação, isso sempre acontece nos problemas de faculdade....

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