FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.122 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 26-04-2005, 14:18   #1 (permalink)
Trakinas
Super Participante
 
Registrado em: Feb 2004
Localização: Juiz de Fora
Mensagens: 451
Reputação: 17 Trakinas está indo no caminho certo
Enviar mensagem via ICQ para Trakinas Enviar mensagem via AIM para Trakinas Enviar mensagem via Yahoo para Trakinas
Padrão calculadora em pascal: preciso de ajuda!

olá!

preciso fazer uma calculadora em pascal. mas tenho algumas duvidas...

eu pensei em usar procedures, mas nao deu muito certo. Ele checa certo todas as procedures, porem exibe o resultado de todas as operaçoes.

então, pensei em fazer usando uma função que verificasse o char digito. Por exemplo, quando for * realizar uma multiplicaçao. Mas nao tenho ideia de como passar isso pra pascal.

alguma ajuda?
Trakinas está offline   Responder com Quote
Antigo 26-04-2005, 15:16   #2 (permalink)
jricardoss
Membro Senior
 
Registrado em: Jul 2004
Localização: Curitiba - PR
Idade: 26
Mensagens: 250
Reputação: 16 jricardoss está indo no caminho certo
Enviar mensagem via MSN para jricardoss
Padrão

Tenta fazer isso:

if(operacao='+') then
calculo := num1 + num2
else if(operecao='-') then
calculo := num1 + num2
.
.
.

Mas dá para fazer o numero(var calculo) ir acumulando.
Dai fica uma calculadora de verdade.
Mas a logica é quase essa.
__________________
Ricardo Serathiuk
http://serathiuk.com/
jricardoss está offline   Responder com Quote
Antigo 26-04-2005, 16:02   #3 (permalink)
Trakinas
Super Participante
 
Registrado em: Feb 2004
Localização: Juiz de Fora
Mensagens: 451
Reputação: 17 Trakinas está indo no caminho certo
Enviar mensagem via ICQ para Trakinas Enviar mensagem via AIM para Trakinas Enviar mensagem via Yahoo para Trakinas
Padrão

jricardoss, valeu!

por enquanto, deixa ela assim. um passo de cada vez!

=)

abraços
Trakinas está offline   Responder com Quote
Antigo 26-04-2005, 23:08   #4 (permalink)
Trakinas
Super Participante
 
Registrado em: Feb 2004
Localização: Juiz de Fora
Mensagens: 451
Reputação: 17 Trakinas está indo no caminho certo
Enviar mensagem via ICQ para Trakinas Enviar mensagem via AIM para Trakinas Enviar mensagem via Yahoo para Trakinas
Padrão

gostaria agora que ela ficasse aberta até que eu entrasse com um determinado comando...

por exemplo...

writeln ('se deseja sair, tecle s');

caso a pessoa nao tecle s, o programa continua funcionando...


o meu codigo esta assim:

Código:
program calculadora; uses crt; var x, y, resultado : real; operador : char; begin clrscr; writeln ('Entre com A:'); readln (x); writeln ('Entre com B:'); readln (y); writeln ('Escolha a operacao (+,-,*,/):'); readln (operador); {soma} if (operador='+') then resultado := x+y {subtaracao} else if (operador='-') then resultado := x-y {mutiplicacao} else if (operador='*') then resultado := x*y {divisao} else if (operador='/') then resultado := x/y; writeln (resultado:8:3); end.
obrigado
Trakinas está offline   Responder com Quote
Antigo 27-04-2005, 6:54   #5 (permalink)
Grave_Digger
Membro Senior
 
Registrado em: Nov 2004
Localização: Sampa
Mensagens: 347
Reputação: 15 Grave_Digger está indo no caminho certo
Padrão

Citação:
Postado Originalmente por Trakinas
gostaria agora que ela ficasse aberta até que eu entrasse com um determinado comando...

por exemplo...

writel...
Amigo, não entendi exatamente o q vc quer pois abre margem a 2 opções, porém a saída para as duas eh a mesma.

use um while

declare uma variável de checagem e de um while nela

Código:
while ( check <> s ) do //Ai vc coloca seu programa aki (conteúdo depois do ClrScr) //E no final coloca uma opção pra pessoa digitar se quer sair ou não
Agora se vc quer que A QUALQUER MOMENTO em q a pessoa pressione S o programa fecha ai vc usa:

while ( KeyPressed <> s ) do
//Seu programa aki.


ps: n testei nenhum dos 2 mas tenho quase certeza q ao menos o primeiro está certo,heheh
__________________
Analista Desenvolvedor WEB
Java e .NET
SCJP
Need a coder ?
sena.pedro@gmail.com
Grave_Digger está offline   Responder com Quote
Antigo 27-04-2005, 8:24   #6 (permalink)
jricardoss
Membro Senior
 
Registrado em: Jul 2004
Localização: Curitiba - PR
Idade: 26
Mensagens: 250
Reputação: 16 jricardoss está indo no caminho certo
Enviar mensagem via MSN para jricardoss
Padrão

Olhá uma modificada.
Código:
program calculadora; uses crt; var x, y, resultado : real; operador, resp : char; cont: integer; begin resultado := 0; cont := 1; Repeat clrscr; writeln ('Entre com o numero:'); readln (y); writeln ('Escolha a operacao (+,-,*,/):'); readln (operador); {soma} if (operador='+') then resultado := resultado + y {subtaracao} else if (operador='-') then resultado := resultado -y {mutiplicacao} else if (operador='*') then resultado := resultado *y {divisao} else if (operador='/') then resultado := resultado /y; writeln (resultado:8:3); WriteLn(''); WriteLn(''); if(cont=1) then cont := cont + 1 else begin WriteLn('Continuar(C), Zerar(Z), Sair(S): '); Readln(resp); end; If(resp='Z') then Begin resultado := 0; cont := 1; End; Until resp = 'S'; end.
Está meio desorganizada, mas funciona. Testei no PascalZim.
O cont ali só serve para saber se o numero é o primeiro digitado para não dar opção sem necessidade.
__________________
Ricardo Serathiuk
http://serathiuk.com/
jricardoss está offline   Responder com Quote
Antigo 27-04-2005, 14:36   #7 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Isso mesmo... agora veja como vai ficar seu código se, em vez de fazer esse catatau de "ifs", usar a construção "case variavel of"...

tipo:

Código:
... case operador of '+': resultado := resultado + y; '-': resultado := resultado - y; '*': resultado := resultado * y; '/': begin resultado := resultado / y; end; else writeln("operador inválido"); ...
PS: Tem ainda uma armadilhazinha nesse código, pra ver se vc tá ligado de verdade. :lol:
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 27-04-2005, 17:45   #8 (permalink)
jricardoss
Membro Senior
 
Registrado em: Jul 2004
Localização: Curitiba - PR
Idade: 26
Mensagens: 250
Reputação: 16 jricardoss está indo no caminho certo
Enviar mensagem via MSN para jricardoss
Padrão

E que eu não gosto do CASE do Pascal. Se fosse C ou PHP ...
__________________
Ricardo Serathiuk
http://serathiuk.com/
jricardoss está offline   Responder com Quote
Antigo 27-04-2005, 18:20   #9 (permalink)
aylons
General de Pijama
 
Avatar de aylons
 
Registrado em: Mar 2004
Localização: São Paulo
Idade: 27
Mensagens: 3.740
Reputação: 21 aylons possui ótimo potencial
Enviar mensagem via ICQ para aylons Enviar mensagem via MSN para aylons Enviar mensagem via Yahoo para aylons Enviar mensagem via Skype para aylons
Padrão

Uma sugestão seguindo outra linha: uma implementação em RPN é mais simples e permite ao usuário mais flexibilidade.
__________________
Ayloиs Hazzud, com N invertido
aylons está offline   Responder com Quote
Antigo 27-04-2005, 18:29   #10 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Ah, antes que eu esqueça, Trakinas e jricardoss, a "armadilha" também está no código de vocês, e praticamente no mesmo lugar.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 27-04-2005, 19:32   #11 (permalink)
Hider
Veterano
 
Avatar de Hider
 
Registrado em: Sep 2003
Localização: Vitória - ES
Idade: 25
Mensagens: 1.369
Reputação: 35 Hider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulhar
Enviar mensagem via MSN para Hider
Padrão

Program Calculator;
Uses CRT;
label
inicio,soma,sub,divi,muti,result;
var
num1,num2,resultado:real;
contador:integer;
operador:char;
Begin
clrscr;
inicio:
num1:=0;
num2:=0;
clrscr;
Writeln('Digite um numero: ');
Readln(num1);
Write('OPERADOR ');
read(operador);
if (operador = '+') then
begin
readln(num2);
resultado:=num1 + num2;
end;
if (operador = '-') then
begin
readln(num2);
resultado:=num1 - num2;
end;
if (operador = '*') then
begin
readln(num2);
resultado:=num1 * num2;
end;
if (operador = '/') then
begin
readln(num2);
resultado:= num1 / num2;
end;
write('OPERADOR');
read(operador);
if (operador = '+') then
begin
goto soma;
end;
if (operador = '-') then
begin
goto sub;
end;
if (operador = '*') then
begin
goto muti;
end;
if (operador = '/') then
begin
goto divi;
end;
if (operador = '=') then
begin
goto result;
end;
soma:
begin
Writeln ('');
readln(num2);
resultado:=resultado + num2;
write('OPERADOR');
read(operador);
if (operador = '+') then
begin
goto soma;
end;
if (operador = '-') then
begin
goto sub;
end;
if (operador = '*') then
begin
goto muti;
end;
if (operador = '/') then
begin
goto divi;
end;
if (operador = '=') then
begin
goto result;
end;
end;
sub:
begin
Writeln ('');
readln(num2);
resultado:=resultado - num2;
write('OPERADOR');
read(operador);
if (operador = '+') then
begin
goto soma;
end;
if (operador = '-') then
begin
goto sub;
end;
if (operador = '*') then
begin
goto muti;
end;
if (operador = '/') then
begin
goto divi;
end;
if (operador = '=') then
begin
goto result;
end;
end;
divi:
begin
Writeln ('');
readln(num2);
resultado:=resultado / num2;
write('OPERADOR');
read(operador);
if (operador = '+') then
begin
goto soma;
end;
if (operador = '-') then
begin
goto sub;
end;
if (operador = '*') then
begin
goto muti;
end;
if (operador = '/') then
begin
goto divi;
end;
if (operador = '=') then
begin
goto result;
end;
muti:
begin
Writeln ('');
readln(num2);
resultado:=resultado * num2;
write('OPERADOR');
read(operador);
if (operador = '+') then
begin
goto soma;
end;
if (operador = '-') then
begin
goto sub;
end;
if (operador = '*') then
begin
goto muti;
end;
if (operador = '/') then
begin
goto divi;
end;
if (operador = '=') then
begin
goto result;
end;
result:
begin
Writeln (Resultado :5:2);
repeat
Writeln('Zerar? s/n');
operador:=readkey;
operador:=upcase(operador);
until ((operador = 'S') OR (OPERADOR = 'N'));
if (operador = 'S') then
begin
goto inicio;
end;
if (operador = 'N') then;
begin
writeln('FIM');
end;
end;
end;
end;
readkey;
end.




ta ae funciona ... apesar de meio grande hehe da um desconto to no primeiro periodo ainda de ciencia da computacao!!
__________________
Gente nos fins de semana

Windows 7 desk
Windows 7 note
* Linux note
Hider está offline   Responder com Quote
Antigo 27-04-2005, 19:34   #12 (permalink)
Hider
Veterano
 
Avatar de Hider
 
Registrado em: Sep 2003
Localização: Vitória - ES
Idade: 25
Mensagens: 1.369
Reputação: 35 Hider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulhar
Enviar mensagem via MSN para Hider
Padrão

agora q eu vi eu copiei e colei fico sem identação hehe!!
__________________
Gente nos fins de semana

Windows 7 desk
Windows 7 note
* Linux note
Hider está offline   Responder com Quote
Antigo 27-04-2005, 22:20   #13 (permalink)
aylons
General de Pijama
 
Avatar de aylons
 
Registrado em: Mar 2004
Localização: São Paulo
Idade: 27
Mensagens: 3.740
Reputação: 21 aylons possui ótimo potencial
Enviar mensagem via ICQ para aylons Enviar mensagem via MSN para aylons Enviar mensagem via Yahoo para aylons Enviar mensagem via Skype para aylons
Padrão

Coloca entre as tags
Código:
e
que preserva a identação.
__________________
Ayloиs Hazzud, com N invertido
aylons está offline   Responder com Quote
Antigo 28-04-2005, 12:26   #14 (permalink)
Hider
Veterano
 
Avatar de Hider
 
Registrado em: Sep 2003
Localização: Vitória - ES
Idade: 25
Mensagens: 1.369
Reputação: 35 Hider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulhar
Enviar mensagem via MSN para Hider
Padrão

am valew nem sabia disso
mas agora ja he vo cola denovo n ... nem salvei uahauhauhauha
hehe
ae mas a calculadora?? fico boa em em?hehe
__________________
Gente nos fins de semana

Windows 7 desk
Windows 7 note
* Linux note
Hider está offline   Responder com Quote
Antigo 28-04-2005, 13:38   #15 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
mas agora ja he vo cola denovo n ... nem salvei uahauhauhauha
não precisa, basta editar sua mensagem.

Se bem que não gostei muito do que vi... com certeza dá pra reescrever seu código sem usar o famigerado "goto".
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 28-04-2005, 14:14   #16 (permalink)
jricardoss
Membro Senior
 
Registrado em: Jul 2004
Localização: Curitiba - PR
Idade: 26
Mensagens: 250
Reputação: 16 jricardoss está indo no caminho certo
Enviar mensagem via MSN para jricardoss
Padrão

É verdade, mata esses goto's que goto é coisa de QBasic. uhahuahuauhhauhuhuhaaaaaaaaaa
__________________
Ricardo Serathiuk
http://serathiuk.com/
jricardoss está offline   Responder com Quote
Antigo 28-04-2005, 18:45   #17 (permalink)
Hider
Veterano
 
Avatar de Hider
 
Registrado em: Sep 2003
Localização: Vitória - ES
Idade: 25
Mensagens: 1.369
Reputação: 35 Hider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulharHider tem muito do que se orgulhar
Enviar mensagem via MSN para Hider
Padrão

po o goto acho o mais facil.. hehe
tipo oq vcs recomndam usar...??
Po eu falei to no primeiro periodo de CC......
ae vc usaria oq pra tipo voltar e tal??
pq vc tento rodar essa minha calculadora de 4 operações??funcionalidade ok!!
tipo pq a que tinha la em cima eu olhei e vi que tipo a parada do contador .. sei la (eu tentei fazer parecido pq tem muito menos codigo ne!!) mas n da a funcionalidade ... tipo eu quis fazer uma que vc poe um numero .. escolhe a operação.. digita otro.. (ai se quizer escolhe otra operação ou se por =vai direto para o resultado) e tem a opção de voltar ao inicio(ai t ao porque dos goto)... eu n sei otra função q retorne ou de saltos!!)
mas ae to aprendendo!!
__________________
Gente nos fins de semana

Windows 7 desk
Windows 7 note
* Linux note
Hider está offline   Responder com Quote
Antigo 28-04-2005, 22:19   #18 (permalink)
aylons
General de Pijama
 
Avatar de aylons
 
Registrado em: Mar 2004
Localização: São Paulo
Idade: 27
Mensagens: 3.740
Reputação: 21 aylons possui ótimo potencial
Enviar mensagem via ICQ para aylons Enviar mensagem via MSN para aylons Enviar mensagem via Yahoo para aylons Enviar mensagem via Skype para aylons
Padrão

Use laços (do, while ou for para voltar... gotos acabam com a estrutura do seu código, o deixa muito propenso a erro e muito inflexível para futuras edições. Além de deixar difícil de ler, o que eu, sinceramente, acho pior.

goto nem é algo ensinado quando se ensina C. Se te ensinaram, fizeram mal, ele SEMPRE é substituível e sua presença só não acaba com o código em poucos casos.
__________________
Ayloиs Hazzud, com N invertido
aylons está offline   Responder com Quote
Antigo 28-04-2005, 23:41   #19 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
sua presença só não acaba com o código em poucos casos.
Em todo o meu tempo de programação, eu só encontrei uso pro goto 1 vez. E mesmo assim, havia uma outra forma sem o goto, só que ficava muito maior.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 28-04-2005, 23:50   #20 (permalink)
aylons
General de Pijama
 
Avatar de aylons
 
Registrado em: Mar 2004
Localização: São Paulo
Idade: 27
Mensagens: 3.740
Reputação: 21 aylons possui ótimo potencial
Enviar mensagem via ICQ para aylons Enviar mensagem via MSN para aylons Enviar mensagem via Yahoo para aylons Enviar mensagem via Skype para aylons
Padrão

Eu também. Depois de anos programando, só fui usar goto (que eu sabia muito bem como dispensar) mês passado. O código sem ele nem ficaria tão grande assim, mas como seria um só e ajudaria a deixar tudo bem claro, preferi usar.
__________________
Ayloиs Hazzud, com N invertido
aylons está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 15:17.