• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jmnr

[Duvida] Funções e procedimentos. Onde, quando e como??

16 mensagens neste tópico

Boas!

Tenho uma "grande" dúvida que se me podessem esclarecer ficava agradecido...

Qual é a grande diferença entre Procedures e Functions em Pascal??  E em que situações devemos utilizar ou 1 ou outro??

Desde já grato pela atenção...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Procedimento é como se fosse um "mini programa" dentro do seu programa... Mas, esse "mini programa" não retorna valor algum para quem o chamou...

Já a Função é como se fosse um "procedimento" que retornasse um valor ao programa chamador ou função...

Basicamente é isso ^__^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As funções (functions) são mais utilizadas para trabalhar com valores numéricos.

As funções têm de ser definidas como as variáveis, ou seja, com o respectivo tipo de dados:

Function Soma : Integer;
begin
       codigo;
end;

Ao contrário dos procedimentos:

Procedure Soma;
begin
      codigo;
end;

E uma função tem de ter sempre dentro dela uma variável com o nome da função:

Function Soma : Integer;
begin
       Soma:=num1+num2;
end;

Dentro do programa principal (main), basta colocares o nome do procedimento/função para a chamares:

begin
      Soma;
end.

Espero que tenhas ficado mais esclarecido

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para complementar, terá que existir um Return nas funções para poder devolver um valor, senao trata-se de um procedimento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sempre disse e volto a insistir...

Programar é preciso ter noções básicas de MATEMÁTICA..

O que é uma Função matemática ?

O que é a lógica do BOOLE ?

O que são valores inteiros, reais e etc...?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pessoal foram uma grande ajuda! :P

Para complementar, terá que existir um Return nas funções para poder devolver um valor, senao trata-se de um procedimento.

Como assim??  Não basta apenas "chamar" a função e ela devolve-nos o valor da mesma??

Mais uma vez obrigado pela ajuda :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não não...

Pois a chamada de uma função é igual a chamada de um procedimento.

Ou seja, o que difere uma da outra é que uma retorna um valor e a outra não.

Então, como uma função necessariamente deve retornar algum valor. Precisamos dar um return no que queremos que ela retorne.

Ja o procedimento, não precisamos dar return algum. Já que o procedimento é um "mini programa"

Espero ter ajudado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok acho que entendi....

Chamar procedimento:

...

Begin

      procedimento;

End.

chamar função:

...

Begin

    função(x,y);

End.

Muito obrigado! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nada disso...

O (x,y) são os parametros. Tanto as funções como os procedimentos podem ter parametros.

Ve um procedimento como uma porção de código que necessitas de repetir várias vezes por um qualquer motivo.

Por exemplo, se tinhas que escrever o teu nome 20 vezes ao longo do codigo, porquê fazer "writeln('Chamo-me.. (blablabla)');" se posso fazer simplesmente "nome;" e o programa automaticamente o pode escrever?

Já uma função, apesar de poder ser usada com o mesmo fim (daí que em C não existam procedimentos, só mesmo funções com ou sem retorno de valor, mas isto já vais perceber mais à frente o que significa) tem como principal objectivo devolver um valor.

Imagina que no teu programa, necessitavas de, variadas vezes, achar o resultado de uma potencia.

Podias criar uma função para esse fim (por exemplo:)

Function pot(a,b:integer):Integer;
var produto,i:integer;
begin
produto:=1;
       for i:=1 to b do 
produto:=produto*a;
pot:=produto;
end;

(estou enferrujado em pascal, é possivel que existam erros no codigo)

ao longo do programa, depois, a função seria usada da seguinte forma:

writeln('2^3=',pot(2,3));

ou entao

writeln('3^5=',pot(3,5));

repara que em todas as ocurrencias de "pot", o programa irá substituir por um valor.

Que valor é esse? Aquele que a função retorna, ou seja, o valor que a variavel com o nome da função (no nosso caso, pot) termina a sua execução. (pot:=produto);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ei.. grande confusão aqui vai.. ainda confundem mais o homem.. função tem de ter return ? não existe return em pascal :S .. existe algo parecido.. mas nada de return..

A explicação do warrior foi a mais correcta.. procedimento é para fazer algo que faças muitas vezes,tipo para te poupar trabalho..

por exemplo,fazes um desenho qualquer com caracteres da tabela ascii ou que, queres usar mais que uma vez.. para não teres trabalho de tar sempre a escrever isso ou para não teres um programa com "milhentas" linhas de codigo metes isso num procedimento..

queres fazer tipo um "copyright" para meter nos programas todos, como o teu nome e essas coisas todas,metes num procedimento..

Agora função é diferente.. não é só para valores numéricos,como alguem disse aí..

Uma função é para te devolver um valor,como o warrior disse e bem.. mas esse valor tanto pode ser um valor numérico como uma string,etc ..

espero que tenhas ficado esclarecido..

cumps :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já comecei a pegar na coisa e vai indo para a frente :)

Uma questão:

Procedure qualquer_coisa ( var a,b : integer; c,d : string);

*

*

*

Chamo-o assim:

Begin

qualquer_coisa(a,b);

qualquer_coisa(c,d);

End.

???? :dontgetit:

Ou seja, dentro de um procedimento preciso de analizar 4 das variáveis externas (globais). 2 delas são do tipo Integer e outras 2 dos tipo string. O meu interesse é atribuir valores às diferentes variaveis globais do tipo Integer ao correr este procedimento sempre que precisar.

Não sei se me consegui explicar mto bem mas agradecia mais uma ajuda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Não tenho a certeza, mas ao colocares esses parâmetros, acho que ao chamares a função/procedimento vais ter de colocar algo em cada variável:

Begin

  qualquer_coisa(a,b,c,d);

End.

Não percebi muito bem o que pretendes, se pudesses ser mais explicito  :hmm:

E não percebi muito bem a que variáveis é que te estavas a referir, mas a variáveis que se encontram dentro de um procedimento/função são variáveis locais.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acredita que se conseguisse ser mais explicito fazia isso mesmo  :D

ainda nao tentei mas vou exprimentar como dizes..

Begin

qualquer_coisa(a,b,c,d);

End.

O restante do que disse é pra esquecer  :thumbsup: so preciso mesmo é de ver se posso chamar um procedimento ou uma funçao com vários parâmetros (neste caso 4 e de tipos diferentes)

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui ficam os meus 5 tostões: :thumbsup:

- Procedimentos: rotinas que contêm código que é usado várias vezes ao longo de um programa.

- Funções: rotinas que calculam algo e retornam o valor calculado.

As funções são usdas para calcular algo e devolver o resultado que é depois usado como valor numa expressão. Exemplo:

function soma (a: int, b: int): int;

begin

  result = a + b;

end;

[...]

valor_da_soma = soma(1, 2);

Já os procedimentos são usados para factorizar uma aplicação. Essa factorização efectua-se, tipicamente, por duas razões: redução de código escrito e sanidade mental.

A redução de código escrito acontece quando num programa tenho dois pedaços de código que fazem a mesma coisa. Ora em vez de ter esses dois pedaços de código, construo um procedimento com esse código e invoco-o em substituição desses dois bocados de código. Estando assim centralizado é mais fácil corrigir qualquer problema que apareça, é mais fácil reutilizar esse código noutros programas e o programa torna-se mais pequeno.

A sanidade mental vem do facto dos procedimentos nos permitirem efectuar uma limpeza e reduzir o grau de complexidade do programa através da passagem de certos blocos para procedimentos. Imaginem que têm um programa que lê valores numéricos de um ficheiro de texto, adiciona uma unidade a cada valor e por fim escreve de novo o ficheiro com os dados actualizados. Isto pode ser feito em "código corrido" na rotina principal do programa, ou pode ser agrupado em procedimentos, ficando assim a casa arrumada e ficando a rotina principal mais simples e fácil de ler e manter. Uma vez factorizado o código, o mesmo torna-se mais fácil de usar noutros programas. Por exemplo, imaginem que necessitavam de ler de novo ficheiros com dados numéricos, em vez de fazerem copy-paste do programa, usam apenas o procedimento já escrito anteriormente (para tal é necessário colocar as rotinas em Units).

Espero ter ajudado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que o M6 disse esta correcto, só quero acrescentar, que sempre que usas uma Função/Procedimento com parametros, sempre que a chamares no programa principal, tens de introduzir dados, ou seja valores para os parametros. Por exemplo:

Function soma (x,y:integer):integer;

Begin
  soma:=x+y;
End.

-------------------------------------------

assim sendo quando fores chamar a função no programa principal tens sempre se dar valores aos parametros que introduziste na função, Exemplo:

{ Programa Principal}

Begin
  soma(1,2);  
End.

-------------------------------------------

como uma das razões para usar parametros, é dar mais funcionalidades as funções/procedimentos, até podes fazer isto:

{Programa Principal}

Begin
  writeln('Introduza o valor de x e y');
  readln(valor1,valor2)   { depois terias de declarar estas variaveis }
  Temporaria:=soma(valo1,valor2);
  Temporaria2:=soma(3,9);
End.

--como reparaste uma das vantagens de usar parametros é que podes chamar funções/procedimentos, e estar sempre a abribuir valores diferentes, o que o parametro vai fazer, é que cada vez que chamares a Função/Procedimento em questão, tens de introduzir os dados consuante o tipo de variaveis declaradas no parametro. 

PS:  se não souberes as {} não são entrepetadas pelo programa com codigo, são só para fazer comentarios :D

Espero ter ajudado ;) 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora