Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Vinicius_Menezes80

Pascal Calculadora com procedure e função

Recommended Posts

Postado (editado)
Program Calculadora ;

Uses crt;

Var opt: char;
    x, y, z: real;
    M: array [1..4, 1..4] of real;
    i, j: integer;
        
{Função para calcular os resultados}
Function Calculo (x:real; y:real; z:real): real;
begin
    Case opt of
                #43: begin
              z:= x+y
            end;
            #45: begin
              z:= x-y
            end;
            #42: begin
              z:= x*y
            end;
            #47: begin
              z:= x / y;
              if y = 0 then
              begin
                Writeln('Divisão inválida, digite um número diferente de zero para o divisor ');
              end;
            end;
    end;
    Calculo:= z            
end;

{Procedure para adição}
Procedure Adicao;
begin
  clrscr;
  writeln;
  writeln ('Insira a primeira parcela');
  readln (x);
  writeln;
  writeln('+');
  writeln;
  writeln ('Insira a segunda parcela');
  readln(y);
  writeln;
  writeln(Calculo(x, y, z):0:2);
  readkey;
  clrscr;
end;

{Procedure para a subtração}
Procedure Sub;
begin
    clrscr;
    writeln;
    writeln ('Insira o minuendo');
    readln (x);
    writeln;
    writeln('-');
    writeln;
    writeln ('Insira o subtraendo');
    readln(y);
    writeln;
    writeln(Calculo(x, y, z):0:2);
    readkey;
    clrscr;
end;

{Procedure para a multiplicação}
Procedure Mult;
begin
    clrscr;
    writeln;
    writeln ('Insira o primeiro fator');
    readln (x);
    writeln;
    writeln('*');
    writeln;
    writeln ('Insira o segundo fator');
    readln(y);
    writeln;
    writeln(Calculo(x, y, z):0:2);
    readkey;
    clrscr;
end;

{Procedure para a divisão}
Procedure quo;
begin
    clrscr;
    writeln;
    writeln ('Insira o dividendo');
    readln (x);
    writeln;
    writeln('/');
    writeln;
    writeln ('Insira o divisor');
    readln(y);
    writeln;
    writeln(Calculo(x, y, z):0:2);
    readkey;
    clrscr;
end;

{Procedure para colocar os resultados em uma matriz e apresenta-los}
Procedure Matriz;
begin
    for i:=1 to 3 do
    begin
        for j:=1 to 3 do
        begin
        M[i,j]:=z
        end;
    end;
    for i:=1 to 3 do
    begin
        for j:=1 to 3 do
        begin
        writeln(M[i,j]:0:2);
        end;
    end;
end;

{Procedure com o menu que dá as opções}
Procedure Menu;
Begin
    Repeat
        clrscr;
        writeln;
        writeln('Escolha uma operação usando os simbolos: (+),(-)(*),(/).');
        writeln;
        writeln('Tecle espaço para imprimir a matriz de resultados');
        writeln;
        writeln('Esc para sair do programa');
        opt:=readkey;
        Case opt of
            #43: begin
                 adicao
                 end;
            #45: begin
                 sub
                 end;
            #42: begin
                 mult
                 end;
            #47: begin
                 quo
                 end;
            #32:begin
                    matriz
                    end;     
            #27: begin
                     exit;
                     end;
        end;
        writeln('Esc para sair ou Backspace para voltar ao menu principal');
        opt:=readkey;
    Until(opt = #27 );
End;
Begin
Menu    
End.

 

Editado por Simon Viegas
Ao postar um código, favor utilizar a tag CODE, botao <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Vinicius_Menezes80       muito bem , seu programa está funcionando  bem  usando procedure  e função  .

   para postar seu código é melhor usar o botão  <>  que está lá na barra de ferramentas da janela de responder , pois senão seu código fica faltando alguns caracteres .

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Vinicius_Menezes80. Seja bem vindo ao Fórum do Clube do Hardware.

 

Em relação ao seu tópico... do que se trata? Seria para divulgar? solicitar análises?

Perceba que você só deu um título e postou um código, ai ficamos sem saber..



Aproveitando, segue algumas sugestões:
 

1#
Sobre:

11 horas atrás, Vinicius_Menezes80 disse:

Function Calculo (x:real; y:real; z:real): real;

 

Analisando o código, vemos que está utilizando o z como uma "auxiliar para os cálculos"... mas perceba que o mundo externo (escopo global) não tem nada a ver com essa necessidade... ou seja, a única coisa que precisaria passar seria o x e y.

RESUMINDO:
O z poderia ser declarado dentro da funtion. Algo assim:

function Calculo(x:real; y:real):real;
  var
    z:real;
  begin
  ...

 

Caso precisa dessa valor, por exemplo, para adicionar na matriz, você poderia pegar o valor do resultado lá fora.

 

 

 

2#

Sobre:

11 horas atrás, Vinicius_Menezes80 disse:

            #47: begin
              z:= x / y;
              if y = 0 then
              begin
                Writeln('Divisão inválida, digite um número diferente de zero para o divisor ');
              end;
            end;

Perceba que está dividindo antes de verificar se pode ou não. Não adiante... Seria como o provérbio "atira primeiro, pergunta depois".

Poderia ser algo assim:

    #47:if (y <> 0) then
          z:=x/y
        else
          writeln('Divisão inválida,digite um número diferente de zero para o divisor ');
    end; //fim case

 

 

 

3#

Sobre:

{procedure para colocar os resultados em uma matriz e apresenta-los}
procedure Matriz;
  begin
  for i:=1 to 3 do
    for j:=1 to 3 do
      M[i,j]:=z;
  for i:=1 to 3 do
    for j:=1 to 3 do
      writeln(M[i,j]:0:2);
  end;

Essa parte em não entendi como usar... mas creio que não vai funcionar, por 2 motivos principais:
3.1 Mesmo se o z estivesse com o resultado da operação anterior (que não estará!), ao entrar nessa procedure, está sendo feita uma espécie e "preenchimento do vetor" nessa parte:

  for i:=1 to 3 do
    for j:=1 to 3 do
      M[i,j]:=z;

Mas percebe que para todas as posições estarão usando o mesmo z, logo, todas as posições vão ficar com o mesmo valor.

Em relação a esse "preenchimento", você poderia após receber a resposta, adicionar na matriz e depois exibir (ou exibir e adicionar na matriz, tanto faz).

 

 

3.2

A matriz deveria ser declarada dentro do método. Vide item 4#.

 

 

 

4#
Sobre o uso das variáveis em funcion e procedure... Então, eu penso assim: OU você só usa variáveis globais OU você só usa variáveis locais/recebidas por parâmetro.

Ou seja, para mim fica estranho ora usar local, ora usar global... se determinada variável você optou por usar global, porque não usar logo tudo como global??? qual o critério para um e para outro?

 

No Pascal tem uma dica que ajuda muito!!! basta declarar as variáveis logo acima do begin/end principal. Algo assim:

var
  opt :char;
  x,y :real;
  M   :array [1..4,1..4] of real;
  i,j :integer;
begin
Menu    
end.

Ai compila... vê o que é do "corpo" principal (entre esse begin/end), e o que é local. Que declararia no método ou passaria por parâmetro.

Então, como está usando direto um Menu, dá logo pra ver que todas as variáveis seriam de algum âmbito local... daí, basta apagar tudo e compila. Aí vai declarando localmente onde precisa... No caso, declarando o opt dentro do

Calculo(); o x e y em cada um dos métodos das operações matemáticas; e o vetor M, e as variáveis i e j no método Matriz(). Por ai vai...
 

Resumindo:

Cada método do programa deve ser independente... tudo que ele precisa, ou recebe via parâmetro, ou é declarado dentro dele.

 

ESSA É A FORMA QUE EU DEFENDO!



OU

Usa logo tudo como variável global..  Só para reforçar... porque pode usar opt como global, mas não pode usar o x e y? Sugiro pensar assim: "O pau que dá em Chico, dá em Francisco."

obs.: há contexto que poderia "só usar globais" e mesmo assim ser necessário receber por parâmetro, pois poderia usar variáveis diferentes... por exemplo.. Eu preciso ler vários valores para só depois efetuar as contas... aí, valores poderia está num vetor,  seria mais prático receber por parâmetro, pois eu poderia invocar o mesmo método usando variáveis distinta, ex.:

Calculo(valores[1,1],valores[1,2]);
Calculo(valores[2,1],valores[2,2]);
Calculo(valores[3,1],valores[3,2]);
Calculo(valores[4,1],valores[4,2]);
Calculo(valores[5,1],valores[5,2]);

Entendeu?  Mas como está somente usando X e Y, não precisaria de parâmetro... usava a variável global e pronto. (isso para esse paradigma de só usar globais.)

Mesmo assim perceba, que poderia simplesmente acessar o vetor global lá no método... mas pelo menos, nesse caso teria uma "justificativa" mais palpável.


 

 

***


Por ai vai.

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×