Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Rui Ribeiro

Converter euros em dolares

Recommended Posts

Rui Ribeiro

Boa noite, registei me à menos de uma hora e já estou a pedir ajuda :(

Estava a programar em C, até que me surge o seguinte exercício:

Efectue a apresentação do valor da conversão em euros de um de um valor lido em dólares.

A minha questão é como por o programa a dar-me o valor com virgulas, e não arredondado ficando inteiro. Aqui está o que eu fiz, e o que penso fazer para isto dar certo(apesar de não dar certo xD)

EM INTEIROS:

#include <stdio.h>
#include <stdlib.h>
int a;
int main()
{
    printf("Digite um numero\n");
    scanf("%d",&a);
    a = a * 0.7357;
    printf("%d\n\n",a);
    system("PAUSE");
}    

EM DECIMAIS (pretendido(?correcto?)):

#include <stdio.h>
#include <stdlib.h>
float a;
float main()
{
    printf("Digite um numero\n");
    scanf("%d",&a);
    a = a * 0.7357;
    printf("%d\n\n",a);
    system("PAUSE");
}    

Ajudem me a resolver isto, pff. Desde já, obrigado :P

Share this post


Link to post
Share on other sites
KTachyon

Em primeiro, estás a colocar o valor numa variável inteira. Em segundo, estás a imprimir a variável como valor inteiro. O que pretendes é um float e não um int, e um %f e não um %d.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Rui Ribeiro

ou seja isto?

#include <stdio.h>
#include <stdlib.h>
float a;
int main()
{
    printf("Digite um numero\n");
    scanf("%f",&a);
    a = a * 0.7357;
    printf("%f\n\n",a);
    system("PAUSE");
}    

nao deveria ser float main()?

Obrigado

Share this post


Link to post
Share on other sites
pmg

1) le o tutorial de GeSHi

2) evita variaveis globais: para programas com menos de (... contar ...) 12 linhas tornam as coisas mais faceis; para programs com mais de 12 linhas tornam as coisas mais complicadas :(

3) Sem uma razao forte para escolher float, prefere double.

EM DECIMAIS

declaraste a variavel a como float, por isso nao a podes imprimir com "%d". Usa "%f", possivelmente com limites de tamanho e casa decimais: a variavel float a e automaticamente convertida para double

    printf("%7.2f\n\n", a); /* total 7 colunas (ou mais); com 2 casas decimais: ####.## */


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
skiller10

Antes de mais, falta-te o return na função main.

Quanto metes void/int/float/etc. antes do nome da função, neste caso o main, significa que é o valor que a função vai devolver.

Para o main recomendo-te a usares assim:

#include <stdio.h>
#include <stdlib.h>

int main()
{
      return 0;
}

Em relação ao problema que colocaste o KTachyon já te respondeu :(

Já agora, quando quiseres colocar código no post, quando está a publicar tens um uma combobox que diz "inserir codigo" :P


"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Share this post


Link to post
Share on other sites
pmg

nao deveria ser float main()?

NAO!

a funcao main é especial. Ela tem de ser sempre definida como uma das hipoteses abaixo (os nomes argc e argv podem variar)

int main(void) { /* ... */ }

int main(int argc, char **argv) { /* ... */ }

int main(int argc, char *argv[]) { /* ... */ }


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

Antes de mais, falta-te o return na função main.

Eu uso sempre o return 0; (ou outro valor) na funcao main, mas, na realidade, ele nao e necessario desde que foi publicado o ultimo Standard (em 1999). Ao chegar ao "}" final da funcao main sem encontrar um return, a linguagem assume um "return 0;".


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Rui Ribeiro

Obrigado pessoal, so mais uma coisinha. Como e que eu faço para no meu DEV C++ 5, quando abrir uma pagina ela vir ja com isto:

#include <stdio.h>
#include <stdlib.h>

int main()
{
      return 0;
}

so encontro como se faz isto para o Dev C++ 4, para o 5 não :s

Share this post


Link to post
Share on other sites
andre_mz

Não custa nada escrever isso. :P

E além do mais faz parte saberes o que cada uma dessas coisas significa. :(

Share this post


Link to post
Share on other sites
Rui Ribeiro

Tens razão :(

A minha prof explicou que era para aceder as bibliotecas. Podem me dizer qual é cada uma?

#include <stdio.h>
#include <stdlib.h>

Share this post


Link to post
Share on other sites
andre_mz

O stdio vês pelo nome que é para funções de entrada e saída tipo printf.

Para o stdlib tens aqui uma lista de funções: http://pt.wikipedia.org/wiki/Stdlib.h

Se fizeres man stdlib ou help stdlib (o mesmo para o stdio) penso que te dará a lista de funções que cada uma contém (acredita que é enorme).

Não sei se o man ou help funciona com bibliotecas padrão, nunca testei por acaso.

Share this post


Link to post
Share on other sites
pmg

Os headers fornecem (entre outras coisas) os prototipos das funcoes definidas na(s) biblioteca(s).

Os prototipos servem para o compilador saber como ligar o codigo-fonte as funcoes pre-compilados existentes nas bibliotecas.

O header <stdio.h> basicamente contem os prototipos para STanDard Input/Output.

O header <stdlib.h> basicamente contem os prototipos para STanDard LIBrary (funcoes padrao).

Para documentacao sobre C, eu gosto do site POSIX. Tem umas definicoes especificas POSIX, mas estao bem assinaladas e sao, portanto, facilmente evitaveis se queres fazer um program cross-platform.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.