Você está na página 1de 39

INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA

ENGENHARIA ELTRICA INDUSTRIAL


TCNICAS DE PROGRAMAO 2015.1

TCNICAS DE PROGRAMAO 2015.1

LINGUAGEM DE PROGRAMAO C: FUNES

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

REFERNCIAS BIBLIOGRFICAS

1. KERNIGHAN, B. W., RITCHIE, D. M., C A linguagem de Programao Padro ANSI, So Paulo,


ELSEVIER, 22. Edio, 1989.
2. SCHILDT, Herbert. C, Completo e Total. So Paulo. Markon Books. 1996.
3. JAMSA, Kris & KLANDER, Lars. Programando em C/C++ A Bblia. So Paulo. Pearson
Educations do Brasil. 1999.
4. CORMEN, Thomas H. et al, Algoritmos: Teoria e Prtica. So Paulo. ELSEVIER. 2002.
5. LOPES, Anita, GARCIA, Guto. Introduo Programao 500 Algoritmos Resolvidos.
Campus, So Paulo, 2002.
6. MIZRAHL, Victorine Viviane. Treinamento em linguagem C. Mdulo I. So Paulo. Makron
Books.
7. ZIVIANI, Nvio. Projeto de Algoritmos com Implementaes em Pascal e C. So Paulo.
Cengace Learning. 3. Edio. 2010.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

FUNES

1. As funes dividem grandes tarefas de computao


em tarefas menores, e permitem s pessoas
trabalharem sobre o que outras j fizeram, ao invs
de partirem do nada.
2. As funes so programas menores desenvolvidos
individualmente at que todo o programa tenha sido
criado por completo.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

FUNES

1. uma unidade ou parte do cdigo especifica para


cumprir uma tarefa.
2. Todas as tarefas repetitivas de um cdigo podem
ser transformadas em funes.
3. a reutilizao do cdigo.
4. As funes so executadas a partir do momento
que feita sua chamada.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLO DE FUNES EM C

Funo: srand() e
rand()
Funo: pow(x,y)
int magico;
srand((unsigned)time(NULL));
double x,y,z;
magico = rand()%N
z = pow(x,y);

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLO DE FUNES EM C

float x,y;

x = 2;

y = exp(x);

printf(%f\n,y);

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

OPERAES MATEMTICAS

1. Funes trigonomtircas
Funes acos() e asin()
Funes atan() e atan2()
Funes cos(), sin() e tan()
2. Funes Hiperblicas
3. Funes Exponencial e Logaritmo
Funo exp()
Funes frexp(), ldexp() e modf()
Funes log() e log10()

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

OPERAES MATEMTICAS

4. Funes pow() e sqrt()


5. Funes de arredondamento
Funo ceil() e floor()
Funes fabs()
Funes fmod()

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

SINTAXE

Tipo_de_Retorno Nome_da_Funo(declarao_de_parmetros)
{
Corpo_da_Funo;
}

float celsius(float fahr) int maior(int x, int y)


{ {
Algoritmo de converso; Retorna o maior de x e y;
} }

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

TIPO DE RETORNO

1. O tipo de uma funo definido pelo tipo de valor


que a funo retorna por meio do comando return.
Funo do tipo float, retorna um valor do tipo float.
Funo do tipo int, retorna um valor do tipo int.
Funo do tipo char, retorna um valor do tipo char.
Funo do tipo void, no retorna nenhum valor.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

COMANDO: RETURN

1. O comando return termina a execuo da funo e


retorna o controle para a instruo seguinte do
cdigo de chamada.
2. Sintaxes do return:
return;
return expresso;
return (expresso);
3. Quando a funo do tipo void o comando return no
obrigatrio!

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

COMANDO: RETURN

float celsius(float fahr)


{
return (fahr 32.0)*5.0/9.0;
}

unsigned long long int fibonacci(unsigned long long int n)


{
if (n == 0) return 0;
if (n == 1) return 1;
return (fibonacci(n-1)+fibonacci(n-2));
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

LIMITAES: RETURN

1. Vrios parmetros podem ser passados como


argumentos de uma funo, mas no permitido o
retorno de mais de um valor por meio do comando
return.
O comando return somente pode retornar um nico valor para uma
funo que o chama.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

LIMITAES: RETURN

return x, y; NO PERMITIDO!

return vetor_de_dados; NO PERMITIDO!

return matriz_dados; NO PERMITIDO!

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PROTTIPO DA FUNO
1. Uma funo no deve ser chamada sem antes ter sido
declarada.
2. Denomina-se de prottipo da funo como sendo a sua
declarao.
Instruo geralmente alocada no incio do programa.
Estabelece o tipo da funo e os argumentos que a funo recebe.
3. Garante ao compilador verificar a sintaxe da funo.
4. Prottipos so do tipo externo e interno.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include <stdio.h>
#include <stdlib.h>
float celsius(float fahr); /* Prottipo externo*/
int main()
{
system(cls);
float c, f;
printf("Digite a temperatura em graus Fahrenheit: "); .
scanf("%f", &f); .
c = celsius(f); /* Chamada funo */ .
printf("Celsius = %.2f\n", c); float celsius( float fahr)
system(pause); {
return 0; float c;
} . c = (fahr - 32.0) * 5.0/9.0;
.
return c;
.
}
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include <stdio.h>
#include <stdlib.h>
int main()
{
system(cls);
float celsius(float fahr); /* Prottipo local */
float c, f;
.
printf("Digite a temperatura em graus Fahrenheit: ");
.
scanf("%f", &f); .
c = celsius(f); /* Chamada funo */
printf("Celsius = %.2f\n", c); float celsius( float fahr)
system(pause); {
return 0; float c;
} . c = (fahr - 32.0) * 5.0/9.0;
. return c;
. }
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>

int main()
{
void temperatura(float x);
float celsius(float x);
system("cls");
float f;
printf("Entre com o valor da temperatura: "); .
scanf("%f",&f); .
temperatura(f); .
printf("\n\n"); void temperatura(float x)
system("pause"); {
return 0; printf("\n\nA temperatura em celsius eh: %f",celsius(x));
} }
float celsius(float x)
. {
. return (x-32.0)*5.0/9.0;
. }
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
float celsius(float x);
int main()
{
void temperatura(float x);

system("cls");
float f;
.
printf("Entre com o valor da temperatura: ");
.
scanf("%f",&f);
.
temperatura(f);
printf("\n\n"); void temperatura(float x)
system("pause"); {
return 0; printf("\n\nA temperatura em celsius eh: %f",celsius(x));
} }
float celsius(float x)
. {
. return (x-32.0)*5.0/9.0;
. }
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
int main()
{
void temperatura(float x);
system("cls");
float f;
printf("Entre com o valor da temperatura: ");
scanf("%f",&f);
temperatura(f);
printf("\n\n");
system("pause");
return 0;
}
float celsius(float x)
{
return (x-32.0)*5.0/9.0;
}
void temperatura(float x)
{
printf("\n\nA temperatura em celsius eh: %f",celsius(x));
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
int main()
{
system("cls");
float f;
f = 20;
printf("%f\n", (f-32.0)*5.0/9.0);
f = 30;
printf("%f\n", (f-32.0)*5.0/9.0);
f = 40;
printf("%f\n", (f-32.0)*5.0/9.0); -6.666667
printf("\n\n"); -1.111111
system("pause"); 4.444445
return 0;
}
Pressione qualquer tecla para
continuar. . .

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
void temperatura(float x);
int main()
{
system("cls");
float f;
f = 20;
temperatura(f);
f = 30;
temperatura(f);
f = 40; -6.666667
temperatura(f); -1.111111
printf("\n\n"); 4.444445
system("pause");
return 0;
} Pressione qualquer tecla para
continuar. . .

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PARMETROS DA FUNO
1. As variveis que recebero as informaes enviadas a uma
funo so chamadas parmetros.
2. A funo deve declarar essas variveis entre parnteses, no
cabealho da sua definio ou antes das chaves que marcam
o incio da funo.
3. Os parmetros sero utilizados pelo corpo da funo
livremente.
4. Variveis que no fazem parte dos parmetros de uma
funo no podem ser declaradas em seu cabealho.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PARMETROS DA FUNO

float celsius(float fahr)


{
return (fahr 32.0)*5.0/9.0;
}

float celsius(fahr)
float fahr;
{
return (fahr 32.0)*5.0/9.0;
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PARMETROS DA FUNO
1. Parmetros: chamadas por valor
Em linguagem C, quase todos os argumentos de funes so
passados por valor, isto , a funo que chamada cria uma cpia
dos valores dos argumentos e ento, cria outras variveis
temporrias (parmetros) para armazenar estes valores.
Quaisquer alteraes feitas nos parmetros das funes no tem
nenhum efeito nas variveis que foram usadas para a passagem de
valor.
Lembrando que tais variveis criadas temporariamente so
consideradas variveis locais.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

int maxdivisor(int x, int y)


{
int resto;
resto = x % y;
while(resto != 0)
{
x = y;
y = resto;
resto = x % y;
}
return y;
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
void troca(int x, int y);
int main()
{
int x,y;
system("cls");
printf("Entre com o valores de x e y: ");
scanf("%d%d",&x,&y);
troca(x,y); .
printf("\n\n"); .
printf("O valores de x e y sao: %d %d\n",x,y);
system("pause"); .
return 0; void troca(int x, int y)
} {
int temp;
. temp = x;
. x = y;
. y = temp;
}
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

Por que no houve a troca entre x e y?

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

1. A linguagem C passa argumentos para funes utilizando-se da chamada


de valor, a funo chamada no pode alterar diretamente uma varivel
na funo chamadora.

2. Isto , por causa da chamada de valor, a funo troca no pode alterar


os argumentos x e y na rotina que a chamou. Pois, a funo efetuou a
troca apenas nas cpias de x e y.

3. A forma de se obter o resultado desejado fazer com que a rotina de


troca possa trabalhar as referncias de x e y.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

PARMETROS DA FUNO
1. Parmetros: chamadas por referncia
Nesse mtodo, ocorre a passagem do endereo da varivel, ou seja,
o endereo de um argumento copiado no parmetro.
Dentro da funo, o endereo usado para acessar o argumento
real utilizado na chamada. Portanto, as alteraes feitas no
parmetro afetam a varivel usada para chamar a rotina.

void troca(int *x, int *y) .


{ .
int temp; .
temp = *x; troca(&a, &b);
*x = *y; .
*y = temp; .
} .

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

#include<stdio.h>
#include<stdlib.h>
void troca(int *a, int *b);
int main()
{
int x,y,z;
system("cls");
printf("Entre com o valores de x, y e z: ");
scanf("%d%d%d",&x,&y,&z);
if((x>y)||(x>z))
{
void troca(int *a, int *b)
if(y<z) {
troca(&x,&y); int temp;
else temp = *a;
troca(&x,&z); *a = *b;
} *b = temp;
if(y>z) }
troca(&y,&z);
printf("\n\n");
printf("O valores de x, y e z sao: %d %d %d\n",x,y,z);
system("pause");
return 0;
}
PROF. ORLANDO ROCHA - DEE
INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

RECURSIVIDADE
1. Recursividade um termo usado de maneira mais geral para descrever o
processo de repetio de um objeto de um jeito similar ao que j fora
mostrado.
2. Em cincia da computao, a recursividade a definio de uma sub-
rotina (funo ou mtodo) que pode invocar a si mesma. Um exemplo de
aplicao da recursividade pode ser encontrado na resoluo de um
determinante de uma matriz de ordem qualquer atravs do mtodo de
Laplace.
3. A grande vantagem da recurso est na possibilidade de usar um
programa de computador finito para definir, analisar ou produzir um
estoque potencialmente infinito de sentenas, designs ou outros dados.

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

1 2 3
1+1 5 6 1+2 4 6 1+3 4 5
det = 4 5 6 = 1 1 + 2 1 + 3 1
8 9 7 9 7 8
7 8 9

5 6 1+1 1+2
= 5 1 9 + 6 1 8
8 9

4 6 1+1 1+2
= 4 1 9 + 6 1 7
7 9

4 5 1+1 1+2
= 4 1 8 + 5 1 7
7 8

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLOS: RECURSIVIDADE

Fatorial Recursivo

se = =
! =
! se >

int fatorial(int n)
{
if (n > 1)
return n*fatorial(n-1);
return 1;
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLOS: RECURSIVIDADE

Fibonacci Recursivo

se =
() = se =
+ ( ) se >

int fibb(int n)
{
if (n > 1)
return(fibb(n-1)+fibb(n-2));
return n;
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLOS: RECURSIVIDADE

int maxdivisor (int x, int y)


{
int resto;
resto = x % y;
if (resto == 0)
return y;
else
return maxdivisor(y, resto);
}

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLOS: RECURSIVIDADE

Combinacional Recursivo

se =
(, ) = se =
, + ( , ) se < <

PROF. ORLANDO ROCHA - DEE


INSTITUTO FEDERAL DE EDUCAO CINCIA E TECNOLOGIA DO MARANHO IFMA
ENGENHARIA ELTRICA INDUSTRIAL
TCNICAS DE PROGRAMAO 2015.1

EXEMPLOS: RECURSIVIDADE

Raiz Quadrada Recursivo



<
, , +
, ,
caso contrrio

PROF. ORLANDO ROCHA - DEE