Funcoes de Entrada e Saida de dados

48
Linguagem de Programação C++ Funções de Entrada e Saida de dados

Transcript of Funcoes de Entrada e Saida de dados

Linguagem de Programação C++

Funções de Entrada e Saida de dados

Funções de entrada

A entrada de dados é algo muito importante para qualquer programa, que deve ser usado em conjunto com uma função de saída.

Função de Entrada de C++As funções de entrada de C++ são encontradas na biblioteca padrão de entrada/saída, aIOSTREAM.Toda entrada de dado deve ser armazenada em um endereço de uma variável, assim como em C.

A entrada de entrada de dados é controlada pela função CIN.Todas as entradas devem estar depois do acumulador de entrada* (>>) e não é necessário identificar o tipo de dado com uma máscara, nem indicar o endereço da variável, apenas digitamos o nome da variável.*Cuidado: Não confunda os acumuladores. O acumulador de saída é << e o acumulador de entrada é >>.

//EXEMPLO1

#include <iostream>using namespace std;int main (void){int nr;cout <<"Digite um numero: ";cin >> nr;cout <<"\n\n\nVoce digitou o numero: "<<nr;return 0;}

Diferentemente do scanf do C, não podemos indicar várias entradas com a função cin. Ou seja, você deve incluir um CIN para cada entrada.

Dicas importantes Nunca confunda os acumuladores. Entrada >>; e saída <<.Não é possível carregar uma cadeia de caracteres com a função cin, ou seja, se tiver um tipode dado CHAR e entrarmos com uma frase, apenas a última letra será lida.

Um problema sério das funções de entrada tanto de C quanto C++ é que tudo do teclado é considerado uma entrada, inclusive o ENTER. Então, se digitarmos um número e apertarmos o ENTER, além do número também fica armazenado o ENTER, que atrapalhará futuras entradas de dados, podendo ocorrer de um dado não ser digitado porque o programa irá considerar que mesmo antes de digitarmos o dado foi dado um ENTER. Esse problema pode ser facilmente resolvido se digitarmos a função CIN.IGNORE () depois de cada CIN.

//EXEMPLO2#include <iostream>using namespace std;int main (void){int a, b, r;cout <<"Digite o primeiro numero que sera somado:\n";cin >> a;cin.ignore ();cout <<"Digite o segundo numero que sera somado:\n";cin >> b;cin.ignore ();r=a+b;cout <<"\nA soma de "<<a<<" mais "<<b<<" e igual a "<<r;return 0;}

Funções de saída de C++

As funções de saída de C++ são encontradas na biblioteca padrão de entrada/saída, aIOSTREAM.

No caso, para imprimir uma mensagem basta adicionar a linha com a função COUT. Tudo quedeve ser mostrado na tela deve estar especificado entre os acumuladores de saída (<<) e asaspas ("").

//exemplo1#include <iostream>// biblioteca padrão I/O de C++using namespace std;int main (void){cout <<"Esta e uma mensagem sendo mostrada na tela";return 0;}O exemplo acima vai mostrar apenas uma mensagem na tela.

Exibindo resultado de variáveisO que também podemos fazer é imprimir variáveis como por exemplo o resultado de uma soma.

Diferentemente de C, para fazermos isso, não é necessário incluir uma máscara de dado.Basta colocarmos a variável entre os acumuladores.

//exemplo2#include <iostream>using namespace std;int main (void){int a, b, resultado;a=5;b=10;resultado=a+b;cout <<a<<" + "<<b<<" = "<<resultado;return 0;}

No exemplo acima, atribuímos os valores de 5 na variável a, 10 na variável b e guardamos o resultado de a+b na variável resultado.Na saída, colocamos diretamente as três variáveis depois dos acumuladores e reiniciamos a mensagem com mais um acumulador para cada impressão.

Controle de texto O controle de texto é dado do mesmo modo que em C. Todos os controles são determinados pelo caracter barra invertida (\) e uma letra. Cada letra faz algo determinado, veja a tabela abaixo e o exemplo:

\n Pula de linha

\t Adiciona tabulação

\a Adiciona um bip

\b Faz o cursor voltar um caracter

\r Faz o cursor voltar a linha inteira

Na maior parte da vezes, você irá usar apenas o \n para começar uma nova linha.

E em C++ é um bom costume sempre utilizar no final da função o endl (END LINE), dessa forma não precisamos nos preocupar com a mensagem que virá depois porque elaautomaticamente virá em outra linha.

//exemplo3#include <iostream>using namespace std;int main (void){int a, b, c, d, r1, r2;a=5;b=10;c=15;d=25;r1=a+b;r2=c+d;cout <<"O calculo retornou o seguinte resultado:"<<endl;cout << a <<" + "<< b <<" = "<< r1;cout << c <<" + "<< d <<" = "<< r2;return 0;}

Confessamos que a função COUT é um tanto complicada de usar quando temos que mostrarmuitas variáveis na mensagem.

A sua vantagem é poder imprimir diretamente a variável, mas se quiser ter um controle maior da mensagem com o PRINTF, existe uma biblioteca em C++ idêntica a de C, ela é o CSTDIO. Então, usando esta biblioteca você tem em C++ os mesmos controles do printf de C.

FunçõesFunções são usadas para criar pequenos pedaços de códigos separados do programa principal.Em C/C++, tudo, na verdade, é uma função. INT MAIN (VOID) é uma função, por exemplo.

Exceto a função MAIN, todas as outras funções são secundárias, o que significa que elas podem existir ou não.Então, qual a vantagem de fazermos uma função?

Funções são importantes porque elas retornam valores, ajudam a fragmentar o código em partes menores - mais fáceis de lidar - e ainda por cima podem ser utilizadas mais de uma vez no mesmo programa, poupando preciosos minutos de programação e inúmeras linhas de código.

Criando funções sem argumentos

Em C/C++ as funções podem ter ou não argumentos. Primeiramente, veremos as funções sem argumentos.Funções são como variáveis que guardam inúmeras linhas de código.

Se não prototipadas*, elas devem ser escritas antes da função MAIN, afim de serem compiladas primeiro para poderem ser utilizadas pela função main.

É quase o mesmo que querer comer uma maçã do pomar e quando chegar lá não tem nenhuma, você continuará com fome. Porque não tem maçãs produzidas no pomar.

Seria o mesmo que querer utilizar uma função no MAIN e não tem nenhuma função produzida anteriormente.

Como haviamos dito, funções são como variáveis. Então, criamos uma função indicando o tipo de retorno (saída) que será int, float, etc...Nomeamos a função (valem as mesma regras das variáveis, ex.: Não começa nomes de funções com número) e terminamos colocando entre parênteses os argumentos. Como nossas primeiras funções não terão argumentos entre parênteses usaremos VOID (do inglês VAZIO). Todo o código da função deve estar dentro de um bloco de instrução ( { } ), mesmo que haja apenas uma linha.Obs.: Não se usa ponto-e-vírgula no final da criação da função.

Como a na função que usaremos não retornará nenhum valor porque a única coisa que ela faz é mostrar uma mensagem na tela. Ela terá o tipo de retorno vazio também - void.

Após a função ser criada, basta chamarmos a função dentro da função principal MAIN.

TIPO DE RETORNO NOME DA FUNÇÃO ARGUMENTOS

void mensagem (void)

Para chamá-la, apenas digitamos o nome da função e entre parênteses colocamos seusargumentos. Como esta função não tem argumentos, simplesmente colocamos nada entre os parênteses

#include <iostream>#include <cstdlib>using namespace std;void mensagem (void) //perceba que não há ponto-e-vírgula aqui!{cout <<"Ola! Eu sou uma funcao.\n";}int main (void){mensagem (); //chamando uma função sem argumentossystem ("pause");return 0;}

Funções que retornam valoresComo já foi dito uma função pode retornar um valor, e esse valor pode ou não ser guardadoem uma variável, isso depende de como queremos lidar com isso.

Para retornarmos um valor usamos o comando RETURN. Toda vez que retornamos um valor éporque terminamos a função. Por isso, todo programa utilizado até agora termina em RETURN0;.

Mas em projetos maiores tem por convenção utilizar uma constante - EXIT_SUCCESS - para deixar o programa com mais legibilidade.

No código abaixo, usaremos uma função que chamaremos de somar que retornará um inteiroresultante da soma de duas variáveis. No programa (função MAIN) guardaremos o retorno dafunção em uma variável chamada resultadoDaFuncao. No final imprimiremos na tela oresultado.

#include <iostream>#include <cstdlib>using namespace std;

int somar (void){int a, b, resultado;cout <<"Digite um numero:\n";cin >> a;cin.ignore ();cout <<"Digite mais um numero:\n";cin >> b;cin.ignore ();resultado=a+b;return resultado; //valor que será retornado}

int main (void){int resultadoDaFuncao;resultadoDaFuncao= somar(); //gravando o resultado da função em uma variávelcout <<"\nO resultado da funcao e "<<resultadoDaFuncao<<"\n";system ("pause");return EXIT_SUCCESS;}

Funções

Funções são usadas para criar pequenos pedaços de códigos separados do programa principal.Em C/C++, tudo, na verdade, é uma função. INT MAIN (VOID) é uma função, por exemplo.Exceto a função MAIN, todas as outras funções são secundárias, o que significa que elaspodem existir ou não.

Então, qual a vantagem de fazermos uma função?Funções são importantes porque elas retornam valores, ajudam a fragmentar o código empartes menores - mais fáceis de lidar - e ainda por cima podem ser utilizada mais de uma vezno mesmo programa, poupando preciosos minutos de programação e inúmeras linhas decódigo.

Criando funções com argumentos

Primeiramente, o que são argumentos? Argumentos são parâmetros pré-especificados que são necessários para o funcionamento de uma função. Resumidamente, um argumento é uma variável ou valor que é necessário para algum processo da função.

Para criar uma função com argumento é simples.Criamos a função como de costume. Primeiro o tipo de retorno e depois o nome da função.

Então, entre parênteses "declaramos uma variável", ou praticamente isso. Podemos por quantos argumentos quisermos, basta que para cada argumento especifique-se seu tipo e separe-se por vírgula. Ex:

• 1 argumento: INT NOMEDAFUNÇÃO (int argumento1)

• 2 argumentos: INT NOMEDAFUNÇÃO (int argumento1, int argumento 2)

• 3 argumentos: INT NOMEDAFUNÇÃO (int argumento1, float argumento2, long int argumento3)

• etc...Analisemos o código:

#include <cstdio>#include <cstdlib>int mult3 (int a, int b, int c){return a*b*c;}int main (void){int valor1, valor2, valor3, resultado;printf ("Digite 3 valores que serao multiplicados\n");scanf ("%d %d %d", &valor1, &valor2, &valor3);getchar ();resultado=mult3(valor1, valor2, valor3);

//Valor1 será int a, valor2 será int b e valor3 será int cprintf ("O resultado e %d\n\n", resultado);system ("pause");return EXIT_SUCCESS; //o mesmo que return 0.}Como podemos ver, foi criada uma função chamada mult3 que precisa de três argumentos: a,b e c. O seu retorno é a multiplicação das três (a*b*c) que fica gravado na variável resultado.

Funções inline

As funções inline servem como códigos a serem copiados ao lugar que são chamados.

Funções normais quando são chamadas, o programa tem que ir até ela e executar seu código, isso leva uma certa fração de tempo para acontecer o que deixa o programa com uma resposta um pouco menor.

Já as funções inline quando são chamadas o código já está lá, porque o compilador trata de copiar todo o código da função para o local onde ela está sendo chamada a partir do momento em que o código é compilado.

Ou seja, se criarmos um código contendo uma função inline parecido com o abaixo:

void mensagem (){cout <<"Mensagem que irá aparecer na tela";}int main (void){mensagem ();}Quando o compilador compilar este código, ele se tornará apenas:int main (void){cout <<"Mensagem que irá aparecer na tela";}

Como se não existisse a função, mas todo seu código é copiado para a posição em que é hamado.

Dessa forma o programa não terá que se deslocar até achar a função porque todo seu código já está escrito logo abaixo fazendo com que o tempo de resposta seja maior.

Para criar uma função inline basta fazer a mesma coisa que faríamos para criar uma funçãonormal, a única diferença e que antes de começarmos escrever a função deveremos utilizar a palavra reservada inline.

palavra-chave tipo de retorno nome da função parâmetrosinline void mensagem ( )Em um código-fonte real seria:

#include <iostream>#include <cstdlib>using namespace std;inline void mensagem (){cout <<"Hello, World!"<<endl;}int main (void){mensagem();system ("pause");}

Mas o aumento de desempenho vem com um certo custo de espaço em memória. Queremos dizer que além de aumentar o desempenho, também aumenta o tamanho do arquivo. Por isso, funções inline não são tão utilizadas, ainda mais hoje em dia com computadores extremamente rápidos que conseguem chamar uma função em pouquíssimos milésimos de segundo.

Outra coisa importante a saber é que se colocarmos uma função inline de, por exemplo, 100 linhas de código dentro de uma iteração (repetição, loop) de 50 vezes, o próprio compilador não compilará este código, pois ele entende que será gerado um arquivo exageradamente grande com um custo de recursos do sistema desnecessário.Para se ter uma idéia. Veja o código:

#include <iostream>#include <cstdlib>using namespace std;inline void mensagem (){cout <<"Este programa foi iniciado com sucesso as ";}inline void horario (){system ("time/t");}inline void contador (int i){cout <<"Esta e a operacao de soma "<<i<<" de 10"<<endl;cout <<"iniciado as ";}

inline int soma (){int a, b;cout <<"Digite o primeiro numero: ";cin >> a;cin.ignore();cout <<"Digite o segundo numero: ";cin >> b;cin.ignore();return a + b;}inline void resultado (int variavel){cout <<"O resultado e "<<variavel<<endl<<endl;}inline void pausar (){system ("pause");}

int main (void){int c, i;mensagem();horario ();for (i=1; i<=10; i++) {contador (i);horario();c=soma();resultado (c);}pausar ();}

O código acima foi compilado no compilador Dev-C++ 4.9.9.2 sob o sistema operacionalWindows XP SP2 com otimização de código para processadores Pentium.

O arquivo original, apenas com as funções inline, consumiu 476.305 bytes cerca de 465KB. O arquivo secundário com as mesma funções, mas sem a palavra chave INLINE, compilado nas mesmas condições que o anterior, consumiu 475.997 bytes cerca de 464KB (reduziu 0,01%).

Parece pouco, mas temos que levar em conta que este programa tem apenas 40 linhas.Imagine um programa real que tem vários módulos e milhares de linhas.