Algoritmos e
Estruturas de Dados
Aula 7 e Aula 8
18 e 25/09/2012
Profª Ms. Engª Elaine Cecília Gatto
Unidade 6: Procedimentos e Funções
Curso de Bacharelado em Engenharia de Computação
Universidade do Sagrado Coração – USC
Bauru/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
                   ALGORITMO
                    PRINCIPAL




SUBALGORITMO 1   SUBALGORITMO 2   SUBALGORITMO 3




                   PROGRAMA
                    PRINCIPAL




SUBPROGRAMA1     SUBPROGRAMA 2    SUBPROGRAMA 3
SubAlgoritmos
• Um subprograma/subalgoritmo pode ralizar as mesmas ações
  que um programa:

1. Aceitar dados
2. Realizar alguns cálculos
3. Devolver resultados

• 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                Chamada 1
   PRINCIPAL

---------------------
                        Retorno 1        SUBPROGRAMA
  ALGORITMO                Chamada 2   --------------------------

                                         SUBALGORITMO
                         Retorno 2
SubAlgoritmos

             Chamada 1
                         SUBPROGRAMA 1
             Retorno 1



             Chamada 2
PROGRAMA                 SUBPROGRAMA 2   SUBPROGRAMA 2.1
 PRINCIPAL   Retorno 2




                         SUBPROGRAMA 3
SubAlgoritmos: FUNÇÕES
•
SubAlgoritmos: FUNÇÕES
•
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_paramêtros)

(declarações locais)

início
       <ações> //corpo da função
       devolver (<expressão>)
fim_função
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_paramêtros)

(declarações locais)
                                         Tipo de resultado que a
                                         função retorna:
início
                                         inteiro, real, string, caracter,
       <ações> //corpo da função
                                         booleano, etc.
       devolver (<expressão>)
fim_função
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_paramêtros)

(declarações locais)
                                         Nome da função:

início                                   Dê um nome simples,
                                         objetivo e que te lembre o
       <ações> //corpo da função
                                         que está fazendo!
       devolver (<expressão>)
fim_função
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_parametros)

(declarações locais)
                                   Lista de Parâmetros:

início                             Parâmetros formais ou argumentos,
                                   com um ou mais argumentos
       <ações> //corpo da função
       devolver (<expressão>)      ({E|S|E/S} tipo_de_dadoA: parametro
fim_função                         1; {E|S|E/S} tipo_de_dadoB: parametro
                                   2; {E|S|E/S} tipo_de_dadoX: parametro
                                   x)

                                   Exemplo:
                                   inteiro funcao fatorial (E inteiro: n)
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_parametros)

(declarações locais)
                                          Declaração de Variáveis e
                                          Estruturas de Dados caso
início                                    necessário
       <ações> //corpo da função
       devolver (<expressão>)
fim_função
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_parametros)

(declarações locais)
                                          Instruções que constituem a
                                          definição da função e que
início                                    devem conter uma única
       <ações> //corpo da função          instrução;
       devolver (<expressão>)
fim_função
Declarando Funções
<tipo_de_resultado> função <nome_função> (lista_de_parametros)

(declarações locais)
                                          Esta expressão existe se a
início                                    função foi declarada com
       <ações> //corpo da função          valor de retorno e expressão
                                          no valor devolvido pela
       devolver (<expressão>)             função.
fim_função
                                          Exemplo: uma função do
                                          tipo inteiro deve retornar
                                          um resultado do tipo inteiro
Declarando Funções
Exemplo:

real função F(E real:x)
início
       devolver ( x/(1+x*x) )
fim_função

real função tan(E real:X)
início
       devolver (sem(x)/cos(x))
fim_função
Declarando Funções
• Parâmetros formas, fictícios ou mudos: são nomes de
  variáveis, de outras funções ou procedimentos e que
  somente são utilizados dentro do corpo da função.

• Parâmetros atuais: são os argumentos utilizados
  quando chamamos a função e que podem ser
  constantes, variáveis, expressões, valores de funções,
  nomes de funções ou procedimentos.
Ativando Funções
nome_função (lista_de_parametros_atuais)

nome_função: função que chama
lista_de_parametros_atuais: constantes, variáveis, expressões, valores
de funções, nomes de funções ou procedimentos;

Quando chamamos uma função, automaticamente se estabelece uma
correspondência entre os parâmetros formais e os atuais, e por este
motivo, a quantidade destes parâmetros devem ser idênticas na
chamada e na declaração da função.
Ativando Funções
Exemplo 1:

real : função potência ( E real : x; E inteiro: n)
var
         inteiro: i, y;
início
         y  1;
         desde i  1 até abs(n) fazer //estrutura for
                    y  y*x;
         fim_desde
         se n<0 então
                    y  1/y;
         fim_se
devolver(y);
fim_função
Ativando Funções
Exemplo 2:

algoritmo Elevar_a_Potencia;
var
        real : a, n;
inicio
        escreva(‘Digite um número positivo’);
        leia(n);
        escreva(‘Digite um expoente’);
        leia(a);
        escreva(‘N elevado a = ’, potencia(n, a) ); //chama a função
fim
real funcao potencia(E real: n, a)
inicio
        devolver(EXP(a * LN(n)));
fim_funcao
Ativando Funções
Exemplo 3:

inteiro funcao FATORIAL (E inteiro:n)
var
         inteiro: i, f; //advertência, segundo o resultado, f pode ser real
inicio
         f  1;
         desde i  1 até n fazer //for
                    f  f*1;
         fim_desde
         devolver(f);
fim_funcao
Ativando Funções
algoritmo funcao_fatorial;
var
        inteiro: x, y, numero;
inicio
        escreva(‘Digite um número inteiro e positivo’);
        leia(numero);
        x  fatorial(numero); //chama a função
        y  fatorial(5); //chama a função
        escreva(x,y);
Fim
Exercícios FUNÇÕES
1.   Projetar uma função para o cálculo do cubo de um número
2.   Projetar uma função para calcular o máximo divisor comum
3.   Projetar uma função para calcular o mínimo divisor comum
4.   Projetar uma função para calcular o seno
5.   Projetar uma função para calcular o cosseno
6.   Projetar uma função para calcular a tangente

Aula 7 -_aed_-_sub_algoritmos

  • 1.
    Algoritmos e Estruturas deDados Aula 7 e Aula 8 18 e 25/09/2012 Profª Ms. Engª Elaine Cecília Gatto Unidade 6: Procedimentos e Funções Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado Coração – USC Bauru/SP
  • 2.
    SubAlgoritmos • DIVIDIR PARACONQUISTAR: • 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
  • 3.
    SubAlgoritmos ALGORITMO PRINCIPAL SUBALGORITMO 1 SUBALGORITMO 2 SUBALGORITMO 3 PROGRAMA PRINCIPAL SUBPROGRAMA1 SUBPROGRAMA 2 SUBPROGRAMA 3
  • 4.
    SubAlgoritmos • Um subprograma/subalgoritmopode ralizar as mesmas ações que um programa: 1. Aceitar dados 2. Realizar alguns cálculos 3. Devolver resultados • 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.
  • 5.
    SubAlgoritmos PROGRAMA Chamada 1 PRINCIPAL --------------------- Retorno 1 SUBPROGRAMA ALGORITMO Chamada 2 -------------------------- SUBALGORITMO Retorno 2
  • 6.
    SubAlgoritmos Chamada 1 SUBPROGRAMA 1 Retorno 1 Chamada 2 PROGRAMA SUBPROGRAMA 2 SUBPROGRAMA 2.1 PRINCIPAL Retorno 2 SUBPROGRAMA 3
  • 7.
  • 8.
  • 9.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_paramêtros) (declarações locais) início <ações> //corpo da função devolver (<expressão>) fim_função
  • 10.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_paramêtros) (declarações locais) Tipo de resultado que a função retorna: início inteiro, real, string, caracter, <ações> //corpo da função booleano, etc. devolver (<expressão>) fim_função
  • 11.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_paramêtros) (declarações locais) Nome da função: início Dê um nome simples, objetivo e que te lembre o <ações> //corpo da função que está fazendo! devolver (<expressão>) fim_função
  • 12.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_parametros) (declarações locais) Lista de Parâmetros: início Parâmetros formais ou argumentos, com um ou mais argumentos <ações> //corpo da função devolver (<expressão>) ({E|S|E/S} tipo_de_dadoA: parametro fim_função 1; {E|S|E/S} tipo_de_dadoB: parametro 2; {E|S|E/S} tipo_de_dadoX: parametro x) Exemplo: inteiro funcao fatorial (E inteiro: n)
  • 13.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_parametros) (declarações locais) Declaração de Variáveis e Estruturas de Dados caso início necessário <ações> //corpo da função devolver (<expressão>) fim_função
  • 14.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_parametros) (declarações locais) Instruções que constituem a definição da função e que início devem conter uma única <ações> //corpo da função instrução; devolver (<expressão>) fim_função
  • 15.
    Declarando Funções <tipo_de_resultado> função<nome_função> (lista_de_parametros) (declarações locais) Esta expressão existe se a início função foi declarada com <ações> //corpo da função valor de retorno e expressão no valor devolvido pela devolver (<expressão>) função. fim_função Exemplo: uma função do tipo inteiro deve retornar um resultado do tipo inteiro
  • 16.
    Declarando Funções Exemplo: real funçãoF(E real:x) início devolver ( x/(1+x*x) ) fim_função real função tan(E real:X) início devolver (sem(x)/cos(x)) fim_função
  • 17.
    Declarando Funções • Parâmetrosformas, fictícios ou mudos: são nomes de variáveis, de outras funções ou procedimentos e que somente são utilizados dentro do corpo da função. • Parâmetros atuais: são os argumentos utilizados quando chamamos a função e que podem ser constantes, variáveis, expressões, valores de funções, nomes de funções ou procedimentos.
  • 18.
    Ativando Funções nome_função (lista_de_parametros_atuais) nome_função:função que chama lista_de_parametros_atuais: constantes, variáveis, expressões, valores de funções, nomes de funções ou procedimentos; Quando chamamos uma função, automaticamente se estabelece uma correspondência entre os parâmetros formais e os atuais, e por este motivo, a quantidade destes parâmetros devem ser idênticas na chamada e na declaração da função.
  • 19.
    Ativando Funções Exemplo 1: real: função potência ( E real : x; E inteiro: n) var inteiro: i, y; início y  1; desde i  1 até abs(n) fazer //estrutura for y  y*x; fim_desde se n<0 então y  1/y; fim_se devolver(y); fim_função
  • 20.
    Ativando Funções Exemplo 2: algoritmoElevar_a_Potencia; var real : a, n; inicio escreva(‘Digite um número positivo’); leia(n); escreva(‘Digite um expoente’); leia(a); escreva(‘N elevado a = ’, potencia(n, a) ); //chama a função fim real funcao potencia(E real: n, a) inicio devolver(EXP(a * LN(n))); fim_funcao
  • 21.
    Ativando Funções Exemplo 3: inteirofuncao FATORIAL (E inteiro:n) var inteiro: i, f; //advertência, segundo o resultado, f pode ser real inicio f  1; desde i  1 até n fazer //for f  f*1; fim_desde devolver(f); fim_funcao
  • 22.
    Ativando Funções algoritmo funcao_fatorial; var inteiro: x, y, numero; inicio escreva(‘Digite um número inteiro e positivo’); leia(numero); x  fatorial(numero); //chama a função y  fatorial(5); //chama a função escreva(x,y); Fim
  • 23.
    Exercícios FUNÇÕES 1. Projetar uma função para o cálculo do cubo de um número 2. Projetar uma função para calcular o máximo divisor comum 3. Projetar uma função para calcular o mínimo divisor comum 4. Projetar uma função para calcular o seno 5. Projetar uma função para calcular o cosseno 6. Projetar uma função para calcular a tangente