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

(Resolvido) Dica para este código em C++


tatasl00

Pergunta

Olá,

Tenho o seguinte exercício e duas dúvidas:

Ex: Fazer um programa que leia o comprimento, largura e o preço por metro quadrado de um terreno. Com o programa você tem de calcular o preço do terreno e mostrar na tela. Para comprimento e largura, devem ser usados números inteiros em metros. No preço as vírgulas ou pontos devem ter atencao redobrada.

então eu fiz o seguinte:

1) Minha dúvida aqui seria como fazer aparecer no programa 'm²' após o resultado do cálculo (depois do 'f') da área? No caso, 1000 m². Adiante segue o programa:

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    double p, f;

    a = 20;
    b = 50;
    f = a*b;
    p = 256.25;

    cout << "A area do terreno sera ";
    cout << "calculada atraves da formula:  f = a*b \n\n";
    cout << "Na formula f = area, a = largura und b = comprimento.\n";

    cout << "A area do terreno e: \n" << f << endl;


    cout << "Der Preis fuer das Grundstueck ist: " << p*f << endl;
    return 0;
}

2) Segundo problema: se eu optar por desenvolver o programa interagindo com o programador, ou seja, pedindo que o mesmo digite os valores (cin), tem como alguém clarear e corrigir o programa, por que não estou raciocinando como deveria. Segue adiante a idéia:

 

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    double p,f, P;


    f = a*b;
    p = 256.25;
    P = p*f;

    cout << "Digite a largura do terreno: \n";
    cin >> a;
    cout << "\n";

    cout << "Digite o comprimento do terreno: \n";
    cin >> b;
    cout << "\n";

    cout << "A área do terreno será calculada com a seguinte formula: f = a*b \n";
    cout << "'f' e a area; 'a' e a largura e 'b' o comprimento. \n";

    cout << "A area do terreno e: \n" << f << endl;
    cout << "A area do terreno sera calculada a seguir: P \n" << P << endl;

    cout << "Der Preis des Grundstuecks ist: \n" << P << endl;
    return 0;
}

Meus resultados estao vindo com exponencial O_o haha. Como deixa-los inteiros? E talvez, dependendo dos valores digitados após a compilacao, com os pontos...

Agradeco a ajuda galera!!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

1) Si você for aqui nessa tabela asc2, você vai ver o código que pertence a cada carácter que é possível usar em C/C++. Para imprimir você deverá imprimir entre "" o seu valor em hexadecimal, un exemplo é a letra 'ç' minuscula, ela tem o valor 135 em DEC(decimal), e em HEX(hexadecimal) tem o valor 87h, esse é o que queremos. Pois bem si queremos escrever la em hex. colocamos primeiro uma barra invertida seguida de uma letra 'x' minuscula e o valor que esta na tabela sem a 'h' do final, es dizer que si na tabela 87h representa a 'ç' eu uso só 87 depois de \x ficando como '\x87'. A barra e a 'x' indica que o que vem a continuação não é o "87"(string) e sim eu quero o carácter da tabela asc2 que representa o 87 que é a 'ç'. eu posso Também fazer isso "fun\x87\xC6o" para formar a palavra "função". Entendeu?

Não sei si funciona, porem tente por o valor decimal depois de uma barra assim \135, pode que funcione, eu não posso provar isso agora por que não tenho compilador.

    cout << "A area do terreno e: \n" << f << "m\FD" << endl;

2) O que você esta fazendo mal é que o calculo você faz antes de pedir os números, por exemplo:

    f = a*b; //aqui você já fez o calculo de f antes de pedir o valor de a e b

    cout << "Digite a largura do terreno: \n";
    cin >> a;
    cout << "\n";

    cout << "Digite o comprimento do terreno: \n";
    cin >> b;
    cout << "\n";

O correto é fazer o calculo depois de pedir os valores. Forma correta:
    cout << "Digite a largura do terreno: \n";
    cin >> a;
    cout << "\n";

    cout << "Digite o comprimento do terreno: \n";
    cin >> b;
    cout << "\n";

   f = a*b;

//Agora só resta imprimir
    cout << "A area do terreno e: \n" << f << endl;

OK? XD

3) Para imprimir sem o que vai depois do ponto. por exemplo a constant PI que vale 3.1415... e só queremos imprimir o 3, devo usar uma função chamada setpresicion(n) onde o n é o valor d precisão desta forma.

//si eu tenho um numero PI assim:

double PI =3.14159;
std::cout << std::setprecision(0) << PI << '\n';

Si uso std::setprecision(2) vai mostrar somente 3.14. Valeu? É por setprecision(n) antes de imprimir o valor PI e tudo ok.

Para mais informação ler aqui:
http://www.cplusplus.com/reference/iomanip/setprecision/
http://www.cplusplus.com/reference/ios/ios_base/precision/

E al final dessas paginas tem mais informação ainda. Essa pagina é referencia para todo programador de C++, muito importante.

Acho que respondi tudo si falta algo avise.
Sorte!

Link para o comentário
Compartilhar em outros sites

  • 0

vangodp valeu pela dica!

O que me ocorre é o seguinte:

No meu programa eu tenho a = comprimento, b = largura e A = área.

O preço do m2 é p = 256.50

Os valores de a e b quero que sejam inseridos pelo usuário com o 'cin'.

Eu fiz que o preço seria  P = A*p

não consegui um resultado. Somente 'p' deve deve ser double ou 'p' e 'P'? Como seria na prática? Corrija para mim por favor e onde colocar o set precision:

 

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    double p = 256.50; // p = preço por metro quadrado
    double f, P; // f = area e P = preço total do terreno

    cout << "Digite a largura do terreno: \n";
    cin >> a;
    cout << "\n";

    cout << "Digite o comprimento do terreno: \n";
    cin >> b;
    cout << "\n";

    cout << "A area do terreno é: \n" << f << endl;
    cout << "O preço do terreno é: \n" << P << endl;

   f = a*b;
   P = f*p;

    return 0;
}

 

Obrigado!!!

Editado por tatasl00
falta de informacao
Link para o comentário
Compartilhar em outros sites

  • 0

Pense assim... O metro vai ser um inteiro? Por exemplo, você só vende os metros justos como 3 ou 7 metros? Ou você vende incluindo centímetros também? Exemplo 3.45, 4.60? Si for 3.60 deve ser float ou double, se for metros justos então deve ser int ignorando a parte decimal.

O dinheiro deveria ser float ou double, porem si uma variável for float melhor que todas sejam float, si uma for double, então melhor que todas sejam double. Por que isso? Por que como são poucas variáveis que seu programa contem, não importa que sejam float ou double, porem sim que vão encher o saco, si tiver que ficar fazendo casts todo o tempo. Como seu programa é muito pequeno não se preocupe por serem floats ou double, isso só deve importar em programas que reservem muita memoria, melhor que sejam o todas elas float ou double.

...

Então vamos pensar primeiro que queremos. Tudo tem solução, não se preocupe. O linguagem tem que se moldar ao problema e não o problema ao linguagem. ;)

a e b representam metros arredondados? Si a resposta é sim então são inteiros: int a, b; Si não, são floats float a, b; ou double a, b;

Agora passamos ao preço:

double p = 256.50; // Esta correto deixamos assim

double f, P; // Perfeito, todos são double como falei

//aqui você lee os valores com cin...

//aqui vão os cálculos, depois que já temos todos os valores tomados.
f = a*b;
P = f*p;

//por ultimo imprimimos
cout << "A area do terreno é: \n" << f << endl;
cout << "O preço do terreno é: \n" << P << endl;

 

Agora vamos ver esses cálculos f = a*b; e P = f*p; porque não estão muito bem, agora explico. Quando nós fazemos f = a*b acontece 2 coisas. O primeiro que acontece é que se multiplica a*b, porem nada disso tem que ver com o que esta do outro lado do = que é f, si é que você me entende. Essas variáveis a e b são inteiros, si você somar 10+10 você não vai obter 20.00, você vai obter 20, porque são inteiros. Entendeu? O mesmo acontece si multiplicamos. Porem o bicho pega si restamos ou dividimos, mais não é seu caso, agora entenderemos o porque.

Agora imagine outro exemplo, 10/3, todos nós sabemos que vai dar como resultado 3.3 e uns quebrados XD. Não é? Si eu guardar em um inteiro vai guardar o 3 somente. Ou seja si faço int n = 10/3; n vai conter 3, por duas razões, 10 e 3 são inteiros, e o n também, o que significa que eu provavelmente  seja o que eu quero(Ou não XD). Porem si eu fizer double n = 10/3; que vai acontecer? Vai guardar esses 3.3, ou somente o 3? A resposta é 3. Tadha!!! Por que? Eu guardei ela em um doubleeee nhenhenhe!! Isso não tem nada a ver, si eu for numa folha de papel e multiplicar 3*7 nunca vai dar um flotante ou double. Não é? Não vai dar 21 ponto algo, é um absurdo isso, vai dar 21 "JUSTO". Então... Como é que você esta esperando que saia um double de "a" multiplicado por "b"???WTF

Para solucionar o problema anterior, devemos fazer um cast a double de ao menos um dos inteiros na hora de fazer a multiplicação. Vamos ver um exemplo? (double)a * b ou a*(double)b ou podemos fazer o cast de ambos valores (double)a * (double)b. E por que só precisamos fazer a conversão com um? Digamos que o compilador é nosso camaradinha, e ele quer nos ajudar, então si eu converto um só dos valores, ele vai fazer o trabalho de converter o outro por vc. Si se tratasse de inteiros não deveria haver casts não é? Então! Si nos convertemos um, não tem lógica multiplicar um int por um float, ou os 2 são inteiros ou os 2 são floats, si um é float o outro é float. Ok? Ufa!!

Então agora vamos ver isso..

double f = (double)a*b; //a e b são inteiros

...o que vai acontecer é que primeiro se vai resolver o lado direito do operador = para depois guardar o resultado em f, claro, primeiro devemos saber o resultado antes de guardar. dá!!!

Em outras palavras isso: double f = (double)a*b; primeiro se transforma nisso double f = 30.0; supondo que a guardava um 3 e era um inteiro que "casteamos"(convertemos) a double, e b valia 10 e foi "casteado" automaticamente pelo compilador para nós.

Então passo a passo o que acontece esta a continuação:

  1.  double f = (double)a*b; //a=3, b=10
  2.  double f = 3.0*b;  //a é convertido a float
  3.  double f = 3.0*10.0; //10 é casteado a double automaticamente por nosso amigo o compilador.
  4.  double f = 30.0; // se resolve a equação
  5.  f já contem 30.0

Quer saber si é verdade?

prova: double f = (double)a/b; e imprima f com printf("%lf", f);

    double f= 10/(float)3;
    printf("%lf", f);

Si funcionou comenta aqui =D.

Agora vamos falar do que aconteceria si fazemos isso: int f= 3.0*30.3;. Simplesmente se descarta tudo o que esta depois do ponto já que um inteiro não pode guardar as partes decimais de um numero real.

Com isso você já tem suficiente teoria para arrumar seu programa e não ter problemas com floats nunca mais. ;)

Agora só falta você decidir si quer que seja inteiros ou reais. Valeu?

Fui! Sorte!

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, quase uma semana atrasado mais voltei e ainda sem o fim desse programa, um pouco sem tempo hehe..É o seguinte:

tenho de continuar deixando já claro no programa que tenho de calcular o valor em reais ou seja lá qual for a moeda dos m2 do terreno.

Aqui dá erro ainda:

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    double p = 256.50;
    double f, P;

    cout << "Digite a largura do terreno: \n";
    cin >> a;
    cout << "\n";

    cout << "Digite o comprimento do terreno: \n";
    cin >> b;
    cout << "\n";

    cout << "A area do terreno e: \n" << f << endl;
    cout << "O preço do terreno e: \n" << P << endl;

    double f = (double)a*b; //ou se faco a*b(double) tb da na mesma >>>> aqui está sendo o erro
    P = f*p;

    return 0;
}

Paciencia hein :D

Link para o comentário
Compartilhar em outros sites

  • 0

amigo.. você já declarou um double la no começo do main. ou seja isso: double f, P; e isso double f = (double)a*b; você fez double f 2 vezes, esse é o erro kkk

 

Acho que nem faz falta o f. Porque você pode fazer diretamente:
 

#include <iostream>
using namespace std;
#define imprimir cout<<

int main()
{
    int a, b;
    double p = 256.50;
    double f, P;

    imprimir "Altura?: ";
    cin >> a;
    
    imprimir "\nComprimento?: ";
    cin >> b;
    
    cout << "A area do terreno e: " << a*b << endl;
    cout << "O preço do terreno e: "<< (a*b)*p << endl;


    return 0;
}

Sobre o "imprimir"... nem ligue. É brincadeirinha kkk

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