Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Wtorek, 17 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO


Strategia

Przykład 4
#include "proces.h"

#include <iostream>

int main () {
	Proces proces;
	proces.dodajModyfikator(new ZaklocenieStochastyczne(0.1));
	proces.dodajModyfikator(new ZaklocenieDeterministyczne(0.1, 20));
	proces.dodajModyfikator(new NieliniowoscStatyczna(0.8, 0.1));

	for (unsigned int t = 0; t <= 20; ++t)
		std::clog << t << " " << proces.symuluj(1.0) << std::endl;

	return 0;
}
#ifndef __MODYFIKATOR_H__
#define __MODYFIKATOR_H__

class Modyfikator {
public:
	virtual ~Modyfikator ();
	virtual double symuluj (double wej) = 0;
};

class ZaklocenieStochastyczne : public Modyfikator {
public:
	ZaklocenieStochastyczne (double maxZaklocenie);
	virtual double symuluj (double wej);
private:
	double s_maxZaklocenie;
};

class ZaklocenieDeterministyczne : public Modyfikator {
public:
	ZaklocenieDeterministyczne (double amp, unsigned int okres);
	virtual double symuluj (double wej);
private:
	double s_amp;
	unsigned int s_okres;
	unsigned int s_t;
};

class NieliniowoscStatyczna : public Modyfikator {
public:
	NieliniowoscStatyczna (double yGr, double knas);
	virtual double symuluj (double wej);
private:
	double s_yGr;
	double s_knas;
};

#endif
#include "modyfikator.h"
#include <ctime>
#include <cstdlib>
#include <cmath>

Modyfikator::~Modyfikator () {
}

ZaklocenieStochastyczne::ZaklocenieStochastyczne (double maxZaklocenie) 
	: s_maxZaklocenie(maxZaklocenie)
{
	std::srand(static_cast<unsigned int>(std::time(0)));
}
	
double ZaklocenieStochastyczne::symuluj (double wej) {
	double zaklocenie = ((std::rand() % 1000) / 500.0) - 1.0;
	double wyj = wej + zaklocenie * s_maxZaklocenie;
	return wyj;
}

ZaklocenieDeterministyczne::ZaklocenieDeterministyczne (double amp, unsigned int okres) 
	: s_amp(amp), s_okres(okres), s_t(0)
{
}
	
double ZaklocenieDeterministyczne::symuluj (double wej) {
	// zaklocenie deterministyczne - sinus
	double zaklocenie = s_amp * std::sin((static_cast<double>(s_t % s_okres) / s_okres) * 6.28);
	++s_t;
	double wyj = wej + zaklocenie;
	return wyj;
}

NieliniowoscStatyczna::NieliniowoscStatyczna (double yGr, double knas)
	: s_yGr(yGr), s_knas(knas)
{
}
	
double NieliniowoscStatyczna::symuluj (double wej) {
	double wyj = (std::abs(wej) <= s_yGr) ? wej : (s_yGr + (wej-s_yGr)*s_knas);
	return wyj;
}
#ifndef __PROCES_H__
#define __PROCES_H__
#include <vector>
#include "modyfikator.h"

class Proces {
public:
	Proces ();
	~Proces ();
	double symuluj (double wej);
	void dodajModyfikator (Modyfikator * modyfikator);
private:
	double s_uMem;
	double s_yMem;
	const double s_a1;
	const double s_b0;
	const unsigned int s_k;
	std::vector<Modyfikator *> s_modyfikatory;
};

#endif
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11