#include <iostream>

using namespace std;


class Ksiazka {
  private:
    char A[20];
    char T[30];
    unsigned S;
    double C;
  public:
    Ksiazka() {A[0] = T[0] = '\0'; S=0; C=0;}
    Ksiazka(const char autor[], const char tytul[], const unsigned stron=0, const double cena=0) {
      unsigned As=sizeof(A);
      unsigned as=strlen(autor);
      if (As<=as) as = As-1;
      memcpy(A, autor, as);
      A[as] = '\0';
      unsigned Ts=sizeof(T);
      unsigned ts=strlen(tytul);
      if (Ts<=ts) ts = Ts-1;
      memcpy(T, tytul, ts);
      T[ts] = '\0';
      S = stron;
      C = cena>=0?cena:0;
    };
    void DrukujAutor()const;
    void DrukujTytul()const;
    void DrukujCena()const;
    void DrukujStron()const;
    void Info()const;
    void ZmienCene();
    double Cena()const;
};

void Ksiazka::DrukujAutor()const {
  cout << A;
  return;
}
void Ksiazka::DrukujTytul()const {
  cout << T;
  return;
}
void Ksiazka::DrukujCena()const {
  cout << C;
  return;
}
void Ksiazka::DrukujStron()const {
  cout << S;
  return;
}
void Ksiazka::Info()const {
  cout << "Autor: " << A << endl;
  cout << "Tytul: " << T << endl;
  cout << "Stron: " << S << endl;
  cout << "Cena:  " << C << endl;
  return;
}
double Ksiazka::Cena()const { return C;}

void Ksiazka::ZmienCene()
{
  double NC;
  cout << "Podaj nowa cene: ";
  cin >> NC;
  if (cin)
  {
    C = NC;
  } else {
    cout << "Podano nieprawidłową cenę!" << endl;
  }
  return;
}

class TablicaKsiazek
{
  private:
    Ksiazka *T;
    unsigned R;
  public:
    TablicaKsiazek() {T=0; R=0;}
    TablicaKsiazek(unsigned rozm):R(rozm) {T=new Ksiazka[R];}
    void Wstaw(unsigned i, Ksiazka K) { if (i<R) T[i] = K; return;}
    void Drukuj(unsigned i) { if(i<R)(T[i]).Info(); return;}
    double SredniaCena()
    {
      double s=0;
      for (unsigned i=0; i<R; i++)
        s += (T[i]).Cena();
      return s/(R-1);
    }
    void Info()
    {
      for (unsigned i=0; i<R; i++)
      {
        cout << " -- ksiazka nr " << i << " --" << endl;
        Drukuj(i);
      }
    }
    unsigned NajwiekszaCena()
    {
      unsigned n=0, i=1;
      for (; i<R; i++)
        if (T[i].Cena() > T[n].Cena()) n = i;
      return n;
    }
    unsigned NajmniejszaCena()
    {
      unsigned n=0, i=1;
      for (; i<R; i++)
        if (T[i].Cena() < T[n].Cena()) n = i;
      return n;
    }
};

int main()
{
  TablicaKsiazek TK(4);
  Ksiazka A;
  Ksiazka B("Adam Mickiewicz", "Pan Tadeusz", 500, 11.20);
  Ksiazka C("", "ala ma kota", 500, 300);
  Ksiazka D("012345678901234567890123456789", "Pan Tadeusz", 500, 11.20);
  TK.Wstaw(0, A);
  TK.Wstaw(1, B);
  TK.Wstaw(2, C);
  TK.Wstaw(3, D);
  TK.Info();
  cout << "Srednia cena: " << TK.SredniaCena() << endl;
  cout << "Najwieksza cena: "<< endl;
  TK.Drukuj(TK.NajwiekszaCena());
  cout << "Najmniejsza cena: "<< endl;
  TK.Drukuj(TK.NajmniejszaCena());
  cout << endl;
  return 0;
}

