Post on 22-Jan-2019
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 1
Algoritmos e Lógica de Programação
80 horas // 4 h/semana
Modularização de Algoritmos (procedimentos e
funções)
Aula 15
Prof. Piva
Para começar... Temos que dividir, para
conquistar!!
Para começar...
A Modularização de algoritmos é uma técnica altamente recomendável, que consiste em dividir um algoritmo maior ou principal em algoritmos menores, também referenciados como subalgoritmos ou sub-rotinas(procedimentos e funções), tornando o principal mais estruturado, organizado e refinado!
Para começar...
Algumas vantagens da Modularização:
- Redução do tamanho / complexidade do algoritmo
- Melhoria da compreensão e visualização do algoritmo
- Uma vez declarados, podem ser utilizados em qualquer ponto após essa declaração.
Qual a diferença?
Procedimentos
&
Funções
?
Funções...
Uma função é um recurso (Estático) que tem comoobjetivo retornar um valor.
A chamada de uma função é feita através da citação doseu nome seguido opcionalmente de seus argumentosiniciais entre parênteses.
As funções podem ser predefinidas pela linguagem oucriadas pelo programador de acordo com o seu interesse.
Algumas Funções Predefinidas do VisuALG: abs (valor:real): real – Valor Absoluto
raizq (valor: real): real – Raiz Quadrada
Rand : real – Gerador de números aleatórios entre 0 e 1
...
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 2
Funções...
Exemplo de utilização de funções existentes ...
Funções...
Como criar uma função em VisuALG?
Funções
Definições do comando de criação de FUNÇÕES:
Identificador: Nome da função.
Passagem de parâmetros por referência: utiliza-se aconstrução VAR antes dos
identificadores para indicar a passagem por referência. Osidentificadores são separados por vírgula.
Parâmetros: Entre um mesmo tipo de dados são separados porvírgula. Entre tipos de dados a separação é feita com ponto-e-vírgulas ';'.
Tipo de retorno da função: Real, Inteiro, Lógico ou Caractere.
Declaração de variáveis locais: idêntica a declaração devariáveis globais. As variáveis declaradas localmente temvalidade dentro do escopo da função.
Retorne: local onde é colocado a variável de retorno
Exemplo...
Criar uma função que receba dois valores e devolva o resultado da soma desses dois valores.
Exemplo: função Fsoma() Exemplo – num programa...
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 3
Procedimento (sub-rotina)...
Diferentemente de uma FUNÇÃO, umPROCEDIMENTO não retorna valor algum.
O PROCEDIMENTO pode receber parâmetros.
O PROCEDIMENTO se parece com um bloco de
comandos (separado por questões desimplificação ou melhor visualização).
Procedimento (sub-rotina)...
Procedimento (sub-rotina)...
Exemplo:
Funções / Procedimentos
Dividir uma tarefa complexa em tarefas menores, permitindo esconder detalhes de implementação
Evita-se a repetição de um mesmo código
Tipo Nome (lista de parâmetros)
{
corpo
}
em C
Procedimentos
“Funções” que não retornam valores
Tipo: void
#include <stdio.h>
//esteriótipo da função
void desenha();
main(){
desenha();
printf("usando funcoes");
desenha();
getch();
}
void desenha()
{
int i;
for(i=0; i<=10; i++)
printf ("-");
}
___________usando funções___________Funções Retornam valores
#include <stdio.h>
int fatorial(int);
main( ) {
printf("Fatorial");
printf("\n o fatorial de 4 = %d",
fatorial(4) );
printf("\n o fatorial de 3 = %d",
fatorial(3) );
getch();
}
int fatorial(int n)
{
int i, resultado=1;
for(i=1; i<=n; i++)
resultado*=i;
return resultado;
}
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 4
Variáveis locais
Variáveis declaradas dentro de uma
função são denominadas locais e
somente podem ser usadas dentro do
próprio bloco
São criadas apenas na entrada do bloco e destruídas na saída (automáticas)
Variáveis Locais
void desenha ( )
{
int i, j;
. . .
}
main ( )
{
int a;
desenha();
a = i; erro
. . .
}
void desenha ( )
{
int i, j;
. . .
. . .
}
void calcula ( )
{
int i, j;
. . .
. . .
}
i, j em
desenha são
variáveis
diferentes de
i, j em
calcula.
Variáveis Globais
Variável que é declarada externamente podendo ser acessada por qualquer função#include <stdio.h>
main ( )
{
int i;
.........
.........
desenha ( );
calcula ( );
}
void desenha ( )
{
int j;
i = 0;
. . .
}
void calcula ( )
{
int m;
i = 5;
. . .
}
Comando Return
Causa a atribuição da expressão a função
forçando o retorno imediato ao ponto de chamada da função.
#include <stdio.h>
main( )
{
char letra;
printf (“ digite uma letra
em minúsculo”);
letra=minúsculo();
if (letra==‘a’)
printf(“ok”);
}
char minúsculo()
{
char ch;
scanf(“%c”, ch);
if((ch>=‘A’) && (ch<=‘Z’))
return (ch + ‘a’ - ‘A’);
else
return (ch);
}
Note pelo exemplo anterior que a
função minúsculo lê um valor
internamente convertendo-o para
minúsculo.
Como usar esta função se já temos uma
letra e desejamos convertê-la para
minúsculo?
Passando dados para função
Passagem de parâmetro por valor - uma
cópia do argumento é passada para a
função
O parâmetro se comporta como uma
variável local
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 5
Passando dados para função
main ( )
{
printf (“ %c”, minúsculo (‘A’) );
parâmetro real
}
char minúsculo (char ch)
parâmetro formal
{
if (( ch >= ‘A’) && (ch <= ‘Z’))
return (ch + ‘a’-, ‘A’);
else
return (ch);
}
Passando dados para função -Exemplo
#include <stdio.h>
main ( )
{
int num, b;
printf (“ entre com um número > o”);
scanf (“ %d”, &num );
b = abs (num);
. . .
printf (“ Valor absoluto de num = %d”, abs(num) );
. . .
b = abs(-3);
}
int abs (int x)
{
return ( ( x < 0 ) ? -x : x );
}
Passando vários argumentos
Ex 1:
float área_retângulo (float largura, float altura)
{
return (largura * altura);
}
Ex 2:
float potência (float base, int expoente)
{
int i; float resultado = 1;
if (expoente == 0)
return 1;
for (i = 1; i <= expoente; i++)
resultado *= base
return resultado;
}
Usando várias funções: calcular a seguinte seqüência
S(x, n) = x/1! + x2/2! + x3/3! + ... + xn/ n!
#include <stdio.h>
float serie (float , int );
float potencia (float , int)
int fat (int);
main( )
{
float x;
int termos;
printf(“entre com o numero de termos: “);
scanf(“%d”, &termos);
printf(“entre com o valor de X: “);
scanf(“%f”, &x);
printf(“O valor de série = %f “, serie(x, termos));
}
float potencia (float base, int expoente)
{
int i; float resultado = 1;
if (expoente == 0)
return 1;
for (i = 1; i <= expoente; i++)
resultado *= base;
return resultado;
}
float serie (float x, int n)
{
int i; float resultado = 0;
for ( i = 1; i <= n; i++)
resultado += potência( x, i ) / fat( i );
return resultado;
}
int fat (int n)
{
int i, resultado = 1;
for ( i = 1; i <= n; i ++)
resultado *= i;
return resultado;
}
Algoritmos e Lógica de Computadores
© Prof. Dr. Dilermando Piva Jr 6
EXERCÍCIOS
Funções e Procedimentos...
EXERCÍCIO 1
Faça uma função que retorne o valor lógico V
(verdadeiro) se o número inteiro passado por
parâmetro for par, e F (falso) se não.
Implemente sua função em um programa
completo.
EXERCÍCIO 2
Faça uma função que retorne o valor lógico V
(verdadeiro) se o número inteiro passado por
parâmetro for primo, e F (falso) se não.
Implemente sua função em um programa
completo.
EXERCÍCIO 3
Faça uma função que determine se um ano
qualquer, no formato AAAA, é bissexto.
A função retorna 1 se o ano é bissexto e
0(zero) se não.
EXERCÍCIO 4
Construa uma função que retorne o MDC de
dois números inteiros passados por
parâmetro.
EXERCÍCIO 5
Faça uma função que receba como
parâmetro o raio de uma esfera, calcule e
retorne o valor de seu volume.
Volume da Esfera : v = 4/3 * R3