Subalgoritmos (Fun��es)
Defini��o Porque usar fun��es ?
Primero Exemplo Em primeiro lugar, imaginemos que voc� necessite v�rias vezes em seu programa imprimir a mensagem "Pressione a tecla ENTER" e esperar que o usu�rio tecle ENTER, caso o usu�rio tecle algo diferente o programa deve imitir um BEEP. Voc� pode fazer um la�o de WHILE sempre que isto fosse necess�rio. Uma alternativa � criar uma fun��o. Com o uso de fun��es, este processo de repeti��o fica simplificado. Observe o exemplo a seguir.
Formato Geral de uma Fun��o em C
A Lista_de_Parametros, tamb�m � chamada de Lista_de_Argumentos, � opcional. Par�metros A fim de tornar mais amplo o uso de uma fun��o, a linguagem C permite o uso de par�metros. Este par�metros possibilitam que se definida sobre quais dados a fun��o deve operar. A fun��o sound(freq), por exemplo, recebe como par�metro a freq��ncia do som a ser gerado, permitindo que se defina seu comportamento a partir deste valor. Para definir os par�metros de uma fun��o o programador deve explicit�-los como se estive declarando uma vari�vel, entre os par�nteses do cabe�alho da fun��o. Caso precise declarar mais de um par�metro, basta separ�-los por v�rgulas. No exemplo a seguir temos a fun��o SOMA que possui dois par�metros, sendo o primeiro um float e o segundo um int.
Os par�metros da fun��o na sua declara��o s�o chamados par�metros formais. Na chamada da fun��o os par�metros s�o chamados par�metros atuais/reais. Os par�metros s�o passados para uma fun��o de acordo com a sua posi��o. Ou seja, o primeiro par�metro atual(da chamada) define o valor o primeiro par�metro formal (na defini��o da fun��o, o segundo par�metro atual define o valor do segundo par�metro formal e assim por diante. Os nomes dos par�metros na chamada n�o tem rela��o com os nomes dos par�metros na defini��o da fun��o. No c�digo a seguir, por exemplo, a fun��o SOMA � chamada recebendo como par�metros as vari�veis "b" e "a", nesta ordem.
O resultado do programa � a impress�o da seguinte mensagem: A soma de 12.300 com 10 � 22.300 Localiza��o das Fun��es no Fonte A princ�pio podemos tomar com regra a seguinte afirmativa toda fun��o deve serdeclaradaantes de ser usada. A declara��o de uma fun��o em linguagem C n�o � exatamente o que fizemos at� agora. O que estamos fazendo � a defini��o da fun��o antes de seu uso. Na defini��o da fun��o est� impl�cita a declara��o. Alguns programadores preferem que o in�cio do programa seja a primeira parte de seu programa. Para isto a linguagem C permite que se declare uma fun��o, antes de defini-la. Esta declara��o � feita atrav�s do prot�tipo da fun��o. O prot�tipo da fun��o nada mais � do que o trecho de c�digo que especifica o nome e os par�metros da fun��o. No exemplo a seguir a fun��o SOMA � prototipada antes de ser usada e assim p�de ser chamada antes de ser definida.
Aten��o: existem compiladores mais simplificados ou antigos que n�o obrigam a declara��o da fun��oantes de seu uso !!! Muito cuidado com eles !! Veja no item a seguir. Verifica��o dos Tipos dos Par�metros A princ�pio, dados usados par�metros atuais(aqueles da chamada da fun��o) devem ser dos mesmos tipos dos par�metros formais. Se isto n�o ocorrer, mas a declara��o da fun��o vier antes de seu uso, os compiladores C modernos se encarregam de converter automaticamente os tipos como se estivesemos usando um CAST. Entretanto, tenha muito cuidado se as tr�s condi��es a seguir se verificarem:
Se as tr�s condi��es se verificarem o resultado da execu��o da fun��o � �mprevis�vel ! No caso de voc� declarar corretamente a fun��o antes de us�-la, a convers�o de tipos � feita como no caso de vari�veis. No exemplo a seguir a fun��o SOMA � chamada com os par�metros reais dos tipos int e float, nesta ordem. Como na declara��o da fun��o o primeiro par�metro � float e o segundo � int, � feita uma convers�o de int para float no caso do primeiro par�metro e de float para int no caso do segundo par�metro.
Neste exemplo o primeiro par�metro � convertido para 16.0 e o segundo para 20. O que ocorre, de fato, � que a chamada da fun��o � feita como se mesma fosse substitu�da por: SOMA((float)16,(int)f); Escopo de Vari�veis Por escopo de uma vari�vel entende-se o bloco de c�digo onde esta vari�vel � v�lida. Com base nisto, temos as seguintes afirma��es:
No trecho de c�digo a seguir tem-se um exemplo com fun��es e vari�veis com nomes iguais. #include <stdio.h>void FUNC1() Sugere-se, antes da leitura das pr�ximas se��es, a consulta � p�gina sobre ponteiros. Passagem de Par�metros por refer�ncia A passagem de par�metros apresentada a at� aqui � chamada de passagem por valor. Nesta modalidade, a chamada da fun��o passa o valor do par�metro para a fun��o. Desta forma, altera��es do par�metro dentro da fun��o n�o afetar�o a vari�vel usada na chamada da fun��o.No exemplo a seguir a vari�vel f, passada por par�metro para a fun��o Zera n�o ser� alterado dentro da
fun��o. #include <stdio.h> void Zera(float a){ a = 0; } void main() { float f; f = 20.7; Para passar o endere�o de uma vari�vel para uma fun��o, deve-se tomar as seguintes provid�ncias: - dentro da fun��o, deve-se usar o operado de derrefer�ncia * para alterar o conte�do da vari�vel. O exemplo a seguir apresenta uma nova vers�o da fun��o Zera, desta feita com o uso de um par�metro passado por refer�ncia. #include <stdio.h> void Zera(float *a) // Define que o par�metro � uma refer�ncia � outra vari�vel{ *a = 0; // utiliza o operador de derrefer�ncia para alterar o conte�do da vari�vel } void main() { float f; f = 20.7; Passagem de Vetores por Par�metros A passagem de vetores por par�metro � sempre por refer�ncia. Isto significa que n�o se deve, na chamada da fun��o, passar o endere�o do vetor. Isto ocorre pois, por conven��o, o nome do vetor j� representa o endere�o inicial deste vetor namem�ria.No cabe�alho da fun��o que recebe um vetor, h� duas formas de definir o par�metro que � um vetor. Na primeira declara-se o vetor como se faz normalmente na linguagem. O exemplo a seguir mostra o uso desta abordagem.void ZeraVet(float V[10], int qtd) { int i; for(i=0;i<qtd;i++) V[i] = 0.0; } void main() { int i; float Vet[10]; ZeraVet(Vet,10); // Passa o nome do vetor como
par�metro printf("%d ", Vet[i]); // todos os elementos ter�o valor 0.0 } Na segunda abordagem, pode-se declarar o par�metro como um ponteiro para o tipo de dado que forma o vetor. No caso do exemplo a seguir, como o vetro foi declarado com um vetor de float, o par�metro da fun��o deve ser float *v. No c�digo da fun��o, o acesso aos dados do vetor � feito da mesma maneira que � feito quando se declara o vetor explicitamente.void ZeraVet2(float *V, int qtd) { int i; for(i=0;i<qtd;i++) V[i] = 0; } void main() { int i; float Vet[10]; ZeraVet(Vet,10); // Passa o nome do vetor como par�metro for(i=0;i<10;i++) printf("%d ", Vet[i]); // todos os elementos ter�o valor 0.0 } Quais as funções de entrada e saída de dados na linguagem C?As facilidades de entrada e saída não fazem parte da linguagem C . O que existe é uma biblioteca padrão de funções para manipular a transferência de dados entre programa e os dispositivos (devices) de saída e entrada padrão. Algumas destas funções são: scanf(), printf(), getchar(), puts(), gets().
Qual a biblioteca padrão de entrada e saída em C?A biblioteca padrão de entrada e saída do C++ é a iostream. Ela deverá ser incluída no início de todo código em C++, porém, para maratonas, o ideal é que se use cabeçalho que inclui todas as bibliotecas padrões do C++ e também do C: bits/stdc++.
Qual o comando de saída de dados da linguagem C?A saída de dados pode ser feita através da chamada à função printf também pertencente à biblioteca de funções stdio. Desta forma, o procedimento de declaração include desta biblioteca é também requerido.
O que é o %d em C?%c indica que printf() deve colocar um caracter na tela. %d indica que printf() deve colocar um inteiro na tela.
|