Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de...
Transcript of Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de...
![Page 1: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/1.jpg)
Modulo 6 : Funções
Escopo de Variáveis: Globais x Locais
Aura - Erick
[email protected], [email protected]
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323
![Page 2: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/2.jpg)
Roteiro
2
� Funções� Escopo de Variáveis
� Variáveis Globais x Variáveis Locais
� Recursividade
![Page 3: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/3.jpg)
Motivação
� Trechos de código podem ser repetir ao longo de um programa
� Reuso de código
![Page 4: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/4.jpg)
Exemplo 1
main() {float A,B,C;scanf("%f %f",&A, &B);C = (A * B)/2;printf("%f \n", C);A = A/2;B = B/2;C = (A * B)/2;printf("%f \n", C);system("pause");
}Trecho se
repete 2 vezes
![Page 5: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/5.jpg)
Exemplo 2
1. Leia vetor um vetor A de 10 posições de inteiros
2.2. Ordene o vetor AOrdene o vetor A
3. Leia um vetor B de 10 posições de inteiros
4.4. Ordene o vetor BOrdene o vetor B
5. Multiplique o vetor A pelo vetor B, e coloque o resultado num vetor C
6.6. Ordene o vetor COrdene o vetor C
Operação de ordenação do
vetor é repetida 3 vezes
![Page 6: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/6.jpg)
Problemas desta “repetição”
� Programa muito grande, porque tem várias “partes repetidas”
� Erros ficam difíceis de corrigir (e se eu esquecer de corrigir o erro em uma das N repetições daquele trecho de código?)
� Pequenas mudanças precisam ser refeitas em todos os trechos!
![Page 7: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/7.jpg)
Solução: subprogramação
� Definir o trecho de código que se repete como uma “função” que é chamada no programa
� A função é definida uma única vez, e chamada várias vezes dentro do programa
![Page 8: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/8.jpg)
Voltando ao Exemplo 1#include <stdio.h>
float calculaC(float A,float B) {float C;C = (A * B)/2;printf("%f \n", C);return C;
}
main() {float A,B,C;scanf("%f %f", &A, &B);C = calculaC(A,B);A = A/2;B = B/2;C = calculaC(A,B);system("pause");
}
Definição da função
Chamada da função
Chamada da função
![Page 9: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/9.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 10: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/10.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 11: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/11.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 12: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/12.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 13: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/13.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 14: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/14.jpg)
Fluxo de Execução
main() {
...
A;
C;
}
A() {
...B;}
C() {
...}
B() {
...}
![Page 15: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/15.jpg)
main()
� O main() também é uma função. � É a primeira função a ser executada num programa em
C.� A partir dela outras funções podem ser chamadas
![Page 16: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/16.jpg)
Elementos de uma função
� Declaração� Variáveis� Código
� Retorno
![Page 17: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/17.jpg)
Declaração de Funções
tipoRetorno nomeFuncao (tipo parametro; tipo parametro, ..., tipo parametro) {
variáveis locais código[retorno]}
float calculaC (float A, float B) {float C;C = (A * B)/2;printf("%f \n", C);return C;
}
![Page 18: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/18.jpg)
Variáveis
� Podem ser locais ou globais
� Variáveis locais� Declaradas dentro de uma função� São visíveis somente dentro da função onde foram
declaradas� Passam a existir no início da execução da função� São destruídas ao término da execução da função
� Variáveis globais� Declaradas fora de todas as funções (inclusive do
main()!)� São visíveis por TODAS as funções do programa
![Page 19: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/19.jpg)
Uso de Variáveis Globais x Variáveis Locais
� Cuidado com variáveis globais� Dificultam o entendimento do programa� Dificultam a correção de erros no programa
� Se a variável pode ser modificada por qualquer função do programa, encontrar um erro envolvendo o valor desta variável pode ser muito complexo
� Recomendação� Sempre que possível, usar variáveis LOCAIS
![Page 20: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/20.jpg)
Variáveis#include <stdio.h>float X;
float calculaC(float D,float E) {float F;F = (D * E)/2;printf("%f \n", F);return F;
}
main() {float A,B,C;scanf("%f %f",&A, &B);C = calculaC(A,B);A = A/2;B = B/2;C = calculaC(A,B);X = A;system("pause");
}
Variável Local
Variáveis Locais
Variável Global
Parâmetros da Função
![Page 21: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/21.jpg)
Escopo de Variáveis#include <stdio.h>float X;
float calculaC(float D, float E) {float F;F = (D * E)/2;printf("%f \n", F);return F;
}
main() {float A,B,C;scanf("%f %f",&A, &B);C = calculaC(A,B);A = A/2;B = B/2;C = calculaC(A,B);X = A;system("pause");
}
A B C
D E F
X
![Page 22: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/22.jpg)
Parâmetros
� Quando uma função é chamada, é necessário fornecer um valor para cada um de seus parâmetros
� Isso por ser feito informando o valor diretamente� C = calculaC(1,2);
� ou; Usando o valor de uma variável� C = calculaC(A,B);
![Page 23: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/23.jpg)
Passagem de Parâmetro#include <stdio.h>float X;
float calculaC(float D,float E) {float F;F = (D * E)/2;printf("%f \n", F);return F;
}
main() {float A,B,C;scanf("%f %f",&A, &B);C = calculaC(A,B);A = A/2;B = B/2;C = calculaC(A,B);X = A;system("pause");
}
1
A
2
B C
D E F
X
![Page 24: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/24.jpg)
Passagem de Parâmetro#include <stdio.h>float X;
float calculaC(float D, float E) {float F;F = (D * E)/2;printf("%f \n", F);return F;
}
main() {float A,B,C;scanf("%f %f",&A, &B);C = calculaC(A, B);A = A/2;B = B/2;C = calculaC(A, B);X = A;system("pause");
}
1
A
2
B C
1
D
2
E F
X
![Page 25: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/25.jpg)
Tipos de passagem de Parâmetro
� Por valor: o valor da variável na chamada é copiado para a variável da função. Alterações não são refletidas na variável original
� Por referência: é como se o mesmo “escaninho”fosse usado. Alterações são refletidas na variável original
![Page 26: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/26.jpg)
Passagem de Parâmetro por Valor#include <stdio.h>float X;
float calculaC(float D, float E) {float F;F = (D * E)/2;printf("%f\n", F);return F;
}
main() {float A,B,C;scanf("%f %f",&A, &B);C = calculaC(A,B);A = A/2;B = B/2;C = calculaC(A,B);X = A;system("pause");
}
1
A
2
B C
1
D
2
E F
X
![Page 27: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/27.jpg)
Passagem de Parâmetro por Referência#include <stdio.h>
/* troca o conteúdo de 2 variáveis inteirasrecebe i, j; devolve i, j com valores trocados */
void troca(int *i, int *j) {int aux;aux = *i;*i = *j;*j = aux;
}
void main () {int A,B; scanf("%d %d", &A, &B);printf("%d %d \n", A, B);troca(&A, &B);printf("%d %d \n", A ,B);A = A + 2;troca(&A, &B);printf("%d %d\n", A, B);system("pause");
}
1
A
2
B
i j aux
![Page 28: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/28.jpg)
Retorno das funções
� Função que retorna um valor deve usar returnreturn
� Assim que o comando return é executado, a função termina
� O valor retornado deve ser do mesmo tipo declarado para a função
� Função que não retorna valor deve ser declarada como tipo voidvoid
� Quando não se especifica o tipo de retorno de uma função, o compilador assume que o tipo de retorno éintint
![Page 29: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/29.jpg)
Exemplo – retorno float
floatfloat calculaC(float D, float E) {float F;F = (D * E) /2;printf("%f \n", F);returnreturn F;
}
![Page 30: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/30.jpg)
Exemplo – retorno void
void imprimeMenu() {printf("Escolha uma opcao \n");printf("1 - Somar“);printf(“2 - Subtrair“);printf(“3 - Sair do Programa“);
}
Neste caso, o returnreturn não é
usado
![Page 31: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/31.jpg)
Chamada de função
� Se a função retorna um valor, pode-se atribuir seu resultado a uma variável
C = calculaC(A,B);
� Se a função não retorna um valor (é void), não se pode atribuir seu resultado a uma variável
imprimeMenu();
![Page 32: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/32.jpg)
Dica para onde se usar textos na tela
� Como limpar a tela?
� A tela de comando tem 25 linhas por 80 colunas� Cada compilador C tem uma função específica para
limpar a tela (não é padrão). Para evitar problemas de compatibilidade entre compiladores, o modo mais seguro é usar um for dentro de outro:
for ( i = 1; i < 26 ; i++ ) {for ( j = 1 ; j < 81 ; j++ )
printf(" ");printf(“ \n ");}
![Page 33: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/33.jpg)
Exercícios
� Fazer uma nova solução sua para cada um dos exercícios da aula, pois existem diversas formas de se chegar ao mesmo resultado em programação!
![Page 34: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/34.jpg)
Recursividade
Uma função pode chamar a si própria.
Uma função que faz assim é chamada função recursiva.
Há várias operações matemáticas recursivas, um exemplo bem conhecido éo fatorial.
![Page 35: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/35.jpg)
Fatorial de um número n é definido como o produto de todos os números naturais (não nulos) menores ou iguais a n
Por exemplo, 5! (lê-se "cinco fatorial") é igual a 5 x 4 x 3 x 2 x 1.
Por convenção 0! = 1.
Uma maneira de definir o algoritmo de fatorial é:
n! = 1, se n = 0 ou n = 1n (n – 1)! se n =≥ 2
E a implementação correspondente seria:
Cálculo do fatorial de um número,
![Page 36: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/36.jpg)
#include <stdio.h>#include <stdlib.h>
int fat(int n){
if (n) return n * fat(n-1);
else return 1;}
int main(){
int n;printf("\n \n Digite um valor para n: ");scanf("%d", &n);printf("\n O fatorial de %d e' %d", n, fat(n) );return 0;
}
n ser verdade énão ser Zero!!
![Page 37: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/37.jpg)
Usando recursividade de funções calcule as seqüências de Fibonacci , F(n), e de Lucas , U(n) .
Exercícios
O matemático Leonardo Pisa, conhecido como Fibonacci, propôs no século XIII, a seqüência numérica abaixo: (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...)
Essa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os dois anteriores.
Veja: 1+1=2, 2+1=3, 3+2=5 e assim por diante.
A seqüência de Fibonacci tem aplicações na análise de mercados financeiros, na ciência da computação e na teoria dos jogos. Também aparece em configurações biológicas, como, por exemplo, na disposição dos galhos das árvores ou das folhas em uma haste, no arranjo do cone da alcachofra, do abacaxi, ou no crescimento da samambaia.
![Page 38: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/38.jpg)
Uma generalização da seqüência de Fibonacci são as seqüências de Lucas, U(n) .
U(0) = 0U(1) = 1U(n+2) = P U(n+1) − Q U(n)
onde P e Q são constantes.
Por exemplo: a seqüência normal de Fibonacci é o caso especial de P = 1 e Q = -1.
Outra seqüência de Lucas pode começa com V(0) = 2, V(1) = P.
Essas sequências têm aplicações na Teoria de Números e na prova que um dado número é primo.
![Page 39: Escopo de Variáveis: Globais x Locaisaconci/PCV-modulo6-2015-2.pdfEssa seqüência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os](https://reader033.fdocument.pub/reader033/viewer/2022053115/6090a29666b860428b7a9d28/html5/thumbnails/39.jpg)
Referências
� https://pt.wikibooks.org/wiki/Programar_em_C� https://pt.wikibooks.org/wiki/Programar_em_C/Fun%C3%A7%C3%B5es
� https://pt.wikipedia.org/wiki/Sistema_octalhttps://www.youtube.com/watch?v=Y19q6rgM9eohttp://www.inf.pucrs.br/~pinho/LaproI/Funcoes/AulaDeFuncoes.h
tm