Wątek przeniesiony 2017-05-23 10:21 z Nietuzinkowe tematy przez aurel.

Co robi funkcja add ?

0
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <ctime>
#include <cstdlib>
#include <map>
using namespace std;
using std::cout;


string doubleToStr(double var)
{
	ostringstream strs;
	strs << var;
	std::string str = strs.str();
	return str;
}

class PodKorzen
{
public:
	double value;
	PodKorzen *wieksze = NULL;
	PodKorzen *mniejsze = NULL;

	PodKorzen(double value)
	{
		this->value = value;
	}

	void Add(double wart)
	{
		if (mniejsze == NULL && wieksze == NULL)
			mniejsze = new PodKorzen(wart);
		else if (mniejsze != NULL && wieksze != NULL)
		{
			if (wart < mniejsze->value)
			{
				mniejsze->Add(wart);
			}
			else
			{
				wieksze->Add(wart);
			}
		}
		else // mniejsze jest wieksze niema(odwrotnie nie moze byc)
		{
			if (wart > mniejsze->value)
				wieksze = new PodKorzen(wart);
			else
			{
				wieksze = mniejsze;
				mniejsze = new PodKorzen(wart);
			}
		}
	}
	void show(int zagniezdzenie = 0, int lSpacji = 0, bool czyPierwsze = false)
	{
		if (!czyPierwsze)
		{
			for (int i = 0; i < lSpacji; i++)
			{
				cout << ' ';
			}
		}
		for (int i = 0; i < zagniezdzenie; i++)
		{
			cout << '-';
		}
		cout << value;

		if (mniejsze != NULL && wieksze != NULL)
		{
			mniejsze->show(zagniezdzenie + 1, lSpacji + doubleToStr(value).length() + zagniezdzenie, true);
			wieksze->show(zagniezdzenie + 1, lSpacji + doubleToStr(value).length() + zagniezdzenie);
		}
		else if (mniejsze != NULL)
			mniejsze->show(zagniezdzenie + 1, lSpacji + doubleToStr(value).length() + zagniezdzenie, true);
		else if (wieksze != NULL)
			wieksze->show(zagniezdzenie + 1, lSpacji + doubleToStr(value).length() + zagniezdzenie, true);

		if (mniejsze == NULL && wieksze == NULL) // aby nie robilo za duzo spacji
			cout << endl;
	}
	bool Search(double wart)
	{
		if (wart == value)
			return true;
		else if (mniejsze != NULL && wieksze != NULL)
		{
			if (wart < mniejsze->value)
				return mniejsze->Search(wart);
			else
				return wieksze->Search(wart);
		}
		else if (mniejsze != NULL) // mniejsze jest wiekszego nie ma
		{
			if (wart < mniejsze->value)
			{
				return mniejsze->Search(wart);
			}
			else // bo nie ma wiekszego a wartosc jest wieksza
				false;
		}
		else // bo jak nie ma mniejszego to i wiekszego
			false;
	}
	double Minimum()
	{
		if (mniejsze == NULL)
			return value;
		return mniejsze->Minimum();
	}
	double Maximum()
	{
		if (wieksze == NULL)
			return value;
		return wieksze->Maximum();
	}
};
class Korzen
{
public:
	map<int, PodKorzen*> podrzewa;

	void Insert(double x)
	{
		if (podrzewa[(int)x] == NULL)
			podrzewa[(int)x] = new PodKorzen(x);
		else
			podrzewa[(int)x]->Add(x);
	}
	void Show()
	{
		for (pair<int, PodKorzen *> p : podrzewa)
		{
			p.second->show();
		}
	}
	bool Search(double klucz)
	{
		if (podrzewa[(int)klucz] != NULL)
			return podrzewa[(int)klucz]->Search(klucz) == true;
		else
			return false;
	}
	double Minimum(double klucz)
	{
		if (podrzewa[(int)klucz] != NULL)
			return podrzewa[(int)klucz]->Minimum();
    //  else error podano zly klucz
	}

	double Maximum(double klucz)
	{
		if (podrzewa[(int)klucz] != NULL)
			return podrzewa[(int)klucz]->Maximum();
        //  else error podano zly klucz
	}

};




int main()
{

	// POMINĘ CZYSZCZENIE ZASOBÓW BO NIE O TO TU CHODZI I TYLKO ZAŚMIECAĆ KOD BĘDZIE
	srand(time(NULL));

	Korzen k;
	k.Insert(1.5);
	k.Insert(1.3);
	k.Insert(1.6);
	k.Insert(3.5);
	k.Insert(3.7);
	k.Insert(4.5);
	k.Insert(4.0);
	k.Insert(4.99);
	k.Insert(7.5);
	k.Insert(7.3);
	k.Insert(7.8);
	k.Insert(7.7);
	k.Insert(7.9);
	k.Insert(7.6);
	k.Insert(9.5);
	k.Insert(9.3);

	k.Show();

	cout << endl;

	cout << k.Maximum(7) << endl;
	cout << k.Minimum(7) << endl;

	// test 3

	std::clock_t start = std::clock();
	double duration;


	Korzen nowy;
	for (int i = 10; i <= 1000; i++) //insertowanie
	{
		nowy.Insert(i / 10.0); // 990 insertow
	}
	nowy.Show();

	for (int i = 10; i <= 1000; i++) //szukanie, min i max
	{
		nowy.Search(i / 10.0);
		nowy.Maximum(i / 10.0);
		nowy.Minimum(i / 10.0);
	}


	duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;

	std::cout << "czas: " << duration << '\n';

	cin.get();
}

Co robi w podanym kodzie funkcja add. Czy jest ona wazna i dlaczego?

0

Bardzo nieładnie, pomieszanie w dwóch językach nazw zmiennych i funkcji, trzymaj się angielskiego lub polskiego.

0

Dodaje element do sortowanej listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1