Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho [email protected].

22
Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho [email protected]

Transcript of Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho [email protected].

Page 1: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Linguaguem de Programação II

Aula 6Funções

Prof. Luiz José Hoffmann Filho

[email protected]

Page 2: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

O Que é uma função?

Funções são os blocos de contrução de C e o local onde toda a atividade do programa ocorre. Elas são uma das características mais importantes do C.

Page 3: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Forma Geral de uma função

<tipo> nome_da_função(lista de parâmetros){<Corpo da função>}Declaração do parâmetros:(<tipo> <nomevar1>, …, <tipo><nomevarN)Corpo da função:- Declaração de variáveis locais.- Incluisão de comandos (if else, while, for …)

Page 4: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Argumentos de funções Se uma função usa argumentos, ela deve declarar

variáveis que aceitem os valores dos argumentos. Essas variáveis são chamadas de parâmetros formais da função. Elas se comportam como quaisquer outras variáveis locais dentro das função e são criadas na entrada e destruídas na saída. Exemplo:

is_in(char *s, char c) {while(*s) {if(*s == c) return 1;else s++;}return 0;}

Page 5: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamada por valorEsse método copia o valor de

uma argumento no parâmetro fomal da sub-rotina. Assim, alterações feitas nos parâmetros das sub-rotina não têm nenhum efeito nas variáveis usadas para chamá-la.

Page 6: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamada por valorExemplo: #include <stdio.h>int sqr( int x) {x =x *x;return x;}int main () {int t = 10;printf(“%d %d”, sqr(t), t);return 0;}

Page 7: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamada por referênciaNesse método, o endereço de um

argumento é copiado no parâmetro. Dentro da sub-rotina, o endereço é usado para acessar o argumento real utilizado na chamada. Isso significa que alterações feitas no parâmetro afetam a veriável usada para chamar a rotina.

Page 8: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamada por referência Exemplo:#include <stdio.h>void swap(int *x, int *y) {int temp;temp = *x;*x = *y;*y = temp;}int main() {int i, j;i = 10;j = 20;swap(&I, &j);printf(“%d %d”, i, j);return 0;}

Page 9: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamando funções com Matrizes A passagem de matrizes, como argumentos,

para funções, é uma exceção à conveção de passagem de parâmetros com chamada por valor.

Quando uma matriz é usada um argumento para um função, apenas o endereço da matriz é passado para a função.

Isso significa que a declaração de parâmetros deve ser de um tipo ponteiro compatível.

Existem 3 maneiras de declarar um parâmetro que receberá um ponteiro para matriz.

Page 10: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo : Primeira forma#include <stdio.h>void display( int num[10]) {int i;for(i=0;i<10;i++)printf(“%d”, num[i]);}int main() {int t[10], i;for(i=0; i<10;i++) {t[i] = i;}display(t);return 0;}

Page 11: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo: Segunda Forma#include <stdio.h>void display( int num[]) {int i;for(i=0;i<10;i++)printf(“%d”, num[i]);}int main() {int t[10], i;for(i=0; i<10;i++) {t[i] = i;}display(t);return 0;}

Declarado com tamanho desconhecido

Page 12: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo: Terceira Forma#include <stdio.h>void display( int *num) {int i;for(i=0;i<10;i++)printf(“%d”, num[i]);}int main() {int t[10], i;for(i=0; i<10;i++) {t[i] = i;}display(t);return 0;}

Com ponteiro, e poderá utilizar o [] sem

problemas.

Page 13: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Chamando Funções com MatrizesImportante:

◦Uma matriz é usada como um argumento para uma função, seu endereço é passado para a função. Isso é uma exceção à convernção de C no que diz respeito a passar parâmetros. Nesse caso, o código dentro da função está operando com, e pontecialmente alterando, o conteúdo real da matriz usada para chamar a função

Page 14: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

argv e argc – Argumentos para main Geralemente, você passa informações para a função

main() via argumentos da linha de comando. Um argumento da linha de comando é a informação que segue o nome do programa na linha de comando do sistema operacional.

O parâmentro argc contém o número de argumentos da linha de comando e é um inteiro. Ele é sempre pelo menos 1 por que é o nome do programa é qualificado como primeiro argumento.

O parâmetro argv é um ponteiro para uma vetor de ponteiros para caractere. Cada elemento nese vetor aponta para um argumento da linha de comando. Todos os argumentos da linha de comando são strings – quaisquer números terão de ser convertidos pelo programa no formato interno apropriado.

Page 15: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo:#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) {if(argc !=2) {printf(“Você esqueceu de digitar seu nome”);return 1;}printf(“Ola %s”, argv[1]);return 0;}

Page 16: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

ImportanteSe tiver mais de um argumento

de ser utilizado o “espaço” para separa-los. Exemplo:◦Run Sport, run - > são 3 argumentos◦Herb,rick,fred -> é apenas 1

argumento.

Page 17: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Comando returnO comando return tem dois

importantes usos:◦Ele provoca uma saída imediata da

função que o contém. Isto é, faz com que a execução do programa retorne ao código chamador.

◦Ele pode ser usado para devolver um valor.

Page 18: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo 1: finalizado um programaint find(char *s1, char *s2) {int t;char *p, *p2;for(t=0;s1[t];t++){p = &s1[t];p2 = s2;while(*p2 && *p2==*p) {p++;p2++;}if(!*p2) return t;}return -1;}

Page 19: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exemplo 2: Retornando valores#include <stdio.h>int mul(int a, int b) {return a*b;}int main() {int x, y, z;x = 10;y = 20;x = mul(x, y);printf(“%d”, mul(x, y));mul(x, y);return;}

Page 20: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Protótipo de funções É a declaração da função no inicio do arquivo.

Exemplo:#include <stdio.h>void sqrt_int(int *i);int main(){int x;x = 10;sqr_it(&x);return;}void sqr_it(int *i) {*i = *i * *i;}

Page 21: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exercícios Escreva uma funçã que recebe as 3 notas de um

aluno por parâmetro e uma letra. Se a letra for A o procedimento calcula a média aritmética das notas do aluno, se for P, a sua média ponderada (pesos: 5, 3 e 2) e se for H, a sua média harmônica. A média calculada também deve retornar por parâmetro.

Faça uma função que recebe por parâmetro um valor inteiro e positivo e retorna o valor lógico Verdadeiro caso o valor seja primo e Falso em caso contrário.

Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias.

Page 22: Linguaguem de Programação II Aula 6 Funções Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com.

Exercícios Faça uma função que recebe um vetor X(15) de

inteiros , por parâmetro, e retorna a quantidade de valores pares em X.

Faça uma função que recebe um vetor X(20) de reais , por parâmetro, e retorna a soma dos elementos de X;

Faça uma função que receba, por parâmetro, uma matriz A(7,7)e retorne o menor valor dos elementos abaixo da diagonal secundária.

Faça uma função que receba, por parâmetro, uma matriz A(8,8) e retorne o menor valor dos elementos acima da diagonal secundária.