SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Prof. Adriano Teixeira de Souza
   Procedimentos – são estruturas que agrupam um
    conjunto de comandos, que são executados
    quando o procedimento é chamado.

   Funções – são procedimentos que retornam um
    valor ao seu término.

   A Linguagem C não faz distinção.
   Evitam que os blocos do programa fiquem grandes
    demais e mais difíceis de ler e entender.

   Ajudam a organizar o programa.

   Permitem reaproveitamento de códigos construídos
    anteriormente.

   Evitam repetição de trechos de códigos,
    minimizando erros e facilitando alterações.
<tipo> nome_da_função (<tipo> arg1, <tipo> arg2, ...,
                     <tipo> argN)
{

<corpo da função>

return valor_de_retorno;

}
   Exemplo de uma função:

       int soma(int a, int b)
       {
       int c;
       c = a + b;
       return c;
       }
Toda função deve ter um tipo               Os argumentos (ou parâmetros)
(char, int, float), o qual indicará o    indicam o tipo e quais valores são
tipo de seu valor de retorno            esperados para serem manipulados
(saída).                                             pela função (entrada).


             int soma(int a, int b)
             {
             int c;
                                                      Corpo da função
             c = a + b;
             return c;
             }
   Uma função pode não ter argumentos, basta
    não informá-los. Exemplo:


       int random()
       {
       srand(time(NULL));
       return (rand() % 100);
       }
   A expressão contida no comando return é
    chamado de valor de retorno da função.

   Esse comando é sempre o último a ser executado
    por uma função. Nada após ele será executado.

   As funções só podem ser declaradas fora de outras
    funções. Lembre-se que o corpo do programa
    principal (main()) é uma função!
   Uma forma clássica de realizarmos a invocação (ou
    chamada) de uma função é atribuindo o seu valor a
    uma variável:

       resultado = soma(x,y);


   Na verdade, o resultado da chamada de uma
    função é uma expressão, que pode ser usada em
    qualquer lugar que aceite uma expressão:

       printf("Soma: %dn", soma(a,b) );
   Função que calcula a soma dos valores de x e
    y:
       int x, y, resultado;
       int soma(int a, int b){
          return (a + b);
       }

       int main(){
          x = 3;
          y = 5;
          resultado = soma(x, y);
          printf("%dn", resultado);
       }
   As variáveis x e y no exemplo anterior são
    chamadas de parâmetros reais.

   Conforme exemplo anterior, os argumentos não
    possuem necessariamente os mesmos nomes que
    os parâmetros que a função espera.

    Seus valores são apenas copiados para a função
    chamada, sem ser afetados pelas alterações nos
    parâmetros dentro da função.
   É utilizado em procedimentos.
   É um tipo que representa o “nada”, ou seja:
    ◦ uma variável desse tipo armazena conteúdo
      indeterminado,
    ◦ uma função desse tipo retorna um conteúdo
      indeterminado.
   Indica que uma função não retorna nenhum
    valor, ou seja, é um procedimento.
void nome_do_procedimento (<tipo> parâmetro1,
         <tipo> parâmetro2, ..., <tipo> parâmetroN)
{
<corpo do procedimento>
}
   Exemplo de procedimento:


      void imprime_dobro(int x)
      {
      printf("Dobro de x: %d", 2*x);
      }
   Para invocarmos um procedimento, devemos
    utilizá-lo como qualquer outro comando:

       procedimento(parâmetros);


   Compare a diferença de invocação de uma função:

       resultado = função(parâmetros);
int x, y, resultado;

void soma()
{
resultado = x + y;
}

int main()
{
x = 3;
y = 5;
soma();
printf("%dn", resultado);
}
   Parâmetros ou argumentos são os valores
    recebidos e/ou retornados por uma função.


   Podem ser divididos em duas categorias:
    ◦ Formais: correspondem aos parâmetros utilizados na
      definição da função.
    ◦ Reais: correspondem aos parâmetros da função chamadora
      utilizados para chamar a função.
Parâmetros formais


int soma(int a, int b)
{
return (a + b);
}

int main()
{
int x = 3;
int y = 5;
printf("%dn", soma(x + y));
}
                       Parâmetros
                            reais
   É o mecanismo de informar sobre quais valores o
    processamento definido na função deve ser
    realizado.

   Os parâmetros são passados para uma função de
    acordo com a sua posição.

   Os parâmetros formais de uma função se
    comportam como variáveis locais (criados na
    entrada e destruídos na saída)

   Existem duas categorias:
    ◦ Por valor
    ◦ Por referência
0001 1001


    Os valores das
                                        0101 1010
                                       1111 0101

    variáveis externas                  1011 0011
                                        0000 0001
    (função chamadora)           var    0001 1001


    são copiados para as
                                        0101
                                        0000   1010
                                               0001
                                        1111
                                        0001   0101
                                               1001

    variáveis internas da               1011
                                        0101
                                        0000
                                        1111
                                               0011
                                               1010
                                               0001
                                               0101
    função chamada.                     0001   1001
                                        0101 1010
                                        1111 0101

   Alteração no valor das              1011 0011
                                        0000 0001
    variáveis terá efeito var_interna   0001 1001


    local à função
                                        0101 1010
                                        1111 0101

    chamada.                            1011 0011
                                        0000 0001
                                        0001 1001
                                        0101 1010
                                        1111 0101
                                        1011 0011
   Os valores das variáveis externas não são passados
    para a função, mas sim os seus endereços.

   Ocorre alteração no valor das variáveis externas.

   Usamos os caracteres:
    & - indica o endereço da variável
    * - indica o conteúdo do apontador
0001 1001
      0101 1010
      1111 0101
      1011 0011
      0000 0001
      0001 1001
var   0101 1010
      1111 0101
      1011 0011
      0000 0001
      0001 1001
      0101 1010
      1111 0101
      1011 0011
      0000 0001
      0001 1001
      0101 1010
      1111 0101
      1011 0011
      0000 0001
      0001 1001
      0101 1010
      1111 0101
      1011 0011
   Uma desvantagem da passagem por valor é que, se
    um item de dados grande está sendo passado,
    copiar esses dados pode consumir um tempo de
    processamento considerável.
   Vetores têm um comportamento diferente quando
    usados como parâmetros ou valores de retorno de
    funções.

   O compilador interpreta o nome de um vetor como
    o endereço do primeiro elemento do vetor.

   Dessa forma, os vetores são sempre passados por
    referência, sem usar uma notação especial.
<tipo> funcao(int vet[], ...)
{
   ...
}




                                64   64a
   Ao passar um vetor como parâmetro, se ele for
    alterado dentro da função, as alterações ocorrerão
    no próprio vetor e não em uma cópia.
   Ao retornar um vetor como valor de retorno, não é
    feita uma cópia deste vetor.
   Assim, o vetor retornado pode desaparecer, se ele
    foi declarado no corpo da função.
   Ao passar um vetor como parâmetro, não é
    necessário fornecer o seu tamanho na declaração
    da função.
   Porém, é importante lembrar que o vetor tem um
    tamanho que deve ser considerado pela função
    durante a manipulação dos dados.


                                                         64b
   Quando o vetor é multidimensional, a
     possibilidade de não informar o tamanho na
     declaração da função se restringe apenas à
     primeira dimensão.



void show_matriz(int mat[][10], int n_linhas)
{
   ...
}




                                                  65
   1) Faça um programa que:
    ◦ Leia um vetor “turma” de 5 alunos
    ◦ Cada registro/struct de aluno deve ter o numero de
      matrícula do aluno e suas notas de 4 bimestres.
    ◦ Faca um procedimento que Imprima a lista de
      matrícula e notas de cada aluno
    ◦ Faca uma funcao que tenha como parametro um
      registro de aluno e retorne a média das 4 nota
    ◦ Percorra o vetor de alunos e imprima a matricula e
      a média calculada( pela funcao criada) para cada
      aluno.




                            Prof. Adriano Teixeira de Souza
   2) Escreva um programa em C que manipule um vetor de
    registros com dados de 10 trabalhadores de uma empresa,
    conforme a estrutura a seguir:

    ◦   int id;
    ◦   char nome[30];
    ◦   char sexo;
    ◦   float salario;

   O programa deve ter as seguintes funções:

    ◦ a) uma função para ler os dados dos 10 funcionários.
    ◦ b) uma procedimento para exibir os dados dos 10 funcionários.
    ◦ c) uma função que receba, como parâmetro, um caractere
      correspondente ao sexo para exibir os dados somente dos
      funcionários do respectivo sexo.
    ◦ d) uma função que atualize o salário de todos os funcionários de
      acordo com o percentual informado como parâmetro.


                                   Prof. Adriano Teixeira de Souza
   Um objeto é dito recursivo se pode ser
    definido em termos de si próprio.


      “Para fazer iogurte, você precisa de
        leite e de um pouco de iogurte.”


       “Para entender recursividade, você
           primeiro tem de entender
                 recursividade.”
   A recursão é uma forma interessante de resolver
    problemas, pois o divide em problemas menores
    de mesma natureza.

   Um processo recursivo consiste de duas partes:
    ◦ O caso trivial, cuja solução é conhecida.
    ◦ Um método geral que reduz o problema a um ou mais
      problemas menores de mesma natureza.
   Um programa recursivo é um programa que chama
    a si mesmo, direta ou indiretamente.

   Vantagens
    ◦ Redução do tamanho do código fonte
    ◦ Permite descrever algoritmos de forma mais clara e Concisa

   Desvantagens
    ◦ Redução do desempenho de execução devido ao tempo
      para gerenciamento de chamadas
    ◦ Dificuldades na depuração de programas recursivos,
      especialmente se a recursão for muito profunda
   Cada vez que uma função é chamada de forma
    recursiva, é alojado e guardado uma cópia dos
    seus parâmetros por forma a não perder os valores
    dos parâmetros das chamadas anteriores.

   Em cada instância da função, só são diretamente
    acessíveis os parâmetros criados para esta
    instância, não sendo directamente acessíveis os
    parâmetros de outras instâncias.
   As funções recursivas contêm duas partes
    fundamentais:

    ◦ Ponto de Parada: o ponto de parada da recursividade é
      resolvido sem utilização de recursividade, sendo este ponto
      geralmente um limite superior ou inferior da regra geral.

    ◦ Regra Geral: o método geral da recursividade reduz a
      resolução do problema através da invocação recursiva de casos
      mais pequenos, sendo estes casos mais pequenos resolvidos
      através da resolução de casos ainda mais pequenos, e assim
      sucessivamente, até atingir o ponto de parada que finaliza o
      método.
   Cálculo do fatorial:


                   1,              se n = 1
       fat(n) =
                   n * fat(n-1),   se n > 1
   Como fica o Fatorial de 5?
   Função recursiva que calcula o fatorial de um
    número:


    int fat(int n)
    {
    if (n != 1)
       return n * fat(n-1);
    else
       return 1;
    }
   3) Exponenciação. Escreva uma função recursiva
    eficiente que receba inteiros positivos k e n e
    calcule k n. (Suponha que kn cabe em um int.)
    Quantas multiplicações sua função executa
    aproximadamente?


   2) Qual o valor de X (4)?
        int X (int n) {
               if (n == 1 || n == 2) return n;
               else return X (n-1) + n * X (n-2);
        }


                            Prof. Adriano Teixeira de Souza
   4) A sequência de Fibonacci é dada pela
    seguinte fórmula:




   Apresente uma solução por meio de função
    recursiva que calcule e imprima os números
    da sequência até o i-ésimo termo.




                        Prof. Adriano Teixeira de Souza

Weitere ähnliche Inhalte

Was ist angesagt?

Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais
111111119
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
Christian Perone
 

Was ist angesagt? (20)

Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais
 
Algoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetiçãoAlgoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetição
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Modelação de Dados
Modelação de DadosModelação de Dados
Modelação de Dados
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Python Introdução e Orientação a Objetos.pdf
Python Introdução e Orientação a Objetos.pdfPython Introdução e Orientação a Objetos.pdf
Python Introdução e Orientação a Objetos.pdf
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 

Andere mochten auch

Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Ludimila Monjardim Casagrande
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Adriano Teixeira de Souza
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
Pacc UAB
 

Andere mochten auch (16)

Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Opc4
Opc4Opc4
Opc4
 
POO - Aula 05 - Referências e Vetores
POO - Aula 05 - Referências e VetoresPOO - Aula 05 - Referências e Vetores
POO - Aula 05 - Referências e Vetores
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Lógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dadosLógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dados
 
Aula 8 - Comandos de Entrada e Saída
Aula 8 - Comandos de Entrada e SaídaAula 8 - Comandos de Entrada e Saída
Aula 8 - Comandos de Entrada e Saída
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1Aula 3 - Algoritmos computacionais - parte 1
Aula 3 - Algoritmos computacionais - parte 1
 

Ähnlich wie Estrutura de Dados - Procedimentos e Funções

Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
Adriano Teixeira de Souza
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
PeslPinguim
 

Ähnlich wie Estrutura de Dados - Procedimentos e Funções (20)

Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Subalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca LopesSubalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca Lopes
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Aula 4
Aula 4Aula 4
Aula 4
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
 
Funções PHP - Criação de sites II
Funções PHP - Criação de sites II Funções PHP - Criação de sites II
Funções PHP - Criação de sites II
 
Aula17
Aula17Aula17
Aula17
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
Ud3
Ud3Ud3
Ud3
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
Aula de Funções - 1ª Parte (2015_04_26 22_22_50 UTC).pdf
Aula de Funções - 1ª Parte (2015_04_26 22_22_50 UTC).pdfAula de Funções - 1ª Parte (2015_04_26 22_22_50 UTC).pdf
Aula de Funções - 1ª Parte (2015_04_26 22_22_50 UTC).pdf
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 

Mehr von Adriano Teixeira de Souza

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Adriano Teixeira de Souza
 

Mehr von Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 

Kürzlich hochgeladen

Kürzlich hochgeladen (9)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Estrutura de Dados - Procedimentos e Funções

  • 2. Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado.  Funções – são procedimentos que retornam um valor ao seu término.  A Linguagem C não faz distinção.
  • 3. Evitam que os blocos do programa fiquem grandes demais e mais difíceis de ler e entender.  Ajudam a organizar o programa.  Permitem reaproveitamento de códigos construídos anteriormente.  Evitam repetição de trechos de códigos, minimizando erros e facilitando alterações.
  • 4. <tipo> nome_da_função (<tipo> arg1, <tipo> arg2, ..., <tipo> argN) { <corpo da função> return valor_de_retorno; }
  • 5. Exemplo de uma função: int soma(int a, int b) { int c; c = a + b; return c; }
  • 6. Toda função deve ter um tipo Os argumentos (ou parâmetros) (char, int, float), o qual indicará o indicam o tipo e quais valores são tipo de seu valor de retorno esperados para serem manipulados (saída). pela função (entrada). int soma(int a, int b) { int c; Corpo da função c = a + b; return c; }
  • 7. Uma função pode não ter argumentos, basta não informá-los. Exemplo: int random() { srand(time(NULL)); return (rand() % 100); }
  • 8. A expressão contida no comando return é chamado de valor de retorno da função.  Esse comando é sempre o último a ser executado por uma função. Nada após ele será executado.  As funções só podem ser declaradas fora de outras funções. Lembre-se que o corpo do programa principal (main()) é uma função!
  • 9. Uma forma clássica de realizarmos a invocação (ou chamada) de uma função é atribuindo o seu valor a uma variável: resultado = soma(x,y);  Na verdade, o resultado da chamada de uma função é uma expressão, que pode ser usada em qualquer lugar que aceite uma expressão: printf("Soma: %dn", soma(a,b) );
  • 10. Função que calcula a soma dos valores de x e y: int x, y, resultado; int soma(int a, int b){ return (a + b); } int main(){ x = 3; y = 5; resultado = soma(x, y); printf("%dn", resultado); }
  • 11. As variáveis x e y no exemplo anterior são chamadas de parâmetros reais.  Conforme exemplo anterior, os argumentos não possuem necessariamente os mesmos nomes que os parâmetros que a função espera.  Seus valores são apenas copiados para a função chamada, sem ser afetados pelas alterações nos parâmetros dentro da função.
  • 12. É utilizado em procedimentos.  É um tipo que representa o “nada”, ou seja: ◦ uma variável desse tipo armazena conteúdo indeterminado, ◦ uma função desse tipo retorna um conteúdo indeterminado.  Indica que uma função não retorna nenhum valor, ou seja, é um procedimento.
  • 13. void nome_do_procedimento (<tipo> parâmetro1, <tipo> parâmetro2, ..., <tipo> parâmetroN) { <corpo do procedimento> }
  • 14. Exemplo de procedimento: void imprime_dobro(int x) { printf("Dobro de x: %d", 2*x); }
  • 15. Para invocarmos um procedimento, devemos utilizá-lo como qualquer outro comando: procedimento(parâmetros);  Compare a diferença de invocação de uma função: resultado = função(parâmetros);
  • 16. int x, y, resultado; void soma() { resultado = x + y; } int main() { x = 3; y = 5; soma(); printf("%dn", resultado); }
  • 17. Parâmetros ou argumentos são os valores recebidos e/ou retornados por uma função.  Podem ser divididos em duas categorias: ◦ Formais: correspondem aos parâmetros utilizados na definição da função. ◦ Reais: correspondem aos parâmetros da função chamadora utilizados para chamar a função.
  • 18. Parâmetros formais int soma(int a, int b) { return (a + b); } int main() { int x = 3; int y = 5; printf("%dn", soma(x + y)); } Parâmetros reais
  • 19. É o mecanismo de informar sobre quais valores o processamento definido na função deve ser realizado.  Os parâmetros são passados para uma função de acordo com a sua posição.  Os parâmetros formais de uma função se comportam como variáveis locais (criados na entrada e destruídos na saída)  Existem duas categorias: ◦ Por valor ◦ Por referência
  • 20. 0001 1001 Os valores das 0101 1010  1111 0101 variáveis externas 1011 0011 0000 0001 (função chamadora) var 0001 1001 são copiados para as 0101 0000 1010 0001 1111 0001 0101 1001 variáveis internas da 1011 0101 0000 1111 0011 1010 0001 0101 função chamada. 0001 1001 0101 1010 1111 0101  Alteração no valor das 1011 0011 0000 0001 variáveis terá efeito var_interna 0001 1001 local à função 0101 1010 1111 0101 chamada. 1011 0011 0000 0001 0001 1001 0101 1010 1111 0101 1011 0011
  • 21. Os valores das variáveis externas não são passados para a função, mas sim os seus endereços.  Ocorre alteração no valor das variáveis externas.  Usamos os caracteres: & - indica o endereço da variável * - indica o conteúdo do apontador
  • 22. 0001 1001 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 var 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 0101 1010 1111 0101 1011 0011
  • 23. Uma desvantagem da passagem por valor é que, se um item de dados grande está sendo passado, copiar esses dados pode consumir um tempo de processamento considerável.
  • 24. Vetores têm um comportamento diferente quando usados como parâmetros ou valores de retorno de funções.  O compilador interpreta o nome de um vetor como o endereço do primeiro elemento do vetor.  Dessa forma, os vetores são sempre passados por referência, sem usar uma notação especial.
  • 25. <tipo> funcao(int vet[], ...) { ... } 64 64a
  • 26. Ao passar um vetor como parâmetro, se ele for alterado dentro da função, as alterações ocorrerão no próprio vetor e não em uma cópia.  Ao retornar um vetor como valor de retorno, não é feita uma cópia deste vetor.  Assim, o vetor retornado pode desaparecer, se ele foi declarado no corpo da função.  Ao passar um vetor como parâmetro, não é necessário fornecer o seu tamanho na declaração da função.  Porém, é importante lembrar que o vetor tem um tamanho que deve ser considerado pela função durante a manipulação dos dados. 64b
  • 27. Quando o vetor é multidimensional, a possibilidade de não informar o tamanho na declaração da função se restringe apenas à primeira dimensão. void show_matriz(int mat[][10], int n_linhas) { ... } 65
  • 28. 1) Faça um programa que: ◦ Leia um vetor “turma” de 5 alunos ◦ Cada registro/struct de aluno deve ter o numero de matrícula do aluno e suas notas de 4 bimestres. ◦ Faca um procedimento que Imprima a lista de matrícula e notas de cada aluno ◦ Faca uma funcao que tenha como parametro um registro de aluno e retorne a média das 4 nota ◦ Percorra o vetor de alunos e imprima a matricula e a média calculada( pela funcao criada) para cada aluno. Prof. Adriano Teixeira de Souza
  • 29. 2) Escreva um programa em C que manipule um vetor de registros com dados de 10 trabalhadores de uma empresa, conforme a estrutura a seguir: ◦ int id; ◦ char nome[30]; ◦ char sexo; ◦ float salario;  O programa deve ter as seguintes funções: ◦ a) uma função para ler os dados dos 10 funcionários. ◦ b) uma procedimento para exibir os dados dos 10 funcionários. ◦ c) uma função que receba, como parâmetro, um caractere correspondente ao sexo para exibir os dados somente dos funcionários do respectivo sexo. ◦ d) uma função que atualize o salário de todos os funcionários de acordo com o percentual informado como parâmetro. Prof. Adriano Teixeira de Souza
  • 30. Um objeto é dito recursivo se pode ser definido em termos de si próprio. “Para fazer iogurte, você precisa de leite e de um pouco de iogurte.” “Para entender recursividade, você primeiro tem de entender recursividade.”
  • 31. A recursão é uma forma interessante de resolver problemas, pois o divide em problemas menores de mesma natureza.  Um processo recursivo consiste de duas partes: ◦ O caso trivial, cuja solução é conhecida. ◦ Um método geral que reduz o problema a um ou mais problemas menores de mesma natureza.
  • 32. Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente.  Vantagens ◦ Redução do tamanho do código fonte ◦ Permite descrever algoritmos de forma mais clara e Concisa  Desvantagens ◦ Redução do desempenho de execução devido ao tempo para gerenciamento de chamadas ◦ Dificuldades na depuração de programas recursivos, especialmente se a recursão for muito profunda
  • 33. Cada vez que uma função é chamada de forma recursiva, é alojado e guardado uma cópia dos seus parâmetros por forma a não perder os valores dos parâmetros das chamadas anteriores.  Em cada instância da função, só são diretamente acessíveis os parâmetros criados para esta instância, não sendo directamente acessíveis os parâmetros de outras instâncias.
  • 34. As funções recursivas contêm duas partes fundamentais: ◦ Ponto de Parada: o ponto de parada da recursividade é resolvido sem utilização de recursividade, sendo este ponto geralmente um limite superior ou inferior da regra geral. ◦ Regra Geral: o método geral da recursividade reduz a resolução do problema através da invocação recursiva de casos mais pequenos, sendo estes casos mais pequenos resolvidos através da resolução de casos ainda mais pequenos, e assim sucessivamente, até atingir o ponto de parada que finaliza o método.
  • 35. Cálculo do fatorial: 1, se n = 1 fat(n) = n * fat(n-1), se n > 1
  • 36. Como fica o Fatorial de 5?
  • 37. Função recursiva que calcula o fatorial de um número: int fat(int n) { if (n != 1) return n * fat(n-1); else return 1; }
  • 38. 3) Exponenciação. Escreva uma função recursiva eficiente que receba inteiros positivos k e n e calcule k n. (Suponha que kn cabe em um int.) Quantas multiplicações sua função executa aproximadamente?  2) Qual o valor de X (4)? int X (int n) { if (n == 1 || n == 2) return n; else return X (n-1) + n * X (n-2); } Prof. Adriano Teixeira de Souza
  • 39. 4) A sequência de Fibonacci é dada pela seguinte fórmula:  Apresente uma solução por meio de função recursiva que calcule e imprima os números da sequência até o i-ésimo termo. Prof. Adriano Teixeira de Souza