![]() |
��2��1 ����� ��������� 12. 12. 2005. |
---|
��������� �� ������ C++ ������ ����� (����� �������� ���� ��������������, ������������ � ���������� �� ������ ���������, ��� �� �������� �� �������� �������� �����):
dat<<t
).
S
, ��������� �� 4r3π/3 � � �������� �� ���� � ������ S(
r)
.
V
, ��������� �� r2πh � � �������� �� ���� � ������ V(
r,
h)
.
red+=pr
; ������ ������� � ��� ��� ������� �������), �� �� ���� ���� �� ������� ���� (������ ������� �� ������� ���� ������� �������) � �� �� ������ ���� ����� � �������� (dat<<red
) � ������ red[
t,
t,…,
t]
, ��� �� t ��������� ������ �������� ��������� ����.
(20 �����) �������� �� ������ C++ ������ ������� ��� ������� ��� ���������� ��� ������� �� ������� �����, ���� ���������� ���� �� ������� ����� � ����� �� � ��� ��� ��� �� ��� �� ������, ������ ������ ���� �� ������� ������, ������� ���� �� ���� ��� �� ��� �� �������� �������� ����� ��������� ���� ���� � ����, ������ ������� �������� �� ������� ������ � ������ ��������� ������ ��� �� ��������� ���� �� ������� ���������� ��������.
���������� �������� (�� ����� ��� ��� ��������) � �������� �� ������ ���a��:
�) ��� ������� ����������� ��������� �� ������������ ��� ������� ����������?
�) ������� ��� ������ ���������� ���������� ��������� � ������� ������� ����� ���?
�) � ���� �� ������� ����� ������ � ��������� ������ � ��� ������� �� ������ �������� ������?
�) ��� ������� ����� ������ ����� ��� �������, � �������� ����� ��� – ������� �������� �������� ����������� ������ �������� �����.
�) ��� �������� �� ������ ��� ����������� ������ � ���� �� �������?
#include <iostream> #include <cstdlib> using namespace std; class Telo { public: virtual ~Telo () {} virtual char vrsta () const =0; virtual double V () const =0; virtual Telo* kopija () const =0; private: virtual void pisi (ostream&) const =0; friend ostream& operator<< (ostream& d, const Telo& t) { t.pisi (d); return d; } }; class Sfera: public Telo { double r; public: Sfera (double rr=1) { r = rr; } char vrsta () const { return 'S'; } double V () const { return 4 * r*r*r * 3.14159 / 3; } Sfera* kopija () const { return new Sfera (*this); } private: void pisi (ostream& d) const { d << "S(" << r << ')'; } }; class Valjak: public Telo { double r, h; public: Valjak (double rr=1, double hh=1) { r = rr; h = hh;} char vrsta () const { return 'V'; } double V () const { return r*r * 3.14159 * h; } Valjak* kopija () const { return new Valjak (*this); } private: void pisi (ostream& d) const { d << "V(" << r << ',' << h << ')'; } }; class Red { Telo** niz; int kap, prvi, posl, duz; void kopiraj (const Red&); void brisi (); public: explicit Red (int k=5); Red (const Red& r) { kopiraj (r); } ~Red () { brisi (); } Red& operator= (const Red& r) { if (this != &r) { brisi (); kopiraj (r); } return *this; } bool pun () { return duz == kap; } bool prazan () { return duz == 0; } Red& operator+= (const Telo& t) { if (duz == kap) exit (1); niz[posl++] = t.kopija (); duz++; if (posl == kap) posl = 0; return *this; } Telo* uzmi () { if (duz == 0) exit (2); Telo* t = niz[prvi]; niz[prvi++] = 0; duz--; if (prvi == kap) prvi = 0; return t; } friend ostream& operator<< (ostream&, const Red&); }; Red::Red (int k) { niz = new Telo* [kap = k]; for (int i=0; i<kap; niz[i++]=0); prvi = posl = duz = 0; } void Red::kopiraj (const Red& r) { niz = new Telo* [kap = r.kap]; for (int i=0; i<kap; i++) niz[i] = r.niz[i] ? r.niz[i]->kopija () : 0; prvi = r.prvi; posl = r.posl; duz = r.duz; } void Red::brisi () { for (int i=0; i<kap; delete niz[i++]); delete [] niz; } ostream& operator<< (ostream& d, const Red& r) { d << "red["; for (int i=0; i<r.duz; i++) { if (i) d << ','; d << *r.niz[(r.prvi+i)%r.kap]; } return d << ']'; } int main () { while (true) { cout << "kap? "; int k; cin >> k; if (k <= 0) break; Red red (k); while (! red.pun ()) { cout << "Vrsta (S,V)? "; char vr; cin >> vr; double r, h; switch (vr) { case 's': case 'S': cout << "r? "; cin >> r; red += Sfera (r); break; case 'v': case 'V': cout << "r,h? "; cin >> r >> h; red += Valjak (r, h); break; } } cout << red << endl; double V = 0; int n = 0; while (! red.prazan ()) { Telo* t = red.uzmi (); V += t->V (); n++; delete t; } if (n) V /= n; cout << "Vsr= " << V << endl; } return 0; }
Copyright © 2010, Laslo Kraus
������� �������: 30.8.2010.