Ir ao conteúdo
  • Cadastre-se

O que há de errado neste código em Pascal?


Visitante: poseidon161

Posts recomendados

Visitante: poseidon161
 

Olá pessoal, estou começando a aprender linguagem pascal, mas to apanhando muito pra conseguir fazer este pequeno trabalho q meu professor pediu, se uma boa alma puder me dar uma ajudinha, agradeço muito!

O código é este:

program procedimentos;
uses crt;
var r, n1, n2, op: integer;

begin
procedure soma;
begin
r:=n1+n2;
end;

procedure sub;
begin
r:=n1-n2;
end;

procedure mult;
begin
r:=n1*n2;
end;

procedure divi;
begin
r:=n1/n2;
end;

prodedure entradadedados;
begin
writeln('blablabla');
readln(n1);
writeln('blablabla');
readln(n2);
end;

procedure resultado;
begin
writeln('resultado',r)
readkey;
end;

{program principal}
begin
repeat
clrscr;

writeln('escolha a operaçao desejada');
writeln('1 soma');
writeln('2 subtração');
writeln('3 multiplicação');
writeln('4 divisão');
readln(op);

if op=1 then
begin
entradadedados;
soma;
resultado;
end
else
if op=2 then
begin
entradadedados;
sub;
resultado;
end
else
if op=3 then
begin
entradadedados;
mult;
resultado;
end
else
if op=4 then
begin
entradadedados;
divi;
resultado;
end
else
if op<>4 then
begin
writeln('operação invalida');
readkey;
end;

until op=4 then
end.

Gostaria se possível uma breve explicação sobre os erros, valeu!

Link para o comentário
Compartilhar em outros sites

Seu código tem os seguintes erros:

Linha 5: Begin "perdido"

Procedure divi: Para realizar divisão com números inteiros, use o operador div e não a /.

Procedure entradadedados: Palavra procedure escrita errada.

Procedure resultado: Faltando ; no fim de writeln(...);

Remova o then na linha: "until ... then".

Fora isso, funciona.

Abraços;

Link para o comentário
Compartilhar em outros sites

Visitante: poseidon161
 

Bom, consegui resolver mas nao usei o IF e sim o CASE,o que pra mim deu na mesma nesta situação, a não ser que meu professor tenha um modo de resolver do jeito que está mesmo,brigadão!:D

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

Procedure divi: Para realizar divisão com números inteiros, use o operador div e não a /.

Na verdade o operador seria "/" mesmo, o que está em jogo é o resultado e não os operadores, ou seja, uma divisão sempre vai dar um número real (inteiro está contido em real), Assim, a questão não é a «divisão com números inteiros», mas sim o resultado ser inteiro ou não.

Para corrigir isso basta criar uma variável real para armazenar o resultado, ou simplesmente tornar "r" um "real", em vez de interger. (assim o "r" vai servir para todas as operações sem problema).

PS: Só para demonstrar... DIV = "parte inteira da divisão", daí a divisão, por ex., de 5 div 2 vai dar 2, e não 2,5 (que acredito ser o mais correto).

Bom, consegui resolver mas nao usei o IF e sim o CASE,o que pra mim deu na mesma nesta situação, a não ser que meu professor tenha um modo de resolver do jeito que está mesmo,brigadão!:D

poseidon161, o CASE e o IF têm a mesma finalidade: "selecionar", ou seja, ambos servem para a mesma coisa, só que cada uma com suas qualidades. o IF é mais flexivel, podendeo aceitar várias condições numa mesma proposição. Já o CASE, ele é mais "organizado", é basicamente usado para uma única condição, e mesmo assim não aceita todos tipos de varáveis (só CHAR e INTEIROS se não me engano).

Tudo que se faz com o CASE da para fazer com o IF, mas o oposto não é verdadeiro.

RESUMINDO. Tem consdições que podem ser "resumidas" usando CASE, outras só usando o IF mesmo.

PS: Um analogia a isso é a questão dos "laços de repetições", existem basicamente 3: While, Repeat e For, cada um com suas especificidade, mas nesse casa TUDO que se faz com um se faz com o outro, entretanto um sempre vai ser (conceitualmente) melhor que o outro.

******

Aproveitando a postagem:

1) Você já entende do conceito de IDENTAÇÃO (organização da estrutura do texto do código) ????

De uma forma ou de outra, já recomendo que sempre mantenha seu código bem identado! :). Isso é muito importante (eu acho).

2) Você já viu o conceito de "passagem de parâmentros" nos procedimentos (function e procedore) ??

Não sei se é o momento exato, ou se não está usando parâmetros de propósito, mas quando se trata de procedimentos, o recomendado (a princípio) é passar os valores para os procedimentos através de seus parâmentros, e não usando "variáveis globais".

Se quiser dar uma revisar aqui sobre esses assuntos é só avisar.

Qualquer coisa é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

Olá,

Na verdade o operador seria "/" mesmo, o que está em jogo é o resultado e não os operadores, ou seja, uma divisão sempre vai dar um número real (inteiro está contido em real), Assim, a questão não é a «divisão com números inteiros», mas sim o resultado ser inteiro ou não.

Para corrigir isso basta criar uma variável real para armazenar o resultado, ou simplesmente tornar "r" um "real", em vez de interger. (assim o "r" vai servir para todas as operações sem problema).

PS: Só para demonstrar... DIV = "parte inteira da divisão", daí a divisão, por ex., de 5 div 2 vai dar 2, e não 2,5 (que acredito ser o mais correto).

Exato.

Como Pascal é fortemente tipada, você não pode realizar a divisão com a / (resultado em float) e guardar em uma variável do tipo inteiro (integer). Mesmo se a divisão for inteira (4 / 2) por exemplo, a representação interna é em float. Me expressei equivocadamente ali mesmo. Quis dizer que, para 'guardar' o resultado de uma divisão ou você define a variavel como float e usa a / ou define como int e usa div/mod.

Abraço!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!