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


Dekorator

Przykład 1
#include <iostream>

#include "sygnal.h"

int main () {
	Sygnal * s1 = new FalaProstokatna (1, 10, 0.5, 0, 100);
	Sygnal * s2 = new SygnalSinusoidalny (1, 20, 0, 10);

	for (unsigned int t = 0; t < 20; ++t)
		std::clog << t << " " << s1->symuluj(t) << std::endl;

	std::clog << std::endl;

	for (unsigned int t = 0; t < 20; ++t)
		std::clog << t << " " << s2->symuluj(t) << std::endl;

	delete s1;
	delete s2;

	return 0;
}
#ifndef __SYGNAL_H__
#define __SYGNAL_H__

class Sygnal {
public:
	Sygnal (int start, int koniec);
	virtual double symuluj (int t) = 0;
protected:
	bool czyAktywny (int t);	
private:
	int s_start;
	int s_koniec;
};

class FalaProstokatna : public Sygnal {
public:
	FalaProstokatna (double amp, int okres, double wypelnienie, int start, int koniec);
	virtual double symuluj (int t);
private:
	double s_amp;
	int s_okres;
	double s_wypelnienie;
};

class SygnalSinusoidalny : public Sygnal {
public:
	SygnalSinusoidalny (double amp, int okres, int start, int koniec);
	virtual double symuluj (int t);
private:
	double s_amp;
	int s_okres;
};

#endif
#include "sygnal.h"
#include <cmath>

Sygnal::Sygnal (int start, int koniec) 
	: s_start(start), s_koniec(koniec) 
{
}
	
bool Sygnal::czyAktywny (int t) {
	return (t >= s_start && t <= s_koniec) ? true : false;
}

FalaProstokatna::FalaProstokatna (double amp, int okres, double wypelnienie, int start, int koniec) 
	: Sygnal(start, koniec), s_amp(amp), s_okres(okres), s_wypelnienie(wypelnienie) 
{
}

double FalaProstokatna::symuluj (int t) {
	if (czyAktywny (t))
		return ((t % s_okres) < (s_wypelnienie * s_okres)) ? s_amp : 0;
	else 
		return 0;
}

SygnalSinusoidalny::SygnalSinusoidalny (double amp, int okres, int start, int koniec) 
	: Sygnal(start, koniec), s_amp(amp), s_okres(okres)
{
}

double SygnalSinusoidalny::symuluj (int t) {
	if (czyAktywny (t)) 
		return s_amp*std::sin((static_cast<double>(t % s_okres) / s_okres) * 6.28);
	else 
		return 0;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11