Post on 19-Jun-2015
description
PROCEDIMENTOSProfª Ms. Engª Elaine Cecília GattoCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado Coração – USCBauru/SP
SubAlgoritmos
• DIVIDIR PARA CONQUISTAR:• Método para resolução de problemas que consiste
em dividir um problema, em problemas menores e mais fáceis de solucionar.
• PROJETO DESCENDENTE (TOP-DOWN DESIGN):• Método de projetar a solução de um problema
principal obtendo soluções de seus subproblemas.
• As partes em que se divide um programa devem ser desenvolvidas independentemente umas das outras
SubAlgoritmos ALGORITMOPRINCIPAL
SUBALGORITMO 1 SUBALGORITMO 2 SUBALGORITMO 3
PROGRAMAPRINCIPAL
SUBPROGRAMA1 SUBPROGRAMA 2 SUBPROGRAMA 3
SubAlgoritmos
• Um subprograma/subalgoritmo pode realizar as mesmas ações que um programa:
1. Aceitar dados2. Realizar alguns cálculos3. Devolver resultados
SubAlgoritmos
• Entretanto, um subprograma é utilizado por um programa para um propósito específico.
• O programa principal chama ou invoca um subprograma.
• O subprograma, quando invocado, obtém o controle, executa sua tarefa e devolve o controle ao programa principal.
• Existem dois tipos de subprogramas: FUNÇÕES e PROCEDIMENTOS.
SubAlgoritmos
PROGRAMA PRINCIPAL
---------------------
ALGORITMO
SUBPROGRAMA
--------------------------
SUBALGORITMO
Chamada 1
Retorno 1
Chamada 2
Retorno 2
SubAlgoritmos
PROGRAMA PRINCIPAL
SUBPROGRAMA 1Chamada 1
Retorno 1
Retorno 2 SUBPROGRAMA 2
SUBPROGRAMA 3
SUBPROGRAMA 2.1Chamada 2
FUNÇÕES• Função: é uma operação que recebe um ou mais valores
chamados argumentos e produz um valor denominado resultado.
• Exemplo:
• f(x) = é o nome da função;• x = é o argumento da função;• Nenhum valor específico é associado a x;• Portanto, x é um parâmetro formal;• Para avaliar f, devemos dar um valor real ou atual a x;• Se x = 3, então, qual será o resultado da função? f(x) = f(3)
FUNÇÕES• Uma função pode ter vários argumentos. Exemplo:
• f(x) é uma função com dois argumentos: x e y;• Uma função se transforma em uma expressão aritmética
que é executada pelo processador. Exemplo:
• Funções internas: são as funções nativas da linguagem de programação, incorporadas ao sistema, também chamadas de intrínsecas.
• Funções externas: são as funções definidas pelo usuário.
SUB-ROTINA
• O mesmo que subprogramas ou funções
• São blocos de instruções que realizam tarefas específicas
• O código é carregado uma vez e pode ser executado várias vezes
• Os programas ficam menores e mais organizados
SUB-ROTINA
• Em linguaguens estruturadas, os programas são executados linearmente, LINHA APÓS LINHA
• Subrotinas permitem um desvio nesta execução
• A ordem da execução das instruções do programa é desviada quando existe a chamada de uma rotina no programa principal
SUB-ROTINA
• Enquanto a subrotina é executada, o programa principal fica suspenso
• O controle volta ao programa principal quando a execução da subrotina chega ao seu fim, por meio da palavra chave RETURN
SUB-ROTINA
• Variáveis locais: variáveis declaradas dentro das subrotinas. São destruídas assim que a execução da rotina é finalizada.
• Variaveis globais: variáveis declaradas dentro do programa principal. Qualquer ponto do programa pode usá-las. São destruídas quando a execução do programa é finalizado
SUB-ROTINA
• Passagem por valor: quando um parâmetro é passado para a função. A variável do cabeçalho se comportará como uma variável local da subrotina
• Passagem por referência: quando um parâmetro é passado para a função. A variável do cabeçalho se comportará como uma variável global.
SUB-ROTINAAlgoritmo exemplo1;
Inteiro : sal, aum, novo_sal;Leia(sal)Aum calculo(sal);Novo_sal sal + aum;Escreva(“Novo Salário é: ”, novo_sal);
FIM.
Subrotina calculo(inteiro: sal)Inteiro : perc, valor;Leia(perc);Valor (sal * perc) / 100;Retorne valor
Fim_subrotina calculo
SUB-ROTINAAlgoritmo exemplo2;
Inteiro : x, y;X <-- 1;Y 2;Escreva( “ valores iniciais ” );Escreva( “ x = ”, z, “ y ”, = y );S1;Escreva( “ valores depois da execução da s1” );Escreva( “ x = ”, z, “ y ”, = y );S2( x, y ); //por valorEscreva( “ valores depois da execução da s2” );Escreva( “ x = ”, z, “ y ”, = y );S3( x, y ); //por referênciaEscreva( “ valores depois da execução da s3” );Escreva( “ x = ”, z, “ y ”, = y );
FIM.
SUB-ROTINA
//subrotina sem parâmetro e sem retornoSubrotina s1
Inteiro : x, y, z; //variáveis locaisX 8;Y 10;Z 5;Escreva( “Valores impressos dentro da subrotina s1” );Escreva( “ x = ”, x, “ y = ”, y, “ z = ”, z );
FIM_Subrotina_S1;
SUB-ROTINA
//subrotina com parâmetro por valor e sem retornoSubrotina s2 ( inteiro : x, y )
Inteiro : z; //variáveis locaisX x + 2;Y y + 2;Z x + y;Escreva( “ Valores impressos dentro da subrotina s2” );Escreva( “ x = ”, x, “ y = ”, y, “ z = ”, z );
FIM_Subrotina_S2;
SUB-ROTINA
//subrotina com parâmetro por referência e sem retornoSubrotina s3 ( inteiro : x, y )
Inteiro : a; //variáveis locaisA x + y;X y - 1;Y x - 2;Escreva( “ Valores impressos dentro da subrotina s2” );Escreva( “ x = ”, x, “ y = ”, y, “ a = ”, z );
FIM_Subrotina_S2;
Modularização
• Pascal permite o uso de: • PROCEDURES – procedimentos • FUNCTIONS – funções • UNITS – unidades
• São três formas de modularizar um programa• Procedures e functions devem ter o seu
código escrito antes do BEGIN
PROCEDURES
SEM PASSAGEM DE PARÂMETROS• São rotinas chamadas pelo programa principal
para executar alguma operação especí´fica, mas não retornam valor para quem as chamou
Procedure nome_da_procedure;Declaração_de_variáveis_locais;Begin
ComandosEnd;
PROCEDURES
SEM PASSAGEM DE PARÂMETROSProgram exemplo;Uses crt;
Vara, b, s : integer //variáveis globais
Procedure somar;Begin
s := a + b;End;
PROCEDURES
SEM PASSAGEM DE PARÂMETROSBegin
clrscr;writeln(‘Digite o primeiro numero’);readln(a);writeln(‘Digite o segundo numero’);readln(b);somar;writeln(‘A soma é: ’, s);readln();
End.
PROCEDURES
SEM PASSAGEM DE PARÂMETROSProgram exemplo2;Uses crt;
Procedure somar;Var
a, b, s : integer;Begin
writeln(‘digite o primeiro numero’);readln(a);
PROCEDURES
SEM PASSAGEM DE PARÂMETROS
Writeln(‘Digite o segundo numero’);Readln(b);s := a + b;Writeln(‘A soma é: ’, s);
End;
BeginClrscr;Somar;Readln;
End.
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORAlguns valores são fornecidos à procedure quando ela é solicitada
Procedure nome_da_procedure(parâmetros : tipo_dos_dados)Declaração_de_variáveis_locais;Begin
Comandos;End;
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORProgram exemplo1;Uses crt;Var
A, b : integer;
Procedure somar(x, y : integer);Var
S : integer;begin
s := x + y;writeln(‘A soma é: ’, s);
end;
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORBegin clrscr;
writeln(‘Digite o primeiro número’);readln(a);writeln(‘Digite o segundo número’);readln(b);somar(a, b);readln;
End.
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORProgram exemplo2;Uses crt;
//passando matriz ou vetor como parâmetroType x = array[1..5] of integer;
Vari : integer;w : x;
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORProcedure mostrar(y:x);
BeginWriteln(‘Mostrando o vetor na subrotina’);For i:=1 to 5 do
BeginWriteln( y [ i ] );
End;End;
PROCEDURES
PASSAGEM DE PARÂMETROS POR VALORBegin
clrscr;writeln(‘digitando os números do vetor: ’);for i:=1 to 5 do
Beginreadln( w [ i ] );
End;mostrar(w);readln;
End.
PROCEDURES
PASSAGEM DE PARÂMETROS POR REFERÊNCIAOs parâmetros se comportam como variáveis globais
Procedure nome_da_procedure(VAR parâmetros : tipo_dos_dados);Declaração_de_variáveis_locais;
BeginComandos
End;
PROCEDURES
PASSAGEM DE PARÂMETROS POR REFERÊNCIAProgram exemplo1;Uses crt;Var
a, b : integer;
Procedure somar(VAR x, y : integer);Var
s : integer;
PROCEDURES
PASSAGEM DE PARÂMETROS POR REFERÊNCIABegin
s := x + y;writlen(‘A soma é: ’, s);
End;
Beginclrscr;writeln(‘Digite o primeiro número’);readln(a);
PROCEDURES
PASSAGEM DE PARÂMETROS POR REFERÊNCIA
writeln(‘Digite o segundo número’);readln(b);somar(a, b);readln;
End.
PROCEDURES
FUNCTIONS
SEM PASSAGEM DE PARÂMETRO• FUNCTION X PROCEDURE• Function SEMPRE retorna um valor• A PROCEDURE NEM sempre retorna um valor• O OBJETIVO é para ambos é o mesmo
FUNCTION NOME_DA_FUNCTION : TIPO_DE_DADO_DO_VALOR_RETORNADO;Declaração_de_variáveis_locais;
BeginComandos;
End;
FUNCTIONS
SEM PASSAGEM DE PARÂMETRO• Para que ocorra o retorno de algum valor para quem
chamou a function, deve-se atribuir tal valor a uma variável cujo nome seria igual ao dado à function
Program exemplo1;Uses crt;Var
a, b, s : integer;Function somar : integer;
beginsomar := a + b;
end;
FUNCTIONS
SEM PASSAGEM DE PARÂMETROBegin
Clrscr;writeln(‘Digite o primeiro número’);readln(a);writeln(‘Digite o segundo número’);readln(b);s := somar;writeln(‘ A soma é: ’, s);readln;
End.
FUNCTIONS
PASSAGEM DE PARÂMETRO POR VALORFUNCTION nome_da_function(parâmetros : tipo_dos_dados) : tipo_de_dado_do_valor_retornado;
Declaração_de_variáveis_locais;
Begin
Comandos;
End;
FUNCTIONS
PASSAGEM DE PARÂMETRO POR VALOR• A chamada a uma FUNCTION acontece
atribuindo seu nome a uma variável ou a um condição, que receberá o retorno ao término de sua execução
• No momento da chamada, são informados os parâmetros que deverão ser levados para a FUNCTION
FUNCTIONS
PASSAGEM DE PARÂMETRO POR VALORProgram exemplo1;Uses crt;Var
a, b, s : integer;
Function somar(x, y : integer) : integer;Begin
Somar := x + y;End;
FUNCTIONS
PASSAGEM DE PARÂMETRO POR VALORBegin
clrscr;writeln(‘Digite o primeiro número’);readln(a);writeln(‘Digite o segundo número’);readln(b);s := somar(a, b);writeln(‘ A soma é: ’, s);readln;
End.
FUNCTIONS
PASSAGEM DE PARÂMETRO POR REFERÊNCIAUma function pode receber parâmetros no momento em que é chamada
Os valors informados são copiados, sequencialmente, em variáveis descritas em seu cabeçalho
FUNCTION nome_da_function( VAR parâmetros : tipo_dos_dados ) : tipo_de_dado_do_valor_retornado;Declaração de variáveis locais;BeginComandos;End;
FUNCTIONS
PASSAGEM DE PARÂMETRO POR REFERÊNCIAProgram exemplo1;Uses crt;Var
a, b, s : integer;
Function somar(VAR x, y : integer) : integer;Begin
somar := x + y;End;
FUNCTIONS
PASSAGEM DE PARÂMETRO POR REFERÊNCIABegin
clrscr;writeln(‘Digite o primeiro número’);readln(a);writeln(‘Digite o segundo número’);readln(b);s := somar(a, b);writeln(‘ A soma é: ’, s);readln;
End.
FUNCTIONS
PASSAGEM DE PARÂMETRO POR REFERÊNCIA• Os parâmetros passados por referência – isso
é identificado pela presença da palavra VAR no cabeçalho da FUNCTION – qualquer alteração nos valores de X ou de Y será também refletida nas variáveis A e B, respectivamente
FUNCTIONS
UNITS
• É um arquivo (.pas)• Contém várias procedures e functions• Torna-se um TPU depois de ser compilado –
isto é, torna-se uma biblioteca• A biblioteca pode ser chamada por outros
programas por meio do uso da palavra chave USES• O nome de uma UNIT deve ser o nome do
arquivo
UNITS
UNIT nome_da_unit;
INTERFACECabeçalho das procedures e das functions;
IMPLEMENTATIONImplementação das procedures e das functions;
END;
UNITSunit calcula;
interfaceprocedure somar(a, b : integer);function multiplicar(a, b, c : integer) : integer;
Implementation
procedure somar(a, b : integer);vars : integer;writeln(‘ A soma é : ’, s);
end;
function multiplicar(a, b, c : integer) : integer;beginmultiplicar : = a * b * c;
end;end.
UNITS
• Para criar uma UNIT (biblioteca) é necessário abrir um arquivo novo, digitar os códigos da biblioteca e salvar o arquivo com o mesmo nome da UNIT. Esse arquivo será o .PAS.
• Depois, no menu COMPILAR, o destino da compilação deve ser alteração para DISK. Somente depois disso será gerado o arquivo TPU (que é a biblioteca propriamente dita)
UNITSProgram subrotina;Uses crt, calcula;Var
x, y, z, mult : integer;Begin
Clrscr;Writeln(‘digite o valor de x’);Readln(x);Writeln(‘digite o valor ’);Readln(y);somar(x,y);Writeln(‘digite o valor de z’);readln(z);mult := multiplicar(x, y, z);writeln(‘multiplicação = ’, mult);Readln;
End.
Exercícios