Baixe o app para aproveitar ainda mais
Prévia do material em texto
Funções e procedimentos Uma função é um conjunto de instruções desenhadas para cumprir uma tarefa particular e agrupadas numa unidade com um nome para referenciá-la. A principal razão para usar funções é a de dividir a tarefa original em pequenas tarefas que simplificam e organizam o programa como um todo. Uma outra razão para escrever funções é a de reduzir o tamanho do programa. Qualquer seqüência de instruções que apareça no programa mais de uma vez é candidata a ser uma função. O código de uma função é agregado ao programa uma única vez e pode ser executado muitas vezes no decorrer do programa. Chamando uma função Um programa pode conter uma ou mais funções, das quais uma delas deve ser main(). A execução do programa sempre começa em main() e, quando o controle do programa encontra uma instrução que inclui o nome de uma função, a função é chamada. Chamar uma função é o meio pelo qual solicitamos que o programa desvie o controle e passe para função, execute suas instruções e depois volte à instrução seguinte à da chamada a função. Da mesma forma como a função main não necessariamente precisa retornar valor, procedimentos não precisam retornar valor. Para tanto, basta que o tipo do procedimento seja void. Função – Retorna algum resultado Procedimento – Não retorna nenhum valor O protótipo de funções Da mesma forma que com relação a uma variável, não podemos também usar uma função sem antes declará-la. A declaração de uma função é chamada protótipo e é uma instrução, geralmente colocada no início do programa, que estabelece o tipo da função e os argumentos que ela recebe. Veja o exemplo a seguir: Exemplo: #include<iostream.h> void main() { int celsius(int fahr); //protótipo local int c, f; cout << “\n Digite a temperatura em graus Fahrenheit: ”; cin > f; c = celsius(f); //chamada à função cout << “\n Celsius = ” << c; } //Celsius() //Definição da função //fahr: Farenheight int celsius(int fahr) { int c; c=(fahr – 32) * 5/9; return c; } Eliminando o protótipo de funções Se a definição for feita antes da instrução de sua chamada, o seu protótipo não é obrigatório. Desta forma, o exemplo acima poderia ser reescrito da seguinte forma: #include<iostream.h> //Celsius() //Definição da função //fahr: Farenheight int celsius(int fahr) { int c; c=(fahr – 32) * 5/9; return c; } void main() { int c, f; cout << “\n Digite a temperatura em graus Fahrenheit: ”; cin > f; c = celsius(f); //chamada à função cout << “\n Celsius = ” << c; } Exercício 1 (faça em casa) Digite e execute o programa abaixo: (Programa que mostra a chamada e execução de um procedimento sem parâmetros) #include <conio.h> #include <iostream.h> void Procedimento() { cout<<”\n”; cout<<”\n Procedimento sem parametros “; cout<<”\n”; return; } void main() { //Programa executar um bloco chamado procedimento sem parâmetros clrscr(); cout<<”Exemplo de chamada de procedimento”; Procedimento(); cout<<”\n Tecle <Enter> para terminar”; getch(); return; } Exercício 2 (em aula) Faça um programa que: - crie um procedimento chamado Mensagem_de_Erro, sem parâmetros, para imprimir a seguinte mensagem na tela: “Erro codigo 001 – operação inválida” Exercício 3 (em aula) Digite e execute o programa abaixo: (Programa que mostra a chamada e execução de um procedimento com parâmetros) #include <conio.h> #include <iostream.h> void Soma(float a, float b) { float c; cout<<”\n”; cout<<”\n Procedimento que soma valores “; c = a + b; cout<<”\n O resultado da soma é ”<< c; return; } void main(void) { float x, y; //Programa executar um bloco chamado Soma com passagem de parâmetros clrscr(); cout<<”Exemplo de chamada de procedimento com parâmentros”; cout<<”\n Entre com o primeiro valor: “; cin>>x; cout<<”\n Entre com o segundo valor : “; cin>>y; Soma(x,y); cout<<”\n Tecle <Enter> para terminar”; getch(); return; } Exercício 4 (em aula) Faça um programa que incremente o exercício anterior de tal forma: acrescente um procedimento para realizar uma subtração acrescente um procedimento para realizar uma divisão acrescente um procedimento para realizar uma multiplicação Obs: você poderá usar a estrutura escolha conforme o menu abaixo no programa principal: . . cout<<”\n [1] - SOMA”; cout<<”\n [2] - SUBTRAÇÃO”; cout<<”\n [3] - DIVISÃO”; cout<<”\n [4] - MULTIPLICAÇÃO”; cout<<”\n\n Opção: “; cin>> opcao; switch (opcao) { case 1: Soma(x,y); break; case 2: Subtrai(x,y); break; case 3: Dividi(x,y); break; case 4: Multiplica(x,y); break; default : cout<< "\n OPCAO INVALIDA"; } . . depois do programa estar pronto faça uma rotina para que o programa possa ser repetido várias vezes sugestão: do { ... } while (repetir = =‘S’) || (repetir = = ‘s’) Exercício 5 Escreva uma função de nome soma ( ) que receba um número inteiro e positivo N como argumento e retorne a soma dos N primeiros números inteiros e positivos. Exercício 6 Escreva uma função chamada potência ( ) que aceite dois argumentos inteiros e positivos i e j. A função deverá retornar o valor de i elevado à potência j . Lembre-se que uma potência é um produto de fatores iguais Não utlize a função pow do math.h. Exercício 7 Escreva uma função chamada quadrante. Esta função recebe como parâmetro as coordenadas X e Y de um ponto no sistema cartesiano e retorna o quadrante ao qual o ponto pertence. 2 2 primeiro 3 -2 quarto 4 7 primeiro -8 -1 terceiro -7 1 segundo Exercício 8 Considere o seguinte programa: void proc1 ( int &a, int &b ) { a += 2; b += 3; cout << a << b; } main( ) { int a = 1, b = 2; proc2 ( b, a ); cout << a << b; } Mostre em detalhe a execução do programa. Em cada passo mostre o valor de a e b. Exercício 9 Considere o seguinte programa: void muda ( int a, int &b ) { int aux; aux = b; b = a; a = aux; } void muda2 ( int &a, int &b ) { muda ( a, b ); } main( ) { int a, b; a = 3; b = 6; muda2 ( b, a ); cout << a << b; } Mostre em detalhe a execução do programa. Em cada passo mostre o valor de a e b. Funções em arquivos diferentes Exemplo: Três arquivos aritmetica.cpp Contém as funções de soma e subtração aritmetica.h Contém os protótipos principal.cpp Programa principal onde está a função main() Arquivo aritmetica.cpp int soma (int a, int b) { return a + b; } int sub (int a, int b) { return a – b; } Arquivo aritmetica.h int soma(int, int); int sub(int, int); Arquivo principal.cpp #include <iostream.h> #include <conio.h> #include “aritmetica.h” void main() { cout << “100 + 50 = ” << soma(100,50) << endl; cout << “100 – 50 = ” << sub(100, 50) << endl; } Passagem de Parâmetros Um Programa fornece informação às funções através de parâmetros Tipos de parâmetros Entrada Valores estabelecidos fora da função Não são modificados dentro da função Saída Valores são estabelecidos dentro da função A passagem de parâmetros em C++ pode ser por valor ou por referência. Quando é feita a passagem por valor, existe uma cópia dos valores das variáveis passadas como parâmetro para a função para os parâmetros formais da função. Portanto, no exemploabaixo, as variáveis x e n não ocupam a mesma posição de memória. Modificações feitas em n não alteram o valor de x, da mesma forma que modificações feitas em x não alteram o valor de n. #include <iostream.h> #include <conio.h> int testePar (int n) { n = n + 5 ; return x; } int main() { int r, x=7 ; r = testePar (x) ; cout << "\nMain: Valor de x: " << x << endl; cout << "Main: Valor de r: " << r; getch(); return 0; } No primeiro cout deverá aparecer o seguinte resultado: Main: Valor de x: 7 e no segundo cout aparecerá: Main: Valor de r: 12 Na passagem de parâmetros por referência (endereço), as variaveis x e n, do exemplo, ocupam a mesma posição de memória. É passado para a função o endereço da variável utilizada na chamada da função. Assim sendo, ao se modificar x também se estará modificando n, da mesma forma que ao se modificar n também se estará modificando x. #include <iostream.h> #include <conio.h> int testePar (int &n) { n = n + 5 ; cout << "\nValor de n modificado: " << n << endl; return n; } int main() { int r, x=7 ; r = testePar (x) ; printf ("Main: Valor de x: %d\n",x) ; printf ("Main: Valor de r: %d\n",r) ; getch(); return 0; } No exemplo acima, na função testPar será impresso o valor 12, resultado da soma do valor anterior, 7 com o valor 5. Na função main, o valor de x, impresso no primeiro cout, é 12, resultado da alteração realizada pela função testePar. Como x e n ocupam o mesmo endereço de memória, possuem o mesmo valor. Como existe uma cópia do valor de n para a variável r do main, resultado da operação return n executada na função testPar, o valor de r é igual ao valor de x. A passagem de parâmetros por endereço é indicada pelo símbolo &. Variáveis Locais e Escopo Variáveis locais São variáveis declaradas dentro de uma função Se você declarar uma variável sal na função folha, as demais funções desconhecerão a variável sal Escopo Localizações em que o programa conhece e pode usar determinada variável Variáveis Globais Variáveis conhecidas em todo o programa Declaração: int variavel_global; void main() { // comandos do programa } Deve-se evitar o uso de variáveis globais Variáveis Globais e Locais: Conflitos Conflitos ocorrem quando se dá o mesmo nome para variáveis locais e globais Programa privilegia a variável local Operador :: Referencia a variável global numero = 1001; // Variável local ::numero = 2002; // Variável global void proc2 ( int &a, int &b ) { proc1 ( b, b ); a = a + b; cout << a << b; }
Compartilhar