/*
 Laboratorium Praktyki Programowania  
 Formatowanie wyjścia 
*/

#include <iostream.h>
#include <iomanip.h>
#include <math.h>

int main(){
  char tekst[]="Programowanie w C++ jest proste!";
  double zmienna;
  char znak;


/* 
   Format wyświetlanych danych nie zawsze musi się nam podobać.
   Z pomocą przychodzą nam manipulatory strumienia wyjściowego
*/

  cout << tekst <<endl;

  /*
    Możemy ustalić szerokość wyświetlanej informacji
  */  
  cout << setw(34) << tekst << endl;

  /*
    Znak, który wypełni pozostałe miejsce
   */  
  cout << setw(40) << setfill('?') << tekst << endl;


  cout << M_PI << endl;

  /*
    Precyzję wyświetlania liczb zmiennoprzecinkowych
   */    
  cout << setprecision(2) << M_PI << endl;

  cout.width(10);
  cout << setprecision(3) << M_PI << endl;
  cout << M_PI << endl;
  
  cin >> zmienna;
  cin.clear(); 
  /* 
     clear "przywraca" dobry stan strumienia po ewentualnych błędach 
  */

  /*
    Liczby dodatnie ze znakiem plus na początku
   */  
  cout.setf(ios::showpos);
  cout << setprecision(2)<<zmienna << "\n";

  cout.setf(ios::showpos|ios::showpoint);
  cout << setprecision(3)<<zmienna << "\n";

  /* Wczytywany tekst możemy traktować znak po znaku */
  cin >> znak ;
  cout << znak  << endl;
  znak = znak+1;
  cout << znak << endl;

  while ( (znak = cin.get())!='\n' )
    cout << znak << "!" << endl;


  return 0;
}

