Vous êtes sur la page 1sur 18

9

Operações com Functions


e Voids
Estudando o tipo void
Programação estruturada é quando um programa contém functions e voids. O tipo void é um
pedaço de código/subrotina que têm o objetivo de executar uma lista de instruções, ao final das
execuções, o valor que irá restar na memória global será sempre void, ou seja, vazio.

Programa 1 Logo após a diretiva using, é criado o void


#include "iostream" exibir (nomedigitado), com o argumento
#include "cstdlib" nomedigitado do tipo string que será a variável
#include "string" de entrada do void.
using namespace std;
void exibir (string nomedigitado ) { Na função main(), após o usuário digitar o
cout << "\nNome:" << nomedigitado; } nome de uma pessoa, a função getline(cin,
nome) que depende da biblioteca “string” lê o
int main () { string nome; nome digitado e armazena na variável do tipo
setlocale(LC_ALL, "Portuguese"); string nome.

cout << "\nDigite o Nome:"; getline(cin, nome); Na próxima linha, o void exibir() é
exibir ( nome ); chamado enviando-se a variável nome para
system("pause"); return 0; } dentro do void, esta variável nome se tornara no
argumento nomedigitado, que será utilizado
para mostrar o nome digitado na tela.
Comportamento da Memória Programa1
Tudo que é criado dentro de um código é armazenado na memória, as variáveis globais e
locais, os argumentos, os nomes dos voids e os nomes das funções, etc. Por exemplo, no
programa 1, o void exibir (nomedigitado), a variável nome, que é a variável local de leitura para
ler o nome que será digitado e variável local, nomedigitado, que é o argumento de entrada do void
exibir().
Supondo-se que o usuário digite o nome da pessoa “José da Silva” no programa1, ao final
da execução podemos identificar quais os últimos valores que ocuparam espaço de memória de
acordo com o quadro abaixo:
Estudando o tipo não void (function)
A function (tipo não void) é um pedaço de código que têm o objetivo de armazenar um valor
ao final de seu processamento. Esse valor armazenado será de acesso global como uma variável
global, pois o nome da função será uma variável global temporária que só ficará na memória
durante o seu tempo de execução.

Programa 2
#include "iostream"
Logo após a diretiva using, é criada a
#include "cstdlib" função double novosalario(salarioatual),
using namespace std; para calcular o acréscimo de 10% a um
double const taxaaumento = 0.1; salário digitado qualquer.

double novosalario (double salarioatual) Na função main(), são criadas as


{ double aumento; variáveis locais salatual para ler o salario
aumento = (salarioatual * taxaaumento) + atual e novosal para armazenar o valor
salarioatual; return aumento; }
calculado pela função novosalario().
int main (){setlocale(LC_ALL,"Portuguese");
double salatual, novosal; Após o usuário digitar o valor do
salário de alguém, a função novosalario()
cout << "\nSalário atual:"; cin >> salatual; recebe o argumento salatual e é chamada
novosal = novosalario (salatual); pela variável novosal que terá o valor do
cout << "\nSalário Novo:"<< novosal<< endl; aumento calculado de 10% sobre o salário
system("pause"); return 0; } atual que será impresso na tela.
Comportamento da Memória Programa2
Ao final da execução do programa, as funções terão armazenados valores
resultantes de seus códigos internos que foram armazenados pelo comando return de
cada função. Supondo-se que o usuário digite o salário de 100 reais, vejamos como
ficará a memória ao final da execução do programa2 de acordo com a tabela abaixo:
Considerações sobre void e function
1) Void é um conjunto de instruções que ao serem executadas deixara um espaço vazio na
memória global, portanto não têm o objetivo de armazenar valores, o comando return dentro de
um void servirá apenas para sair da subrotina. Para chamar/executar um void basta digitar o
nome dele como se fosse um programa.
Exemplo chamada de um void:
void exibir() { cout << “Olá mundo”; }
void ler (int x) { y=x; } int main(){ exibir(); ler(20); int z =5; ler(z); }

2) Function é um conjunto de instruções que ao serem executadas irão produzir e armazenar


apenas um valor na memória global que poderá ser usado em qualquer tempo. O comando return
em uma função será utilizado para fazer o armazenamento do valor de retorno da função na
memória global. Para executar uma função, deve-se criar uma variável de preferência local e
atribuir a função. Então a função subirá para a memória global, produzirá o valor desejado e
depois sairá da memória deixando-a liberda.
Exemplo chamada de uma função:

double valormedia( double n1, double n2) { return n1 + n2)/2; }

int main () { double minhamedia = valormedia (10, 5);

double x=10, y=5; minhamedia = valormedia(x,y); }


Biblioteca iomanip.h
Para manipular o texto da tela de saída de um programa, você pode utilizar as funções setfill - para
escolher um caractere de tabulação, setw- padronizar quantidade de espaços, setprecision e fixed para
quantidade de casas decimais. Programa 3 - Saída Formatada

Primeiro exemplo: Digite e execute Segundo exemplo: Agora digite e execute esta
primeiro este código sem a biblioteca versão com a biblioteca iomanip e suas funções
iomanip
#include "iostream"
#include "iostream" #include "iomanip"
#include "cstdlib" #include "cstdlib"
using namespace std; using namespace std;
int main ( ) int main ( ) { float lap = 45.45655, bor = 23.7666,
{ float lap = 45.45655, bor = can=42.35955, cad = 82.7259;
2345.7666, can=420.35955, cout << setfill('.');
cad = 8.7259; cout << fixed << setprecision(4);
cout << "\n\n\n"; cout << "\n" << "Lapis" << setw(12) << lap;
cout << "\n" << "Lapis " << lap; cout << "\n" << "Borrachas" << setw(12) << bor;
cout << "\n" << "Borrachas" << bor; cout << "\n" << "Canetas" << setw(12) << can;
cout << "\n" << "Canetas " << can; cout << "\n" << "Cadernos" << setw(12) << cad;
cout << "\n" << "Cadernos " << cad; cout << endl; system("pause");}
system("pause");}
Programa 4 - Enunciado
Crie um programa para ler os valores dos coeficientes de uma equação do 2º grau A, B
e C. para ler A,B e C crie funções de leitura (nâo void) para cada valor. Se o usuário digitar
Zero no valor de A, exiba uma mensagem”A não poderá ser zero!” e finalize o programa.
Se o valor de A for positivo, chame uma função não void para calcular o valor de DELTA
= B*B*4*A*C. Depois pergunte se DELTA não é negativo, se for então exiba a mensagem
“Delta não poderá ser Negativo!” e finalize o programa. Se DELTA for positivo, então
chame uma função não void para calcular X1=-B + RAIZ(DELTA)/2*A e outra função não
void para calcular X2=-B-RAIZ(DELTA)/2*A. Para exibir os resultados, crie o VOID
EXIBIR ( ), dentro do void exibir, calcule o valor do delta, calcule o valor de x1 e x2 é
exiba os resultados.

FUNÇÕES e VOIDS:
double ler_A() => ler o valor de A
double ler_B() => ler o valor de B
double ler_C() => ler o valor de C
double cal_Delta(a,b,c) => calcular o valor do delta
double cal_X1(a,b,delta ) => calcular o valor de X1
double cal_X2(a,b,delta ) => calcular o valor de X2
void exibir (a,b,c,delta) => Em exibir chame cal_X1 e cal_X2
Programa 4 - Algoritmo Descritivo

ALGORITMO DESCRITIVO
1 Criar as vars Reais A, B, C, DELTA;
2 Declare funções de leitura: Ler_A( ), Ler_B( ) e Ler_C( ). ( A deve ser diferentes de Zero)
3 Crie a função de cálculo cal_Delta( ) com argumentos; DELTA=B*B-4*A*C;
4 Criar as funções de cálculo cal_x1( ) e cal_x2( ) , X1=-B+raiz(DELTA)/2*A e X2 = -B -
raiz(DELTA) / 2*A;
5 Crie o void exibir( ), dentro do void exibir, mostre A,B,C e DELTA; SE DELTA < 0, exiba
“Impossível calcular X1 e X2, pois DELTA é negativo!”, Finalize o Programa; SENÃO chame as
funções cal_x1( ) para calcular X1 e cal_x2( ) para calcular X2, mostre X1 e X2;

LÓGICA DE EXECUÇÃO NO SELECT CASE:


Menu 1 Executar: Chamar funções para ler A, B, C; Chamar função para calcular DELTA; Chame o
void exibir ( );
Menu 2 Sair: Finalize o Programa;
Programa 4

nível 2
Programa 4 Nível 3 (Sub Rotinas)
Programa 4 - Código Fonte Estruturado
As funções em um código em C++ devem ser codificadas logo após as diretivas do
processador, exatamente na área do Escopo Global do Código, as primeiras funções devem ser as
funções de leitura.

#include <iostream>
#include <cstdlib> FUNÇÕES DE LEITURA
#include <math.h>
using namespace std; A função ler_A ( ) => Serve para
ler e armazenar o valor de A
double ler_A ( ) { double va; cout << "Valor de A:";
cin >> va; return va; } A função ler_B ( ) => Serve para ler
e armazenar o valor de B
double ler_B ( ) { double vb; cout << "Valor de B:";
A função ler_C ( ) => Serve para
cin >> vb; return vb; } ler e armazenar o valor de C

double ler_C ( ) { double vc; cout << "Valor de C:";


cin >> vc; return vc; }

/* continua no próximo slide … */


Programa 4 - Código Fonte Estruturado
Após as funções de leitura, as próximas funções a serem codificadas, devem ser as funções de
cálculo, neste programa as funções de cálculo são cal_Delta( ), cal_x1( ) e cal_x2( ).

FUNÇÕES DE CÁLCULO
double cal_Delta ( double a, double b, double c) {
A função cal_Delta ( ) => recebe os
double d = pow(b,2) - 4 * a * c;
valores de a, b, e c, calcula e
return d; } armazena o valor de delta, através
do comando RETURN.
double cal_x1 ( double a, double b, double delta ) {
double x = (-b + sqrt(delta))/(2*a); A função cal_x1 ( ) => recebe os
return x; } valores de a, b e delta, calcula e
armazena o valor de X1 e armazena
double cal_x2 ( double a, double b, double delta ) { através do comando RETURN.
double x = (-b - sqrt(delta))/(2*a);
A função cal_x2 ( ) =>recebe os
return x; }
valores de a, b e delta, calcula e
armazena o valor de X1 e armazena
/* continua no próximo slide … */ através do comando RETURN.
Programa 4 - Código Fonte Estruturado
Após as funções de cálculo, as funções que devem ser codificadas são as funções de saída,
neste programa optou-se por criar um VOID de saída chamado exibir ( ) para exibir todos valores de
saída.

void exibir ( double a, double b, double c, double


delta ) FUNÇÕES DE EXIBIÇÃO OU
{ cout << "\nValor de ....A:" << a; SAÍDA
cout << "\nValor de ....B:" << b;
cout << "\nValor de ....C:" << c; A sub rotina void exibir ( ) =>
cout << "\nValor de Delta:" << delta; recebe e exibe os valores de a, b, c e
delta, após calcular x1 e x2 chamando
if (delta >= 0) as funções cal_x1 ( ) e cal_x2 ( ),
{ double x1 = cal_x1(a,b,delta); exibe x1 e x2. O tipo void não possui
double x2 = cal_x2(a,b,delta); RETURN pois não armazena valores
cout << "\nValor de ....x1:" << x1; como as funções.
cout << "\nValor de ....x2:" << x2 << endl;}
else { cout << "\nImpossível calcular x1 e
x2\nDelta é negativo!";}
system("pause"); }

/* continua no próximo slide … */


Programa 4 - Código Fonte Estruturado
Finalmente a função INT MAIN ( ) irá conter o menu principal de onde as funções poderão ser
chamadas.

int main () { setlocale(LC_ALL, "Portuguese");


double a, b, c, delta; int tecla;
MENU: /* marca um ponto no código para retornar aqui depois */
cout << "\nmenu\n1 Executar\n2 Finalizar\nitem:"; cin >> tecla;

switch(tecla)
{ case 1: a = ler_A ( ); b = ler_B ( ); c = ler_C ( );

if ( a == 0 ) { cout << "\nErro!'A' deve ser diferente de zero!";


system("pause"); exit(0); }

else { delta = cal_Delta ( a, b, c );


exibir ( a, b, c, delta ); } break;

case 2: cout << "\nO programa será finalizado!"; system ("pause"); exit ( 0 ); break;
}

goto MENU; /* executa novamente a partir do ponto marcado */


return 0; } /* fim do programa 4 */
Programa 5 - Diagrama Nível 1 main () com IF
Programa 5 - Diagrama nível 2 - sub rotinas
Lista 9 - FIXAÇÃO DE PROGRAMAÇÃO
a) Após digitar, compilar e executar o programa 4, comente todas as linhas e instruções do
programa explicando cada uma delas no código para não esquecer, depois mexa no código
do void exibir () para inserir os comandos de formatação de saída da biblioteca iomanip.h:
setfill(), setprecision(), fixed e setw().

b) Faça o código fonte do programa 5, a partir dos Diagramas níveis 1 e 2. Em vez de usar um
switch case, use o comando IF ELSE para fazer o menu conforme o diagrama nível 1 main(),
não esquecendo de formatar a tela de saída com os comandos da biblioteca iomanip.h.
Marque um ponto antes da exibição do menu chamado MENU e antes do return 0 que
marca o final do código use o comando goto para executar a partir do ponto marcado
como MENU.

c) Faça o código fonte e o diagrama de blocos de um programa contendo menu de controle,


opções 1 ler valores, 2 calcular média 3 exibir tudo 4 sair. Deverá conter 3 funções para ler
três valores, uma função para calcular a média geométrica dos três valores e um void mostrar
para mostrar os três valores e média geométrica na tela. Faça também a tabela para mostrar
os últimos valores de cada variável, função ou void do programa.
NOTA: Entrega obrigatória individual, os programas devem ser impressos e colados no caderno,
os diagramas DBs devem ser feitos a lápis no caderno com régua de fluxo.

Vous aimerez peut-être aussi