Baixe o app para aproveitar ainda mais
Prévia do material em texto
FUNÇÕES PARTE II Profa. Roberta Barbosa Oliveira GES009 1° Semestre - 2018 Curso de Bacharelado em Estatística DIVISÃO DO PROJETO EM ARQUIVOS ● Um projeto quando se torna muito extenso, pode ser dividido em vários arquivos com o objetivo de fragmentar o código: - Novos arquivos .c podem ser criados e cada novo arquivo pode conter uma ou mais funções - Neste caso, o arquivo principal do projeto (main.c) pode conter apenas a função main( ) - A “ligação” entre o arquivo main.c e outro arquivo .c é por meio de um arquivo cabeçalho ou header (.h) DIVISÃO DO PROJETO EM ARQUIVOS ● Adicionar arquivo ao projeto em edição (Code::Blocks): ● File -> New -> File... -> opção “C/C++ header” para arquivo cabeçalho .h ou “C/C++ source” para função .c ● Em ambos os casos, a caixa “Add file to active Project” deve ser estar selecionada ARQUIVO CABEÇALHO ● Intermediador entre o programa e as funções ● A associação é feita através do comando #include: – Biblioteca padrão da linguagem C: #include <nome.h> – Bibliotecas criadas no projeto: #include “nome.h” (mesmo diretório de main.c) #include “caminho\nome.h” (diretório diferente - em linux, usa-se barra normal(/) ao invés da barra invertida ● No arquivo cabeçalho, são colocados os protótipos das funções criadas, que serão detalhadas na função correspondente: – O arquivo cabeçalho .h deve ter o mesmo nome da função .c ARQUIVO CABEÇALHO ● Exemplo: – par_impar.h: declaração do protótipo de uma função que será usada no programa principal (main.c) Se mais de um .c incluir par_impar.h, estas linhas definindo a constante PAR_IMPAR_H_INCLUDED (“guard word”) impedirão que ocorra erro (quando a função Par_Impar for declarada 2 vezes). ARQUIVO CABEÇALHO ● Exemplo: – par_impar.c: função associada a par_impar.h, que contém a implementação da função Par_Impar ( ) ARQUIVO CABEÇALHO ● Exemplo: – main.c: para usar a função Par_Impar ( ) FUNÇÕES: VETORES E MATRIZES ● A linguagem C não permite que vetores e matrizes sejam passados na íntegra como parâmetros para uma função: – Deve se passar apenas o endereço da posição inicial do vetor ou da matriz – Esse endereço é obtido pela função utilizando-se o nome do vetor (ou da matriz) sem o índice entre colchetes ● Vetores e matrizes são passados sempre por referência – Evita-se cópia desnecessária de grandes quantidades de dados na RAM (que pode causar diminuição de desempenho na execução do programa) VETOR COMO PARÂMETRO DE FUNÇÃO ● A função pode ser declarada de diferentes maneiras, todas equivalentes: void nome_funcao (int v[]); void nome_funcao (int *v); void nome_funcao (int v[], int n); void nome_funcao (int *v, int n); ● Pode ser necessário enviar à função um parâmetro inteiro extra, informando à mesma o tamanho do vetor VETOR COMO PARÂMETRO DE FUNÇÃO ● Exemplo: void mostrar (int v[], int n) { for (int i=0;i<n;i++) printf(“%d\n”, v[i]); } int main() { int vet[] = {1,2,3,4,5}; mostrar(vet,5); return 0; } VETOR COMO PARÂMETRO DE FUNÇÃO ● Exemplo: int *v poderia ter sido usado ao invés de int v[] Quando o nome de um vetor for usado sem apresentar colchetes contendo um índice: está sendo usado o endereço de memória ocupada pelo posição 0 do vetor void mostrar (int v[], int n) { for (int i=0;i<n;i++) printf(“%d\n”, v[i]); } int main() { int vet[] = {1,2,3,4,5}; mostrar(vet,5); return 0; } VETOR COMO PARÂMETRO DE FUNÇÃO ● Exercício: Crie uma função que preencha o vetor notas, que deve ser criado na função principal e passado como parâmetro da função. int main() { float notas[5]; for (int i=0;i<5;i++) { printf(“Digite a nota do aluno %d:\n”,i+1); scanf(“%f”, ¬as[i]); } return 0; } VETOR COMO PARÂMETRO DE FUNÇÃO void preecherVetor (float v[]) { for (int i=0;i<5;i++) { printf(“Digite a nota do aluno %d:\n”,i+1); scanf(“%f”, &v[i]); } } int main() { float notas[5]; preecherVetor(notas); return 0; } MATRIZ COMO PARÂMETRO DE FUNÇÃO ● Para matrizes é necessário especificar o tamanho da segunda dimensão: void nome_funcao(int m[][2]); void nome_funcao(int m[][2], int n); ● Motivo: compilador não precisa saber quantos elementos o vetor possui, mas o tamanho de cada elemento: – Vetor 1D: cada elemento possui tamanho 1 – Vetor 2D (matriz): array de arrays – quantos elementos tem cada um destes arrays? MATRIZ COMO PARÂMETRO DE FUNÇÃO ● Exemplo: void mostrar (int m[][2], int n) { for (int i=0;i<n;i++) { for (int j=0;j<2;j++) printf(“%d ”, m[i][j]); printf(“\n”); } } int main() { int mat[3][2] = {{1,2},{3,4},{5,6}}; mostrar(mat,3); return 0; } MATRIZ COMO PARÂMETRO DE FUNÇÃO ● Exemplo: Quando o nome de uma matriz for usado sem apresentar colchetes contendo os índices: está sendo usado o endereço de memória ocupada pelo posição 0x0 da matriz void mostrar (int m[][2], int n) { for (int i=0;i<n;i++) { for (int j=0;j<2;j++) printf(“%d ”, m[i][j]); printf(“\n”); } } int main() { int mat[3][2] = {{1,2},{3,4},{5,6}}; mostrar(mat,3); return 0; } MATRIZ COMO PARÂMETRO DE FUNÇÃO ● Exercício: Crie uma função que preencha a matriz notas, que deve ser criada na função principal e passada como parâmetro da função. int main() { float notas[5][2]; for (int i=0;i<5;i++) { printf(“Digite as notas do aluno %d:\n”,i+1); for (int j=0;j<2;i++) scanf(“%f”, ¬as[i][j]); printf(“\n”); } return 0; } MATRIZ COMO PARÂMETRO DE FUNÇÃO void preecherMatriz (float m[][2]) { for (int i=0;i<5;i++) { printf(“Digite as notas do aluno %d:\n”,i+1); for (int j=0;j<2;j++) scanf(“%f”, &m[i][j]); printf(“\n”); } } int main() { float notas[5][2]; preecherMatriz(notas); return 0; } EXERCÍCIOS 1) Faça uma função que receba como parâmetro um vetor V com cinco número reais e retorne esses números ordenados de forma crescente. 2) Faça uma função que receba como parâmetro uma matriz M(5,5) e retorne a soma de seus elementos. 3) Crie uma uma função que receba como parâmetro uma matriz M(6,6) e retorne o menor elemento de uma diagonal secundária. 4) Crie uma função que receba uma matriz 3x5 e um vetor com 3 posições, que retorná o somatório dos números de cada linha da matriz. A seguir, crie um programa que leia as entradas da matriz, atribua zero em todas as posições do vetor, chame a função e mostre o vetor resultante. BIBLIOGRAFIA UTILIZADA ● ASCENCIO, A.F.G.; CAMPOS, E.A.V. Fundamentos da programação de computadores. 3. ed. São Paulo: Pearson Prentice Hall, 2006. ● PIMENTEL, Renato. Notas de aula de algoritmos e programação de computadores. ● REIS, Rachel. Notas de aula de Programação. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20
Compartilhar