Prévia do material em texto
<p>09/05/2017</p><p>1</p><p>Algoritmos e Estruturas de</p><p>Dados</p><p>Aula 2</p><p>Funções, Vetores e Registros</p><p>Profa. Gisele Alves Santana</p><p>Mestrado em Engenharia Elétrica e</p><p>Doutoranda em Engenharia Elétrica</p><p>Funções</p><p>� Passagem por referência</p><p>� Passagem por valor</p><p>Vetores</p><p>Matrizes</p><p>Registros (struct)</p><p>Na aula de hoje...</p><p>Conjunto de instruções que realizam uma tarefa</p><p>particular.</p><p>São usadas para criar pequenos pedaços de códigos</p><p>separados do programa principal.</p><p>Principal finalidade: impedir que o programador</p><p>tenha que escrever o mesmo código repetidas</p><p>vezes.</p><p>Funções</p><p>Sintaxe</p><p>Exemplo</p><p>Funções</p><p><tipo> <nome>(<parâmetros>)</p><p>{</p><p><declarações locais>;</p><p><comandos>;</p><p>return</p><p>}</p><p>int quadrado (int a)</p><p>{</p><p>int quad;</p><p>quad = a*a;</p><p>return quad;</p><p>}</p><p>Chamando a função</p><p>� Escreve-se o nome da função seguido dos parâmetros</p><p>fornecidos (entre parênteses).</p><p>� Exemplos:</p><p>• quadrado (int x);</p><p>• soma ( );</p><p>Funções</p><p>09/05/2017</p><p>2</p><p>Exemplo</p><p>Funções</p><p>int soma ( ) //cabeçalho da função</p><p>{</p><p>int a, b, soma; //variáveis locais</p><p>printf (“Digite um numero: \n“);</p><p>scanf(“%d”, &a);</p><p>printf (“Digite um numero: \n“);</p><p>scanf(“%d”, &b);</p><p>soma = a + b;</p><p>printf(“\nSoma = %d“, soma);</p><p>}</p><p>int main () //programa principal</p><p>{</p><p>soma ( ); //chamando a função</p><p>}</p><p>Protótipos de Funções</p><p>Não se pode utilizar uma função sem antes declará-la.</p><p>O protótipo é uma forma de se escrever uma função depois do</p><p>programa principal.</p><p>Considerado como declaração de funções.</p><p>Sintaxe: int soma (int a, int b);</p><p>Funções</p><p>#include<iostream.h></p><p>int soma (); // protótipo da função</p><p>int main () {</p><p>soma ( ); //chamando a função</p><p>}</p><p>int soma ( ) { // definição da função</p><p>Comandos...</p><p>}</p><p>Comando return</p><p>� return;</p><p>� return expressão;</p><p>� return (expressão);</p><p>Exemplo:</p><p>Funções</p><p>int Quadrado (int a)</p><p>{</p><p>return a*a;</p><p>}</p><p>Parâmetros</p><p>Utilizados para transmitir informações para a função.</p><p>Uma função pode receber qualquer número de argumentos.</p><p>Existem funções que não recebem nenhum argumento.</p><p>Parâmetros são inseridos entre os parênteses após o nome da</p><p>função e separados por vírgulas.</p><p>Exemplo</p><p>� soma(int a, int b);</p><p>Funções</p><p>Passagem por Valor</p><p>Quando as variáveis são passadas por valor, a função</p><p>cria novas variáveis do mesmo tipo e copia nelas os</p><p>valores dos parâmetros.</p><p>As funções não têm acesso às variáveis da função</p><p>principal (int main).</p><p>Funções</p><p>Passagem por Valor</p><p>Funções</p><p>float celsius (float fahr); // protótipo</p><p>int main () {</p><p>float c, f;</p><p>printf(“Digite a temperatura em Fanrenheit: “);</p><p>scanf(“%f”, &f);</p><p>c = celsius ( f ); //chamando a função com a</p><p>passagem da variável f</p><p>printf(“\nTemperatura em celsius: %f”, c);</p><p>}</p><p>float celsius (float fahr) { //função</p><p>float c;</p><p>c = fahr *1.8+ 32;</p><p>return c; //retorna valor para o prog principal</p><p>}</p><p>09/05/2017</p><p>3</p><p>Passagem por Referência</p><p>Considere as instruções:</p><p>� int n;</p><p>� int & n1 = n;</p><p>Operador &n1 = n</p><p>� Indica que n1 é outro nome para n.</p><p>� O operador “&”faz referência ao endereço de memória</p><p>de uma variável.</p><p>� Uma referência não é uma cópia</p><p>da variável, mas a mesma variável</p><p>sob diferentes nomes.</p><p>Funções</p><p>São declaradas duas variáveis:</p><p>n e n1.</p><p>Esse programa possui passagem por referência?</p><p>Atividade</p><p>Representam um tipo de estrutura de dados.</p><p>São definidos como um conjunto finito e ordenado de elementos</p><p>homogêneos.</p><p>Um vetor é utilizado quando é necessário manter uma grande</p><p>quantidade de itens do mesmo tipo na memória e para que</p><p>esses itens sejam referenciados de uma maneira uniforme.</p><p>Índice: indica as posições dos elementos de um vetor.</p><p>Vetores</p><p>Declaração</p><p>Acesso aos elementos</p><p>Vetores</p><p>Inicialização</p><p>� Valores Fixos</p><p>• int vet[5] = { 7, 6, 9, 7,4};</p><p>Vetores</p><p>Valores Quaisquer</p><p>Teste de Mesa</p><p>Vetores</p><p>for (int i=0; i<5; i++)</p><p>{</p><p>printf(“Digite um valor: “);</p><p>scanf(“%d”, ¬as [ i ]);</p><p>}</p><p>09/05/2017</p><p>4</p><p>Impressão</p><p>Qualquer tipo de manipulação sempre é necessário que esta seja</p><p>realizada dentro de uma estrutura de repetição.</p><p>Um vetor possui várias posições e para acessar os elementos, é</p><p>necessário que seja implementado um</p><p>laço.</p><p>Vetores</p><p>for (int i=0; i<10; i++)</p><p>{</p><p>printf("\t %d ", notas[i]);</p><p>}</p><p>Passar um vetor para uma Função</p><p>Colocar apenas o par de colchetes vazio [ ] após o nome da</p><p>variável.</p><p>� Não importa se o vetor tem 1 ou 1 milhão de elementos.</p><p>� As funções em C apenas precisam saber qual o tipo da</p><p>variável e se é um vetor.</p><p>Sintaxe de uma função que recebe um vetor:</p><p>� int funcao( int numeros[ ] )</p><p>Chamada a uma função com vetor</p><p>como argumento:</p><p>• funcao(numeros);</p><p>Vetores</p><p>Exemplo – Tabuada do 3</p><p>Vetores</p><p>#include<iostream.h></p><p>#include<stdio.h></p><p>int main() {</p><p>int i;</p><p>int tabuada[11];</p><p>for (i=0; i<=10; i++) {</p><p>tabuada[i] = 3*i;</p><p>}</p><p>for (i=0; i<=10; i++) {</p><p>printf("%d \t", tabuada[i]);</p><p>}</p><p>system("PAUSE");</p><p>return 0;</p><p>}</p><p>Uma matriz é um conjunto de variáveis do mesmo tipo</p><p>e referenciadas por um único nome.</p><p>Uma matriz é um vetor multidimensional.</p><p>Cada elemento é diferenciado por meio de números</p><p>chamados de índices.</p><p>Matrizes</p><p>Declaração Acesso aos elementos</p><p>Valores Fixos</p><p>Matrizes</p><p>Inicialização</p><p>� Valores Quaisquer</p><p>Teste de Mesa</p><p>Matrizes</p><p>for(int i = 0; i < 2; i++) { // linha</p><p>for (int j = 0; j < 2; j++) { // coluna</p><p>printf("\nDigite o valor: ");</p><p>scanf(“%d”, &A [ i ] [ j ]);</p><p>} //coluna</p><p>}//linha</p><p>09/05/2017</p><p>5</p><p>Impressão</p><p>Para qualquer tipo de manipulação sempre é necessário que esta</p><p>esteja dentro de duas estruturas de repetição.</p><p>Matrizes</p><p>for(int i = 0; i < 3; i++) { // linha</p><p>for (int j = 0; j < 3; j++) { // coluna</p><p>printf(“%d“, A [ i ] [ j ] );</p><p>}</p><p>}</p><p>Passar uma matriz para uma Função</p><p>Importante:</p><p>� O primeiro par de colchetes pode sempre ir vazio, e os demais</p><p>preenchidos.</p><p>Sintaxe: matriz 3x3</p><p>� int Func_Matriz ( int matriz [ ][3] )</p><p>� Não precisa especificar o número de linhas que a matriz tem,</p><p>apenas o número de colunas.</p><p>� Para chamar a função:</p><p>• Func_Matriz(matriz);</p><p>Matrizes</p><p>Exemplo</p><p>Matrizes</p><p>#include<iostream.h></p><p>int main() {</p><p>int A[2][2];</p><p>int B[2][2]; int soma [2][2];</p><p>for (int i=0; i<2; i++) {</p><p>for (int j=0; j<2; j++) {</p><p>printf("\nDigite um numero: ");</p><p>scanf("%d", &A [i] [j]);</p><p>}</p><p>}</p><p>for (int i=0; i<2; i++) {</p><p>for (int j=0; j<2; j++) {</p><p>printf("\nDigite um numero: ");</p><p>scanf("%d", &B [i] [j]);</p><p>}</p><p>}</p><p>for (int i=0; i<2; i++) {</p><p>for (int j=0; j<2; j++) {</p><p>soma[i][j]= A[i][j]+B[i][j];</p><p>printf("%d \t", soma[i][j]);</p><p>} printf("\n");</p><p>}</p><p>system("PAUSE");</p><p>}</p><p>Variável cujo conteúdo é um endereço de memória.</p><p>Operador (&): endereço de memória de uma variável.</p><p>Declaração:</p><p>� int *pt;</p><p>Ponteiros</p><p>int x=5;</p><p>int *pt;</p><p>pt=&x;</p><p>O valor de “x” pode ser alterado através</p><p>do ponteiro “pt”</p><p>*pt=15; //altera o valor de “x” para 15.</p><p>Exemplo</p><p>Ponteiros</p><p>int main()</p><p>{</p><p>int a, *pont;</p><p>printf("\nDigite valor de a: ");</p><p>scanf("%d", &a);</p><p>pont=&a;</p><p>printf("\nValor de a = %d", a);</p><p>printf("\nEndereco de a = %d", &a);</p><p>printf("\nValor de pont = %d", *pont);</p><p>printf("\nEndereco de pont = %d", pont);</p><p>system("PAUSE");</p><p>return 0;</p><p>}</p><p>Atividade</p><p>Faça um programa que implemente que peça 5</p><p>números ao usuário e armazene esses dados em um</p><p>vetor. Depois, esse vetor deve ser passado por</p><p>parâmetro para uma função que retorna o valor da</p><p>média dos números desse vetor.</p><p>09/05/2017</p><p>6</p><p>Perguntas</p><p>DÚVIDAS?</p>