Cursos de Informática Grátis www.megainforcursos.com

10 de agosto de 2012

Procedimentos e Fun��es (Aula 9)

Procedimentos e Fun��es
(Aula 9)
A medida que vamos resolvendo problemas mais complexos o tamanho dos nossos programas vai crescendo, portanto vai ficando dif�cil acompanhar a funcionalidade dos trechos de programas. No Pascal existe a possibilidade de agrupar trechos do programa em procedimentos ou fun��es. Os trechos devem ser logicamene coerentes, ou seja, cada uma deve fazer uma fun��o ou tarefa definida. As fun��es ou procedimentos tem a mesma estrutura do programa principal, ou seja, tem o cabe�alho e o corpo. A �nica diferen�a � que as fun��es e procedimentos podem receber par�metros e retornar resultados. Os detalhes sobre as fun��es e procedimentos e suas diferen�as veremos a seguir.
Procedimentos
Os procedimentos tem a seguinte estrutura
procedure nome (lista de parametros)
Declara��es de vari�veis
Begin
Comandos
End;
Para entender como funciona um procedimento vamos come�ar analisando um exemplo. Na aula anterior fizemos um programa que l� informa��es sobre o aluno, calcula a m�dia das notas e finalmente imprime os dados do aluno. Cada uma destas tarefas poder�amos passar a um procedimento. Vejamos como ficaria o programa se a parte de imprimir fosse feita como um procedimento.
Programa
PROGRAM dadosaluno;
TYPE tipoaluno=RECORD
nome: string;
idade: integer;
notas: array[1..5] of real;
END;
VAR aluno : tipoaluno;
media,soma : real;
i : integer;

PROCEDURE imprimirdados(aluno:tipoaluno;media: real);
BEGIN
WRITELN(aluno.nome);
WRITELN(aluno.idade);
WRITELN(media);
END;

BEGIN
READLN(aluno.nome);
READLN(aluno.idade);
FOR i:=1 TO 5 DO BEGIN
READLN(aluno.notas[i]);
END;
soma:=0;
FOR i:=1 TO 5 DO BEGIN
soma:=soma+aluno.notas[i];
END;
media:=soma/5;
imprimirdados(aluno,media);
END.
Passagem de Par�metros
No programa anterior vimos que o conte�do da vari�vel � passado ao procedimento no momento em que o chamamos. No procedimento o valor � recebido na vari�vel que esta declarada dentro do par�ntesis, por exemplo a vari�vel aluno, mas poderia ser qualquer outro nome, n�o precisa ser necessariamente o mesmo nome da vari�vel que chama. Esta forma de passagem de par�metro � chamado de passagem por valor. J� que estamos passando apenas o conte�do da vari�vel, isso indica que se fizermos qualquer altera��o no conteudo da vari�vel aluno dentro do procedimento n�o vai alterar o conte�do do aluno declarado no programa principal. Por�m existem situa��es em que gostar�amos que o conte�do da vari�vel no programa principal tamb�m fosse alterado quando alteramos no procedimento. Este mecanismo � principalmente �til quando queremos retornar resultados de c�lculos ao programa principal. Vejamos por exemplo como far�amos para transformar em procedimento a parte do programa que faz o c�lculo da m�dia.
Programa
PROGRAM dadosaluno;
TYPE tipoaluno=RECORD
nome: string;
idade: integer;
notas: array[1..5] of real;
END;
VAR aluno: tipoaluno;
i: integer;
media: real;
PROCEDURE calcularmedia(aluno:tipoaluno; Var med:real);
VAR media,soma: real;
i: integer;
BEGIN
soma:=0;
FOR i:=1 TO 5 DO BEGIN
soma:=soma+aluno.notas[i];
END;
media:=soma/5;
END;
PROCEDURE imprimirdados(aluno:tipoaluno; med:real);
BEGIN
WRITELN(aluno.nome);
WRITELN(aluno.idade);
WRITELN(media);
END;
BEGIN
READLN(aluno.nome);
READLN(aluno.idade);
FOR i:=1 TO 5 DO BEGIN
READLN(aluno.notas[i]);
END;
calcularmedia(aluno,media);
imprimirdados(aluno,media);
END.
Observando o programa, vemos que na declara��o dos par�metros do procedimento calcularmedia existem uma palavra Var. Esta palavra indica que a vari�vel media do programa principal ser� alterada se a vari�vel med for alterada no procedimento. Esta forma de passagem de par�metro � chamada de passagem por refer�ncia. Isso indica que n�o � o conte�do que esta passando mas sim o endere�o da caixa media. Agora est� faltando passar a parte de entrada de dados para um procedimento. Esta tarefa fica como exerc�cio.
Fun��es
Uma fun��o � um caso especial de procedimento, tem practicamente a mesma estrutura, por�m uma fun��o pode retornar um valor diretamente. Geralmente, fun��es s�o usadas para fazer c�lculos que apenas retornam um resultado. A formato de um fun��o tem a seguinte estrutura:
Function nome (lista de parametros):tipo de dado a ser retornado;
declara��o de vari�veis
Begin
comandos
End;
O valor a ser retornado pela fun��o � calculado dentro do corpo do fun��o e o nome da vari�vel que vai retornar tem que ser igual ao nome da fun��o. Vejamos num exemplo simples o uso de uma fun��o: vamos fazer um programa para calcular o m�ximo entre dois n�meros inteiros a e b, usando fun��o.
Programa

Program calmax;
Var max,a,b: integer;

Function maximo(a,b:integer):integer;
begin
if(a>b) then maximo:=a
else maximo:=b;
end;

Begin
Readln(a);
Readln(b);
max:=maximo(a,b);
writeln('o valor maximo �: ', max)
End.
Fun��es predefinidas
Nas aulas anteriores ja tivemos a oportunidade de usar alguns comandos do Pascal definidas como fun��es. Por exemplo, para gerar um n�mero aleat�rio foi usado o random e para arredondar um n�mero real para um inteiro foi usado o round. Estes comandos, s�o chamados de fun��es predefinidas da linguagem Pascal e sempre retornam um resultado. Dentro da linguagem j� existem muitas outras fun��es predefinidas, estas s�o principalmente fun��es matem�ticas para nos facilitar os c�lculos. Aqui vai uma lista de algumas fun��es predefinidas:

abs(x) retorna o valor absoluto de um n�mero x
sqr(x) retorna o quadrado de um n�mero x
srqt(x) retorna a raiz quadrada de x
sin(x) retorna o valor do seno do angulo x
cos(x) retorna o valor do coseno do angulo x

length(s) retorna o tamanho de uma string s
pos(s1,s2) retorna a posi��o da cadeia s1 na cadeia s2 (0 se n�o ocorre)
upcase(c) converte para maiuscula o caratere c
Exerc�cios
n�mero pi
O n�mero PI � bastante usado em calculos matematicos, por exemplo, para calcular o perimentro de uma circunfer�ncia multiplicamos e seu di�metro pelo numero PI. Segundo a historia, o primeiro a usar a letra grega PI, foi Welshman Willian Jones em 1706, que abreviou "periphery" (per�metro) de um c�rculo de di�metro unit�rio. Euler adotou o s�mbolo e rapidamente ele se tornou uma nota��o padr�o.
Desde muitos s�culos atr�s, os povos antigos j� tinhas conhecimento do n�mero PI:
No Egito antigo, se considerava PI=256/81 = 3,1604938.... Na Babil�nia, PI=3,125; Na China, no s�culo III eles usavam PI=3,14.
No Oriente M�dio, os �rabes, com h�beis matem�ticos, obtiveram 17 casas decimais para PI usando pol�gonos inscritos e circunscritos numa circunfer�ncia, por volta do s�culo XV.
Na Europa, a b�blia d� um valor de PI=3. Arquimedes j� sabia que 223/71 < PI < 22/7 usando um pol�gono de 96 lados. No s�c XVIII, Lambert e Legendre demonstraram que o n�mero PI era irracional. Na Holanda, o matem�tico Ludolph Van Cenlen (1539-1610) determinou 35 casas decimais para o n�mero PI, superando pela primeira vez os resultados dos �rabes. Quando morreu, foi gravado em sua l�pide seu n�mero PI de 35 casas decimais, e at� hoje na Alemanha o n�mero PI � chamado de N�mero de Ludolph.
Hoje em dia, temos o n�mero PI calculado com milh�es de casas decimais, para tanto usam-se computadores potentes e s�ries infinitas que convergem para o n�mero PI. Por exemplo usando o Algor�tmo de Gottfried Wilhem von Leibniz o PI pode ser calculado da seguinte forma
PI/4 = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - .........

Tarefa
Fazer uma fun��o para calcular o valor do PI usando o algoritmo de Gottfried Wilhem von Leibniz. O PI deve ser determinado com 4 casas decimais, para isso, durante o c�lculo os termos devem ser somados ate que a diferen�a de dois termos consecutivos seja menor que 0.00000000001. Para testar sua fun��o fa�a um programa que chama a fun��o pi() e imprime o valor do PI.
Pot�ncia de um n�mero
Nas aulas anteriores vimos que para calcular o quadrado de um n�mero � suficiente multiplicar o n�mero por ele mesmo, inclusive em Pascal ja existe um fun��o chamado sqr(x), que calcula o quadrado de um n�mero x. Agora imagina que voce quera elevar um n�mero a uma potencia diferente de 2, como fazer.? A solu��o � multiplicar o n�mero a quantidade de vezes igual a pot�ncia, por exemplo, 34 e igual a 3x3x3x3=81.
Tarefa
Fazer uma fun��o chamado pow, que dado um x e y calcula xy
Entrada
A entrada para o programa s�o os n�mero x e y.
Exemplo de entrada
5 7

Sa�da
A sa�da do programa � o resultado do c�lculo de x elevado a y.
Exemplo de sa�da
78125

as solu��es voce encontra aqui

0 comentários:

Postar um comentário

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes