Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <string>
- using namespace std;
- int Random(int min, int max) {
- return rand() % max + min;
- }
- class Figura {
- public:
- string nazwa = "";
- virtual int Pole() = 0;
- virtual int Obwod() = 0;
- virtual void Show() = 0;
- };
- class Kwadrat : public Figura {
- public:
- int dlugosc = 0;
- Kwadrat() {
- nazwa = "Kwadrat";
- dlugosc = Random(1,20);
- }
- int Pole() {
- return dlugosc * dlugosc;
- }
- int Obwod() {
- return 4 * dlugosc;
- }
- void Show() {
- cout << nazwa << " Pole=" << Pole() << ": a=" << dlugosc << " ob=" << Obwod() << endl;
- }
- };
- class Prostokat : public Figura {
- public:
- int dlugosc = 0;
- int szerokosc = 0;
- Prostokat() {
- nazwa = "Prostokat";
- dlugosc = Random(1,20);
- szerokosc = Random(1,20);
- }
- int Pole() {
- return dlugosc * szerokosc;
- }
- int Obwod() {
- return 2 * dlugosc + 2 * szerokosc;
- }
- void Show() {
- cout << nazwa << " Pole=" << Pole() << ": a=" << dlugosc << ": b=" << szerokosc << " ob=" << Obwod() << endl;
- }
- };
- class Lista;
- class Kolo : public Figura {
- public:
- int promien = 0;
- Kolo() {
- promien = Random(1,20);
- nazwa = "Kolo";
- }
- int Pole() {
- return 3.14*promien*promien;
- }
- int Obwod() {
- return 2 * 3.14 * promien;
- }
- void Show() {
- cout << nazwa << " Pole=" << Pole() << ": r=" << promien << " ob=" << Obwod()<<endl;
- }
- };
- class ElementDrzewa {
- public:
- Figura * value = nullptr;
- ElementDrzewa* lewo = nullptr;
- ElementDrzewa* prawo = nullptr;
- ElementDrzewa(Figura* value) {
- this->value = value;
- };
- };
- class Drzewo {
- public:
- void Dodaj(Figura* figura) {
- Dodaj(GrubyKorzen, figura);
- }
- void Wyswietl() {
- Wyswietl(GrubyKorzen);
- }
- void DoListy(Lista &lista) {
- DoListy(GrubyKorzen, lista);
- }
- private:
- ElementDrzewa * GrubyKorzen = nullptr;
- void Dodaj(ElementDrzewa* & korzen, Figura* figura) {
- if (korzen == nullptr) {
- korzen = new ElementDrzewa(figura);
- }
- else {
- if (figura->Pole() > korzen->value->Pole()) {
- Dodaj(korzen->prawo, figura);
- }
- else {
- Dodaj(korzen->lewo, figura);
- }
- }
- }
- void Wyswietl(ElementDrzewa* korzen) {
- if (korzen != nullptr) {
- if (korzen->lewo) {
- Wyswietl(korzen->lewo);
- }
- if (korzen->prawo) {
- Wyswietl(korzen->prawo);
- }
- korzen->value->Show();
- }
- }
- void DoListy(ElementDrzewa* korzen, Lista &lista);
- };
- class ElementListy {
- public:
- Figura* value;
- ElementListy* next = nullptr;
- ElementListy(Figura* value) {
- this->value = value;
- };
- };
- class Lista {
- public:
- ElementListy * pierwszy = nullptr;
- Lista() {};
- Lista(int ilosc) {
- for (int i = 0; i < ilosc; i++)
- {
- Dodaj(Random(1, 3));
- }
- }
- void Dodaj(Figura* & figura) {
- if (pierwszy == nullptr) {
- pierwszy = new ElementListy(figura);
- }
- else {
- ElementListy* tmp = pierwszy;
- while (tmp->next)
- {
- tmp = tmp->next;
- }
- tmp->next = new ElementListy(figura);
- }
- }
- void Dodaj(int rodzaj) {
- if (pierwszy == nullptr) {
- if (rodzaj == 1)
- pierwszy = new ElementListy(new Kwadrat());
- else if (rodzaj == 2)
- pierwszy = new ElementListy(new Prostokat());
- else if (rodzaj == 3)
- pierwszy = new ElementListy(new Kolo());
- else
- return;
- }
- else {
- ElementListy* tmp = pierwszy;
- while (tmp->next)
- {
- tmp = tmp->next;
- }
- if (rodzaj == 1)
- tmp->next = new ElementListy(new Kwadrat());
- else if (rodzaj == 2)
- tmp->next = new ElementListy(new Prostokat());
- else if (rodzaj == 3)
- tmp->next = new ElementListy(new Kolo());
- else
- return;
- }
- }
- void Wyswietl() {
- ElementListy* temp = pierwszy;
- while (temp) {
- temp->value->Show();
- temp = temp->next;
- }
- }
- float Srednia() {
- int suma = 0,licznik = 0;
- ElementListy* temp = pierwszy;
- while (temp) {
- suma = suma + temp->value->Pole();
- licznik++;
- temp = temp->next;
- }
- if (licznik == 0)
- return 0;
- return suma / licznik;
- }
- void MniejszeWieksze() {
- float srednia = Srednia();
- Lista mniejsze;
- Lista wieksze;
- ElementListy* temp = pierwszy;
- while (temp) {
- if (temp->value->Pole() <= srednia) {
- mniejsze.Dodaj(temp->value);
- }
- else {
- wieksze.Dodaj(temp->value);
- }
- temp = temp->next;
- }
- cout << "Mniejsze: " << endl;
- mniejsze.Wyswietl();
- cout << "Wieksze: " << endl;
- wieksze.Wyswietl();
- }
- void DoDrzewa() {
- ElementListy* temp = pierwszy;
- Drzewo kwadraty, prostokaty, kola;
- while (temp) {
- if (temp->value->nazwa == "Kwadrat") {
- kwadraty.Dodaj(temp->value);
- }
- else if (temp->value->nazwa == "Prostokat") {
- prostokaty.Dodaj(temp->value);
- }
- else if (temp->value->nazwa == "Kolo") {
- kola.Dodaj(temp->value);
- }
- temp = temp->next;
- }
- cout << "Kwadraty: " << endl;
- kwadraty.Wyswietl();
- cout << "Prostokaty: " << endl;
- prostokaty.Wyswietl();
- cout << "Kola: " << endl;
- kola.Wyswietl();
- }
- Lista posortowane() {
- Drzewo drzewo;
- ElementListy* temp = pierwszy;
- while (temp) {
- drzewo.Dodaj(temp->value);
- temp = temp->next;
- }
- Lista lista;
- drzewo.DoListy(lista);
- return lista;
- }
- };
- void Drzewo::DoListy(ElementDrzewa* korzen, Lista &lista) {
- if (korzen != nullptr) {
- if (korzen->lewo) {
- DoListy(korzen->lewo, lista);
- }
- lista.Dodaj(korzen->value);
- if (korzen->prawo) {
- DoListy(korzen->prawo, lista);
- }
- }
- }
- int main() {
- srand(time(NULL));
- Lista list(20);
- list.Wyswietl();
- cout << "Srednia = " << list.Srednia()<<endl;
- //list.MniejszeWieksze();
- //list.DoDrzewa();
- Lista posortowane;
- posortowane = list.posortowane();
- cout << endl<< "Posortowana lista: " << endl;
- posortowane.Wyswietl();
- cin.ignore();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement