Programação I
Funções
Capítulo 9
Introdução
Em geral, não gostamos de executar tarefas repetitivas.
Programamos para fazer com que o computador execute tarefa repetitivas para nós.
Podemos reaproveitar código
Reaproveitamento
Problemas do ctrl+c e ctrl+v
E se você precisar mudar o trecho copiado e colado?
Funções
Permite a reutilização de trechos de código
… além disso tudo, a função permite principalmente:
Decomposição
Problema grande
Mas para ilustrar, vamos construir umas casas
####
####
######
######
####
####
####
####
######
######
####
####
Resolvendo de forma concreta e incremental: 1 casa
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("%c%c%c%c\n",'#','#','#','#');
6 printf("%c%c%c%c\n",'#','#','#','#');
7 printf("%c%c%c%c%c%c\n",'#','#','#','#','#','#');
8 printf("%c%c%c%c%c%c\n",'#','#','#','#','#','#');
9 printf("%c%c%c%c\n",'#','#','#','#');
10 printf("%c%c%c%c\n",'#','#','#','#');
11 printf("\n");
12 return 0;
13 }
Melhorando a manutenção
1 #include <stdio.h>
2
3 #define Q '#'
4
5 int main()
6 {
7 printf("%c%c%c%c\n",Q,Q,Q,Q);
8 printf("%c%c%c%c\n",Q,Q,Q,Q);
9 printf("%c%c%c%c%c%c\n",Q,Q,Q,Q,Q,Q);
10 printf("%c%c%c%c%c%c\n",Q,Q,Q,Q,Q,Q);
11 printf("%c%c%c%c\n",Q,Q,Q,Q);
12 printf("%c%c%c%c\n",Q,Q,Q,Q);
13 printf("\n");
14 return 0;
15 }
E a segunda casa?
Função : sintaxe
1 <tipo de retorno> <identificador>([lista de parâmetros])
2 {
3 [bloco de comandos]
4 }
Função: casa
Fazendo duas casas
primeira
segunda
Novos requisitos
Agora queremos fazer uma cidade.
Casas tem alturas diferentes, mas com largura fixa de 6.
Como fazer?
E se pudermos generalizar a função casa?
E se casa receber a altura como parâmetro?
...
casa(6);
casa(15);
casa(3);
casa(20);
...
Vamos por partes: anatomia da casa
altura (h)
largura
void casa (int h)
{
imprimir o caractere ‘#’ h-2 vezes
imprimir o caractere ‘#’ h-2 vezes
imprimir o caractere ‘#’ h vezes
imprimir o caractere ‘#’ h vezes
imprimir o caractere ‘#’ h-2 vezes
imprimir o caractere ‘#’ h-2 vezes
}
Decompondo ainda mais: Imprimir o caractere ‘#’ x vezes
Que tal outra função chamada parede ?
void casa (int h)
{
parede(h-2)
parede(h-2)
parede(h)
parede(h)
parede(h-2)
parede(h-2)
}
Parede
1 void parede(int altura)
2 {
3 int i;
4 for(i=0; i< altura; ++i)
5 {
6 printf("%c",Q);
7 }
8 printf("\n");
9 }
Juntando tudo
Exercícios (livro 9.6)
Os parâmetros são passados por valor
void casa (int h)
{
parede(h-2)
parede(h-2)
parede(h)
parede(h)
parede(h-2)
parede(h-2)
}
...
casa(6);
casa(15);
casa(3);
casa(20);
...
Entendendo o fluxo e a passagem de parâmetro
#include<stdio.h>��int imprimir_varios(int quantidade)�{� while (quantidade)� {� printf("Adoro programar\n");� --quantidade;� }� printf("O valor de quantidade é: %d\n",quantidade);�}��int main()�{� int x;� scanf("%d",&x);� imprimir_varios(x);� printf("O valor de X é: %d\n",x);� return 0;�}
Retornando valores
Escreva uma função que recebe dois números como parâmetros e retorna o dobro do maior dos números recebidos
Função maior de 2 (livro 9.4)
Escreva uma função que recebe dois números inteiros e retorna o maior dentre eles.
Função maior de 3 (livro 9.5)
Escreva uma função que recebe 3 números inteiros e retorna o maior dentre eles.
Reaproveite a função “maior de 2”
Função maior de 3 (livro 9.5)
Vamos fazer juntos: área do círculo (livro 9.6)
Faça uma função que receba o raio de um círculo e retorne a sua área.
A área do círculo é dada por: 𝜋 𝑟2.
Área do círculo: código
Huxley 32
Faça usando uma função
Fazendo juntos: Huxley 802
Agora é com vocês (livro 9.9)