Buscar

Aula14_Funcao

Prévia do material em texto

IF62A – Técnicas de Programação 
RELEMBRANDO: Aula 13: Função 
 
Prof.: Alexandre Rossi Paschoal 
 
Turmas: ENCOM-C21/22 
Aula 13 
Função 
Até agora, nossos programas 
Função main (int main) 
Instruções 
Exemplo 
#include <stdio.h> 
 
main() 
{ 
 int k, n; 
 float h = 0; 
 scanf("%d", &n); 
 for (k = n; k >= 1; k = 
k - 1) h = h + 1.0 / k; 
 printf("%8.4f\n", h); 
} 
Função main (int main) 
Instruções 
Função 
•  OBS 1: TODA função tem um nome 
–  Exemplo: função main ;-) 
 
 
•  OBS 2: Toda função tem um tipo (void é um tipo). 
 
 
•  OBS 3: Apenas a função void não retorna valor, por 
quê ? (difícil hein ;-) 
Função - Sintaxe 
tipo_dado nome_funcao (argumentos) 
{ 
 intruções 
} 
Exemplo: 
 int soma (int x, int y) return (x+y); 
Exemplo - Execução 
Função main 
Função Troca 
Comandos 
Call Troca 
Comandos Comandos 
Função main 
Função soma 
Comandos 
Call soma 
Comandos 
Call soma 
Comandos 
Exemplo - Execução 
Função main 
Função soma 
Comandos 
Call soma 
Comandos 
Call soma 
Comandos 
Exemplo - Execução 
Função main 
Função soma 
Comandos 
Call soma 
Comandos 
Call soma 
Comandos 
Executa 
Instruções 
Exemplo - Execução 
Função main 
Função soma 
Comandos 
Call soma 
Comandos 
Call soma 
Comandos Retorna 
(void não 
Retorna 
nada) 
OBS 
•  Perceba que: 
–  Função pode: 
•  Receber (Passagem de parâmetros - 
Argumentos) 
•  e retornar valores. 
 
•  Conforme comentado: 
 
–  Todos os tipos, tirando o void, retorna um valor. 
Função - Argumentos 
•  Quando é feito a chamada de uma função 
 
•  Podemos passar argumentos para a função 
 
–  Argumentos = lista de “valores” 
 
•  Lista pode ser vazia 
•  Lista aparece entre parênteses após o nome da 
função 
•  Ex. 
 
 int Soma (int x, int y) { 
 
Função - Exemplo 
int MDC (int a, int b) { 
 int aux; 
 if (a < b) { 
 aux = a; 
 a = b; 
 b = aux; 
 } 
 while (b != 0) { 
 aux = b; 
 b = a % b; 
 a = aux; 
 } 
 return (a); 
} 
uma função C 
 para calcular o 
máximo divisor 
comum entre 
dois números 
 
15 
Passagem de Parâmetros 
void loop_count( int i ) { 
 printf( "Em loop_count, i = " ); 
 while( i < 10 ) 
 printf ( "%d ", i++); ==> i = 2 3 
4 5 6 7 8 9 
} 
int main( ) { 
 int i = 2; 
 loop_count( i ); 
 printf( "\nEm main, i = %d.\n", i ); 
==> i = 2. 
 return 0; 
} 
16 
Passagem de Parâmetro 
•  E se eu quiser alterar ele diretamente o 
parâmetro original fornecido? 
 
 
•  Passagem de parâmetro por referência!! 
 
 
•  Mas como?? 
17 
Passagem de Parâmetro - 
Referência 
•  É a 2a forma de passar parâmetro para uma 
sub-rotina (função) 
 
•  Neste, o endereço de um argumento é 
fornecido no parâmetro e não uma cópia de 
seu valor. 
 
•  Significa que qualquer alteração, muda o 
parâmetro inicialmente fornecido 
18 
Exemplo 
void swap(int x, int y) { 
 int temp; 
 temp = x; 
 x = y; 
 y = temp; 
 printf(“%d, %d\n”, x, y); 
} 
void swap(int x, int y); 
 
void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 printf(“%d, %d\n”, i, j); 
 swap(&i, &j); 
 printf(“%d, %d\n”, i, j); 
} 
19 
Exemplo 
void swap(int *x, int *y) { 
 int temp; 
 temp = *x; 
 *x = *y; 
 *y = temp; 
} 
void swap(int *x, int *y); 
 
void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 printf(“%d, %d\n”, i, j); 
 swap(&i, &j); 
 printf(“%d, %d\n”, i, j); 
} 
20 
Exemplo – Passagem por Referência 
void swap(int *x, int *y) { 
 int temp; 
 temp = *x; 
 *x = *y; 
 *y = temp; 
} 
void swap(int *x, int *y); 
 
Void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 swap(&i, &j); 
} 
21 
Protótipo 
void swap(int *x, int *y) { 
 int temp; 
 temp = *x; 
 *x = *y; 
 *y = temp; 
} 
void swap(int *x, int *y); 
 
Void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 swap(&i, &j); 
} 
Protótipo da função 
22 
Escopo das variáveis: local 
void swap(int *x, int *y) { 
 int temp; 
 temp = *x; 
 *x = *y; 
 *y = temp; 
} 
void swap(int *x, int *y); 
 
Void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 swap(&i, &j); 
} 
23 
Função swap não retorna valor 
algum 
void swap(int *x, int *y) { 
 int temp; 
 temp = *x; 
 *x = *y; 
 *y = temp; 
} 
void swap(int *x, int *y); 
 
Void main(void) 
{ 
 int i, j; 
 i = 10; j = 20; 
 swap(&i, &j); 
} 
Função – Retorna Valor 
int MDC (int a, int b) { 
 int aux; 
 if (a < b) { 
 aux = a; 
 a = b; 
 b = aux; 
 } 
 while (b != 0) { 
 aux = b; 
 b = a % b; 
 a = aux; 
 } 
 return (a); 
} 
uma função C 
 para calcular o 
máximo divisor 
comum entre 
dois números 
 
Função recursiva 
•  Faça o fatorial recursivo ;-) 
 
•  Lembram? 
Função recursiva 
#include <stdio.h> 
long int fatorial(long int numero); 
main( ){ 
 long int num; 
 printf("Entre com o numero de elementos 
da sequência: "); 
 scanf("%ld", &num); 
 printf("O fatorial de %ld e %ld", num, 
fatorial(num)); 
} 
 
long int fatorial(long int numero){ 
 if(numero==0) 
 return 1; 
 else 
 return numero*fatorial(numero-1); 
} 
Passagem de matriz 
•  No caso de matriz passa-se o endereço e não 
uma cópia (para uma função). 
 
 
•  Três maneira equivalentes podem ser usada 
para passar uma matriz como parâmetro a 
uma função. 
Passagem de matriz 
•  Considere a matriz: int mat[50]; 
 
•  As 3 maneiras são: 
–  void func (int mat[50]); 
–  void func (int mat[]); 
–  void func (int *mat); 
Exemplo 
#include <stdio.h> 
void mostra (int num[]); 
main() { 
 int t[10], i; 
 for (i=0; i<10; i++) t[i] = i; 
 mostra(t) 
} 
void mostra (int num[]) { 
 int i; 
 for (i=0; i<10; i++) printf(“%d”, num[i]); 
} 
Exemplo – usando ponteiro ;-) 
#include <stdio.h> 
void mostra (int *num); 
main() { 
 int t[10], i; 
 for (i=0; i<10; i++) t[i] = i; 
 mostra(t) 
} 
void mostra (int *num) { 
 int i; 
 for (i=0; i<10; i++) printf(“%d”, *(num+i) ); 
} 
31 
Exercício 
•  1-) Faça as 4 operações básicas, com 
inteiros, usando agora função. 
 
•  2-) Faça uma função que dado um número, 
calcule o cubo dele e retorne o valor 
 
•  3-) Dado um número inteiro, faça um 
programa com uma função que retorna 1 se 
for par e 0 caso contrário. 
32 
Exercícios 
•  4-)(a) Construa uma função encaixa que dados dois inteiros positivos a e b verifica 
se b corresponde aos últimos dígitos de a. 
•  Ex.: 
•  a b 
•  567890 890 => encaixa 
•  1243 1243 => encaixa 
•  2457 245 => não encaixa 
•  457 2457 => não encaixa 
 
•  (b) Usando a função do item anterior, faça um programa que lê dois inteiros 
positivos a e b e verifica se o menor deles é segmento do outro. 
•  Exemplo: 
•  a b 
•  567890 678 => b é segmento de a 
•  1243 2212435 => a é segmento de b 
•  235 236 => um não é segmento do outro 
 
33 
Exercício 
•  5-) Um conjunto pode ser representado por 
um vetor da seguinte forma: V[0] é o tamanho 
do conjunto; V[1], V[2], etc. são os elementos 
do conjunto (sem repetições). 
 
•  Faça uma função chamada intersecção que 
dados dois conjuntos de números inteiros A e 
B, constrói um terceiro conjunto C que é a 
intersecção de A e B. Lembre-se de que em 
C[0] a sua função deve colocar o tamanho da 
intersecção. 
34 
Exercício 
•  Faça uma função União do exercício 5 
 
 
•  Idem ao anterior, Fazer União e mostrar de 
forma ordenada os números 
35 
Exercícios 
•  6. Faça um programa que contenha um menu 
contendo as seguintes opções 
 
•  (a) Escreva uma função que recebe uma matriz real 
Amxn e determina a sua transposta (Se B é a 
matriz transposta de A então aij = bji). 
 
•  (b) Multiplicação de número real por matriz 
 
•  (c) Dado duas matrizes, a função retorna se elas 
são iguais ou não 
 
36 
Exercício 
•  7-) Faça um programaque tenha as seguintes funções: 
•  LerMatriz – Tamanho Nx2 (usuário informa o N). 
•  OrdenaMatriz – Ordernar pela coluna 0 (zero). 
•  MostraMatriz – Em formato Nx2 
•  Agrupamento – Mostra qtde, quais grupos, elementos e tamanho 
máximo coordenada. 
•  ExcluirElem – Exclui elemento de qq posição da matriz 
•  InserirElem – Insere elemento em qq posição da Matriz 
 
•  Os dados de entradas serão coordenadas, exemplo: 
•  1 1000 
•  99 55600 
 
Créditos - Aula 
•  Prof. Alexandre Rossi Paschoal 
•  Profa. Silvana Maria Affonso de Lara 
•  Prof. João Carlos Giacomin

Continue navegando