Jump to content

Dúvida Conversor | INICIANTE


LagMaster
 Share

Recommended Posts

Boas People

Registei-me há cerca de 1 mês mas devido a escola ? , não tenho tido tempo (sinceramente nem me lembrava) de vir ao forum (tinha comprometido comigo mesmo de tentar aprender a programar ). E hoje voltei e recomecei a ler uns tópicos de Pascal.

Estava a ler um tutorial de 2005 e fiquei um pouco "à nora" então percebi que ao ler o codigo fonte era mais facil entender.

Codigo Original Presente no Tutorial 2005

Program Conversão(input,output);

USES CRT;
CONST
KLMILHA=1.6;
VAR
KILOMETROS, MILHAS: real;

BEGIN
writeln('Escreva uma distancia em milhas');
readln(MILHAS);
KILOMETROS:=KLMILHA*MILHA;
writeln('A distância é de ',KILOMETROS, 'Quilómetros');
END.

Esse programa é então um conversor de milhas (nao sei se terrestres ou maritimas , mas isso agora nao importa lol ) para KM..

E logo no inicio não percebi para que servia o: USES CRT

Depois se bem intendi pelo Tutorial o Const são as constantes e o Var as variaveis, mas o que significa o real ?? Estava no texto do tutorial mas não entendi la muito bem..

Depois quando executei esse código ( estou a usar o IDE FPS ) aparecia a parte para por as milhas mas após eu clicar enter para ver quanto dava em KM , aquilo passava muito rápido e não dava para ver o resultado, será do IDE  ???

E por ultimo (muitas duvidas em pouco tempo xD ) eu tentei "converter" o conversor para ser um conversor de Libras para Euros ( basicamente estava a trocar os nomes ) e acabei com este código:

Program Conversão(input,output);
CONST
Libra=1.2;
VAR
Libras, Euros: real;

BEGIN
writeln('Escreva a quantia em euros');
readln(Euros);
Euro:=Libras*Euros;
writeln('A quantia é de ',Euro, 'euros');
END.program Noname0;

Que erro é que cometi ?? É  que aquilo empata sempre na parte: Euro:=Libras*Euros; ?

Agradeço se me puderem ajudar.. a maioria das duvidas devem parecer provenientes de um nabo mas isso não há nada a fazer xD

Cumprimentos e agradecido

LagMaster

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

  • Replies 40
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Nao definiste (o compilador nao conhece nem sabe de que tipo é) a variavel Euro.

Além disso, definiste a variavel Libras mas nao lhe deste valor nenhum.

Para converter de euros a libras, multiplica os euros introduzidos pelo utiilzador por uma constante ... e atribui esse resultado a uma variavel (provavelmente chamada Libras).

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!

Link to comment
Share on other sites

Ahh LoL não tinha pensado bem . Obrigado 😄

Estive a ver o código e :

Alterei a parte: Euro:=Libra*Euros; de forma a que fosse o numero que se escreve x libras ..

Mas após isso que faço ?? (Ja coloquei nas Variaveis o Euro )..

Basicamente ficou assim:

Program Conversão(input,output);
USES CRT;
CONST
Libra=1.2;
VAR
Euro,Euros: real;

BEGIN
writeln('Escreva a quantia em Euros');
readln(Euros);
Euro:=Libra*Euros;
writeln('A quantia é de ',Euro, 'euros');
END.program Noname0;

E desta forma já deu para compilar  😁

Mas quando escrevo o nº ( escreva a quantia em euros ) apos clicar enter aquilo passa muito rapido e desaparece.. que erro é que cometi ??

Cumpz

LagMaster

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

O motivo de passar muito depressa é o seguinte:

1. Quando começa o programa, ele escreve uma frase.

2. De seguida, espera pelo utilizador para receber um valor.

3. Faz um calculo e guarda o resultado numa variável

4. Escreve uma frase

5. Termina

Se reparares, entre o 4 e o 5 não há nada. Ou seja, ele escreve, e termina imediatamente.

O que tens de fazer é colocar uma instrução qualquer depois do ultimo writeln que obrigue o programa a esperar para dar tempo ao utilizador de ver o resultado.

Uma forma básica é colocares um readln; antes do END. (o readln; sem parentesis nem variável irá simplesmente aguardar que lhe seja dado um <enter>)

Podias elaborar isto, é claro, por exemplo escrevendo uma indicação a dizer ao utilizador para dar enter para terminar o programa, mas basicamente só precisas mesmo do readln.

Isto resolve-te o problema de não mostrar o resultado.

Perguntaste também para que serve o Uses Crt;

Dividindo isto em partes:

Uses - Serve para indicar units, ou seja, bibliotecas de rotinas que, não pertencendo ao núcleo do pascal, ficam disponíveis para ti assim que as chames no programa. Basta colocar no inicio (depois da linha program xpto;) a palavra uses seguida dos nomes dessas units, que se separam por virgulas caso haja mais do que uma a declarar.

Existem montanhas de units que podes usar, umas pertencentes ao proprio pascal, outras criadas por terceiros. Podes ainda criar as tuas proprias units (por exemplo, se criares uma ou mais funções que precises de usar em vários programas, para não as estares sempre a escrever, inserias numa unit, e depois no programa só dizias uses crt, minhaunit;).

Mas isto de criar units aguarda um pouco mais lá pra frente na tua aprendizagem! 😄

Crt - É uma dessas units, e possivelmente a principal unit de pascal. Contém rotinas de comunicação com a consola (monitor+teclado) que permitem fazer coisas como mudar a cor do texto, ler caracteres directamente sem precisar de dar enter, mudar o cursor de local sem ter de escrever, etc.

No caso, uses crt; serve para indicares ao teu programa que vais usar rotinas da unit crt.

No caso também, é desnecessária esta linha, pois não estás a usar nada que não pertença ao núcleo do pascal (writeln, readln, constantes e variáveis). Podias tirar a linha que o programa funcionaria da mesma maneira.

Podes também é começar a usar essas rotinas.

Por exemplo, logo a seguir ao begin, se colocares o comando ClrScr; estás a dizer ao programa para limpar o ecrã no inicio do programa.

Se usares TextColor(Blue); estás a dizer para escrever em azul, etc...

Quanto ao Real, é um dos muitos tipos de dados do pascal.

Um tipo de dados é uma maneira de dizer ao compilador que tipo de valores vais atribuir a uma variável.

Neste caso, estás a dizer que as tuas variáveis vão ser do tipo Real, ou seja, números reais (que é como quem diz, qualquer numero*, com ou sem casas decimais)

* Qualquer número é relativo. Há um limite do maior e menor numero que o tipo real pode guardar, que tem a ver com o numero de bytes que ele ocupa em memoria. Não interessa muito dizer qual é, porque varia de compilador para compilador, mas posso dizer-te que é grande.

Há outros tipos de dados muito usados:

Integer - Numeros inteiros (sem casa decimal)

Char - Caracteres (apenas um)

String - Caracteres (vários. dependendo do compilador, pode ter até 255 caracteres, ou mais)

Boolean - Binário - Só aceita dois valores, verdadeiro (true) ou falso (false).

Há muitos mais, e inclusivamente podes criar tipos teus, e subtipos. Mas isso é mais à frente, se começares agora com estes já é excelente.

Se vires o tutorial do Thoga31, cá no forum (aqui), tens um excelente ponto de partida para aprender esta linguagem.

E qualquer duvida, aparece. Estamos por aqui para ajudar!

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Já agora, no teu segundo programa está a falhar o "português".

Estas a pedir euros, e depois multiplicas por 1.2 e dizer que são xx euros...

🙂 Não quererás dizer para inserir as libras, e depois mostrar os euros? Ouvi dizer que isso dá jeito para compras no ebay! 😄

PS: Já agora:

O (input,output) podes tirar do programa. Usava-se em pascal standard, há muitos e muitos anos, mas agora, ainda que não dê erro se lá estiver, é completamente inútil. O compilador não lhe passa cartão!

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Ah ok Thanks  🙂

Finalmente deu 🙂

Esse erro do portugues foi mesmo uma fail  ?

Program Conversão;
USES CRT;
CONST
Libra=1.19875;
VAR
Euro,Euros: real;

BEGIN
writeln('Escreva a quantia em Libras');
readln(Euros);
Euro:=Libra*Euros;
writeln('A quantia é de ',Euro,'.');
readln;
writeln ('Obrigado por usar este conversor ');
readln;
writeln ('Clique ENTER para sair');
readln;
END.program Noname0;

Acabei por fazer uma mensagem para sair , após tentar muitas vezes  😁

Eu sei que não escrevi o programa original mas estou mesmo muito contente  😄

A seguir vou ler esse tut ( acho que quando me registei ja tinha começado , mas como disse já não venho cá há muito tempo )..

Cumpz

LagMaster ?

Ps- Está é com um erro que parece que o resultado vem em notação cientifica ( o problema portanto só começa a aparecer em numeros acima de 10 ).

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Já agora, podes mudar o nome da variável Euros para Libras.

Faz mais sentido, visto que a estás a usar para ler as libras que o utilizador insere.

Quanto à notação científica, é normal, porque o tipo Real é tão grande que só lá vai com notação cientifica.

Para que isso não suceda, deves indicar ao compilador que te basta um número mais pequeno.

Por exemplo, para os euros, só precisas de duas casas decimais. Então fazes o seguinte:

writeln('A quantia é de ',Euro:3:2,'.');

Aquele :3:2 à frente da variável, irá fazer com que o número mostrado tenha um mínimo de 3 caracteres, e um máximo de 2 casa decimais.

Tem de estar encostado à variável, sem espaços entre a variavel e os dois pontos, tal como no exemplo em cima.

Se quisesses, podias por :10:2, e o valor aparecia com espaços antes do número

Ex.:  A quantia é de        2.25.

Isto só é preciso nos numeros reais. Uma variável integer, por exemplo, como não tem casas decimais, não precisa de nada disto.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Já agora, pareces estar interessado em aprender, sugiro-te fazer um exercicio:

Fazes o mesmo conversor, mas com possibilidade de converter de euros para libras, ou de libras para euros.

Para tal, deves perguntar primeiro ao utilizador qual a opção, e conforme a resposta, executar o cálculo correcto.

Se tiveres dúvidas, tens o tuturial ou então aqui no forum! 😄

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

http://img338.imageshack.us/img338/6383/transferirb.jpg

Vou tentar , tb estava a pensar , no final  dar a opção de voltar a converter um nº ou sair.. mas isso fica para o fim ..

Vou ler o tut e depois tentar (ou entao ao contrario)

Cumpz

LagMaster 😄

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Vou ter então de colocar euros como constante , certo ??

Program Conversão;
USES CRT;
CONST
Libra=1.19875;Euro=0.83320

Acrescentar as libras às variaveis:

Program Conversão;
USES CRT;
CONST
Libra=1.19875;Euro=0.83320
VAR
Euro,Libra,Libras: real,Euros: real;

Após isso fazer um frase que dê ambas as opções:

 Program Conversão;
USES CRT;
CONST
Libra=1.19875;Euro=0.83320
VAR
Euro,Libra,Libras: real,Euros: real;

BEGIN
writeln('Quer converter £>€ ou €>£ ?'); 

E depois por o readln para ambas as opções:

Program Conversão;
USES CRT;
CONST
Libra=1.19875;Euro=0.83320
VAR
Euro,Libra,Libras: real,Euros: real;

BEGIN
writeln('Quer converter £>€ ou €>£ ?');
readln(£>€,€>£);

Penso que isto deva ser o inicio do programa, agora vou ter de por aqueles "if's,thens, etc.." por isso vou ver se leio essa parte do tut..

Agradeço a ajuda xd

Cumpz

LagMaster😄

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Sim, isso é excelente, porque fazendo isso, usas já muitas das bases do Pascal.

Gosto de ver essa vontade! 🙂 Cá estaremos para apoiar!

Se lês antes ou depois o tutorial...

Um professor dir-te-ia para ler primeiro.

Mas confesso que sempre preferi por as mãos na massa, e ir lendo à medida que me fazia falta algo! 😄

Quanto ao teu ultimo post:

Não precisas fazer essa segunda constante. O factor é o mesmo, só precisas de decidir se multiplicas (como fizeste até agora) ou divides.

Basicamente, o teu programa precisará de:

1. Perguntar o que a pessoa quer fazer (euros para libras ou libras para euros)

2. Ler a opção

3. Testar a opção:

  Se for libras para euros:

      a. Pergunta um valor em libras

      b. Le um valor

      c. Multiplica o valor lido pelo factor de conversão (constante)

      d. Mostra o resultado em euros

  Se for euros para libras:

      a. Pergunta um valor em euros

      b. Le um valor

      c. Divide o valor lido pelo factor de conversão (constante)

      d. Mostra o resultado em libras

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Então acabei por só ler aquilos dos "if's" e parece facil..

Program Conversão;
USES CRT;
CONST
Libra=1.19875;
VAR
Euro,Libra,Libras: real,Euros: real;

BEGIN
writeln('Quer converter £>€ ou €>£ ?');
readln(£>€,€>£);
if (£>€)then begin
writeln('Escreva a quantia em Libras');
readln(Euros);
Euro:=Libra*Euros;
writeln('A quantia é de ',Euro:3:2,'.');
end
else begin
writeln('Escreva a quantia em Euros');
readln(Libras);
Libra:=Libra/Euros;
writeln('A quantia é de ',Libra:3:2,'.');
end
readln;
END.program Noname0;

Está a dar-me erro nas variaveis :/

Pode ser que existam mais erros em baixo , mas eu faço isto aos poucos portanto 🙂 (o erro estara na parte Libra:=Libra/Euros; )..

Poderia ajudar-me ??

Cumpz

LagMaster 😄

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Claro que sim...

Bem, para começar, não podes por selecções de cor do forum dentro das tags de code. 😄

Quanto ao programa mesmo, tu estás a ler a opção incorrectamente.

Dentro do readln deves por um variável, e como estás a ler caracteres, tem de ser do tipo char (se te bastar ler um) ou string (se quiseres ler varios). Como não faz sentido o utilizador estar a escrever tudo, uma variavel do tipo char chega-te perfeitamente.

Detás de a declarar junto com as outras. Como já lá tens o VAR, não precisas de repetir, basta meter o nomedavariavel : tipodedados;

Quando fores ler a opção, fazes readln(nomedavariavel); como fizeste para ler o valor. Claro que convém que na mensagem em que perguntas a opção, sejas claro para o utilizador saber o que deve inserir (ex.: Insira € para converter em euros e £ para converter em libras).

De seguida podes testar a variável da opção.

A tua estruturação do IF está correcta, mas a condição que usaste não.

Nesta fase tu já tens a opção do utilizador numa variável (chamada por exemplo, opcao).

O que precisas agora é ver que caracter é que lá está guardado. Portanto a condição será:

if opcao = '€' then begin

as pelicas ( '€' ) à volta do simbolo € é uma exigencia do pascal. Quando estás a lidar com valores alfanumericos (char ou string), esses valores têm de estar sempre envoltos em pelicas: Ex.:  'valor qualquer'

Outra sugestão que te dou é dar nomes melhor pensados aos identificadores (variáveis e constantes, e claro ao proprio programa).

1. Os identificadores não podem ter acentos, espaços ou cedilhas, têm de começar por uma letra ou um _. Também não podem ser repetidos dentro da mesma zona do programa (no teu programa só tens uma zona pelo que não podes mesmo repetir).

2. Se criares identificadores muito parecidos (libra e libras) corres o risco de os trocar, como estás a fazer no ultimo writeln, em que estás a escrever a constante, ou no calculo antes do writeln, onde tentas atribuir um valor à contante.

Recomendo-te portanto que à constante chames algo como EurosPorLibra. Assim nesse já não te enganas. 🙂

Depois, duas variáveis te chegam, uma chamada euros e outra chamada libras. (mais, é claro, a variável da opção).

Depois lês na variável que foi decidido (euros ou libras, conforma a opção) e calculas com a outra:

Ex.:

writeln('Escreva a quantia em Libras');
readln(libras);
Euros:=Libras*EurosPorLibra;
writeln('A quantia é de ',Euro:3:2,' euros.');
end

Qualquer coisa avisa...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não percebi isso  bem  :wallbash:

Estou a tentar alterar tudo o que posso e que deveria por a dar..

Program Conversão;
USES CRT;
CONST
EurosPorLibra=1.19875;
VAR
opcao,Euro,Libra,Libras,Euros: real;

BEGIN
writeln('Insira Euros para converter em euros e Libras para converter em libras');
readln(Euros,Libras);
if opcao = 'Euros' then begin
writeln('Escreva a quantia em Libras');
readln(Euros);
Euro:=EurosPorLibra*Euros;
writeln('A quantia é de ',Euro:3:2,'.');
end
else begin
writeln('Escreva a quantia em Euros');
readln(Libras);
Libra:=Libras/EurosPorLibra;
writeln('A quantia é de ',Libra:3:2,'.');
end

END.program Noname0;

Não estou a perceber o que faço mal  😄

Cumpz

LagMaster

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

O que estás a fazer mal é que não estás ainda a ver o conceito de leitura de variáveis.

Mas não te preocupes, isso já lá vai! 😄

O readln lê-te um valor do teclado para uma variável. Portanto, não faz sentido usares readln(Euros,Libras);  porque isto seria tentar ler duas variáveis.

Neste ponto, tudo o que precisas é que o utilizador decida o que quer fazer. Se ele escrever 'Euros' e der enter, vai fazer uma coisa. Se escrever 'Libras' e der enter, vai fazer outra coisa.

Ou seja, precisas de ler uma variável apenas, que é a variavel opcao.

Ficaria por isso:

writeln('Insira Euros para converter em euros e Libras para converter em libras');
readln(opcao);

Falando nisso, como vais ler palavras (as opções que o utilizador pode inseri são 'Euros' ou 'Libras'), a tua variavel opcao tem de ser declarada com o tipo certo. No teu programa, estás a declara-la como sendo do tipo real, o que te daria erro ao ler o valor.

Teria portanto de ficar assim:

var
   opcao: String;   // String é um tipo de dados que serve para guardar texto, independentemente de serem numericos ou não
   Euros,Libras: Real;  // Como eu tinha dito antes, só precisas das variáveis opcao, euros e libras. O resto não é necessário

A nivel do IF já acertaste. Falta só agora veres o porquê de só precisares de duas variáveis do tipo Real.

Tens duas declaradas: Euros e Libras. Só precisas mesmo dessas, porque das duas uma: Ou tens euros e queres libras ou tens libras e queres euros. Só tens necessidade de guardar dois valores, pelo que não precisas de 4 variáveis.

Assim, no primeiro cáluclo poderias fazer:

writeln('Escreva a quantia em Libras');
readln(Libras);  // repara, se estás a pedir libras ao utilizador, deves usar a variável libras, e não euros como fizeste. Não faz sentido e acaba por te baralhar
Euros:=EurosPorLibra*Libras;
writeln('A quantia é de ',Euros:3:2,'€.');

No segundo bloco é igual. Deves ler o valor em euros para a variável Euros e depois atribuir a conta à variável Libras, já que é isso que estás a calcular.

Tenta agora... 🙂

PS: Convém notares bem a diferença entre os nomes das variáveis, que no caso são Euros, Libras e Opcao, dos valores que o utilizador insere, que no caso são 'Euros' ou 'Libras' (entre pelicas).

Outra coisa que tens de ter em atenção é que A é diferente de a. Ou seja, Se no IF tens opcao = 'Euros' e o utilizador inserir 'euros' (com o E minúsculo), o programa não irá fazer correctamente o serviço.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Obrigado  😄

Program Conversão;
USES CRT;
CONST
EurosPorLibra=1.19875;
var
   opcao: String;
   euro,libra,Euros,Libras: Real;

BEGIN
writeln('Digite Euros para converter em euros e Libras para converter em libras');
readln(opcao);
if opcao = 'Euros' then begin
writeln('Escreva a quantia em Libras');
readln(Libras);
euro:= EurosPorLibra*Libras;
writeln('A quantia é de ',euro:3:2,' Obrigado por usar este conversor ;D');
readln;

end
else begin
writeln('Escreva a quantia em Euros');
readln(Euros);
libra:=Euros/EurosPorLibra;
writeln('A quantia é de ',Libra:3:2,'Obrigado por usar este conversor ;D');
readln;
end

END.program Noname0;

Aquilo dava Erro no Euro e Libra portanto acrescenteios às variaveis reais..

E funciona 🙂

Agora vou tentar pesquisar para depois apos converter perguntar se quer converter mais alguma coisa ou sair.. vou ver se tá no tut  🙂

Cumpz

LagMaster ?

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

😄

Dava erro no Euro e Libra porque não estavam essas declaradas. Se tinhas só declaradas Euros e Libras (plural) eram essas a usar. Bastava-te acrescentar um s em cada uma.

Mas força. vê agora a repetição como deves fazer. No tutorial do Thoga está tudo explicadinho! 🙂

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Vou agora ler..

Realmente sinto-me estranhamente orgulhoso com o programa xD

A versao actual é esta:

Program Conversão;
USES CRT;
CONST
EurosPorLibra=1.19875;
var
   opcao: String;
   euro,libra,Euros,Libras: Real;

BEGIN
writeln('Digite 1 para converter libras em euros e 2 para converter euros em libras');
readln(opcao);
if opcao = '1' then begin
writeln('Escreva a quantia em Libras');
readln(Libras);
euro:= EurosPorLibra*Libras;
writeln('A quantia é de ',euro:3:2,' euros  Obrigado por usar este conversor ;D');
readln;

end
else begin
writeln('Escreva a quantia em Euros');
readln(Euros);
libra:=Euros/EurosPorLibra;
writeln('A quantia é de ',Libra:3:2,'libras Obrigado por usar este conversor ;D');
readln;
end

END.program Noname0;

Agora vou ver isso da repetição e talvez ainda hoje tenha um conversor de jeito pessoal  😄

Cumpz

LagMaster

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Isto do repeat não percebi..

Como é que o uso neste caso ??

Program Conversão;
USES CRT;
CONST
EurosPorLibra=1.19875;
var
   opcao: String;
   euro,libra,Euros,Libras: Real;

BEGIN
writeln('Digite 1 para converter libras em euros e 2 para converter euros em libras');
readln(opcao);
if opcao = '1' then begin
writeln('Escreva a quantia em Libras');
readln(Libras);
euro:= EurosPorLibra*Libras;
writeln('A quantia é de ',euro:3:2,' euros  Obrigado por usar este conversor ;D');
readln;

end
else begin
writeln('Escreva a quantia em Euros');
readln(Euros);
libra:=Euros/EurosPorLibra;
writeln('A quantia é de ',Libra:3:2,'libras Obrigado por usar este conversor ;D');
readln;
end
END.program Noname0;

Devia por repeat e no fim until ate que alguem escrevesse sair..

Portanto no inicio adicionava a opçao 3 para sair...

Mas acho que para isso precisava de mais um if :/

YOU SHALL NOT PASS !!!

Link to comment
Share on other sites

Muito bem...

Agora com essa alteração podes mudar a variavel opcao para o tipo char (apenas um caracter) - Tudo o resto é igual.

Agora enquanto ves como fazer a repetição, aproveita e ve o funcionamento da estrututa Case ... Of...

Estás no inicio, e é natural que te orgulhes por estares a conseguir fazer este exercicio.  Se continuares a tua aprendizagem em breve poderás fazer programas que te darão muito mais orgulho... 😄

Sobre o repeat until, é mesmo isso que deves usar.

O repeat é antes da primeira instrução a repetir, e o until no final.

Em vez de mais um IF, podes perguntar no fim se quer repetir.

Depois no until colocas:

Until Opcao = 'N'

Tenta isso...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
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
 Share

×
×
  • Create New...

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.