Buscar

12 - Funções e procedimentos, Variáveis local e global

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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;
}

Outros materiais