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 759.173 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 19-02-2006, 21:28   #1 (permalink)
magaupe
Veterano
 
Avatar de magaupe
 
Registrado em: Jan 2005
Localização: Salvador/BA
Mensagens: 1.173
Reputação: 16 magaupe está indo no caminho certo
Enviar mensagem via MSN para magaupe
Padrão Calculadora em Pascal. Ajuda.

Galera, fiz uma calculadora em pascal só que o Turbo Pascal informa que há algo de errado com o código na parte do if/then, usei o case/of no lugar do if/then mas tbm deu algum tipo de erro que eu não sei o que foi. O que será isso? Se alguem souber me dizer o que está errado mas sem mudar a estrutura do programa eu agradeço.

Código:
program cal; {Calculadora} uses crt; var valor1,valor2,resultado:real; sinal:char; begin clrscr; writeln('Qual o primeiro numero?'); readln(valor1); writeln('Qual a operacao?'); writeln('1- +'); writeln('2- -'); writeln('3- x'); writeln('4- /'); sinal:=readkey; writeln('Qual o segundo?'); readln(valor2); if sinal=1 then begin resultado:=valor1+valor2; writeln('Resposta: ', resultado); end; else if sinal=2 then begin resultado:=valor1-valor2; writeln('Resposta: ', resultado); end; else if sinal=3 then begin resultado:=valor1*valor2; writeln('Resposta: ', resultado); end; else if sinal=4 then begin resultado:=valor1/valor2 writeln('Resposta: ', resultado); end; else begin writeln('Operacao Invalida!', #7); end; readkey; end.
Outro jeito q tbm deu erro:

Código:
program cal; {Calculadora} uses crt; var valor1,valor2,resultado:real; sinal:char; begin clrscr; writeln('Qual o primeiro numero?'); readln(valor1); writeln('Qual a opera‡Æo?'); writeln('1- +'); writeln('2- -'); writeln('3- x'); writeln('4- /'); sinal:=readkey; writeln('Qual o segundo?'); readln(valor2); case sinal of '1': writeln ('A soma entre os valores e'' ', valor1 + valor2); '3': writeln ('A multipliacao entre os valores e'' ', valor1 * valor2); '2': writeln ('A subtracao entre os valores e'' ', valor1 - valor2); '4': writeln ('A divisao entre os valores e'' ' , valor1 / valor2; else begin writeln('Opera‡Æo Inv lida!', #7); end; readkey; end.
magaupe está offline   Responder com Quote
Antigo 20-02-2006, 1:25   #2 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.781
Reputação: 1756 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

Acostume-se a indentar o seu código, com quase toda a certeza você esqueceu de fechar algum par 'begin/end', ou então colocou um ponto-e-vírgula antes de algum else. Só que sem indentação fica quase impossível de ver.
__________________
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 21-02-2006, 16:37   #3 (permalink)
tsutomu
Novo Membro
 
Registrado em: Jan 2006
Mensagens: 84
Reputação: 13 tsutomu está indo no caminho certo
Padrão

Bem, em pascal eu não mexo já faz muito tempo...
Mas de uma coisa eu sei:

'1': writeln ('A soma entre os valores e'' ', valor1 + valor2);

com certeza um 'break' (em C ou php é break) está faltando no final de cada cláusula desse case. O correto:

'1': writeln ('A soma entre os valores e'' ', valor1 + valor2); break;

tsutomu está offline   Responder com Quote
Antigo 21-02-2006, 16:59   #4 (permalink)
DCNunes
Veterano
 
Avatar de DCNunes
 
Registrado em: Jan 2003
Localização: Juiz de Fora-MG
Mensagens: 1.362
Reputação: 118 DCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputaçãoDCNunes tem uma fabulosa reputação
Padrão

O problema que eu vi foi a ausência de aspas simples nas comparações. Quando a variável é char, é preciso fazer:
Código:
if sinal='1' then
ao invés de
Código:
if sinal=1 then
.

Atribuições e comparacões sem aspas são para variáveis numéricas.
__________________
Beware of the slippery stairs...you could easily fall...and break your neck!
DCNunes está offline   Responder com Quote
Antigo 22-02-2006, 0:15   #5 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.781
Reputação: 1756 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:
Bem, em pascal eu não mexo já faz muito tempo...
Mas de uma coisa eu sei:

'1': writeln ('A soma entre os valores e'' ', valor1 + valor2);

com certeza um 'break' (em C ou php é break) está faltando no final de cada cláusula desse case. O correto:

'1': writeln ('A soma entre os valores e'' ', valor1 + valor2); break;
Não, Pascal não tem "break". Cada opção do case é exclusiva, e cada opção do case aceita apenas 1 comando ou bloco. Então, se vc quiser colocar +D1 comando na opção, tem que usar um bloco begin/end.

magaupe, indenta o código aí pra gente conseguir ver o que se passa...
__________________
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 22-02-2006, 0:40   #6 (permalink)
magaupe
Veterano
 
Avatar de magaupe
 
Registrado em: Jan 2005
Localização: Salvador/BA
Mensagens: 1.173
Reputação: 16 magaupe está indo no caminho certo
Enviar mensagem via MSN para magaupe
Padrão

Galera ja descobri os erros, a dica do IronManDCN era valida, outra coisa é que eu estava colocando ; nos ends que não deviam e no segundo programa eu esqueci de um end no final. heh. vlw pela ajuda!

IronManDCN, eu só não entendi uma coisa que vc falou que "Atribuições e comparacões sem aspas são para variáveis numéricas." Tipo tem vezes que qnd eu faço isso o programa pede aspas, tem vezes que não. Ex:

if idade>=18 the.. (Nesse caso o programa n pede aspas)

if sinal='1' then.. (Aqui o programa socilicita o uso)
Pq isso? Eu ainda n entendi.
magaupe está offline   Responder com Quote
Antigo 22-02-2006, 1:10   #7 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.781
Reputação: 1756 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:
if idade>=18 the.. (Nesse caso o programa n pede aspas)

if sinal='1' then.. (Aqui o programa socilicita o uso)
Pq isso? Eu ainda n entendi.
Tudo depende de como vc declarou a variável. No primeiro caso, você deve ter declarado 'idade' como um integer, ou algum outro valor numérico.

Já no segundo caso, você deve ter declarado 'sinal' como um char ou uma string.

Essa é uma diferença fundamental de Pascal pra C (eu acabei de citar outra na minha última mensagem). Em C, '0' é uma constante que tem valor numérico (48, que é o código ASCII do caracter '0'). Então você pode fazer uma expressão (c - '0'), que ele vai pegar o código numérico do '0', e subtrair da variável.

Em Pascal, não; inteiro é inteiro, caracter é caracter. Mais ainda: um caracter também é uma string[1]. Então você pode comparar livremente strings e caracteres.

Aliás, a comparação de strings no Pascal é outra diferença fundamental. Enquanto em C não se pode comparar diretamente uma string com outra (já que não existe um tipo string), em Pascal não há problema nenhum em fazer isso.

Ou seja,

Código:
var s1, s2 : string; begin if s1 = s2 then println("são iguais") else println( "são diferentes" ); end;
pode ser feito sem nenhum problema ou restrição. Já em C vc precisa de uma subrotina de apoio pra comparar as strings:

Código:
{ char s1[10], s2[10]; if ( strcmp( s1, s2 ) == 0 ) printf("são iguais\n"); else printf( "são diferentes\n" ); }
__________________
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 22-02-2006, 9:05   #8 (permalink)
gto
GeeK
 
Avatar de gto
 
Registrado em: Aug 2002
Localização: Porto Alegre - RS
Idade: 25
Mensagens: 2.116
Reputação: 29 gto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todos
Enviar mensagem via ICQ para gto Enviar mensagem via MSN para gto
Padrão

Citação:
Postado Originalmente por jqueiroz
Tudo depende de como vc declarou a variável. No primeiro caso, você deve ter declarado 'idade' como um integer...
OFF:
Dei uma lida no tópico agora mas o que mais me chamou atenção foi o seu tópico.. realmente não sabia dessas diferenças (ainda não mexo em C, pretendo), muito útil saber!!

Acredito que o código tenha ficado assim:

Código:
program cal; {Calculadora} uses crt; var valor1, valor2, resultado: real; sinal: char; begin clrscr; writeln('Qual o primeiro numero?'); readln(valor1); writeln('Qual a operacao?'); writeln('1- +'); writeln('2- -'); writeln('3- x'); writeln('4- /'); sinal := readkey; writeln('Qual o segundo?'); readln(valor2); if sinal = '1' then begin resultado := valor1 + valor2; writeln('Resposta: ', resultado); end else if sinal = '2' then begin resultado := valor1 - valor2; writeln('Resposta: ', resultado); end else if sinal = '3' then begin resultado := valor1 * valor2; writeln('Resposta: ', resultado); end else if sinal = '4' then begin resultado := valor1 / valor2 writeln('Resposta: ', resultado); end else begin writeln('Operacao Invalida!', #7); end; readkey; end.
Código:
program cal; {Calculadora} uses crt; var valor1, valor2, resultado: real; sinal: char; begin clrscr; writeln('Qual o primeiro numero?'); readln(valor1); writeln('Qual a operação?'); writeln('1- +'); writeln('2- -'); writeln('3- x'); writeln('4- /'); sinal := readkey; writeln('Qual o segundo?'); readln(valor2); case sinal of '1': writeln('A soma entre os valores e'' ', valor1 + valor2); '3': writeln('A multipliacao entre os valores e'' ', valor1 * valor2); '2': writeln('A subtracao entre os valores e'' ', valor1 - valor2); '4': writeln('A divisao entre os valores e'' ', valor1 / valor2; else begin writeln('Operação Inválida!', #7); end; readkey; end; end.
__________________
Tis -> TE AMO !!!

Sony Vaio VPC-EB17FX/W
Intel Core i3 M330 - 4GB DDR3 - 500GB Sata II - ATI 5470HD 512Mb - 15.5 LED FullHD - Blu-Ray
gto está offline   Responder com Quote
Antigo 22-02-2006, 13:36   #9 (permalink)
magaupe
Veterano
 
Avatar de magaupe
 
Registrado em: Jan 2005
Localização: Salvador/BA
Mensagens: 1.173
Reputação: 16 magaupe está indo no caminho certo
Enviar mensagem via MSN para magaupe
Padrão

gto , eu diria q esse ultimo ficaria assim, mas parece dar no mesmo:

Código:
program cal; {Calculadora} uses crt; var valor1, valor2, resultado: real; sinal: char; begin clrscr; writeln('Qual o primeiro numero?'); readln(valor1); writeln('Qual a operação?'); writeln('1- +'); writeln('2- -'); writeln('3- x'); writeln('4- /'); sinal := readkey; writeln('Qual o segundo?'); readln(valor2); case sinal of '1': writeln('A soma entre os valores e'' ', valor1 + valor2); '3': writeln('A multipliacao entre os valores e'' ', valor1 * valor2); '2': writeln('A subtracao entre os valores e'' ', valor1 - valor2); '4': writeln('A divisao entre os valores e'' ', valor1 / valor2; else begin writeln('Operação Inválida!', #7); end end; readkey end.
magaupe está offline   Responder com Quote
Antigo 22-02-2006, 14:35   #10 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão Re: Calculadora em Pascal. Ajuda.

Citação:
Postado Originalmente por magaupe
mas tbm deu algum tipo de Erro que eu não sei o que foi.
Meu diálogo com algumas pessoas que conheço:

- "Esse programa aqui está dando erro, faz tempo que tô tentando consertar e não consigo."
- "Que erro, de compilação ou de execução?"
- "De compilação."
- "E qual é o erro que está dando?"
- "Sei lá, tá dando um erro lá, não compila."
- "Você vai ter que me dizer qual é a mensagem de erro do compilador."
- "Ah, parece que a mensagem é... "Invalid não-sei-o-que-lá".
- "Ah, tá."

EDITADO: moderadores, que maluquice é essa que faz com que toda vez que eu escrevo e-r-r-o, fica com "E" maiúsculo?
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 22-02-2006, 15:22   #11 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.781
Reputação: 1756 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:
EDITADO: moderadores, que maluquice é essa que faz com que toda vez que eu escrevo e-r-r-o, fica com "E" maiúsculo?
É a mesma maluquice que faz aparecer COMPRO se eu escrever C-O-M-P-R-O.
__________________
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 22-02-2006, 18:26   #12 (permalink)
gto
GeeK
 
Avatar de gto
 
Registrado em: Aug 2002
Localização: Porto Alegre - RS
Idade: 25
Mensagens: 2.116
Reputação: 29 gto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todosgto Sua luz ofusca a todos
Enviar mensagem via ICQ para gto Enviar mensagem via MSN para gto
Padrão

Citação:
Postado Originalmente por magaupe
gto , eu diria q esse ultimo ficaria assim, mas parece dar no mesmo:

[code]

program cal; {C...
aquele finalzinho aí me pegou, eu botei no identador automático e nem vi :twisted:

Código:
case sinal of '1': writeln('A soma entre os valores e'' ', valor1 + valor2); '3': writeln('A multipliacao entre os valores e'' ', valor1 * valor2); '2': writeln('A subtracao entre os valores e'' ', valor1 - valor2); '4': writeln('A divisao entre os valores e'' ', valor1 / valor2; else writeln('Operação Inválida!', #7); readkey; end; end.
__________________
Tis -> TE AMO !!!

Sony Vaio VPC-EB17FX/W
Intel Core i3 M330 - 4GB DDR3 - 500GB Sata II - ATI 5470HD 512Mb - 15.5 LED FullHD - Blu-Ray
gto está offline   Responder com Quote
Antigo 22-02-2006, 18:56   #13 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por jqueiroz
É a mesma maluquice que faz aparecer Compro se eu escrever C-O-M-P-R-O.
Prometo não ficar sujando o tópico com comentários adicionais desse tipo, mas essa foi engraçada! O negócio considera que "erro" sempre deve iniciar com letra maiúscula... Deixa eu tentar escrever compro...
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox 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 11:24.