Anda di halaman 1dari 66

Algoritmos

Funções
Instituto de Ciência e Tecnologia

Sub-rotina

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 1
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Sub-rotinas (programação modularizada)


✔ Sub-rotinas são blocos de instruções que realizam tarefas
específicas;

✔ O código de uma sub-rotina é carregado uma vez e pode ser


executado quantas vezes forem necessárias.

✔ O uso de sub-rotinas permite a realização de desvios na


execução de um programa.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 2
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exemplo: sub-rotina
#include<stdio.h>
float calculo(float sal);
main()
{
float sal, aum, novoSal;
printf("Digite o salário atual:");
scanf("%f",&sal);
aum = calculo(sal);
novoSal = sal + aum;
printf("\nSalário antigo: R$%.2f\nSalário novo: R$%.2f\n\n",sal, novoSal);
}
float calculo(float sal)
{
float perc, valor;
do{
printf("Digite o percentual do aumento: ");
scanf("%f",&perc);
if(perc <=0)
printf("\n\tERRO:\n\tVocê digitou um valor inválido! Digite um valar correto!\n\n");
}while(perc <=0);
valor = sal*perc/100;
return valor;
}
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 3
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exemplo: sub-rotina
✔ O exemplo apresentado mostra a utilização de uma sub-rotina
que recebe um parâmetro (o valor atual do salário) e que, ao
final, retorna um valor (aumento que será dado ao salário) para
quem a chamou.

As sub-rotinas podem não receber parâmetros nem retornar


valor.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 4
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Sub-rotina: função
✔ Na linguagem C uma sub-rotina é denominada função.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 5
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Modularização de programas
✔ Para que um módulo(ou função) possa ser executado, precisa ser
ativado ou chamado por outro módulo.
✔ Isso ocorre com todos os módulos existentes em um programa,
exceto com o módulo principal, que é o módulo que todos os
programas contêm.
✔ Todo programa, portanto, tem UM MÓDULO PRINCIPAL!
✔ Em C, esse módulo é o main()
✔ Um programa qualquer inicia sua execução pelo módulo
principal.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 6
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Modularização de programas
✔ Fluxo de execução de um programa modularizado:
• Começa pelo módulo principal e é desviado para qualquer outro
módulo que seja ativado no módulo principal.
• Cada módulo que é chamado é executado do início ao fim. Após seu
término, o programa prossegue do ponto em que o módulo foi
chamado.
• Os módulos podem ser escritos após os módulos ativadores caso se
crie uma interface antes desse módulo, denominada protótipo.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 7
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Protótipo da função menu

Ativação da função menu

Cabeçalho da função menu

Corpo da função menu

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 8
Algoritmos
Funções
Instituto de Ciência e Tecnologia

A função exit()

Da mesma forma que se pode sair de um laço, pode sair de um


programa inteiro usando a função exit() da biblioteca stdlib.h
• Essa função provoca uma terminação imediata do programa
inteiro, forçando um retorno ao sistema operacional.
• O zero é geralmente utilizado como um código de retorno que
indica uma terminação normal do programa. Outros argumentos
são usados para indicar algum tipo de erro.
Exemplo:
exit(0);

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 9
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Modularização

Todo módulo tem um cabeçalho, que é uma espécie de declaração


do módulo. Esse cabeçalho também pode ser chamado de interface
ou protótipo do módulo.
Sintaxe do cabeçalho em C:
tipo_de_retorno nome_do_módulo(lista_de_parâmetros)
Exemplo:
int soma(int x, y)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 10
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Modularização

A ativação do módulo é feita apenas pelo seu nome, com os


parâmetros que serão passados dentro de parênteses.
Ativação de uma função em C:
nome_do_módulo(lista_de_argumentos)
Exemplo:
soma(7, 5);

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 11
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Funções

Forma geral de uma função em C:


tipo_de_retorno nome_da_função(lista_de_parâmetros)
{
//Corpo da função
}
Exemplo:
int soma(int x, y) {
return x+y;
}
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 12
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Funções

Forma geral de uma função em C:


tipo_de_retorno nome_da_função(lista_de_parâmetros)
{
//Corpo da função
}
tipo_de_retorno: especifica o tipo de valor que o comando return
da função devolve, podendo ser qualquer tipo válido.
Obs.: se nenhum tipo é especificado, o compilador assume que a
função devolve um resultado inteiro.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 13
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Funções
Forma geral de uma função em C:
tipo_de_retorno nome_da_função(lista_de_parâmetros)
{
//Corpo da função
}
Lista de parâmetros: é uma lista de nomes de variáveis separados
por vírgulas e seus tipos associados que recebem os valores dos
argumentos quando a função é chamada(ativada).
Caso uma função não possua parâmetros, sua lista de parâmetros é
vazia: ( ).
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 14
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Regras de escopo de funções


São regras que determinam se uma porção de código conhece
ou tem acesso a outra porção de código ou dados.
Um função em C:
É um bloco discreto de código.
Possui código privativo
Só pode ser acessada via ativação (chamada)
Todas as funções estão no mesmo nível de escopo. Isto é, não é
possível definir uma função internamente a outra função.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 15
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Escopo de variáveis
Onde as variáveis são declaradas?

Dentro das funções (Variáveis locais)

Na definição dos parâmetros das funções (Parâmetros formais)

Fora de todas as funções (Variáveis globais)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 16
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Escopo de variáveis
Onde as variáveis são declaradas?

Dentro das funções (Variáveis locais)


Não são reconhecidas fora do seu próprio bloco de código.
São criadas na entrada de seu bloco e destruídas na saída.
Na definição dos parâmetros das funções (Parâmetros formais)

Fora de todas as funções (Variáveis globais)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 17
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Escopo de variáveis
Onde as variáveis são declaradas?
Dentro das funções (Variáveis locais)
Não são reconhecidas fora do seu próprio bloco de código.
São criadas na entrada de seu bloco e destruídas na saída.
Na definição dos parâmetros das funções (Parâmetros formais)
Comportam-se como as variáveis locais.
Deve-se assegurar que os argumentos usados para chamar uma função
sejam compatíveis com o tipo de seus parâmetros.
Fora de todas as funções (Variáveis globais)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 18
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Escopo de variáveis
Onde as variáveis são declaradas?
Dentro das funções (Variáveis locais)
Não são reconhecidas fora do seu próprio bloco de código.
São criadas na entrada de seu bloco e destruídas na saída.
Na definição dos parâmetros das funções (Parâmetros formais)
Comportam-se como as variáveis locais.
Deve-se assegurar que os argumentos usados para chamar uma função
sejam compatíveis com o tipo de seus parâmetros.
Fora de todas as funções (Variáveis globais)
São reconhecidas pelo programa inteiro e podem ser usadas por qualquer
pedaço de código.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 19
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Retorno de valores
✔ Uma função pode retornar (ou não) valores.
✔ Caso uma função não retorne nenhum valor, podemos dizer que se
trata de uma função com retorno neutro.
✔ A função principal, a primeira a ser executada, é sempre neutra.
✔ O retorno de valores é a saída da função. Por meio dele, a função pode
dar uma “resposta” para a função ativadora.
✔ O retorno do valor do módulo ativado precisa ser recebido e tratado
dentro do módulo ativador.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 20
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Retorno de valores
✔ O retorno é feito através do comando:
return valor_de_retorno
Exemplo:
return x+y;

Obs.: A execução do comando de retorno muda o fluxo do


programa, direcionando-o para o final do módulo. Ou seja, após a
execução de retorno, o módulo é encerrado e o fluxo do programa
volta para a função ativadora.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 21
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Problema 1: identificar se um número é


par/ímpar ou um ano bissexto
● Faça um programa capaz de identificar se um número é par ou
ímpar e se apresenta um ano bissexto. Caso não seja
nenhuma dessas opções, o programa deve retornar uma
mensagem informando ao usuário que a operação não é válida.
● Cada uma das alternativas deve ser uma função que retornará
1(verdadeiro) ou 0(falso), dependendo da característica do
número analisado.
● Também adapte a entrada de dados para garantir que uma
opção válida seja entrada e faça dessa entrada uma função
separada.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 22
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Problema 1:
solução

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 23
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 1:
● Faça um programa que receba três números e identifique se os
mesmos formam um triângulo. Essa identificação deve ser feita
por uma função chamada verifica_triangulo, que retorna 1(caso
os números formem um triângulo) e 0(caso contrário). A leitura
dos números e a escrita do resultado, além da ativação da
função triângulo devem ficar na função principal.
● Esse programa deve dizer ainda que tipo de triângulo foi
formado. Para isso faça uma função denominada verifica_tipo.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 24
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 1:
solução possível 1

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 25
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 1:
solução possível 2

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 26
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 2:
● Faça um programa que calcule a soma dos n primeiros
números pares, sendo n definido pelo usuário na função
principal. O programa ainda deverá ter as funções soma_pares
e par, sendo que a primeira será responsável pela soma dos
números que forem pares e a segunda será responsável por
verificar se o número em questão é par ou não.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 27
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 2:
solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 28
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3:
● Faça um programa que realize a potenciação por meio de
multiplicações sucessivas, por sua vez, expressas por meio de
adições.
● A multiplicação por meio de adições deve ser uma função que
será ativada pela função exponenciação.
● O programa deve emitir a seguinte mensagem de erro caso o
usuário digite um número negativo e finalizar o programa:
Erro: o expoente deve ser um número positivo!

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 29
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3 - parte 1: solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 30
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3 - parte 2: solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 31
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Passando argumentos para funções


//Definição da função
x = 5; int soma( int p1, int p2)
y = 7; {
Chamada da função soma(x,y); Argumentos ….
}

1) Chamada por valor

2) Chamada por referência

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 32
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Passando argumentos para funções


//Definição da função
x = 5; int soma( int *p1, int *p2)
y = 7; {
Chamada da função soma(&x,&y); Argumentos ….
}

2) Chamada por referência


O endereço de um argumento é copiado no parâmetro.
Dentro da função, o endereço é usado para acessar o argumento real
utilizado na chamada.
Alterações feitas no parâmetro afetam a variável usada para chamar a
função.
Deve-se assegurar que os argumentos usados para chamar uma função
sejam compatíveis com o tipo de seus parâmetros.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 34
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exemplo: função troca

//Salva o valor contido em i na variável aux


//Coloca o valor contido em j na variável i
//Coloca o valor de aux em j

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 35
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 4: ordenação de dois números


● Faça um programa que ordene dois valores.
● A ordenação dos números deve estar contida em uma função.
● Um terceiro parâmetro determinará a ordem (crescente ou
decrescente) para a ordenação.
● Suponha que os dois valores a serem ordenados, passados
como parâmetros para a função, são sempre diferentes
(GARANTA QUE O USUÁRIO DIGITE NÚMEROS
DIFERENTES).
● Além disso, considere que a função ordena deve retornar
1(verdadeiro), caso consiga efetuar a operação, e 0(falso),
caso a opção seja inválida.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 36
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 4: ordenação (continuação)


● A função deverá ordenar dois valores e retorná-los na ordem
pedida.
● Como os valores podem ser modificados e tais modificações
precisam ser mantidas na função ativadora, esses parâmetros
devem ser passados por referência.
● Consideremos a opção 1 – crescente e 2 – decrescente.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 37
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3:
solução possível 1 -parte 1

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 38
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3:
solução possível 1
parte 2

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 39
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 3:
solução possível 2

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 40
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com matrizes


✔ A passagem de matrizes como argumentos para funções é uma
exceção à convenção de passagem de parâmetros com chamada por
valor.
✔ Quando uma matriz é usada como um argumento de uma função,
apenas o endereço da matriz é passado, não um cópia da matriz
inteira.
✔ Quando se chama uma função com um nome da matriz, um ponteiro
para o primeiro elemento na matriz é passado para a função.
NÃO SE ESQUEÇA:
Em C, um nome de matriz sem qualquer índice é um ponteiro para o
primeiro elemento na matriz.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 41
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com matrizes


✔ A declaração de parâmetros deve ser de um tipo de ponteiro
compatível.
✔ Existem três maneiras de declarar um parâmetro que receberá um
ponteiro de uma matriz unidimensional.
➢ Pode ser declarado como uma matriz dimensionada
➔ mostrar (int num[10])
➢ Pode ser declarado como uma matriz sem dimensão
➔ mostrar (int num[])
➢ Pode ser declarado como um ponteiro
➔ mostrar(int *num)
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 42
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com matrizes


✔ Utilizando uma matriz dimensionada

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 43
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com matrizes


✔ Utilizando uma matriz NÃO dimensionada

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 44
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com matrizes


✔ Utilizando uma ponteiro

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 45
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 5:
● Faça um programa que recebe um string de tamanho 100 e
Imprima-o em minúsculo.
● O programa deverá, dentro da função principal receber o string
e chamar a função imprime_minusculo para tornar os
caracteres minúsculos. (Para transformar um caractere
minúsculo utilize a função tolower presente na biblioteca
ctype.h)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 46
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 5:
solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 47
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 6:
● Faça um programa que recebe um string de tamanho 100 e
Imprima-o em maiúsculo.
● O programa deverá, dentro da função principal receber o string
e chamar a função imprime-maiusculo para tornar os
caracteres maiúsculos.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 48
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 6:
solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 49
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Retornando ponteiros
● Para retornar um ponteiro, deve-se declarar uma função como
tendo tipo de retorno ponteiro.
Exemplo: tipo *nomefuncao(lista_de_parametros)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 50
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 7:
● Faça um programa que recebe um string de tamanho 100 e
retorne-o string em (1) maiúscula ou (2) minúscula.
● O programa deverá, dentro da função principal receber o string
e fazer a pergunta para o usuário de qual forma o string será
exibido (1 ou 2).
● Deve possuir duas funções que fazem a transformação:
Para maiúscula: strtoupper
Para minúscula: strtolower

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 51
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 7: solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 52
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 8:
solução possível

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 54
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Chamando funções com estruturas


✔ Quando uma estrutura é usada como um argumento para uma função,
a estrutura inteira é passada usando o método padrão de chamada por
valor.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 55
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Retornando
estruturas

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 56
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Recursividade

✔ Do ponto de vista algorítmico, a recursividade nada mais é do


que a ativação de uma função por si mesma.
✔ A função ativadora e a ativada são as mesmas.
Exemplo:
✔ R(x) = 1, para x = 1 (base ou ponto de saída)
✔ R(x) = 1 + R(x-1) , para x > 1

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 57
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Recursividade
Exemplos de funções recursivas:
● Fibonnacci
● fib(n) = fib(n-1) + f(n-2) para n > 1
● fib(0) = 0 e fib(1) = 1 (base)
● Fatorial
● n! = n*(n-1)! Para n >0
● 0! = 1 (base)
● Exponenciação(expressa por multiplicações)

xn = x * xn-1 para n > 0

X0 = 1 (base)
● Multiplicação (expressa por adições)

x*y = x + x * (y – 1) para y > 0
● x*0 = 0 (base)
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 58
Algoritmos
Funções
Instituto de Ciência e Tecnologia

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 59
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Recursividade
Fatorial

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 60
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 9:

Implemente uma função recursiva que resolva a seguinte


equação recorrente:
● R(x) = 10 * R(x-1) + 2, para x > 1
● R(x) = 1 para x = 1

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 61
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Exercício 10:

Faça uma função recursiva que resolva a seguinte equação


recorrente:
● R(x) = 2 * R(x-1) - 4, para x > 0
● R(0) = 2 (base da recursão)

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 62
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()


Algumas vezes é útil passar informações para um programa
quando o executamos.
Geralmente, passamos informações para a função main() via
argumentos da linha de comando.

Um argumento da linha de comando é a informação que segue


o nome do programa na linha de comando do sistema
operacional.

Por exemplo, quando compila um programa em C, usando o


gcc, e, após compilação, deseja rodar o programa, você digita:
./nome_programa O nome do programa é passado para
o compilador C como um argumento
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 63
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()


Em C, existem dois argumentos internos especiais:
argc e argv

main(int argc, char *argv[])

● São parâmetros declarados na função main() que são usados


para receber os argumentos das linhas de comando.
● argc: contém o número de argumentos da linha de comando e
é um inteiro.
✔ Ele é sempre pelo menos 1 porque o nome do programa é
qualificado como primeiro argumento.

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 64
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()


Em C, existem dois argumentos internos especiais:
argc e argv

main(int argc, char *argv[])

● São parâmetros declarados na função main() que são usados


para receber os argumentos das linhas de comando.
● argv: é um ponteiro para uma matriz de ponteiros para
caractere.
✔ Cada elemento nessa matriz aponta para um argumento da linha
de comando.
✔ Todos os argumentos da linha de comando são strings.
✔ argv[0] aponta para a primeira string, que é sempre o nome do
programa.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 65
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()


Em C, existem dois argumentos internos especiais:
argc e argv

main(int argc, char *argv[])

● São parâmetros declarados na função main() que são usados


para receber os argumentos das linhas de comando.
● argv: é um ponteiro para uma matriz de ponteiros para
caractere.
✔ Cada elemento nessa matriz aponta para um argumento da linha
de comando.
✔ Todos os argumentos da linha de comando são strings.
✔ argv[0] aponta para a primeira string, que é sempre o nome do
programa.
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 66
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()


Em C, existem dois argumentos internos especiais:
argc e argv

Para executar: ./teste Amanda


./teste “Amanda Rocha”
______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 67
Algoritmos
Funções
Instituto de Ciência e Tecnologia

Argumentos para main()

______________________________________________________________________________________________________________________
Profa. Amanda Rocha Chaves (amanda.chaves@ict.ufvjm.edu.br) 68

Anda mungkin juga menyukai