Unidade d 3 Professor: Rogério Rodrigues de Vargas
Noção de Funções A Linguagem C permite que um programa seja escrito como um conjunto de funções que são executadas a partir de uma função principal denominada main(). Cada função pode conter declarações de variáveis, instruções, ativações de funções de bibliotecas do sistema e ativações de outras funções definidas pelo programador. O objetivo de uma função deve ser a realização de alguma subtarefa específica da tarefa que o programa pretende realizar. Logo, pode-se escrever função para a leitura dos dados de entrada, para a saída do programa, para a determinação da média de vários elementos, para a troca dos conteúdos de uma variável, para o cálculo do MMC, MDC de dois números. Normalmente,arealizaçãoda sub-tarefa paraaqualafunçãofoi escrita é chamada de retorno da função.
Noção de Funções Então, pode-se dizer que uma função é uma unidade de código de programa autônoma criada para cumprir uma tarefa específica, particular. Uma das razões principais da existência de funções é impedir que o programador tenha que escrever omesmo código várias vezes, logo pode-se reutilizar funções já escritas, otimiza-se tarefas, ganha-se tempo. Para usar uma função é preciso primeiro i declará-la l edepois defini-la. Nenhuma função pode ser chamada por outra função se não tiver sido primeiro declarada (criada). A declaração, denominada protótipo da função, informa ao compilador qual o seu tipo de retorno, seu nome e os seus parâmetros, enquanto que a sua definição diz o que ela executa (faz).
Noção de Funções O protótipo da função é uma instrução, o que significa ifi que ele é encerrado com um ;. Sintaxe: <tipo de dado retornado><identificador>(lista parâmetros); Declaração de variáveis; Seqüência de instruções; return (valor); Onde: o conjunto tipo de dado retornado, identificador da função (lista de parâmetros) é chamado protótipo da função; <Tipo de dado> éint, char, float ou um dos seus múltiplos quando a função deve retornar um valor específico e void se a função deve realizar uma ação genérica sem retornar um valor definido;
Noção de Funções <identificador> é o nome dado a função pelo programador, sempre relacionado ao que ela faz para facilitar suas atribuições; A <lista parâmetros> é um conjunto de variáveis utilizadas para a função receber os valores para os quais a função deve ser executada; estes valores são chamados argumentos, que, comparando uma função com um programa, constituem dados de entrada da função; uma lista de todos os parâmetros e seus respectivos tipos separados por,. Entre os parâmetros, o nome e o tipo de retorno devem ter compatibilidade entre a definição e a declaração da função. Na declaração de variáveis são declaradas as variáveis que as intruções da função vão manipular internamente. Estas variáveis (e os parâmetros) da função só são acessíveis pelas instruções da função e, por esta razão, são chamadas variáveis locais.
Desenvolvimento de Funções Uma função consiste emumsubprograma que pode atuar sobre dados e retornar um valor. Todo programa em C tem pelo menos uma função (a main) que pode chamar outras funções, algumas das quais, podem ainda chamar outras e assim por diante. Toda função tem seu próprio nome, e quando este nome é encontrado a execução do programa é desviado para o corpo da função. Quando ela retorna, a execução recomeça na linha seguinte a chamada da função. main( ) instrução; função1( ); instrução; função2( ); função1 função2 instrução; return; instrução; função3( ); return; função3 instrução; return;
Desenvolvimento de FUNÇÕES A definição de uma função é iniciada pelo seu cabeçalho, que consiste no protótipo p da função, com nome(s), (), obrigatoriamente, para o(s) parâmetro(s) e sem o ; no final. Iniciasse o corpo da função com a abertura de e encerrasse com o fechamento. Não é necessário que uma função apresente parâmetros, porém os parênteses tem que existirem ( e ). Exemplo: Tem que ter ; long int Area (int largura, int altura); long int Area (int lagura, int altura) return (largura * altura); // protótipo (declaração) // definição (corpo)
Desenvolvimento de FUNÇÕES FUNÇÃO main (revisão) Por ser também uma função, main deve atender as especificações de sua representação, onde ela especifica um tipo de valor de retorno, o, um nome e uma lista de parâmetros. A ausência do tipo de retorno configura que o retorno é do tipo padrão, ou seja, inteiro (int) e nela pode existir um comando return que a encerra.
Declaração de Variáveis Variáveis locais são internas as funções ou blocos. Parâmetros formais são parâmetros de funções. Variáveis globais estão fora de todas as funções. Variáveis Locais Só podem ser referenciadas dentro da função ou no bloco onde foram declaradas Só existem dentro do bloco de instrução onde foram declaradas, quando este estiver sendo executado (pilha) Elas podem ser declaradas no início de qualquer bloco de instrução e não somente no início das funções
TIPOS DE OBJETOS Parâmetros Formais São variáveis i que recebem os valores dos argumentos das funções e devem ser do mesmo tipo. Comportam-se como qualquer outra variável local dentro de uma função. Variáveis Globais São reconhecidas dentro de todo o contexto onde foram declaradas. Estão declaradas fora das funções. São armazenadas em área específica da memória (devendo ser evitadas).
Desenvolvimento de FUNÇÕES Tarefas complicadas devem ser divididas em múltiplas funções para que possam ser chamadas uma a uma. Isso torna o código mais fácil de entender e manter. parâmetros argumentos formais argumentos argumentos reais Variáveis Globais programadores usam estes termos indistintamente As variáveis definidas fora das funções tem um escopo global e portanto podem ser acessadas a partir de qualquer função do programa (inclusive i a main). ) Em C ++ este tipo de variável é evitada pelo fato de que tornam o código confuso e de difícil manutenção. As variáveis globais, quando forem extremamente necessárias, devem ser declaradas em apenas um arquivo (.cpp) eusadas como externas (extern) nos outros.
Desenvolvimento de FUNÇÕES COMANDO return As funções retornam um valor ou void (nenhum valor definido). Para que elas retornem um valor, insira a palavra reservada return seguida pelo valor que se deseja retornar, sendo ele do mesmo tipo definido na função. Exemplo: return 5; return (X > 5); return (Outra( ) ); É sempre interessante retornar um valor compatível para uma função que não seja do tipo void,,que na linguagem g C caracte riza um procedimento (função sem retorno) Com return a execução do programa retorna imediatamente para a função responsável pela chamada, e qualquer instrução que esteja após o return não é executada. É permitido mais que um return em uma função, mas uma vez que um deles seja executado a função é encerrada. Tadeu Freire Pontes 12
Primeiro Exemplo de Funções Veja o exemplo para calcular a raiz quadrada de um número(sem utilizar função). #include<stdio.h> #include<conio.h> #include<math.h> h> main() float x, result; printf("digite it os numeros:"); scanf("%f",&x); result=sqrt(x); printf("a raiz e %.2f\n",result); getch(); Sub-tarefa Tadeu Freire Pontes 13 2º sem/05 Tadeu Freire Pontes Tadeu Freire Pontes
Exemplos de Funções Veja o exemplo para calcular a raiz quadrada de um número(utilizando função). #include<stdio.h> di #include<conio.h> #include<math.h> float raiz( float num) /* definção da função*/ float res; /* declaração de variável local da função*/ res=sqrt(num); /* calculo da raiz - sub-tarefa*/ return res; /* retorno da função*/ main() float x,result; printf("digite os numeros:"); scanf("%f",&x); result=raiz(x); printf("a raiz e %.2f\n",result); getch();
Exemplos de Funções #include<stdio.h> #include<conio.h> #include<math.h> float raiz( float num) float res; res=sqrt(num); return res; main() float x,result; printf("digite os numeros:"); scanf("%f",&x); Há um desvio do função principal para a função específica, quando o MAIN encontra a função raiz passa o valor de xparaaposiçãode memóriaque num (variável de entrada da função) ocupa quando foi criada. ISSO É QUE SE CHAMA PASSAGEM DE PARÂMETROS. result=raiz(x); i() printf("a raiz e %.2f\n",result); getch();
Exemplos de Funções Veja o exemplo para calcular o máximo divisor comum entre dois números (sem utilizar função). #include<stdio.h> #include<conio.h> main() int x,y,a,b,mdc,resto; printf("digite os dois inteiros:"); scanf("%d%d",&x,&y); & a=x; b=y; resto = a % b; resto=x%y; while(resto!=0) a=b; b=resto; resto= a % b; mdc=b; printf("mde(%d,%d) = %d\n",x,y,mdc); getch();
Exemplo com Funções int maxdivcom(int x, int y) /* prototipo da funcao*/ int resto; /* variaveis locais da funcao*/ resto = x%y; while(resto!=0) /*estrutura de repeticao*/ /*inicio do bloco da estrutura*/ x=y; y=resto; resto= x % y; /*fim do bloco da estrutura*/ return(y); #include<stdio.h> #include<conio.h> main() int mde,a,b; printf("digite os dois inteiros:"); scanf("%d%d",&a,&b); mde=maxdivcom(a,b); printf("mde(%d,%d)=%d\n",a,b,mde); getch();
Exemplos int soma(int x, int y) /* prototipo da funcao*/ int res; /* variaveis i locais da funcao*/ res = x + y; return res; #include<stdio.h> #include<conio.h> main() int resp,a,b; printf("digite os dois inteiros:"); scanf("%d%d",&a,&b); resp=soma(a,b); printf("a soma de %d e %d = %d\n",a,b,resp); getch();
Exemplos float funcmedia(float x, float y, float z) /* prototipo da funcao*/ float media; /* variaveis locais da funcao*/ media=(x+y+z)/3; return media; #include<stdio.h> #include<conio.h> main() float resp,a,b,c; printf("digite as tres notas:"); scanf("%f%f%f",&a,&b,&c); resp=funcmedia(a,b,c); printf("a media entre %0.f, %0.f e %0.f = %0.f\n",a,b,c,resp); getch();
Desenvolvimento de FUNÇÕES Pode-se passar variáveis i para a função, assim comotambém pode-se declarar variáveis locais dentro do corpo da função. Estas variáveis recebem esta denominação porque só existem dentro da função, pois quando a função retorna (ou termina) elas deixam de estar disponíveis. Os parâmetros passados para a função também são considerados variáveis locais. Por exemplo: #include<stdio.h> float Converter(float TEMPFAR); // protótipo int main( ) float TEMPFAR,TEMPCEL; printf( Temp.em Fahrenheit: ); scanf( %f,&tempfar); TEMPCEL = Converter(TEMPFAR); printf( Em Celsius %f, TEMPCEL); return 0; // Definição do corpo da função float Converter(float TEMPFAR) float TEMPCEL; TEMPCEL=((TEMPFAR 32)*5)/9; ) return TEMPCEL;
Desenvolvimento de FUNÇÕES Exemplo: /* Síntese... */ #include<stdio.h> // declarações float Converter(float F); // protótipo int main( ) float TEMPFAR; float TEMPCEL; printf( Temp.em Fahrenheit: ); scanf( %f,&tempfar); TEMPCEL=Converter(TEMPFAR); printf( Em Celsius %f,tempcel); return 0; float Converter(float F) float CEL; CEL = ((F 32) *5) 9; return CEL; A variável passada por parâmetro possui um endereço diferente e somente vai existir enquanto a função estiver sendo executada. td É feita uma cópia da variável eacópia é usada pela função; F poderia ter ainda outro nome, FAR por exemplo, alterando toda a função.
Desenvolvimento de FUNÇÕES Função como parâmetro de outra Função Embora seja possível, isto pode dificultar a leitura e a depuração do código. Por exemplo: RESPOSTA = (Dobro(Quadrado(Raiz(VALOR))); Mudanças feitas nos argumentos não afetam os valores da função de chamada, pois é feita uma cópia local para cada argumento. Essa cópia é tratada como uma outra variável qualquer. Esta forma de passagem de parâmetro recebe o nome de argumento por valor (ou passagem por valor). O argumento por referência acontece quando é copiado o endereço do argumento para o parâmetro (passando um ponteiro para o argumento). Com isso, as alterações efetuadas sobre o parâmetro afetaram também o valor da variável usada na chamada da função. Será visto it mais a frente queosponteiros ti são passados para as funções como qualquer outra variável.
Desenvolvimento de FUNÇÕES PARÂMETROS PADRÃO Quando uma função possui algum parâmetro (na sua definição ou no protótipo) a função de chamada deve passar um valor quando a chamar, a menos que ela tenha um valor padrão. Um valor padrão é um valor a ser usado caso nenhum valor seja fornecido (informado). Exemplo: long int Testar(int X = 10); // protótipo O cabeçalho da função não é alterado pela definição padrão. Exemplo: long int Testar(int X)...
Desenvolvimento de FUNÇÕES Quando uma função possui um valor padrão todos os parâmetros posteriores desta função deverão ter parâmetros padrões definidos. Exemplo: long int Testar(int PAR1, int PAR2=9, int PAR3=7); long int Testar(int PAR1, int PAR2, int PAR3=5); long int Testar(int PAR1=3, int PAR2=5, int PAR3=7); Só poderá ser atribuído um parâmetro padrão a PAR2 se p p p atribuirapar3eaatribuiçãopoderáserfeitaapar1sefor atribuído a PAR2 e PAR3.
Desenvolvimento de FUNÇÕES SOBRECARREGANDO FUNÇÕES Em C++ é permitido criar uma função com o mesmo nome, sobrecarregando-a. Isto é permitido diferenciando a lista de parâmetros em relação aos seus tipos ou quantidades (ou ambos). Exemplo: int Testar(int, int); int Testar(long, long); int Testar(long); Os tipos de retorno podem ser iguais ou diferentes em uma função sobrecarregada, desde que a lista de parâmetros seja diferente.
Exercício Proposto Elabore um programa que acione uma função que apresente as opções de menu com as seguintes concessionárias de veículos: FIAT, CHEVROLET e FORD. Solicite ao usuário qual das opções ele deseja verificar os carros disponíveis. Identifique qual a opção escolhida e apresente as respectivas opções dos carros disponíveis, conforme as listas descritas abaixo. A concessionária escolhida deverá acionar outra função que apresentará somente os veículos disponíveis da marca especificada. Para cada concessionária deverá existir uma função específica com os carros disponíveis. Após identificar o carro escolhido pelo usuário, apresente no centro de uma janela limpa uma mensagem de agradecimento e o nome do carro escolhido. FIAT CHEVROLET FORD Uno Vectra Escort Esquema Tempra Astra Pampa de funções - Silverado Ranger
Referências Bibliográficas Apresentação extraída e modificada de: www.cepceilandia.df.gov.br/sites/200/296/00000561.ppt Junho de 2008 Rogério Rodrigues de Vargas 27