Вы находитесь на странице: 1из 82

Algoritmos e Estruturas de Dados I

Funes
Pedro Olmo Stancioli Vaz de Melo
Exerccio
Brutus e Olvia foram ao mdico, que disse a eles que
ambos esto fora do peso ideal. Ambos discordaram
veementemente da afirmao do mdico. Para provar que
estava certo, o mdico mostrou o ndice de Massa
Corporal (IMC) de ambos, considerando que Brutus tem
1,84m e pesa 112kg e Olvia tem 1,76m e pesa 49kg.
Implemente um programa para mostrar o IMC de Brutus e
Olvia e quantos kilos Brutus e Olvia devem
perder/ganhar para atingirem um peso saudvel segundo
a classificao do IMC.
Exerccio
Exerccio
Exerccio
Uma conta poupana foi aberta com um depsito de
R$500,00, com rendimentos 1% de juros ao ms. No
segundo ms, R$200,00 reais foram depositados nessa
conta poupana. No terceiro ms, R$50,00 reais foram
retirados da conta. Quanto haver nessa conta no quarto
ms?
Exerccio
Pensando no problema...
Preciso de armazenar o valor dessa conta
O valor ser acrescido todo ms de 1%
Vou adicionar 200 reais a esse valor no segundo
ms
Vou retirar 50 reais desse valor no terceiro
Soluo 1
Soluo 1
Soluo 1
Soluo 2
Soluo 2
Soluo 2
Tem como melhorar?
Tem como melhorar?
Se o rendimento da poupana mudar de 1% para 2%?
Soluo 3
Soluo 3
Tem como melhorar?
Tem como melhorar?
Um pouco de matemtica
poupanca = poupanca + poupanca * juros;
poupanca = poupanca * (1 + juros);
//como juros == 0.01, ento:
poupanca = poupanca * 1.01
Soluo 4
Soluo 4
Tem como melhorar?
Tem como melhorar?
E se o banco definir que junto com o
rendimento mensal, R$3,14 reais devem ser
retirados da conta como taxa de manuteno?
Soluo 5
E se o banco definir que junto com o
rendimento mensal, R$3,14 reais devem ser
retirados da conta como taxa de manuteno?

Podemos criar uma funo que centraliza as


operaes mensais padres do banco
Soluo 5
Soluo 5
Soluo 5
A funo rendePoupanca encarregada de
realizar todas as operaes de rendimento
mensais da conta poupana
Soluo 5
Soluo 5
tipo de retorno da funo parmetro da funo
Funes - reviso

Funes definem operaes que so usadas


frequentemente

Funes, na matemtica, requerem


parmetros de entrada, e definem um valor de
sada
Funes - Exemplos

Funo quadrtica y = ax+bx+c


Entrada: x
Sada: y
Funes na programao

Em linguagens imperativas, TODOS os


programas usam funes

No C, o programa SEMPRE comea


executando a funo main.

#include <stdio.h>

int main(void)
{
printf("Ol, Mundo!");
return 0;
}
Funes

Usamos funes para evitar de escrever


vrias vezes o mesmo cdigo
Cdigo que ser executado vrias vezes em um
programa, mas com valores diferentes

Operaes comuns a um ou mais programas


Funes - C

Em C, definimos a funo por:


Zero ou mais parmetros de entrada, com os seus
tipos
Um parmetro de sada com tipo, sendo que o tipo
pode ser sem sada (void)
Cdigo da funo

Ao chamarmos a funo, devemos passar


valores para TODOS os parmetros, sem
exceo (no o caso no C++)
C - Exemplo

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }
C - Exemplo

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }

Nome da funo
C - Exemplo

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }

Parmetro de entrada da funo


C - Exemplo

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }

Tipo de sada da funo


C - Exemplo

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }

cdigo da funo
C Exemplo: usando funes

1. double logistica(double x) {
2. return 1.0/(1.0+exp(-1.0*x));
3. }
4.
5. int main() {
6. double entrada = 10.0;
7. double saida = logistica(entrada);
8. }

Varivel saida recebe o valor da funo


Exemplo 2

int sep (int v[], int p, int r) {


int w[1000], i = p, j = r, c = v[p], k;
for (k = p+1; k <= r; ++k)
if (v[k] <= c) w[i++] = v[k];
else w[j--] = v[k];
// agora i == j
w[i] = c;
for (k = p; k <= r; ++k) v[k] = w[k];
return i;
}

Funo sep: trs parmetros, retorna um inteiro


Exemplo 3 usando o main

A funo main especial:


Exemplo 3 usando o main

A funo main especial:


a primeira a ser chamada no programa
Todo programa tem um!
Exemplo 3 usando o main

A funo main especial:


a primeira a ser chamada no programa
Todo programa tem um!
Seu retorno pode indicar se o programa executou
corretamente (retorno 0) ou no (retorno != 0)
Exemplo 3 usando o main

A funo main especial:


a primeira a ser chamada no programa
Todo programa tem um!
Seu retorno pode indicar se o programa executou
corretamente (retorno 0) ou no (retorno != 0)
Seus parmetros, quando existem, so os
parmetros passados para o programa quando foi
executado (int argc, char *argv[])
Funes na programao

Em linguagens imperativas, TODOS os


programas usam funes

No C, o programa SEMPRE comea


executando a funo main.

#include <stdio.h>

int main(void)
{
puts("Ol, Mundo!");
return 0;
}
Funes sem retorno C

Funes sem retorno devem ter o tipo de


retorno void.
Exemplo: funo para imprimir mensagem de
boas-vindas do programa

1. void saudacao() {
2. printf(Ola usuario! Digite o comando que quer
executar, ou ? para ajuda.);
3. }
4. int main() {
5. saudacao();
6.
7. return 0;
8. }
Porque no retornar valor?

Porque o importante pode ser a ao


colateral da funo, e no o seu valor de
sada:
Impresso de uma mensagem
Ligar/desligar um componente do hardware

Porque a funo sempre executa sem erro:


void exit();
Funes: escopo de variveis

Variveis podem ser acessadas somente


dentro do seu escopo
Funes: escopo de variveis

Variveis podem ser acessadas somente


dentro do seu escopo

No C, o escopo definido do momento da


declarao at o fim do bloco
Funes: escopo de variveis

Variveis podem ser acessadas somente


dentro do seu escopo

No C, o escopo definido do momento da


declarao at o fim do bloco

No C, uma varivel declarada dentro de um


bloco de lao vive somente uma iterao do
lao
Funes: escopo de variveis

int teste(int x) {

}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a;
} else {
int b;
}
}
}
Funes: escopo de variveis

int teste(int x) {
//escopo de x
}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a;
} else {
int b;
}
}
}
Funes: escopo de variveis

int teste(int x) {

}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a;
} else { //escopo de y
int b;
}
}
}
Funes: escopo de variveis

int teste(int x) {

}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a;
} else { //escopo de i
int b;
}
}
}
Funes: escopo de variveis

int teste(int x) {

}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a; //escopo de a
} else {
int b;
}
}
}
Funes: escopo de variveis

int teste(int x) {

}

int main() {
int y;
for(int i=0;i<10;i++) {
if(i < 5) {
int a;
} else {
int b; //escopo de b
}
}
}
Mdulos
Mdulo

Um mdulo uma forma de organizar um


programa grande

Dividimos o programa em mdulos, onde


cada um deles possui um conjunto de tarefas
bem especfico:
Mdulo de entrada/sada
Mdulo de gerenciamento de memria
Mdulo de clculo
.
Mdulo

Mdulos tero uma ou mais funes, que desta


forma realizam operaes similares.


Mdulo de operaes matemticas


Mdulo de operaes sobre o tempo


Mdulo para entrada e sada
Exemplos de mdulos em C

Mdulo de operaes matemticas (log, pow, sqrt, )

Mdulo de operaes sobre o tempo (gettimeofday,


localtime, .)

Mdulo para entrada e sada (printf, scanf, gets, getchar,


)
Mdulos e bibliotecas

Mdulos muito teis podem ser empacotados


em bibliotecas, para que possam ser
utilizados em outros programas
Mdulos e bibliotecas - C

Em C, carregamos mdulos e bibliotecas com


o comando #include
1. #include<stdio.h>
2. #include<math.h>
3. #include meumodulo.h
4. O uso de <> ou depende da localizao do
mdulo/biblioteca
No diretrio de bibliotecas do sistema: <>
Em outro lugar (por exemplo, no diretrio onde est
o meu programa) :
C - Definindo um mdulo

O mdulo consiste em:


Arquivo de cabealhos de funes e declarao de
tipos de dados (extenso .h)
Arquivo com o cdigo das funes (extenso .c)
C - Definindo um mdulo

Arquivo simples.h Arquivo simples.c


double media (double #include simples.h
a, double b);
double media(double a,
double dif(double a, double b) {
double b); return (a+b)/2;
}

double dif(double a,
double b) {
return a b;
}
Bibliotecas padro do C

Muitas funes comuns:


stdio.h Entrada e sada
Math.h Funes matemticas mais complexas
stdlib.h gerenciamento do programa: alocar
memria, sair,
sys/time.h Gerenciar o tempo: imprimir datas, ver
a hora/data atual
Bibliotecas padro do C

Podemos encontrar a lista de funes em


manuais, livros e em sites Web, i.e.:

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
Soluo 5
A funo rendePoupanca encarregada de
realizar todas as operaes de rendimento
mensais da conta poupana
Soluo 5
Soluo 6
Soluo 6
Soluo 6
Soluo 6
Tanto o void main quanto as funes podem
estar no mesmo arquivo .c (exemplo:
solucao6.c)

No entanto, pode-se criar um mdulo para lidar


com as operaes padres do banco
Soluo 7
arquivo poupanca.h
Soluo 7
arquivo poupanca.c
Soluo 7
Compilando a biblioteca:
gcc -o arquivo.o -c arquivo.c
Soluo 7
Soluo 7
Soluo 7
Compilando o programa usando o mdulo
criado
gcc arquivo.c modulo.o
Bibliotecas padro do C Math.h

A math.h especial: precisa de um parmetro


na compilao

gcc codigo.c -lm

-lnome indica que queremos que o


programa incorpore cdigo de um mdulo
externo.
TODA biblioteca precisa do lnome,
EXCETO as funes padro do C
Exerccio
Brutus e Olvia foram ao mdico, que disse a eles que
ambos esto fora do peso ideal. Ambos discordaram
veementemente da afirmao do mdico. Para provar que
estava certo, o mdico mostrou o ndice de Massa
Corporal (IMC) de ambos, considerando que Brutus tem
1,84m e pesa 112kg e Olvia tem 1,76m e pesa 49kg.
Implemente um programa para mostrar o IMC de Brutus e
Olvia e quantos kilos Brutus e Olvia devem
perder/ganhar para atingirem um peso saudvel segundo
a classificao do IMC.
Exerccio
Exerccio

Вам также может понравиться