algoritmos e lógica de computadores - fatecead.com.br · parâmetros: entre um mesmo tipo de dados...

7
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 como objetivo retornar um valor. A chamada de uma função é feita através da citação do seu nome seguido opcionalmente de seus argumentos iniciais entre parênteses. As funções podem ser predefinidas pela linguagem ou criadas 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 ...

Upload: vuongdien

Post on 22-Jan-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

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

Algoritmos e Lógica de Computadores

© Prof. Dr. Dilermando Piva Jr 7

EXERCÍCIO 6

Crie uma função que receba como parâmetro

3 números interios (representando horas,

minutos e segundos). A função deve

converter em segundos.

Por exemplo: 2 h, 40 min e 10 segundos

correspondem a 9.610 segundos.