/*
Autor: Eduardo Augusto Bezerra

UFSC, CTC, EEL
Data: 20/09/2012

PUCRS, FACIN, GSE
Data: 24/05/2006

Demonstracao de stream.

*/

#include <string>
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

	float f;
	int i;
	
	cout << "Digite algo do tipo float: ";
	cin >> f;
	cout << "Digite algo do tipo int: ";
	cin >> i;
	cout << "Valor digitado int: " << i << endl;
	cout << "Valor digitado float: " << f << endl;
	cout.setf(ios::scientific);
	cout << "Notacao cientifica: " << f << endl;
	cout.unsetf(ios::scientific);
	cout.setf(ios::fixed);
	cout << "Ponto fixo: " << f << endl;
	cout.unsetf(ios::fixed);

    i = 16;
    double d = 1.12345678901234567890;
    char c = 'c' ;
    // Definindo a largura do campo
    cout << setw(5) << i << endl;
    // Definindo a precisao da saida
    for(int cont = 1 ; cont < 20 ; cont++)
       cout <<"Precisao = " << setw(2) << cont << setprecision(cont)<<" d = "<< d << endl;
    // Definindo o caracter de preenchimento
    cout << setw(10) << setfill('*') << i << endl;
    cout << setw(10) << d << endl;
    cout << setw(10) << c << endl;
    // Definindo formato do numero
    cout << hex << 15 << endl;
    cout << oct << 15 << endl;
    cout << dec << 15 << endl;
    cout << setbase(10) << 15 << endl;
	
    i = 20;
    d = 1.23456789;    
    
    string nome = "Laboratorio de Programacao II";
    char letra = 'c';
    char cstring[]= "STRING_DE_C";
    
    cout << "----------------- Formato padrao ----------------"<< endl;
    cout << "int_i double_d string_nome char_c char*_cstring"<< endl;
    cout << "-----------------------------------------------"<< endl;
    cout << i <<" "<< d <<" "<< nome << " " << letra << " " << cstring << endl;
    cout << "Alinhamento a esquerda"<< endl; // 5*********
    cout.setf(ios::left);
    cout.width (10);
    cout << i <<" ";
    cout.width (10);
    cout<< d <<endl;
    cout << "Alinhamento a direita"<< endl; // *********5
    cout.setf(ios::right);
    cout.width (10);
    cout << i <<" "<< d <<endl;
    cout << "Formato cientifico"<< endl;
    cout.setf(ios::scientific);
    cout << i <<" "<<d<< endl;
    cout << "Mostra sinal positivo"<< endl;
    cout.setf(ios::showpos);
    cout << i <<" "<<d<< endl;
    cout << "Ativa hexadecimal" << endl;
    cout.setf(ios::hex,ios::basefield);
    cout << i <<" "<<d<<" "<< nome << endl;
    cout << "Desativa hexadecimal" << endl;
    cout.unsetf(ios::hex);
    cout << "16= "<<16<< endl;
    cout << "Seta precisao numerica em 12" << endl;
    cout.precision(12);
    cout << i <<" "<<d<<" "<< nome << endl;
    cout << "Seta espaco do campo em 20 caracteres, temporario" << endl;
    cout.width (20);
    cout << i <<" "<<d<<" "<< nome << endl;
    cout << "Caracter de preenchimento '#'"<<endl;
    cout.fill('#'); cout.width (20);
    cout << i <<" "<<d<<" "<< nome << endl;
    cout << "Escreve na tela 5 caracteres da cstring" << endl;
    cout.write(cstring,5);    
    cout <<endl;
    cout << "Imprime letra G na tela" << endl;
    cout.put('G');
    cout<<endl;
    cout << "Imprime a letra" << endl;
    cout << letra << endl;
    cout << "Imprime codigo ascii da letra"<< endl;
    cout << ( int)letra << endl ;
    cout << "Imprime a variavel int em hexadecimal" << endl;
    cout << hex << i <<endl;
    cout << "Parenteses evita ambiguidade, imprime \"9\"" <<endl;
    cout << (5+4)<<endl;
    cout << "Imprime string de C" << endl;
    cout << cstring << endl;

    bool b = false;
    cout <<"b="<<b<<endl;
    cout << boolalpha <<"b="<<b<<endl;

    //Usado para descarregar o buffer
    cout.flush ();
   return 0;
}

