Baixe o app para aproveitar ainda mais
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
Compartilhar